114 lines
3.2 KiB
Bash
Executable File
114 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
extract_block() {
|
|
awk -v wanted="$1" '
|
|
/^```bash$/ {
|
|
in_code = 1
|
|
strict = ""
|
|
wrapper = ""
|
|
next
|
|
}
|
|
in_code && /^\($/ { wrapper = $0 }
|
|
in_code && /^[[:space:]]*set -Eeuo pipefail$/ { strict = $0 }
|
|
/^[[:space:]]*list_running_browsers\(\) \{/ {
|
|
count++
|
|
capture = count == wanted
|
|
if (capture) {
|
|
if (wrapper) print wrapper
|
|
print strict
|
|
}
|
|
}
|
|
capture { print }
|
|
capture && /^[[:space:]]*docker compose stop/ {
|
|
capture = 0
|
|
if (!wrapper) exit
|
|
closing = 1
|
|
}
|
|
closing && /^\)$/ { print; exit }
|
|
/^```$/ { in_code = 0 }
|
|
' docs/deployment.md
|
|
}
|
|
|
|
docker() {
|
|
printf '%s\n' "$*" >>"$calls"
|
|
case "$1" in
|
|
ps)
|
|
[[ "$*" == 'ps --quiet --filter name=^creatorhub-browser- --filter label=io.creatorhub.managed=true --filter label=io.creatorhub.runtime-id' ]] || return 64
|
|
query_count=0
|
|
[[ ! -e "$state/query-count" ]] || read -r query_count <"$state/query-count"
|
|
((query_count += 1))
|
|
printf '%s\n' "$query_count" >"$state/query-count"
|
|
[[ "$mode:$query_count" != query_failure:1 && "$mode:$query_count" != recheck_failure:2 ]] || return 42
|
|
[[ -e "$state/stopped" || -e "$state/removed" ]] || printf '%s\n' browser-1
|
|
;;
|
|
stop)
|
|
case "$mode" in
|
|
stop_success) : >"$state/stopped" ;;
|
|
stop_failure) return 1 ;;
|
|
stop_timeout) return 124 ;;
|
|
esac
|
|
;;
|
|
rm)
|
|
[[ "$*" == 'rm --force browser-1' ]] || return 64
|
|
: >"$state/removed"
|
|
;;
|
|
compose)
|
|
[[ "$*" == 'compose stop' || "$*" == 'compose stop creator-hub docker-gateway' ]] || return 64
|
|
;;
|
|
esac
|
|
}
|
|
export -f docker
|
|
|
|
work="$(mktemp -d)"
|
|
trap 'rm -rf "$work"' EXIT
|
|
query='ps --quiet --filter name=^creatorhub-browser- --filter label=io.creatorhub.managed=true --filter label=io.creatorhub.runtime-id'
|
|
scenario_count=0
|
|
|
|
for block_number in 1 2; do
|
|
block="$(extract_block "$block_number")"
|
|
bash -n <<<"$block"
|
|
[[ "$block" == *'set -Eeuo pipefail'* ]]
|
|
if [[ $block_number -eq 1 ]]; then
|
|
[[ "${block%%$'\n'*}" == '(' && "${block##*$'\n'}" == ')' ]]
|
|
compose='compose stop creator-hub docker-gateway'
|
|
else
|
|
[[ "${block%%$'\n'*}" == 'set -Eeuo pipefail' ]]
|
|
compose='compose stop'
|
|
fi
|
|
|
|
for mode in stop_success stop_failure stop_timeout query_failure recheck_failure; do
|
|
state="$work/$block_number-$mode"
|
|
calls="$state/calls"
|
|
mkdir "$state"
|
|
export mode state calls
|
|
|
|
status=0
|
|
bash -c "$block" || status=$?
|
|
|
|
case "$mode" in
|
|
stop_success)
|
|
[[ $status -eq 0 ]]
|
|
diff -u <(printf '%s\n' "$query" 'stop browser-1' "$query" "$compose") "$calls"
|
|
;;
|
|
stop_failure | stop_timeout)
|
|
[[ $status -eq 0 ]]
|
|
diff -u <(printf '%s\n' "$query" 'stop browser-1' 'rm --force browser-1' "$query" "$compose") "$calls"
|
|
;;
|
|
query_failure)
|
|
[[ $status -eq 1 ]]
|
|
diff -u <(printf '%s\n' "$query") "$calls"
|
|
;;
|
|
recheck_failure)
|
|
[[ $status -eq 1 ]]
|
|
diff -u <(printf '%s\n' "$query" 'stop browser-1' "$query") "$calls"
|
|
;;
|
|
esac
|
|
scenario_count=$((scenario_count + 1))
|
|
done
|
|
done
|
|
|
|
[[ $scenario_count -eq 10 ]]
|