aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Höltje <docwhat@gerf.org>2017-07-12 09:46:32 +0300
committerChristian Höltje <docwhat@gerf.org>2017-07-12 10:25:48 +0300
commit2f808f8a4e6224478e1c9efb85c1a4b3f24df087 (patch)
treec85a348791ba5bc6f1213924d564e1cb766f54f4
parentdf318488c9bad0fae2e38c8fd57afaade295f135 (diff)
test-in-docker: Support for multiple ZSH versions
-z --zsh can specify one of the versions of ZSH we can get from centos and ubuntu
-rw-r--r--TESTS.md14
-rw-r--r--docker/antibody/Dockerfile3
-rw-r--r--docker/antigen/Dockerfile3
-rw-r--r--docker/base-4.3.11/Dockerfile31
-rw-r--r--docker/base-5.0.3/Dockerfile (renamed from docker/base/Dockerfile)2
-rw-r--r--docker/base-5.1.1/Dockerfile35
-rw-r--r--docker/base-5.2/Dockerfile35
-rw-r--r--docker/dotfile/Dockerfile3
-rw-r--r--docker/omz/Dockerfile3
-rw-r--r--docker/prezto/Dockerfile3
-rw-r--r--docker/zgen/Dockerfile3
-rw-r--r--docker/zim/Dockerfile3
-rw-r--r--docker/zplug/Dockerfile3
-rw-r--r--docker/zplugin/Dockerfile3
-rw-r--r--docker/zpm/Dockerfile3
-rw-r--r--docker/zulu/Dockerfile3
-rwxr-xr-xtest-in-docker180
17 files changed, 264 insertions, 66 deletions
diff --git a/TESTS.md b/TESTS.md
index 64c4db48..eb5db704 100644
--- a/TESTS.md
+++ b/TESTS.md
@@ -26,8 +26,22 @@ This is the easiest to use _if_ you have Docker already installed and running.
The command `./test-in-docker` should make it fairly easy to get into a running
container with the framework of your choice.
+Examples:
+
+``` zsh
+# Test Antigen with the oldest version of ZSH
+$ ./test-in-docker antigen
+```
+
+``` zsh
+# Test Prezto with ZSH version 5.2
+$ ./test-in-docker --zsh 5.2 prezto
+```
+
You can get Docker at <https://www.docker.com/community-edition>.
+**Note:** Not all frameworks work with all versions of ZSH (or the underlying OS).
+
## Vagrant
Currently there are two test VMs. `test-vm` is an Ubuntu machine with several
diff --git a/docker/antibody/Dockerfile b/docker/antibody/Dockerfile
index 9ee2e8be..84a60a89 100644
--- a/docker/antibody/Dockerfile
+++ b/docker/antibody/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/antibody/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/antigen/Dockerfile b/docker/antigen/Dockerfile
index 76487678..d8d0a4bc 100644
--- a/docker/antigen/Dockerfile
+++ b/docker/antigen/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/antigen/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/base-4.3.11/Dockerfile b/docker/base-4.3.11/Dockerfile
new file mode 100644
index 00000000..805a7ae1
--- /dev/null
+++ b/docker/base-4.3.11/Dockerfile
@@ -0,0 +1,31 @@
+FROM centos:6
+
+RUN \
+ yum install -y \
+ curl \
+ git \
+ zsh \
+ mercurial \
+ subversion \
+ golang \
+ jq \
+ node \
+ ruby \
+ python \
+ python-virtualenv \
+ sudo
+
+RUN adduser --shell /bin/zsh --comment 'fred' --user-group fred
+
+COPY docker/fred-sudoers /etc/sudoers.d/fred
+
+USER fred
+WORKDIR /home/fred
+ENV LANG=en_US.UTF-8
+ENV TERM=xterm-256color
+ENV DEFAULT_USER=fred
+ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
+
+RUN touch .zshrc
+
+CMD ["/bin/zsh", "-l"]
diff --git a/docker/base/Dockerfile b/docker/base-5.0.3/Dockerfile
index 08d06254..e0b6c6c3 100644
--- a/docker/base/Dockerfile
+++ b/docker/base-5.0.3/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:trusty
+FROM ubuntu:14.04
RUN \
apt-get update && \
diff --git a/docker/base-5.1.1/Dockerfile b/docker/base-5.1.1/Dockerfile
new file mode 100644
index 00000000..a7f644bf
--- /dev/null
+++ b/docker/base-5.1.1/Dockerfile
@@ -0,0 +1,35 @@
+FROM ubuntu:16.04
+
+RUN \
+ apt-get update && \
+ echo 'golang-go golang-go/dashboard boolean false' | debconf-set-selections && \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ curl \
+ git \
+ zsh \
+ mercurial \
+ subversion \
+ golang \
+ jq \
+ nodejs \
+ ruby \
+ python \
+ python-virtualenv \
+ sudo \
+ locales
+
+RUN adduser --shell /bin/zsh --gecos 'fred' --disabled-password fred
+RUN locale-gen "en_US.UTF-8"
+
+COPY docker/fred-sudoers /etc/sudoers.d/fred
+
+USER fred
+WORKDIR /home/fred
+ENV LANG=en_US.UTF-8
+ENV TERM=xterm-256color
+ENV DEFAULT_USER=fred
+ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
+
+RUN touch .zshrc
+
+CMD ["/bin/zsh", "-l"]
diff --git a/docker/base-5.2/Dockerfile b/docker/base-5.2/Dockerfile
new file mode 100644
index 00000000..62a10074
--- /dev/null
+++ b/docker/base-5.2/Dockerfile
@@ -0,0 +1,35 @@
+FROM ubuntu:17.04
+
+RUN \
+ apt-get update && \
+ echo 'golang-go golang-go/dashboard boolean false' | debconf-set-selections && \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ curl \
+ git \
+ zsh \
+ mercurial \
+ subversion \
+ golang \
+ jq \
+ nodejs \
+ ruby \
+ python \
+ python-virtualenv \
+ sudo \
+ locales
+
+RUN adduser --shell /bin/zsh --gecos 'fred' --disabled-password fred
+RUN locale-gen "en_US.UTF-8"
+
+COPY docker/fred-sudoers /etc/sudoers.d/fred
+
+USER fred
+WORKDIR /home/fred
+ENV LANG=en_US.UTF-8
+ENV TERM=xterm-256color
+ENV DEFAULT_USER=fred
+ENV POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
+
+RUN touch .zshrc
+
+CMD ["/bin/zsh", "-l"]
diff --git a/docker/dotfile/Dockerfile b/docker/dotfile/Dockerfile
index 166e348c..f29c4d56 100644
--- a/docker/dotfile/Dockerfile
+++ b/docker/dotfile/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY ./ p9k/
COPY docker/dotfile/zshrc .zshrc
diff --git a/docker/omz/Dockerfile b/docker/omz/Dockerfile
index f839fba8..1a417b9f 100644
--- a/docker/omz/Dockerfile
+++ b/docker/omz/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/omz/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/prezto/Dockerfile b/docker/prezto/Dockerfile
index 389dbd0a..70f3b65d 100644
--- a/docker/prezto/Dockerfile
+++ b/docker/prezto/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/prezto/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zgen/Dockerfile b/docker/zgen/Dockerfile
index 9a0c13c7..48e44c77 100644
--- a/docker/zgen/Dockerfile
+++ b/docker/zgen/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zgen/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zim/Dockerfile b/docker/zim/Dockerfile
index dd10d102..cfe0fc93 100644
--- a/docker/zim/Dockerfile
+++ b/docker/zim/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zim/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zplug/Dockerfile b/docker/zplug/Dockerfile
index a87480be..89c23d54 100644
--- a/docker/zplug/Dockerfile
+++ b/docker/zplug/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zplug/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zplugin/Dockerfile b/docker/zplugin/Dockerfile
index dc723606..90c35c0e 100644
--- a/docker/zplugin/Dockerfile
+++ b/docker/zplugin/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zplugin/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zpm/Dockerfile b/docker/zpm/Dockerfile
index d99edb37..c1c44e38 100644
--- a/docker/zpm/Dockerfile
+++ b/docker/zpm/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zpm/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/docker/zulu/Dockerfile b/docker/zulu/Dockerfile
index dcb332ab..880a07d0 100644
--- a/docker/zulu/Dockerfile
+++ b/docker/zulu/Dockerfile
@@ -1,4 +1,5 @@
-FROM p9k:base
+ARG base
+FROM p9k:${base}
COPY docker/zulu/install.zsh /tmp/
RUN zsh /tmp/install.zsh
diff --git a/test-in-docker b/test-in-docker
index ff3bb86b..c1aafcd9 100755
--- a/test-in-docker
+++ b/test-in-docker
@@ -2,84 +2,156 @@
set -eu
-setopt extendedglob
+# The default ZSH to use.
+default_version='4.3.11'
+
+setopt extended_glob glob_subst numeric_glob_sort
cd "${${(%):-%x}:A:h}"
# TODO: Crazy Logic to munge TERM to something supported in Ubuntu 14.04
term=screen-256color
-frameworks()
+# Note: If versions and frameworks looks complicated, it isn't that bad...
+# ...see Modifiers in zshexpn(1) for details.
+
+# List of ZSH versions
+typeset -a versions
+versions=( docker/base-*/Dockerfile(N.on:h:t:s/base-//) )
+
+# List of frameworks
+typeset -a frameworks
+frameworks=( docker/*/Dockerfile(N.on:h:t) )
+frameworks=${(@)frameworks:#base-*}
+
+err()
{
- for path in docker/*/Dockerfile(N.); do
- framework=${path:h:t}
- if [[ "$framework" == base ]]; then continue; fi
- echo "$framework"
- done
+ print -P "%F{red}Error:%f $*"
+ exit 2
}
-show-help()
-{
- echo "Usage: ${(%):-%x} <framework>|--list"
- echo
- echo "Loads up a docker image with powershell9k configured in <framework>"
- echo
- echo " --list Lists all available framework containers."
- echo
- echo "Framework containers:"
- for f in $(frameworks); do
- echo " - $f"
- done
+resolve_framework() {
+ local f=$1 found
+ found=${frameworks[(In:-1:)$f*]}
+ if (( found <= $#frameworks )); then
+ echo "${frameworks[$found]}"
+ fi
}
-build-and-run()
-{
- local framework="$1" ; shift
+resolve_version() {
+ local v=$1 found
+ found=${versions[(In:-1:)$v*]}
+ if (( found <= $#versions )); then
+ echo "${versions[$found]}"
+ fi
+}
- print -P "%F{green}Preparing ${framework} container...%f"
+build_and_run() {
+ local version="$1"
+ local framework="$2"
+ local name="${version}-${framework}"
- if [[ "$framework" != "base" ]]; then
- echo -n "p9k:base: "
- docker build \
- --quiet \
- --tag p9k:base \
- --file docker/base/Dockerfile \
- .
- fi
- echo -n "p9k:${framework}: "
+ print -P "%F{green}Preparing containers...%f"
+
+ echo -n "p9k:base-${version}: "
docker build \
--quiet \
- --tag "p9k:${framework}" \
- --file "docker/${framework}/Dockerfile" \
+ --tag "p9k:base-${version}" \
+ --file "docker/base-${version}/Dockerfile" \
.
+ echo -n "p9k:${version}-${framework}: "
+ docker build \
+ --quiet \
+ --build-arg="base=base-${version}" \
+ --tag "p9k:${version}-${framework}" \
+ --file "docker/${framework}/Dockerfile" \
+ .
- print -P "%F{green}Starting ${framework} container...%f"
+ print -P "%F{green}Starting ${name} container...%f"
exec docker run \
--rm \
--interactive \
--tty \
- --hostname="${framework}" \
+ --hostname="${name//./_}" \
--env="TERM=${term}" \
- "$@" \
- "p9k:${framework}"
+ "p9k:${version}-${framework}"
+}
+
+show_help() {
+ local f v
+ echo "Usage: ${(%):-%x} <framework>|--list"
+ echo
+ echo "Loads up a docker image with powershell9k configured in <framework>"
+ echo
+ echo " --frameworks Lists all available frameworks, newline separated."
+ echo " --versions Lists all available ZSH versions, newline separated."
+ echo " --zsh VER Uses ZSH with version VER."
+ echo " --help You're soaking in it."
+ echo
+ echo "ZSH versions:"
+ for v in "${(@)versions}"; do
+ echo " $v"
+ done
+ echo
+ echo "Framework containers:"
+ for f in "${(@)frameworks}"; do
+ echo " $f"
+ done
}
-arg1="${1:-}"; if (( $# > 0 )); then shift; fi
-
-if [[ -z "$arg1" ]] || [[ "$arg1" == "help" ]]; then
- show-help
- exit 0
-elif [[ "$arg1" == '--list' ]]; then
- frameworks
- exit 0
-elif [[ -d "docker/${arg1}" ]]; then
- build-and-run "$arg1"
-elif [[ -n "docker/${arg1}"*/Dockerfile(#qN) ]]; then
- # Allow globbing
- build-and-run "docker/${arg1}"*(Y1:t)
-else
- show-help
- exit 1
+# No arguments
+if (( $# == 0 )); then
+ show_help
+ exit
fi
+# Parse flags and such.
+use_version=$default_version
+use_framework=
+while (( $# > 0 )); do
+ case "$1" in
+ -f | --frameworks )
+ print -l "${(@)frameworks}"
+ exit
+ ;;
+ -v | --versions )
+ print -l "${(@)versions}"
+ exit
+ ;;
+ -z | --zsh )
+ shift
+ local v="$(resolve_version "$1")"
+ if [[ -n "$v" ]]; then
+ use_version=$v
+ else
+ err "No such ZSH version '${1}'"
+ fi
+ ;;
+ -h | --help )
+ show_help
+ exit
+ ;;;
+ -* )
+ err "Unknown option ${1}"
+ show_help
+ exit 1
+ ;;
+ * )
+ if [[ -z "$use_framework" ]]; then
+ local f="$(resolve_framework "$1")"
+ if [[ -n "$f" ]]; then
+ use_framework=$f
+ else
+ err "No such framework '${1}'"
+ fi
+ else
+ err "You can only specify one framework at a time; you already specified '${use_framework}'"
+ fi
+ ;;
+ esac
+ shift
+done
+
+build_and_run "$use_version" "$use_framework"
+
# EOF