7 Commits

Author SHA1 Message Date
Jeffery
ea8b72ce8f feat: 改成 docker action 2026-03-20 14:18:53 +08:00
0d7cdd65ca 更新 .gitea/workflows/master.yaml 2026-03-05 08:07:45 +00:00
99ae6a157b 更新 .gitea/workflows/master.yaml 2026-03-05 08:05:12 +00:00
3bd0ecaa98 更新 .gitea/workflows/master.yaml 2026-03-05 07:59:39 +00:00
Jeffery
146283281b fix: 修正刪除 API 的參數 2025-12-01 15:14:56 +08:00
Jeffery
9cf1a7a974 feat: 刪除失敗,不要讓任務成功 2025-12-01 15:13:00 +08:00
Jeffery
f6d27ed523 feat: 移除多餘的變數 2025-12-01 14:53:06 +08:00
6 changed files with 53 additions and 44 deletions

View File

@@ -11,17 +11,17 @@ jobs:
steps:
- name: 計算版本號
id: version
uses: https://gitea.jsc.idv.tw/jiantw83/calculate-version-action@v${{ vars.CALCULATE_VERSION }}
uses: https://gitea.jsc.idv.tw/actions/calculate-version@${{ vars.ACTION_CALCULATE_VERSION }}
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}
token: ${{ secrets.GITEA_TOKEN }}
- name: 發布專案
uses: akkuman/gitea-release-action@v1
uses: akkuman/gitea-release-action@${{ vars.ACTION_RELEASE_VERSION }}
with:
tag_name: "v${{ steps.version.outputs.VERSION }}"
- name: 清理舊版本 (保留最新2個)
uses: https://gitea.jsc.idv.tw/jiantw83/cleanup-release-action@v${{ vars.CLEANUP_RELEASE_VERSION }}
uses: https://gitea.jsc.idv.tw/actions/cleanup-release@${{ vars.ACTION_CLEANUP_RELEASE_VERSION }}
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}

11
Dockerfile Normal file
View File

@@ -0,0 +1,11 @@
FROM alpine:3.21
RUN apk add --no-cache bash curl jq
COPY cleanup-releases.sh /cleanup-releases.sh
COPY cleanup-images.sh /cleanup-images.sh
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /cleanup-releases.sh /cleanup-images.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -23,30 +23,5 @@ inputs:
required: false
default: 'false'
runs:
using: 'composite'
steps:
- name: 清理舊版本
id: cleanup
shell: bash
run: |
chmod +x "${{ github.action_path }}/cleanup-releases.sh"
"${{ github.action_path }}/cleanup-releases.sh" \
"${{ inputs.gitea-server }}" \
"${{ inputs.repository }}" \
"${{ inputs.token }}" \
"${{ inputs.keep-count }}" \
"${{ inputs.dry-run }}"
- name: 清理舊映像
id: cleanup-images
if: inputs.package-name != ''
shell: bash
run: |
chmod +x "${{ github.action_path }}/cleanup-images.sh"
"${{ github.action_path }}/cleanup-images.sh" \
"${{ inputs.gitea-server }}" \
"${{ inputs.repository }}" \
"${{ inputs.package-name }}" \
"${{ inputs.token }}" \
"${{ inputs.keep-count }}" \
"${{ inputs.dry-run }}"
using: 'docker'
image: 'Dockerfile'

View File

@@ -64,9 +64,9 @@ echo "需要刪除 $DELETE_COUNT 個舊映像"
# 獲取要刪除的版本 (跳過前 keep-count 個)
TO_DELETE=$(echo "$SORTED_VERSIONS" | jq -c ".[$KEEP_COUNT:][]")
# 初始化刪除計數器和列表
# 初始化刪除計數器
DELETED_COUNT=0
declare -a DELETED_VERSIONS
FAILED_COUNT=0
# 處理每個要刪除的版本
while IFS= read -r version; do
@@ -87,11 +87,10 @@ while IFS= read -r version; do
if [[ "$DRY_RUN" == "true" ]]; then
echo "🔍 [模擬執行] 會刪除映像版本: $VERSION_NAME (ID: $VERSION_ID)"
DELETED_COUNT=$((DELETED_COUNT + 1))
DELETED_VERSIONS+=("$VERSION_NAME")
else
# 實際刪除
DELETE_RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" \
-X DELETE "$GITEA_SERVER/api/v1/packages/$OWNER/container/$PACKAGE_NAME/$VERSION_ID?token=$TOKEN" \
-X DELETE "$GITEA_SERVER/api/v1/packages/$OWNER/container/$PACKAGE_NAME/$VERSION_NAME?token=$TOKEN" \
-H "Accept: application/json")
DELETE_HTTP_STATUS=$(echo "$DELETE_RESPONSE" | grep -o "HTTP_STATUS:[0-9]*" | cut -d: -f2)
@@ -99,28 +98,28 @@ while IFS= read -r version; do
if [[ "$DELETE_HTTP_STATUS" == "204" ]] || [[ "$DELETE_HTTP_STATUS" == "200" ]]; then
echo "✅ 成功刪除映像版本: $VERSION_NAME (ID: $VERSION_ID)"
DELETED_COUNT=$((DELETED_COUNT + 1))
DELETED_VERSIONS+=("$VERSION_NAME")
else
echo "❌ 刪除失敗映像版本: $VERSION_NAME (ID: $VERSION_ID), HTTP狀態: $DELETE_HTTP_STATUS"
FAILED_COUNT=$((FAILED_COUNT + 1))
fi
fi
done <<< "$TO_DELETE"
# 檢查是否有刪除失敗的情況
if [[ $FAILED_COUNT -gt 0 ]]; then
echo ""
echo "❌ 錯誤:有 $FAILED_COUNT 個映像版本刪除失敗"
exit 1
fi
# 輸出最終結果
echo ""
echo "========================================="
if [[ "$DRY_RUN" == "true" ]]; then
echo "🔍 [模擬執行] 總共會刪除 $DELETED_COUNT 個映像版本"
if [[ ${#DELETED_VERSIONS[@]} -gt 0 ]]; then
echo "待刪除版本列表:"
printf ' - %s\n' "${DELETED_VERSIONS[@]}"
fi
echo "✅ 模擬執行完成"
else
echo "✅ 清理完成,成功刪除了 $DELETED_COUNT 個映像版本"
if [[ ${#DELETED_VERSIONS[@]} -gt 0 ]]; then
echo "已刪除版本列表:"
printf ' - %s\n' "${DELETED_VERSIONS[@]}"
fi
# 驗證結果
if [[ $DELETED_COUNT -gt 0 ]]; then
@@ -129,7 +128,7 @@ else
VERIFY_JSON=$(curl -s "$GITEA_SERVER/api/v1/packages/$OWNER/container/$PACKAGE_NAME?token=$TOKEN" \
-H "Accept: application/json")
NEW_TOTAL_COUNT=$(echo "$VERIFY_JSON" | jq 'length')
echo "目前剩餘 $NEW_TOTAL_COUNT 個映像版本(預期: $KEEP_COUNT"
echo "📊 目前剩餘 $NEW_TOTAL_COUNT 個映像版本(預期: $KEEP_COUNT"
fi
fi
echo "========================================="

View File

@@ -89,10 +89,18 @@ echo "$TO_DELETE" | jq -c '.[]' | while IFS= read -r release; do
echo "✅ 成功刪除發佈: $RELEASE_TAG ($RELEASE_NAME)"
else
echo "❌ 刪除失敗發佈: $RELEASE_TAG ($RELEASE_NAME), HTTP 狀態: $HTTP_STATUS"
FAILED_COUNT=$((FAILED_COUNT + 1))
fi
fi
done
# 檢查是否有刪除失敗的情況
if [[ $FAILED_COUNT -gt 0 ]]; then
echo ""
echo "❌ 錯誤:有 $FAILED_COUNT 個發佈刪除失敗"
exit 1
fi
# 輸出最終結果
if [[ "$DRY_RUN" == "true" ]]; then
echo ""

16
entrypoint.sh Normal file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
GITEA_SERVER="${INPUT_GITEA_SERVER}"
REPOSITORY="${INPUT_REPOSITORY}"
PACKAGE_NAME="${INPUT_PACKAGE_NAME:-}"
TOKEN="${INPUT_TOKEN}"
KEEP_COUNT="${INPUT_KEEP_COUNT:-2}"
DRY_RUN="${INPUT_DRY_RUN:-false}"
/cleanup-releases.sh "$GITEA_SERVER" "$REPOSITORY" "$TOKEN" "$KEEP_COUNT" "$DRY_RUN"
if [[ -n "$PACKAGE_NAME" ]]; then
/cleanup-images.sh "$GITEA_SERVER" "$REPOSITORY" "$PACKAGE_NAME" "$TOKEN" "$KEEP_COUNT" "$DRY_RUN"
fi