@@ -1,96 +0,0 @@
# ============================================================================
# 用途:Gitea Actions CI workflow —— 當 PR 開啟或同步(推新 commit)到 master/ develop 時,
# 自動 checkout 完整 git 歷史、計算下一個語意化版本號(develop 走 beta 預發布),
# 接著建立 Gitea Release(副作用:建立 git tag 與 Release),正式版並會清理舊 Release。
# 更新時間:2026/07/17 16:49:21
# ============================================================================
# workflow 名稱:顯示於 Gitea Actions 執行清單,方便辨識這條 CI pipeline
name : CI
# 觸發條件設定區塊
on :
# 以 pull request 事件觸發(非 push),確保版本計算與發布綁定 PR 流程
pull_request :
# 只有目標分支(base branch)為下列分支的 PR 才會觸發
branches :
# 正式分支:PR 目標為 master 時發布正式版 Release
- master
# 開發分支:PR 目標為 develop 時發布 beta 預發布(prerelease)
- develop
# 只在 PR 開啟(opened)與來源分支推新 commit 同步(synchronize)時觸發,
# 避免 reopened/ labeled 等其他 PR 事件重複跑 CI
types : [ opened, synchronize]
# workflow 層級環境變數:所有 job/ step 皆可透過 env.* 取用
env :
# 目前 repo 名稱,取自 Gitea 事件 payload,供後續步驟組合 Release 名稱等用途
REPOSITORY_NAME : ${{ gitea.event.repository.name }}
# 是否為 beta(預發布)流程:PR 目標分支為 develop 時為 'true',否則為 'false';
# 注意此值為字串型別,後續 if 條件需以字串比較(== 'false')
IS_BETA : ${{ gitea.base_ref == 'develop' }}
# job 定義區塊
jobs :
# 唯一的 job:建置與發布
build :
# job 顯示名稱:於 Gitea Actions 介面顯示為 BUILD
name : BUILD
# 指定 runner 標籤:由標籤為 ubuntu 的 Gitea Actions runner 執行
runs-on : ubuntu
# 依序執行的步驟
steps :
# 步驟 1: checkout 原始碼與完整 git 歷史(含所有 tag),
# 版本計算需要既有 tag 才能推算下一個版本號
- name : 取得存取庫資訊 (含 Tag)
# 使用官方 checkout action; vars.ACTION_CHECKOUT_VERSION 為
# Gitea 組織/repo 層級變數(Actions variables)提供的 action 版本,集中管理升版
uses : actions/checkout@${{ vars.ACTION_CHECKOUT_VERSION }}
with :
# fetch-depth: 0 代表抓取完整歷史(非 shallow clone),確保 tag 與 commit 歷史齊全
fetch-depth : 0
# 步驟 2:依既有 tag 計算下一個語意化版本號
- name : 計算下一個版本號
# 使用自建的 calculate-next-version action( gitea.jsc.idv.tw 私有 Gitea 上的 docker action);
# vars.ACTION_CALCULATE_NEXT_VERSION 同為 Gitea 組織/repo 變數提供的版本
uses : https://gitea.jsc.idv.tw/docker-actions/calculate-next-version@${{ vars.ACTION_CALCULATE_NEXT_VERSION }}
# step id:後續步驟以 steps.calculate-next-version.outputs.value 取得計算結果
id : calculate-next-version
with :
# 傳入是否為 beta:true 時產生預發布版號(例如帶 -beta 後綴),false 時產生正式版號
is_beta : ${{ env.IS_BETA }}
# 步驟 3:建立 Gitea Release(副作用:建立對應 git tag 與 Release 頁面)
# 需人工確認:此步驟在 PR opened/synchronize 就會發布 Release 並打 tag,
# 亦即 PR 尚未合併前每次推 commit 都會產生 Release;請確認這是預期行為
# (通常發布會放在 push 到 master/develop 或 PR merged 之後)。
- name : 發布成品
# 使用第三方 akkuman/gitea-release-action 建立 Release;
# vars.ACTION_GITEA_RELEASE_VERSION 為 Gitea 組織/repo 變數提供的 action 版本
# 需人工確認:此 action 通常需要 GITEA_TOKEN/ token 才能建立 Release,
# 本設定未見明確傳入 token,請確認 runner 預設 token 權限是否足夠。
uses : akkuman/gitea-release-action@${{ vars.ACTION_GITEA_RELEASE_VERSION }}
# step 層級環境變數
env :
# 將上一步計算出的版本號存為 VERSION,供本步驟的 with 參數引用
VERSION : ${{ steps.calculate-next-version.outputs.value }}
with :
# Release 顯示名稱:{repo 名稱} v{版本號}
name : "${{ gitea.event.repository.name }} v${{ env.VERSION }}"
# 要建立的 git tag 名稱:v{版本號}
tag_name : "v${{ env.VERSION }}"
# tag 指向的 commit: gitea.sha 為觸發此 workflow 的 commit
# 需人工確認:pull_request 事件的 sha 通常是 PR 的 merge commit(暫時性 ref),
# 對其打 tag 可能指向未實際合入分支的 commit,請確認 tag 目標是否符合預期。
target_commitish : "${{ gitea.sha }}"
# 是否標記為預發布:develop 目標的 PR 為 true( beta),master 為 false(正式版)
prerelease : ${{ env.IS_BETA }}
# 步驟 4:清理舊 Release,避免 Release 清單無限增長
- name : 清理舊成品
# 使用自建的 clean-old-release action;
# vars.ACTION_CLEAN_OLD_RELEASE 為 Gitea 組織/repo 變數提供的 action 版本
# 需人工確認:其他兩個自建 action 的變數名皆以 _VERSION 結尾,
# 此變數名為 ACTION_CLEAN_OLD_RELEASE(無 _VERSION 後綴),請確認命名是否刻意如此。
uses : https://gitea.jsc.idv.tw/docker-actions/clean-old-release@${{ vars.ACTION_CLEAN_OLD_RELEASE }}
# 僅在非 beta(正式版,PR 目標為 master)時執行清理;
# 因 env.IS_BETA 為字串,故以 == 'false' 比較
if : ${{ env.IS_BETA == 'false' }}