From 5930254a5e3f9077a8b7b6d61a40552ef17f500d Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 15 Jul 2026 18:53:58 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(code-action-docker):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=96=8B=E7=99=BC=E4=B8=AD=E5=8F=83=E6=95=B8=E4=BE=86?= =?UTF-8?q?=E6=BA=90=E5=84=AA=E5=85=88=E5=BA=8F=E8=A6=8F=E5=89=87=EF=BC=88?= =?UTF-8?q?gitea=20=E2=86=92=20secrets=20=E2=86=92=20vars=20=E2=86=92=20?= =?UTF-8?q?=E8=A9=A2=E5=95=8F=E5=8A=A0=E5=85=A5=20inputs=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- skills/code-action-docker/SKILL.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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 主程式。 From e76775e703aae85b97e6ee927de73f80aef0d250 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 15 Jul 2026 18:53:58 +0800 Subject: [PATCH 2/3] =?UTF-8?q?docs(README):=20=E5=90=8C=E6=AD=A5=20code-a?= =?UTF-8?q?ction-docker=20=E5=8F=83=E6=95=B8=E4=BE=86=E6=BA=90=E5=84=AA?= =?UTF-8?q?=E5=85=88=E5=BA=8F=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b5287d..116ebf5 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ rm -rf ~/.config/opencode/skills/{code-review,code-review-archive,code-review-re ### `code-action-docker` -以**互動問答從零打造** Gitea/GitHub「Docker 容器 action」(Node 主程式),再串接文件化流程。五階段:(1) **詢問 action 名稱**(用於 `action.yml` 的 `name`);(2) **詢問輸入與輸出參數**及其 description(盡量繁體中文、無亂碼;輸入含 required/default,實作對應 `INPUT_*` 環境變數與 `$GITHUB_OUTPUT`);(3) **詢問執行此流程的目標**,追問到可實作為止,整理**濃縮成一句話**(用於 `action.yml` 的 `description`,盡量繁體中文、無亂碼);(4) **依標準實作目標**——盡量以 **Node.js** 開發、程式檔**一律放 `src/`**(入口 `src/index.js`、共用 `src/logger.js`),**盡量詳細輸出訊息**且格式統一為 `[yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息`(Asia/Taipei;無階段則移除該 `[]`;等級 `INF`/`WRN`/`ERR`/`TRC`/`DBG`;一行一則),並產生 `action.yml`、啟動前先輸出名稱/用途/更新時間的 `entrypoint.sh`、**使用最新 node 版本**的多階段建置 `Dockerfile`(預設 build 基底 `node:latest`、runtime `node:slim`);(5) **檢查是否有 doc-funcs 技能**:有則對整個專案**完整執行 `/jsc:doc-funcs`**(function 文件、`entrypoint.sh`/`Dockerfile` 逐行註解、重建 README),沒有則回報後結束。 +以**互動問答從零打造** Gitea/GitHub「Docker 容器 action」(Node 主程式),再串接文件化流程。五階段:(1) **詢問 action 名稱**(用於 `action.yml` 的 `name`);(2) **詢問輸入與輸出參數**及其 description(盡量繁體中文、無亂碼;輸入含 required/default,實作對應 `INPUT_*` 環境變數與 `$GITHUB_OUTPUT`);(3) **詢問執行此流程的目標**,追問到可實作為止,整理**濃縮成一句話**(用於 `action.yml` 的 `description`,盡量繁體中文、無亂碼);(4) **依標準實作目標**——開發中需要新參數時**依序找 `${{ gitea.* }}` → `${{ secrets.* }}` → `${{ vars.* }}`,都沒有才詢問使用者是否加入 `inputs`**;盡量以 **Node.js** 開發、程式檔**一律放 `src/`**(入口 `src/index.js`、共用 `src/logger.js`),**盡量詳細輸出訊息**且格式統一為 `[yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息`(Asia/Taipei;無階段則移除該 `[]`;等級 `INF`/`WRN`/`ERR`/`TRC`/`DBG`;一行一則),並產生 `action.yml`、啟動前先輸出名稱/用途/更新時間的 `entrypoint.sh`、**使用最新 node 版本**的多階段建置 `Dockerfile`(預設 build 基底 `node:latest`、runtime `node:slim`);(5) **檢查是否有 doc-funcs 技能**:有則對整個專案**完整執行 `/jsc:doc-funcs`**(function 文件、`entrypoint.sh`/`Dockerfile` 逐行註解、重建 README),沒有則回報後結束。 參數:`[--action-dir ] [--node-version ]`(根目錄預設目前工作目錄;node 版本預設最新;名稱/輸入輸出/目標以問答取得,呼叫時已口述者不再重問)。 From a0b1a37ff918f1d52107656a3be87f3985ec572f Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 15 Jul 2026 18:53:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?chore(plugin=20=E7=89=88=E6=9C=AC):=20?= =?UTF-8?q?=E4=B8=89=E5=AE=B6=20manifest=20=E5=8D=87=E7=89=88=200.0.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- plugin.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 6bf93cc..39f2e1a 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 程式碼工作流 plugin(Claude Code / Codex / Antigravity / OpenCode),提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程;於 Claude Code 以 /jsc: 前綴呼叫。", "skills": "./skills", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 05a4486..3a60f73 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 程式碼工作流 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程。", "skills": "./skills" } diff --git a/plugin.json b/plugin.json index c7c4ae4..7b72e26 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.2", + "version": "0.0.3", "description": "JSC 程式碼工作流 plugin,提供 RPG 攻防式 git diff review、裁決結果歸檔、Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程;於 Antigravity 以 /jsc: 前綴呼叫。", "skills": "./skills/" }