test-in-docker: quickly test frameworks in docker

This adds `./test-in-docker` for quickly playing with various frameworks.

All the containers are based off Ubuntu 14.04 which has ZSH 5.0.2.

Thanks to @dritter for figuring out all the framework installation
methods.
This commit is contained in:
Christian Höltje 2017-07-10 18:39:55 -04:00 committed by Christian Höltje
parent 3c3a86a42f
commit df318488c9
33 changed files with 336 additions and 3 deletions

View File

@ -13,10 +13,23 @@ Tests in separate files under `test/functions`.
These Tests tend to be more complex in setup than the basic tests. To avoid ending These Tests tend to be more complex in setup than the basic tests. To avoid ending
up in a huge single file, there is one file per segment in `test/segments`. up in a huge single file, there is one file per segment in `test/segments`.
# Test-VMs # Manual Testing
If unit tests are not sufficient (e.g. you have an issue with your prompt that If unit tests are not sufficient (e.g. you have an issue with your prompt that
occurs only in a specific ZSH framework), then you could use our Test-VMs! occurs only in a specific ZSH framework) then you can use either Docker or
or our Vagrant.
## Docker
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.
You can get Docker at <https://www.docker.com/community-edition>.
## Vagrant
Currently there are two test VMs. `test-vm` is an Ubuntu machine with several Currently there are two test VMs. `test-vm` is an Ubuntu machine with several
pre-installed ZSH frameworks. And there is `test-bsd-vm` which is a FreeBSD! pre-installed ZSH frameworks. And there is `test-bsd-vm` which is a FreeBSD!
For how to run the machines see [here](test-vm/README.md). For how to run the machines see [here](test-vm/README.md).

View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/antibody/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/antibody/zshrc .zshrc

View File

@ -0,0 +1 @@
curl -sL https://git.io/antibody | bash -s

2
docker/antibody/zshrc Normal file
View File

@ -0,0 +1,2 @@
source <(antibody init)
antibody bundle ~/p9k/

View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/antigen/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/antigen/zshrc .zshrc

View File

@ -0,0 +1,12 @@
#!/bin/zsh
mkdir ~/antigen
curl \
-qLsSf \
-o ~/antigen/antigen.zsh \
https://git.io/antigen
source ~/antigen/antigen.zsh
# EOF

4
docker/antigen/zshrc Normal file
View File

@ -0,0 +1,4 @@
source ~/antigen/antigen.zsh
antigen theme "${HOME}/p9k" powerlevel9k --no-local-clone
antigen apply

33
docker/base/Dockerfile Normal file
View File

@ -0,0 +1,33 @@
FROM ubuntu:trusty
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 \
node \
ruby \
python \
python-virtualenv
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"]

View File

@ -0,0 +1,4 @@
FROM p9k:base
COPY ./ p9k/
COPY docker/dotfile/zshrc .zshrc

1
docker/dotfile/zshrc Normal file
View File

@ -0,0 +1 @@
source "${HOME}/p9k/prompt_powerlevel9k_setup"

2
docker/fred-sudoers Normal file
View File

@ -0,0 +1,2 @@
Defaults:fred !requiretty
fred ALL=(ALL) NOPASSWD: ALL

7
docker/omz/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/omz/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY docker/omz/zshrc .zshrc
COPY ./ p9k/

4
docker/omz/install.zsh Normal file
View File

@ -0,0 +1,4 @@
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
mkdir -p ~/.oh-my-zsh/custom/themes
ln -nsf ~/p9k/ ~/.oh-my-zsh/custom/themes/powerlevel9k

5
docker/omz/zshrc Normal file
View File

@ -0,0 +1,5 @@
export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="powerlevel9k/powerlevel9k"
plugins=(git rake ruby)
source $ZSH/oh-my-zsh.sh

6
docker/prezto/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM p9k:base
COPY docker/prezto/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/

18
docker/prezto/install.zsh Normal file
View File

@ -0,0 +1,18 @@
#!/bin/zsh
set -eu
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -nsf "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
ln -s "${HOME}/p9k/powerlevel9k.zsh-theme" \
"${HOME}/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup"
echo "zstyle ':prezto:module:prompt' theme 'powerlevel9k'" \
>> "${HOME}/.zpreztorc"
# EOF

7
docker/zgen/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/zgen/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/zgen/zshrc .zshrc

5
docker/zgen/install.zsh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/zsh
git clone https://github.com/tarjoilija/zgen.git "${HOME}/.zgen"
# EOF

10
docker/zgen/zshrc Normal file
View File

@ -0,0 +1,10 @@
# load zgen
source ~/.zgen/zgen.zsh
# if the init scipt doesn't exist
if ! zgen saved; then
zgen load ~/p9k/powerlevel9k.zsh-theme
# generate the init script from plugins above
zgen save
fi

6
docker/zim/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM p9k:base
COPY docker/zim/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/

21
docker/zim/install.zsh Normal file
View File

@ -0,0 +1,21 @@
#!zsh
git clone --recursive https://github.com/Eriner/zim.git "${ZDOTDIR:-${HOME}}/.zim"
setopt EXTENDED_GLOB
for template_file ( ${ZDOTDIR:-${HOME}}/.zim/templates/* ); do
user_file="${ZDOTDIR:-${HOME}}/.${template_file:t}"
touch ${user_file}
( print -rn "$(<${template_file})$(<${user_file})" >! ${user_file} ) 2>/dev/null
done
source "${ZDOTDIR:-${HOME}}/.zlogin"
ln -nsf \
~/p9k/ \
~/.zim/modules/prompt/external-themes/powerlevel9k
ln -nsf \
~/.zim/modules/prompt/external-themes/powerlevel9k/powerlevel9k.zsh-theme \
~/.zim/modules/prompt/functions/prompt_powerlevel9k_setup
sed -i "s/zprompt_theme='steeef'/zprompt_theme='powerlevel9k'/g" ~/.zimrc

7
docker/zplug/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/zplug/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/zplug/zshrc .zshrc

5
docker/zplug/install.zsh Normal file
View File

@ -0,0 +1,5 @@
#!zsh
curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh| zsh
# git clone https://github.com/zplug/zplug "${HOME}/.zplug"

5
docker/zplug/zshrc Normal file
View File

@ -0,0 +1,5 @@
#!zsh
source ~/.zplug/init.zsh
zplug "${HOME}/p9k", use:"powerlevel9k.zsh-theme", from:local, as:theme
zplug load --verbose

View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/zplugin/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/zplugin/zshrc.plugins .zshrc.plugins

View File

@ -0,0 +1,12 @@
sh -c "$(curl -fsSL https://raw.githubusercontent.com/psprint/zplugin/master/doc/install.sh)"
# The 'zplugin snippet' only copies the .zsh-theme file, not everything else.
mkdir -p ~/.zplugin/snippets
ln -nsf \
~/p9k/ \
~/.zplugin/snippets/--SLASH--home--SLASH--fred--SLASH--p9k--SLASH--powerlevel9k--DOT--zsh-theme
{
echo
echo "source ~/.zshrc.plugins"
} >> ~/.zshrc

View File

@ -0,0 +1,5 @@
#!zsh
zplugin load psprint zsh-navigation-tools
zplugin load psprint---zprompts
zplugin snippet ~/p9k/powerlevel9k.zsh-theme

7
docker/zpm/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM p9k:base
COPY docker/zpm/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/
COPY docker/zpm/zshrc .zshrc

6
docker/zpm/install.zsh Normal file
View File

@ -0,0 +1,6 @@
# install zpm
git clone --recursive https://github.com/zpm-zsh/zpm.git ~/.zpm
# Install powerlevel9k
mkdir ~/.zpm/plugins/powerlevel9k
ln -s ~/p9k/powerlevel9k.zsh-theme ~/.zpm/plugins/powerlevel9k/powerlevel9k.plugin.zsh

3
docker/zpm/zshrc Normal file
View File

@ -0,0 +1,3 @@
source ~/.zpm/zpm.zsh
zpm load powerlevel9k

6
docker/zulu/Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM p9k:base
COPY docker/zulu/install.zsh /tmp/
RUN zsh /tmp/install.zsh
COPY ./ p9k/

10
docker/zulu/install.zsh Normal file
View File

@ -0,0 +1,10 @@
#!zsh
# install zulu https://github.com/zulu-zsh/zulu
curl -L https://git.io/zulu-install | zsh && zsh
{
echo 'zulu fpath add ~/p9k'
echo 'zulu fpath add ~/p9k/functions'
echo 'zulu theme powerlevel9k'
} >> ~/.zshrc

85
test-in-docker Executable file
View File

@ -0,0 +1,85 @@
#!/usr/bin/env zsh
set -eu
setopt extendedglob
cd "${${(%):-%x}:A:h}"
# TODO: Crazy Logic to munge TERM to something supported in Ubuntu 14.04
term=screen-256color
frameworks()
{
for path in docker/*/Dockerfile(N.); do
framework=${path:h:t}
if [[ "$framework" == base ]]; then continue; fi
echo "$framework"
done
}
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
}
build-and-run()
{
local framework="$1" ; shift
print -P "%F{green}Preparing ${framework} container...%f"
if [[ "$framework" != "base" ]]; then
echo -n "p9k:base: "
docker build \
--quiet \
--tag p9k:base \
--file docker/base/Dockerfile \
.
fi
echo -n "p9k:${framework}: "
docker build \
--quiet \
--tag "p9k:${framework}" \
--file "docker/${framework}/Dockerfile" \
.
print -P "%F{green}Starting ${framework} container...%f"
exec docker run \
--rm \
--interactive \
--tty \
--hostname="${framework}" \
--env="TERM=${term}" \
"$@" \
"p9k:${framework}"
}
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
fi
# EOF