fix: scope workspace registry smoke cleanup
This commit is contained in:
@@ -6,27 +6,87 @@ set -euo pipefail
|
||||
|
||||
root="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
tmp="$(mktemp -d "${TMPDIR:-/tmp}/thoth-workspace-registry-smoke.XXXXXX")"
|
||||
project="thoth-workspace-registry-smoke-$$"
|
||||
image="thothii-workspace-registry-smoke:local"
|
||||
tmp_slug="$(basename "$tmp" | tr '[:upper:]._' '[:lower:]--' | tr -cd 'a-z0-9-')"
|
||||
project="thoth-workspace-registry-smoke-${tmp_slug}-$$"
|
||||
image="thothii-workspace-registry-smoke:${project}"
|
||||
remote="$tmp/remote.git"
|
||||
seed="$tmp/seed"
|
||||
branch="workspace-registry-smoke"
|
||||
core_remote="/fixtures/remote.git"
|
||||
|
||||
cleanup_smoke_image() {
|
||||
docker image rm -f "$image" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
workspace_registry_smoke_leftovers() {
|
||||
{
|
||||
docker ps -a --filter "label=com.docker.compose.project=$project" -q
|
||||
docker volume ls --filter "label=com.docker.compose.project=$project" -q
|
||||
docker network ls --filter "label=com.docker.compose.project=$project" -q
|
||||
docker image inspect --format '{{.Id}}' "$image" 2>/dev/null || true
|
||||
} | sed '/^$/d'
|
||||
}
|
||||
|
||||
workspace_registry_smoke_self_test_image_cleanup_identity() {
|
||||
local calls exact_image foreign_project foreign_tag leftovers
|
||||
calls="$(mktemp "${TMPDIR:-/tmp}/thoth-workspace-registry-smoke-image-contract.XXXXXX")"
|
||||
project="thoth-workspace-registry-smoke-selftest-123"
|
||||
exact_image="thothii-workspace-registry-smoke:${project}"
|
||||
foreign_project="thothii-workspace-registry-smoke:thoth-workspace-registry-smoke-foreign-456"
|
||||
foreign_tag="thothii-workspace-registry-smoke:local"
|
||||
image="$exact_image"
|
||||
|
||||
docker() {
|
||||
printf '%s\n' "docker $*" >>"$calls"
|
||||
case "$1 $2" in
|
||||
"image rm")
|
||||
[[ "$3" == "-f" ]] || return 41
|
||||
[[ "$4" == "$exact_image" ]] || return 42
|
||||
return 0
|
||||
;;
|
||||
"image inspect")
|
||||
[[ "$3" == "--format" ]] || return 43
|
||||
[[ "$5" == "$exact_image" ]] || return 44
|
||||
return 1
|
||||
;;
|
||||
"ps -a"|"volume ls"|"network ls")
|
||||
[[ "$*" == *"label=com.docker.compose.project=$project"* ]] || return 45
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 46
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
cleanup_smoke_image
|
||||
leftovers="$(workspace_registry_smoke_leftovers)"
|
||||
[[ -z "$leftovers" ]] || {
|
||||
echo "self-test observed leftovers for the per-run image" >&2
|
||||
printf '%s\n' "$leftovers" >&2
|
||||
return 1
|
||||
}
|
||||
grep -Fq "docker image rm -f $exact_image" "$calls" \
|
||||
|| { echo "self-test did not remove the exact per-run image reference" >&2; return 1; }
|
||||
if grep -Fq "$foreign_project" "$calls" || grep -Fq "$foreign_tag" "$calls"; then
|
||||
echo "self-test cleanup touched a foreign workspace-registry smoke image reference" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "workspace registry smoke image cleanup identity self-test passed"
|
||||
}
|
||||
|
||||
if [[ "${WORKSPACE_REGISTRY_SMOKE_SELF_TEST:-}" == "image-cleanup-identity" ]]; then
|
||||
workspace_registry_smoke_self_test_image_cleanup_identity
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cleanup() {
|
||||
local cleanup_status=$?
|
||||
compose down --volumes --remove-orphans >/dev/null 2>&1 || true
|
||||
docker image rm -f "$image" >/dev/null 2>&1 || true
|
||||
cleanup_smoke_image
|
||||
if [[ "$cleanup_status" -eq 0 ]]; then
|
||||
local leftovers
|
||||
leftovers="$(
|
||||
{
|
||||
docker ps -a --filter "label=com.docker.compose.project=$project" -q
|
||||
docker volume ls --filter "label=com.docker.compose.project=$project" -q
|
||||
docker network ls --filter "label=com.docker.compose.project=$project" -q
|
||||
docker image ls -q "$image"
|
||||
} | sed '/^$/d'
|
||||
)"
|
||||
leftovers="$(workspace_registry_smoke_leftovers)"
|
||||
if [[ -n "$leftovers" ]]; then
|
||||
echo "workspace registry cleanup left owned Docker resources:" >&2
|
||||
printf '%s\n' "$leftovers" >&2
|
||||
|
||||
Reference in New Issue
Block a user