1
0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-12-12 19:18:28 +02:00
powerlevel10k/test-in-docker

200 lines
4.5 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env zsh
set -eu
# The default ZSH to use.
default_version='4.3.11'
setopt extended_glob glob_subst numeric_glob_sort
setopt warn_create_global warn_nested_var 2> /dev/null
cd "${${(%):-%x}:A:h}"
# TODO: Crazy Logic to munge TERM to something supported in Ubuntu 14.04
term=screen-256color
# Note: If versions and frameworks looks complicated, it isn't that bad...
# ...see Modifiers in zshexpn(1) for details.
# List of ZSH versions
typeset -aU versions
versions=( docker/base-*/Dockerfile(N.on:h:t:s/base-//) )
typeset -r versions
# List of frameworks
typeset -aU frameworks
frameworks=( docker/*/Dockerfile(N.on:h:t) )
for i in {$#frameworks..1}; do
# Remove all base entries
2018-06-27 22:52:16 +02:00
[[ "${frameworks[$i]}" == base-* ]] && frameworks[$i]=()
done
typeset -r frameworks
2017-07-13 06:39:58 +02:00
# Known Issues
typeset -A known_issues
known_issues["4.3.11-antigen"]="Antigen commands that need git won't work; it needs a newer version of git."
known_issues["4.3.11-zim"]="BROKEN: Zim wants ZSH 5.2 or newer."
known_issues["5.0.3-zim"]="DEPRECATED: Zim wants ZSH 5.2 or newer."
known_issues["5.1.1-zim"]="DEPRECATED: Zim wants ZSH 5.2 or newer."
known_issues["4.3.11-zulu"]="Zulu doesn't work; it needs a newer version of git."
typeset -r known_issues
2017-07-13 06:39:58 +02:00
err()
{
print -P "%F{red}Error:%f $*"
exit 2
}
resolve_framework() {
local f=$1 found
found=${frameworks[(In:-1:)$f*]}
if (( found <= $#frameworks )); then
echo "${frameworks[$found]}"
fi
}
resolve_version() {
local v=$1 found
found=${versions[(In:-1:)$v*]}
if (( found <= $#versions )); then
echo "${versions[$found]}"
fi
}
2017-07-13 06:39:58 +02:00
check_for_known_issues() {
local version="$1"
local framework="$2"
local name="${version}-${framework}"
if (( ${+known_issues["$name"]} )); then
echo
print -P "%F{red}Known Issue: %F{yellow}${known_issues["$name"]}%f"
echo
fi
}
2018-06-27 17:25:12 +02:00
cmd() {
if (( dry_run )); then
echo "${(@q)*}" 1>&2
else
"${(@)*}"
fi
}
build_and_run() {
local version="$1"
local framework="$2"
local name="${version}-${framework}"
2017-07-13 06:39:58 +02:00
check_for_known_issues "$version" "$framework"
print -P "%F{green}Preparing containers...%f"
echo -n "p9k:base-${version}: "
2018-06-27 17:25:12 +02:00
cmd docker build \
--quiet \
--tag "p9k:base-${version}" \
--file "docker/base-${version}/Dockerfile" \
.
echo -n "p9k:${version}-${framework}: "
2018-06-27 17:25:12 +02:00
cmd docker build \
--quiet \
--build-arg="base=base-${version}" \
--tag "p9k:${version}-${framework}" \
--file "docker/${framework}/Dockerfile" \
.
print -P "%F{green}Starting ${name} container...%f"
2018-06-27 17:25:12 +02:00
cmd docker run \
--rm \
--interactive \
--tty \
--hostname="${name//./_}" \
--env="TERM=${term}" \
"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
2018-06-27 17:25:12 +02:00
echo " -f --frameworks Lists all available frameworks, newline separated."
echo " -v --versions Lists all available ZSH versions, newline separated."
echo " -z --zsh VER Uses ZSH with version VER."
echo " -n --dry-run Just prints the docker commands that would be run."
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
}
# No arguments
if (( $# == 0 )); then
show_help
exit
fi
# Parse flags and such.
use_version=$default_version
use_framework=
2018-06-27 17:25:12 +02:00
dry_run=0
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
;;
2018-06-27 17:25:12 +02:00
-n | --dry-run ) dry_run=1 ;;
-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
2018-06-27 17:25:12 +02:00
typeset -r use_version use_framework dry_run
build_and_run "$use_version" "$use_framework"
# EOF