feat(action skills): composite/docker action 標準化流程強化(參數優先序、從零建立、Dockerfile 修正) #6
@@ -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) 依標準實作目標——開發中需要新參數時依 `${{ 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 專案。
|
||||
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 專案。
|
||||
argument-hint: "[--action-dir <action 根目錄>] [--node-version <node tag>]"
|
||||
---
|
||||
|
||||
@@ -71,17 +71,6 @@ argument-hint: "[--action-dir <action 根目錄>] [--node-version <node tag>]"
|
||||
|
||||
依階段 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 主程式。
|
||||
|
||||
Reference in New Issue
Block a user