Files
release-tag-version/action.yml
T
2026-06-26 10:51:52 +08:00

123 lines
7.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 指令檔用途:
# 這是一個 Gitea composite action(複合動作),名稱為「Release Tag Version」。
# 它被其他 workflow 引用,用來「自動計算版本號並釋出(release)標註成品版本」。
# 完整流程:
# (1) 呼叫 calculate-version action 計算本次的版本號。
# (2) 若版本號非空,組合 release 所需的 name 與 tag_name。
# (3) 若版本號為空,輸出錯誤訊息並以 exit 1 中止整個 action。
# (4) 呼叫 akkuman/gitea-release-action 在 Gitea 上建立 release 並打 tag
# 同時可附帶要釋出的檔案(files)。
# (5) 呼叫 release-cleanup action 清理舊的成品(release)。
#
# 更新日期:2026/06/26 10:14:14Asia/Taipei
# =============================================================================
# action 的顯示名稱,會在 Gitea Actions 介面與被引用時呈現。
name: 'Release Tag Version'
# action 的說明文字,描述此 action 的目的:釋出並標註成品版本。
description: '釋出並標註成品版本'
# action 作者標註,僅作為 metadata,不影響執行行為。
author: 'Jeffery'
# inputs 區塊:定義此 composite action 對外開放、可由呼叫方傳入的參數。
inputs:
# files 參數:指定要隨 release 一起釋出(上傳)的檔案。
files:
# 此參數的描述(原始檔留空)。
# 需人工確認:description 為空字串,建議補上說明(例如「要釋出的成品檔案路徑或 glob」)以利維護,
# 但屬文件性質、不影響執行邏輯,故此處不逕自修改。
description: ''
# required: false 表示此參數非必填;呼叫方未傳入時,files 會是空值。
required: false
# runs 區塊:定義此 action 的執行方式與步驟。
runs:
# using: 'composite' 表示這是「複合動作」,由下方多個 step 串接組成,而非單一 Docker/JS action。
using: 'composite'
# steps:依序執行的步驟清單,順序具有意義,不可調換。
steps:
# ---------------------------------------------------------------------------
# Step 1:版本號計算
# 引用外部 calculate-version action 來計算本次要釋出的版本號,
# 其結果會以 output「version」提供給後續步驟(透過 step id 取用)。
# ---------------------------------------------------------------------------
- name: 版本號計算
# id 設為 version-calculate,後續步驟以 steps.version-calculate.outputs.version 取得計算結果。
id: version-calculate
# uses:引用 Gitea 上 docker-actions/calculate-version action。
# 版本(@ 後面)由 repository/organization 變數 vars.ACTION_CALCULATE_VERSION 決定,
# 便於集中管理被引用 action 的版本,不需改動本檔。
uses: https://gitea.jsc.idv.tw/docker-actions/calculate-version@${{ vars.ACTION_CALCULATE_VERSION }}
# ---------------------------------------------------------------------------
# Step 2:組合釋出參數
# 僅在版本號非空時執行,組出 release 需要的 name 與 tag_name
# 並寫入 GITHUB_OUTPUT 供後續釋出步驟取用。
# ---------------------------------------------------------------------------
- name: 組合釋出參數
# id 設為 release-params,後續步驟以 steps.release-params.outputs.* 取得組好的 name / tag_name。
id: release-params
# if 條件:只有當上一步算出的 version 不是空字串時才執行此步驟。
# 這是「版本有效」的分支,與 Step 3「版本為空」的分支互斥。
if: ${{ steps.version-calculate.outputs.version != '' }}
# run:以 shell 執行下列指令來組合參數。
run: |
# 取得目前 repository 完整名稱(格式為 owner/repo),存入 repository 變數。
repository="${{ gitea.repository }}"
# 取得 Step 1 計算出的版本號,存入 version_value 變數。
version_value="${{ steps.version-calculate.outputs.version }}"
# 組出 release 的顯示名稱並寫入 GITHUB_OUTPUT
# ${repository##*/} 為 bash 參數展開,去掉最長前綴「*/」,即取 owner/repo 的最後一段 repo 名稱。
# 最終格式為「<repo 名稱> v<版本>」(注意 v 前有一個空白)。
echo "name=${repository##*/} v${version_value}" >> "$GITHUB_OUTPUT"
# 組出 release 的 tag 名稱並寫入 GITHUB_OUTPUT:格式為「v<版本>」(v 緊接版本,無空白)。
echo "tag_name=v${version_value}" >> "$GITHUB_OUTPUT"
# shell: bash 明確指定以 bash 執行(${repository##*/} 等參數展開語法需 bash 支援)。
shell: bash
# ---------------------------------------------------------------------------
# Step 3:檢查版本號輸出
# 僅在版本號為空時執行;視為錯誤狀況,輸出訊息到 stderr 並中止 action。
# ---------------------------------------------------------------------------
- name: 檢查版本號輸出
# if 條件:只有當 version 為空字串時才執行;與 Step 2 的條件互斥,為「版本無效」分支。
if: ${{ steps.version-calculate.outputs.version == '' }}
# run:輸出錯誤訊息並以非零結束碼中止流程。
run: |
# 將錯誤訊息寫到 stderr>&2),表示 calculate-version 沒有產出有效版本號。
echo "version-calculate output version is empty" >&2
# 以 exit 1 結束此步驟並讓整個 action 失敗,避免後續用空版本去建立錯誤的 release/tag。
exit 1
# shell: bash 明確指定以 bash 執行此步驟。
shell: bash
# ---------------------------------------------------------------------------
# Step 4:釋出並標註成品版本
# 引用 akkuman/gitea-release-action,在 Gitea 上建立 release 並打 tag。
# 依賴 Step 2 組好的 name / tag_name;若 Step 3 已 exit 1,本步驟不會執行。
# ---------------------------------------------------------------------------
- name: 釋出並標註成品版本
# uses:引用第三方 akkuman/gitea-release-action,負責實際的 release 建立與 tag 標註。
# 版本由 vars.ACTION_GITEA_RELEASE_VERSION 控制,集中管理被引用版本。
uses: akkuman/gitea-release-action@${{ vars.ACTION_GITEA_RELEASE_VERSION }}
# with:傳入 release action 所需的參數。
with:
# namerelease 的顯示名稱,來自 Step 2 組出的 outputs.name(格式「<repo 名稱> v<版本>」)。
name: ${{ steps.release-params.outputs.name }}
# tag_namerelease 對應的 tag 名稱,來自 Step 2 組出的 outputs.tag_name(格式「v<版本>」)。
tag_name: ${{ steps.release-params.outputs.tag_name }}
# target_commitishrelease/tag 要指向的 ref(分支或 commit),這裡使用觸發此次執行的 gitea.ref。
target_commitish: ${{ gitea.ref }}
# files:要附加到 release 的成品檔案,來自本 action 的 inputs.files(呼叫方傳入,可為空)。
files: ${{ inputs.files }}
# ---------------------------------------------------------------------------
# Step 5:清理舊成品
# 引用 release-cleanup action,清理過舊的 release/成品,避免無限累積。
# ---------------------------------------------------------------------------
- name: 清理舊成品
# uses:引用 Gitea 上 docker-actions/release-cleanup action 執行清理。
# 版本由 vars.ACTION_RELEASE_CLEANUP_VERSION 控制。
uses: https://gitea.jsc.idv.tw/docker-actions/release-cleanup@${{ vars.ACTION_RELEASE_CLEANUP_VERSION }}