diff --git a/skills/code-action-docker/SKILL.md b/skills/code-action-docker/SKILL.md index 9ae4145..e158dd3 100644 --- a/skills/code-action-docker/SKILL.md +++ b/skills/code-action-docker/SKILL.md @@ -1,6 +1,6 @@ --- name: code-action-docker -description: 以互動問答從零打造 Gitea/GitHub「Docker 容器 action」:(1) 詢問 action 名稱(用於 action.yml 的 name);(2) 詢問輸入與輸出參數及其 description(盡量繁體中文、無亂碼);(3) 詢問執行此流程的目標,整理濃縮成一句話(用於 action.yml 的 description,盡量繁體中文、無亂碼);(4) 依標準實作目標——盡量以 Node.js 開發、程式檔一律放 `src/`、盡量詳細輸出訊息且格式統一為 `[yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息`(無階段則移除該 `[]`,等級為 INF/WRN/ERR/TRC/DBG),並產生 action.yml/entrypoint.sh/最新 node 版本的 Dockerfile;(5) 檢查是否有 doc-funcs 技能,有則完整執行 `/jsc:doc-funcs`,否則結束。當使用者說建立/產生一個 docker action、從零做一個容器 action、幫我問完需求後生出 action、把需求做成 node docker action,或提到 code-action-docker 時觸發。不適用於:composite action(用 code-action-composite)、只整理既有 Dockerfile(用 code-image)、非 action 專案。 +description: 以互動問答從零打造 Gitea/GitHub「Docker 容器 action」:(1) 詢問 action 名稱(用於 action.yml 的 name);(2) 詢問輸入與輸出參數及其 description(盡量繁體中文、無亂碼);(3) 詢問執行此流程的目標,整理濃縮成一句話(用於 action.yml 的 description,盡量繁體中文、無亂碼);(4) 依標準實作目標——開發中需要新參數時依 `${{ gitea.* }}` → `${{ secrets.* }}` → `${{ vars.* }}` 順序尋找、都沒有才詢問使用者是否加入 inputs;盡量以 Node.js 開發、程式檔一律放 `src/`、盡量詳細輸出訊息且格式統一為 `[yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息`(無階段則移除該 `[]`,等級為 INF/WRN/ERR/TRC/DBG),並產生 action.yml/entrypoint.sh/最新 node 版本的 Dockerfile;(5) 檢查是否有 doc-funcs 技能,有則完整執行 `/jsc:doc-funcs`,否則結束。當使用者說建立/產生一個 docker action、從零做一個容器 action、幫我問完需求後生出 action、把需求做成 node docker action,或提到 code-action-docker 時觸發。不適用於:composite action(用 code-action-composite)、只整理既有 Dockerfile(用 code-image)、非 action 專案。 argument-hint: "[--action-dir ] [--node-version ]" --- @@ -71,6 +71,17 @@ argument-hint: "[--action-dir ] [--node-version ]" 依階段 1~3 收齊的需求實作 action,遵守以下標準: +### 4.0 開發中需要參數時的來源優先序 + +實作過程中發現需要某個參數(例如 repo 資訊、token、環境設定)而階段 2 的 `inputs` 沒有時,**依下列順序尋找來源,前者可用就不往後找**: + +1. **`${{ gitea.* }}` context**:runner 內建 context(如 `gitea.repository`、`gitea.ref`、`gitea.actor`、`gitea.token`);docker action 執行期對應 runner 注入的 `GITHUB_*`/`GITEA_*` 環境變數(如 `GITHUB_REPOSITORY`、`GITHUB_REF`),主程式直接讀 `process.env` 即可。 +2. **`${{ secrets.* }}`**:repo/org 的 secrets(機敏值:token、密碼、金鑰)。 +3. **`${{ vars.* }}`**:repo/org 的 variables(非機敏設定值)。 +4. **以上都沒有** → 以 `AskUserQuestion` 詢問使用者**是否要把該參數加入 `inputs`**(加入則回到階段 2 規格補齊名稱/description/required/default,並同步 `action.yml`);**不得臆測預設值或硬編碼**。 + +注意:`secrets.*`/`vars.*` 無法在 `action.yml` 的 `inputs.default` 直接引用,須由呼叫端 workflow 以 `with:` 或 `env:` 傳入(如 `with: token: ${{ secrets.MY_TOKEN }}`);採用這類來源時,在 README 使用範例中示範呼叫端如何帶入,機敏值一律不落地、不輸出明文(log 需遮蔽)。 + ### 4.1 盡量以 Node.js 開發,程式檔一律放 `src/` - 主程式與所有模組**盡量以 Node.js 撰寫**;只有目標必須依賴外部工具時,才以 `child_process`(`execFileSync`/`spawnSync`)在 Node 內呼叫,不另寫 shell/python 主程式。