Compare commits

..
Author SHA1 Message Date
admin d7ea601b13 Merge pull request 'feat(清理成品): 刪除舊版本成品後清理未指定 release 的 tag' (#1) from develop into master
CD / 計算版本號 (push) Successful in 1s
CD / 發布專案 (push) Successful in 1s
Reviewed-on: actions/cleanup-release#1
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-06-23 08:20:31 +00:00
jiantw83 c5fadfb99b Merge pull request '版本 0.4.2' (#17) from develop into master
Reviewed-on: actions/cleanup-release#17
Reviewed-by: 系統管理員 <admin@noreply.localhost>
2026-05-16 12:49:01 +00:00
jiantw83 0ea080d95e Merge pull request 'feat: update master.yaml job names for clarity and add review.yaml for AI code review' (#15) from develop into master
Reviewed-on: actions/cleanup-release#15
2026-05-13 03:20:42 +00:00
jiantw83 a2b53a9f84 Merge pull request '更新 action.yml' (#14) from develop into master
Reviewed-on: actions/cleanup-release#14
2026-03-25 06:40:45 +00:00
jiantw83 982d30a0d5 Merge pull request '更新 Dockerfile' (#13) from develop into master
Reviewed-on: actions/cleanup-release#13
2026-03-25 05:43:47 +00:00
jiantw83 47acc7ce83 Merge pull request '更新 action.yml' (#12) from develop into master
Reviewed-on: actions/cleanup-release#12
2026-03-25 02:45:45 +00:00
jiantw83 3f717330cc Merge pull request 'feat: 將清理成品的行為合併到發布專案' (#11) from develop into master
Reviewed-on: actions/cleanup-release#11
2026-03-21 11:48:52 +00:00
jiantw83 be812d40f8 Merge pull request '更新 .gitea/workflows/master.yaml' (#10) from develop into master
Reviewed-on: actions/cleanup-release#10
2026-03-21 09:38:43 +00:00
jiantw83 08a5282891 Merge pull request 'feat: 修改工作流的名稱' (#9) from develop into master
Reviewed-on: actions/cleanup-release#9
Reviewed-by: 系統管理員 <admin@noreply.localhost>
2026-03-21 02:51:22 +00:00
admin 4c841fd937 Merge pull request 'feat: 修改工作流的名稱' (#8) from develop into master
Reviewed-on: actions/cleanup-release#8
2026-03-21 02:49:59 +00:00
jiantw83 dade5e1316 Merge pull request 'feat: 新增 input 參數,可以讓工具使用者自訂 token' (#7) from develop into master
Reviewed-on: actions/cleanup-release#7
2026-03-21 02:46:05 +00:00
jiantw83 61c9013fe0 Merge pull request 'feat: 重構清理舊版成品' (#6) from develop into master
Reviewed-on: actions/cleanup-release#6
2026-03-21 02:33:37 +00:00
jiantw83 7730f56c49 Merge pull request 'test: 嘗試修正 INPUT_GITEA_SERVER: unbound variable 問題' (#5) from develop into master
Reviewed-on: actions/cleanup-release#5
2026-03-20 06:26:24 +00:00
jiantw83 e706ad7c5a Merge pull request 'feat: 改成 docker action' (#4) from develop into master
Reviewed-on: actions/cleanup-release#4
2026-03-20 06:20:01 +00:00
jiantw83 ae8127d5c2 Merge pull request '更新 .gitea/workflows/master.yaml' (#3) from develop into master
Reviewed-on: actions/cleanup-release#3
2026-03-05 08:08:09 +00:00
jiantw83 9df8b8dcaa Merge pull request '更新 .gitea/workflows/master.yaml' (#2) from develop into master
Reviewed-on: actions/cleanup-release#2
2026-03-05 08:05:35 +00:00
jiantw83 4a6a3c159d Merge pull request '更新 .gitea/workflows/master.yaml' (#1) from develop into master
Reviewed-on: actions/cleanup-release#1
2026-03-05 08:02:41 +00:00
jiantw83 8cbe2e3e4d Merge pull request 'fix: 修正刪除 API 的參數' (#22) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#22
2025-12-01 07:15:08 +00:00
jiantw83 075bc62138 Merge pull request 'feat: 刪除失敗,不要讓任務成功' (#21) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#21
2025-12-01 07:13:12 +00:00
jiantw83 4a2c9d6064 Merge pull request 'feat: 移除多餘的變數' (#20) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#20
2025-12-01 06:53:34 +00:00
jiantw83 17721ae9d0 Merge pull request 'feat: 優化程序' (#19) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#19
2025-12-01 06:35:58 +00:00
jiantw83 9929c05469 Merge pull request 'feat: 修正刪除的 API' (#18) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#18
2025-12-01 06:12:01 +00:00
jiantw83 a078f2d984 Merge pull request 'fix: 修正 get 的 api 解析' (#17) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#17
2025-12-01 06:03:47 +00:00
jiantw83 9068f5e5b6 Merge pull request 'Revert "feat: 修改指令執行格式"' (#16) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#16
2025-12-01 05:38:45 +00:00
jiantw83 e40a7adad6 Merge pull request 'feat: 修改指令執行格式' (#15) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#15
2025-12-01 04:00:18 +00:00
jiantw83 214ec5f7bd Merge pull request 'feat: 修正 if 語法' (#14) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#14
2025-12-01 03:58:53 +00:00
jiantw83 829c119657 Merge pull request 'feat: 改為 script 執行' (#13) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#13
2025-12-01 03:57:05 +00:00
jiantw83 2ac7efe907 Merge pull request 'feat: 改為 script 執行' (#12) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#12
2025-12-01 03:43:23 +00:00
jiantw83 74e3e758c9 Merge pull request 'fix: 修正 jq 指令' (#11) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#11
2025-12-01 03:39:07 +00:00
jiantw83 3e32b71abe Merge pull request 'fix: 修正 jq 指令' (#10) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#10
2025-12-01 03:37:45 +00:00
jiantw83 a8eaa2a293 Merge pull request 'fix: 調整指令參數' (#9) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#9
2025-12-01 03:15:11 +00:00
jiantw83 f6925cc5e7 Merge pull request 'fix: 排除實際刪除數量為空的問題' (#8) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#8
2025-12-01 03:04:22 +00:00
jiantw83 2daf39673a Merge pull request 'feat: 如果沒有 package-name 套過任務' (#7) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#7
2025-12-01 03:02:30 +00:00
jiantw83 f3afba6e49 Merge pull request 'fix: 移除參數輸出' (#6) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#6
2025-12-01 02:56:52 +00:00
jiantw83 c5b69ac380 Merge pull request 'feat: 移除 if 判斷' (#5) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#5
2025-12-01 02:45:21 +00:00
jiantw83 963fa24ce0 Merge pull request 'fix: 修正錯誤' (#4) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#4
2025-12-01 02:37:18 +00:00
jiantw83 93402e99ee Merge pull request 'fix: 修正錯誤' (#3) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#3
2025-12-01 02:26:32 +00:00
jiantw83 ac72d18016 Merge pull request 'fix: 修正錯誤' (#2) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#2
2025-12-01 02:21:20 +00:00
jiantw83 70cac9e740 Merge pull request 'feat: 清理舊映像' (#1) from develop into master
Reviewed-on: jiantw83/cleanup-release-action#1
2025-12-01 02:06:52 +00:00
3 changed files with 286 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
#!/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
+104
View File
@@ -0,0 +1,104 @@
#!/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
# 倉庫所有 tagv1~v4 加上兩個未指定 release 的孤兒 tag
if [[ "$last_arg" == */tags?* ]]; then
case "$last_arg" in
*page=1)
printf '%s' '[{"name":"v4"},{"name":"v3"},{"name":"v2"},{"name":"v1"},{"name":"tmp-build"},{"name":"v0"}]'
;;
*)
printf '%s' '[]'
;;
esac
exit 0
fi
# /releases GET:刪除舊版本後重新取得時,只回傳仍保留的 release
if grep -Eq -- '-X DELETE .*/releases/[0-9]' "$log_file"; then
case "$last_arg" in
*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"}]'
;;
*)
printf '%s' '[]'
;;
esac
exit 0
fi
case "$last_arg" in
*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"}]'
;;
*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"}]'
;;
*)
printf '%s' '[]'
;;
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
# 舊版本 release 仍被刪除
grep -q '/releases/2' "$curl_log"
grep -q '/releases/1' "$curl_log"
# 未指定 release 的 tag(含被刪除 release 留下的 tag 與其他孤兒 tag)被刪除
for tag in v2 v1 tmp-build v0; do
if ! grep -q "/tags/$tag" "$curl_log"; then
printf 'expected tag deletion /tags/%s not found in %s\n' "$tag" "$curl_log" >&2
exit 1
fi
done
# 仍指定 release 的 tag 不可被刪除
for tag in v4 v3; do
if grep -q "/tags/$tag" "$curl_log"; then
printf 'unexpected deletion of release-assigned tag /tags/%s in %s\n' "$tag" "$curl_log" >&2
exit 1
fi
done
+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env python3
"""Minimal jq stand-in for entrypoint.sh tests.
Only the jq expressions used by entrypoint.sh are implemented. Unknown
expressions fail loudly so new jq usage is noticed instead of silently
producing wrong results.
"""
import json
import re
import sys
expr = ""
flags = set()
named_args = {}
args = sys.argv[1:]
while args:
current = args.pop(0)
if current in {"-e", "-c", "-r", "-s"}:
flags.add(current)
continue
if current == "--arg":
key = args.pop(0)
value = args.pop(0)
named_args[key] = value
continue
if current == "--":
if not args:
raise SystemExit("missing jq expression")
expr = args.pop(0)
break
if current.startswith("-"):
flags.add(current)
continue
expr = current
break
raw = sys.stdin.read()
def dump(value):
if "-r" in flags and isinstance(value, (str, int, float)) and not isinstance(value, bool):
sys.stdout.write(str(value))
else:
sys.stdout.write(json.dumps(value, separators=(",", ":")))
if expr == "length":
data = json.loads(raw or "null")
print(len(data))
raise SystemExit(0)
if expr == "add":
arrays = [json.loads(line) for line in raw.splitlines() if line.strip()]
merged = []
for item in arrays:
merged.extend(item)
dump(merged)
raise SystemExit(0)
if expr == "sort_by(.created_at) | reverse":
data = json.loads(raw or "[]")
dump(sorted(data, key=lambda item: item["created_at"], reverse=True))
raise SystemExit(0)
if expr == "[.[].tag_name]":
data = json.loads(raw or "[]")
dump([item["tag_name"] for item in data])
raise SystemExit(0)
match = re.fullmatch(r"any\(\.\[\]; \. == \$(\w+)\)", expr)
if match:
data = json.loads(raw or "[]")
needle = named_args[match.group(1)]
sys.stdout.write("true" if any(item == needle for item in data) else "false")
raise SystemExit(0)
match = re.fullmatch(r"\.\[(\d+):\]", expr)
if match:
data = json.loads(raw or "[]")
dump(data[int(match.group(1)):])
raise SystemExit(0)
if expr == ".[]":
data = json.loads(raw or "[]")
for item in data:
dump(item)
sys.stdout.write("\n")
raise SystemExit(0)
match = re.fullmatch(r"\.(id|tag_name|name)", expr)
if match:
data = json.loads(raw or "null")
value = data.get(match.group(1))
dump(value)
raise SystemExit(0)
raise SystemExit(f"unsupported jq expression: {expr}")