set -eu -o pipefail
{% for func in functions %}
{{ func.code }}
{% endfor %}
{% include "dict.sh" %}
{% include "ctx.sh" %}
{% include "cap.sh" %}
{% include "files.sh" %}
{% include "assert.sh" %}
srcdir="$(pwd)"
echo "srcdir $srcdir"
_datadir="$(mktemp -d)"
echo "datadir $_datadir"
cd "$_datadir"
files_new
{% for file in files %}
filename="$(decode_base64 '{{ file.filename | base64 }}')"
contents="$(decode_base64 '{{ file.contents | base64 }}')"
files_set "$filename" "$contents"
{% endfor %}
{% for scenario in scenarios %}
scenario_{{ loop.index }}() {
local title scendir step name text ret cleanups steps
declare -a cleanups
declare -a steps
title="$(decode_base64 '{{ scenario.title | base64 }}')"
echo "scenario: $title"
scendir="$(mktemp -d -p "$_datadir")"
cd "$scendir"
export HOME="$scendir"
export TMPDIR="$scendir"
ctx_new
cleanups[0]=''
steps[0]=''
ret=0
{% for step in scenario.steps %}
if [ "$ret" = 0 ]
then
step="{{ step.kind | lower }} $(decode_base64 '{{ step.text | base64 }}')"
echo " step: $step"
cap_new
{% for part in step.parts %}{% if part.CapturedText is defined -%}
name="$(decode_base64 '{{ part.CapturedText.name | base64 }}')"
text="$(decode_base64 '{{ part.CapturedText.text | base64 }}')"
cap_set "$name" "$text"
{% endif -%}
{% endfor -%}
if {{ step.function }}
then
cleanup='{{ step.cleanup }}'
if [ "$cleanup" != "" ]
then
{% raw %}
i=${#cleanups}
cleanups[$i]="$cleanup"
steps[$i]="$step"
{% endraw %}
fi
else
ret=$?
fi
fi
{% endfor %}
{% raw %}
echo "${!cleanups[*]}" | tr ' ' '\n' | tac | while read i
do
step="${steps[$i]}"
func="${cleanups[$i]}"
echo " cleanup: $step"
$func
done
{% endraw %}
return $ret
}
{% endfor %}
envnames()
{
python3 -c 'import os, sys; sys.stdout.write("".join("%s\n" % key for key in os.environ))'
}
unset $(envnames)
export PATH=/bin:/usr/bin
export SHELL=/bin/sh
if [ "$#" = 0 ]
then {% for scenario in scenarios %}
scenario_{{ loop.index }}{% endfor %}
else
for pattern in "$@"
do
pattern="$(echo "$pattern" | tr A-Z a-z)"
{% for scenario in scenarios %}
if echo "{{ scenario.title | lower }}" | grep -F -e "$pattern" > /dev/null
then
scenario_{{ loop.index }}
fi
{% endfor %}
done
fi
rm -rf "$_datadir"
echo "OK, all scenarios finished successfully"