新增 entrypoint_tag_cleanup.sh 驗證孤兒 tag 刪除、保留指定 release 的 tag;分頁測試改為端點感知並共用 jq mock。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
85 lines
2.0 KiB
Bash
85 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
repo_root="$(cd "$script_dir/.." && pwd)"
|
|
|
|
tmpdir="$(mktemp -d)"
|
|
trap 'rm -rf "$tmpdir"' EXIT
|
|
|
|
curl_log="$tmpdir/curl.log"
|
|
bin_dir="$tmpdir/bin"
|
|
mkdir -p "$bin_dir"
|
|
|
|
cat >"$bin_dir/curl" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
log_file="${CURL_LOG:?}"
|
|
printf '%s\n' "$*" >>"$log_file"
|
|
|
|
last_arg="${!#}"
|
|
|
|
if [[ " $* " == *" -X DELETE "* ]]; then
|
|
printf '204'
|
|
exit 0
|
|
fi
|
|
|
|
# tags 端點沒有需要清理的 tag
|
|
if [[ "$last_arg" == */tags?* ]]; then
|
|
printf '%s' '[]'
|
|
exit 0
|
|
fi
|
|
|
|
case "$last_arg" in
|
|
*/releases?*page=1)
|
|
printf '%s' '[{"id":4,"tag_name":"v4","name":"release-4","created_at":"2024-04-01T00:00:00Z"},{"id":3,"tag_name":"v3","name":"release-3","created_at":"2024-03-01T00:00:00Z"}]'
|
|
;;
|
|
*/releases?*page=2)
|
|
printf '%s' '[{"id":2,"tag_name":"v2","name":"release-2","created_at":"2024-02-01T00:00:00Z"},{"id":1,"tag_name":"v1","name":"release-1","created_at":"2024-01-01T00:00:00Z"}]'
|
|
;;
|
|
*/releases?*page=3)
|
|
printf '%s' '[]'
|
|
;;
|
|
*)
|
|
printf 'unexpected request: %s\n' "$last_arg" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
EOF
|
|
chmod +x "$bin_dir/curl"
|
|
|
|
cp "$script_dir/lib/jq_mock.py" "$bin_dir/jq.py"
|
|
chmod +x "$bin_dir/jq.py"
|
|
|
|
cat >"$bin_dir/jq" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
exec python3 "$0.py" "$@"
|
|
EOF
|
|
chmod +x "$bin_dir/jq"
|
|
|
|
PATH="$bin_dir:$PATH" \
|
|
CURL_LOG="$curl_log" \
|
|
GITEA_SERVER_URL="https://gitea.example.test" \
|
|
GITEA_REPOSITORY="owner/repo" \
|
|
KEEP_COUNT="2" \
|
|
RUNNER_TOKEN="" \
|
|
bash "$repo_root/entrypoint.sh" >/dev/null
|
|
|
|
grep -q 'page=1' "$curl_log"
|
|
grep -q 'page=2' "$curl_log"
|
|
grep -q 'page=3' "$curl_log"
|
|
grep -q '/releases/2' "$curl_log"
|
|
grep -q '/releases/1' "$curl_log"
|
|
|
|
if grep -q '/releases/3' "$curl_log" || grep -q '/releases/4' "$curl_log"; then
|
|
printf 'unexpected release deletion request in %s\n' "$curl_log" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if grep -q '/tags/' "$curl_log"; then
|
|
printf 'unexpected tag deletion request in %s\n' "$curl_log" >&2
|
|
exit 1
|
|
fi
|