MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m39s
CI keeps the 'test once per code state' plan but records commit and git tree as image labels instead of extra :sha-/:tree- tags, so the registry only holds dev, latest, vX.Y.Z and stable; the plan test now asserts the expected decisions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
2.0 KiB
Bash
Executable File
52 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Checks build-plan.sh against a fake registry (labels given per case). Usage: .gitea/scripts/test-build-plan.sh
|
|
set -euo pipefail
|
|
cd "$(git rev-parse --show-toplevel)"
|
|
PLAN=.gitea/scripts/build-plan.sh
|
|
IMAGE=registry.example/mindsift
|
|
SHA="$(git rev-parse HEAD)"
|
|
TREE="$(git rev-parse HEAD^{tree})"
|
|
MOCK="$(mktemp)"
|
|
trap 'rm -f "$MOCK"' EXIT
|
|
# The fake registry answers from $DEV_TREE, $LATEST_TREE and $LATEST_SHA
|
|
cat >"$MOCK" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
case "$1 $2" in
|
|
*:dev\ io.mindsift.tree) echo "${DEV_TREE:-}" ;;
|
|
*:latest\ io.mindsift.tree) echo "${LATEST_TREE:-}" ;;
|
|
*:latest\ org.opencontainers.image.revision) echo "${LATEST_SHA:-}" ;;
|
|
esac
|
|
EOF
|
|
chmod +x "$MOCK"
|
|
|
|
fails=0
|
|
expect() { # name, REF, expected "action skip_tests tags", env assignments…
|
|
local name="$1" ref="$2" want="$3"
|
|
shift 3
|
|
local out
|
|
out="$(env "$@" REF="$ref" IMAGE="$IMAGE" PKG_VERSION=0.10.0 LABEL_CMD="$MOCK" GITHUB_OUTPUT= "$PLAN")"
|
|
local got
|
|
got="$(echo "$out" | sed -n 's/^action=//p') $(echo "$out" | sed -n 's/^skip_tests=//p') $(echo "$out" | sed -n 's/^tags=//p')"
|
|
if [ "$got" = "$want" ]; then
|
|
echo "OK $name: $got"
|
|
else
|
|
echo "FEHL $name: erwartet '$want', bekommen '$got'"
|
|
fails=$((fails + 1))
|
|
fi
|
|
}
|
|
|
|
expect "dev baut mit Tests" refs/heads/dev "build 0 dev"
|
|
expect "main nach getestetem dev" refs/heads/main "build 1 latest" DEV_TREE="$TREE"
|
|
expect "main mit anderem Stand" refs/heads/main "build 0 latest" DEV_TREE=0000
|
|
expect "Tag auf latest-Commit" refs/tags/v0.10.0 "retag 1 v0.10.0 stable" LATEST_SHA="$SHA" LATEST_TREE="$TREE"
|
|
expect "Tag, latest fehlt, dev getestet" refs/tags/v0.10.0 "build 1 v0.10.0 stable" DEV_TREE="$TREE"
|
|
expect "Tag auf unbekanntem Stand" refs/tags/v0.10.0 "build 0 v0.10.0 stable"
|
|
expect "Vorabversion ohne stable" refs/tags/v0.11.0-rc.1 "retag 1 v0.11.0-rc.1" LATEST_SHA="$SHA"
|
|
expect "Feature-Branch" refs/heads/feat/x "build 0 feat-x"
|
|
|
|
if [ "$fails" -gt 0 ]; then
|
|
echo "$fails FEHLGESCHLAGEN"
|
|
exit 1
|
|
fi
|
|
echo "ALLE FÄLLE BESTANDEN"
|