Skip to content

Commit

Permalink
Create dockerfile for demo
Browse files Browse the repository at this point in the history
  • Loading branch information
LaurenceWarne committed Oct 28, 2021
1 parent af8975a commit aadfcd7
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 29 deletions.
14 changes: 14 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM silex/emacs:27.2-ci-eldev

RUN set -eux; \
apt-get update; \
apt-get install -y gosu; \
rm -rf /var/lib/apt/lists/*; \
# verify that the binary works
gosu nobody true

COPY entrypoint.sh /usr/local/bin/entrypoint.sh

RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
43 changes: 19 additions & 24 deletions eldev.el
Original file line number Diff line number Diff line change
Expand Up @@ -4050,13 +4050,8 @@ be passed to Emacs, else it will most likely fail."
"Return bind mount arguments of local dependencies for docker run."
(eldev-flatten-tree
(mapcar (lambda (local-dep)
(let* ((dir (nth 3 local-dep))
(dir-rel (file-relative-name dir (expand-file-name "~")))
(container-dir
(if (eldev-external-filename dir-rel)
dir
(concat "/root/" dir-rel))))
(list "-v" (format "%s:%s" (expand-file-name dir) container-dir))))
(let ((dir (expand-file-name (nth 3 local-dep))))
(list "-v" (format "%s:%s" dir dir))))
eldev--local-dependencies)))

(defun eldev--docker-args (img &optional as-gui)
Expand All @@ -4066,20 +4061,23 @@ The global config file and cache will be mounted unless
`eldev-skip-global-config' is nil.

If AS-GUI is non-nil include arguments necessary to run Emacs as a GUI."
(let ((container-dir (file-name-nondirectory
(directory-file-name eldev-project-dir))))
(append (list "run" "--rm"
"-v" (format "%s:/%s" eldev-project-dir container-dir)
"-w" (concat "/" container-dir))
(when as-gui eldev--emacs-gui-args)
(unless eldev-skip-global-config
(list "-v" (format "%s:/root/.eldev/config" eldev-user-config-file)
"-v" (format "%s:/root/.eldev/%s"
(eldev-global-package-archive-cache-dir)
eldev-global-cache-directory-name)))
(eldev--docker-local-dep-mounts)
eldev-docker-run-extra-args
(list img "eldev"))))
(append (list "run" "--rm"
;; Assume the project dir lies in the user's home directory
"-v" (format "%s:%s" eldev-project-dir eldev-project-dir)
"-w" eldev-project-dir
"-e" (format "USERNAME=%s" (user-login-name))
"-e" (format "LOCAL_USER_ID=%s" (user-uid)))
(when as-gui eldev--emacs-gui-args)
(unless eldev-skip-global-config
(list "-v" (format "%s:%s"
eldev-user-config-file
eldev-user-config-file)
"-v" (format "%s:%s"
(eldev-global-package-archive-cache-dir)
(eldev-global-package-archive-cache-dir))))
(eldev--docker-local-dep-mounts)
eldev-docker-run-extra-args
(list img "eldev")))

(eldev-defcommand eldev-docker (&rest parameters)
"Launch a specified Emacs version in a docker container.
Expand Down Expand Up @@ -4117,9 +4115,6 @@ the \"--batch\" flag is not present."
(as-gui (and (string= "emacs" (nth 1 parameters))
(not (member "--batch" parameters))))
(args (append (eldev--docker-args img as-gui) (cdr parameters))))
(eldev-output "Running command '%s %s'"
docker-exec
(mapconcat #'identity args " "))
(eldev-call-process
docker-exec
args
Expand Down
21 changes: 21 additions & 0 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

# Default value for USER_ID
USER_ID=${LOCAL_USER_ID:-9001}
echo "USERNAME: $USERNAME, UID: $USER_ID"

# Create User
useradd --shell /bin/bash -u $USER_ID -d /home/$USERNAME -o -c "" $USERNAME

# Create Directory only if it doesn't exist
# This prevents the issue - useradd: warning: the home directory already exists.
if [ ! -d "/home/$USERNAME" ]; then
mkdir /home/$USERNAME
fi

cp -r /root/.eldev /home/$USERNAME
chown -R $USER_ID:$USER_ID /home/$USERNAME
export PATH=$PATH:/home/$USERNAME/.eldev/bin

# Execute the process as the given user
exec /usr/sbin/gosu $USERNAME "$@"
8 changes: 5 additions & 3 deletions test/integration/docker.el
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

(ert-deftest eldev-docker-emacs-1 ()
(skip-unless (eldev-docker-executable nil))
(shell-command "docker build -t local/eldev-emacs-dev .")
(eldev--test-run "trivial-project"
("--quiet"
"docker"
eldev--docker-emacs-version
"local/eldev-emacs-dev" ;eldev--docker-emacs-version
"emacs"
"--batch"
"--eval"
Expand All @@ -20,8 +21,9 @@
(eldev--test-run "project-c" ("clean" "all")
(should (= exit-code 0)))
(eldev--test-run "project-c"
("docker"
eldev--docker-emacs-version
("--trace"
"docker"
"local/eldev-emacs-dev" ;eldev--docker-emacs-version
"test")
(should (= exit-code 0))))

Expand Down
5 changes: 3 additions & 2 deletions test/project-c/Eldev
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
(eldev-use-package-archive `("archive-a" . ,(expand-file-name "../package-archive-a")))

(setq eldev-docker-run-extra-args
`("-v" ,(concat (expand-file-name "../package-archive-a/")
":/package-archive-a")))
`("-v" ,(format "%s:%s"
(expand-file-name "../package-archive-a/")
(expand-file-name "../package-archive-a/"))))

0 comments on commit aadfcd7

Please sign in to comment.