Files
cleanup-release/tests/entrypoint_pagination.sh
JefferyandClaude Opus 4.8 6cad836ce3 test(清理成品): 新增 tag 清理測試並抽出共用 jq mock
新增 entrypoint_tag_cleanup.sh 驗證孤兒 tag 刪除、保留指定 release 的 tag;分頁測試改為端點感知並共用 jq mock。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 16:14:56 +08:00

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