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
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
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
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