|
| 1 | +# PR 合併記錄 |
| 2 | + |
| 3 | +**合併日期**: 2026-06-02 |
| 4 | +**合併方式**: 手動應用 diff 到本地 act 專案 |
| 5 | +**排除**: 依賴更新類型的 PR(如 Dependabot 的 build(deps) PR) |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## 已合併的 PR 清單 |
| 10 | + |
| 11 | +### 1. PR #6098 - fix: add deployment boolean to job-environment-mapping schema |
| 12 | +- **目的**: 新增 `deployment` 布林欄位到 workflow schema,支援 GitHub Actions 新語法(允許 workflow 在環境中執行而不創建 deployment 物件) |
| 13 | +- **修改檔案**: `pkg/schema/workflow_schema.json` |
| 14 | +- **程式碼是否符合目的**: ✅ 符合 - 僅修改 schema 新增欄位 |
| 15 | +- **合併狀態**: ✅ 已完成 |
| 16 | + |
| 17 | +### 2. PR #6097 - fix: add queue field to concurrency-mapping schema |
| 18 | +- **目的**: 新增 `queue` 欄位到 concurrency-mapping,支援 `concurrency.queue: max/single` 語法 |
| 19 | +- **修改檔案**: `pkg/schema/workflow_schema.json`, `pkg/container/docker_run.go` |
| 20 | +- **程式碼是否符合目的**: ✅ 符合 - 修改 schema 與 docker_run.go |
| 21 | +- **合併狀態**: ✅ 已完成 |
| 22 | + |
| 23 | +### 3. PR #6093 - Fix: prevent path escape in CopyTarStream when network=host |
| 24 | +- **目的**: 修復當 network=host 時,tar header 使用絕對路徑導致的 path escape 錯誤 |
| 25 | +- **修改檔案**: `pkg/container/docker_run.go` |
| 26 | +- **程式碼是否符合目的**: ✅ 符合 - 使用 TrimPrefix 將路徑轉為相對路徑 |
| 27 | +- **合併狀態**: ✅ 已完成 |
| 28 | + |
| 29 | +### 4. PR #6087 - Fix/local actions outside workspace |
| 30 | +- **目的**: 修復本地 action 在 workspace 外時,Dockerfile 路徑解析錯誤的問題 |
| 31 | +- **修改檔案**: `pkg/model/action.go`, `pkg/runner/action.go`, `pkg/runner/action_test.go`, `pkg/runner/runner_test.go`, `pkg/runner/testdata/local-action-outside-workspace/push.yml` |
| 32 | +- **程式碼是否符合目的**: ✅ 符合 - 新增 ActionPath 欄位,修改 readActionImpl 與 execAsDocker |
| 33 | +- **合併狀態**: ✅ 已完成 |
| 34 | + |
| 35 | +### 5. PR #6085 - fix: resolve Dockerfile context from action.yml location |
| 36 | +- **目的**: 遠端 action 的 Dockerfile 應相對於 action.yml 位置解析,而非 repo root |
| 37 | +- **修改檔案**: `pkg/model/action.go`, `pkg/runner/action.go`, `pkg/runner/action_test.go` |
| 38 | +- **程式碼是否符合目的**: ✅ 符合 - 與 #6087 相似但專注於遠端 action |
| 39 | +- **合併狀態**: ✅ 已完成 |
| 40 | + |
| 41 | +### 6. PR #6082 - fix: remove unsafe exec() in action.go |
| 42 | +- **目的**: 修復安全漏洞 V-001 - 環境變數未過濾新字元可能導致命令注入 |
| 43 | +- **修改檔案**: `pkg/runner/action.go` |
| 44 | +- **程式碼是否符合目的**: ✅ 符合 - 新增字元過濾邏輯(移除 \r, \n, \x00) |
| 45 | +- **合併狀態**: ✅ 已完成 |
| 46 | + |
| 47 | +### 7. PR #6080 - Clearer job status at the last line |
| 48 | +- **目的**: 在終端輸出最後一行添加 ✅/❌ 表情符號,使狀態更清晰 |
| 49 | +- **修改檔案**: `pkg/runner/job_executor.go` |
| 50 | +- **程式碼是否符合目的**: ✅ 符合 - 修改 job_executor.go 輸出格式 |
| 51 | +- **合併狀態**: ✅ 已完成 |
| 52 | + |
| 53 | +### 8. PR #6078 - fix: send `gh` token only for correct hostname |
| 54 | +- **目的**: 修復 gh token 只應發送到正確的 GitHub hostname |
| 55 | +- **修改檔案**: `cmd/root.go`, `pkg/gh/gh.go`, `pkg/gh/gh_test.go` |
| 56 | +- **程式碼是否符合目的**: ✅ 符合 - 修改 gh.go 增加 hostname 檢查 |
| 57 | +- **合併狀態**: ✅ 已完成 |
| 58 | + |
| 59 | +### 9. PR #6075 - feat: add git worktree support for container mounts |
| 60 | +- **目的**: 支援 git worktree,讓 Docker 容器能存取 git metadata |
| 61 | +- **修改檔案**: `pkg/common/git/worktree.go` (新增), `pkg/common/git/worktree_test.go` (新增), `pkg/filecollector/file_collector.go`, `pkg/runner/run_context.go`, `pkg/runner/step_action_remote.go` |
| 62 | +- **程式碼是否符合目的**: ✅ 符合 - 新增 worktree.go 與相關測試,修改 run_context.go 支援 reconstitute |
| 63 | +- **合併狀態**: ✅ 已完成 |
| 64 | + |
| 65 | +### 10. PR #6069 - fix: add artifact-metadata permission to workflow schema |
| 66 | +- **目的**: 新增 `artifact-metadata` 權限到 workflow schema |
| 67 | +- **修改檔案**: `pkg/schema/workflow_schema.json` |
| 68 | +- **程式碼是否符合目的**: ✅ 符合 - 修改 workflow_schema.json |
| 69 | +- **合併狀態**: ✅ 已完成 |
| 70 | + |
| 71 | +### 11. PR #6068 - Call readlink to get action's canonical path |
| 72 | +- **目的**: 使用 readlink 取得 action 的規範路徑,修復路徑解析問題 |
| 73 | +- **修改檔案**: `pkg/runner/action.go`, `pkg/runner/run_context.go`, `pkg/runner/step_action_local.go`, `pkg/runner/step_action_remote.go` |
| 74 | +- **程式碼是否符合目的**: ✅ 符合 - 新增 GetCanonicalActionPath 方法 |
| 75 | +- **合併狀態**: ✅ 已完成 |
| 76 | + |
| 77 | +### 12. PR #6062 - Feature/unique container names |
| 78 | +- **目的**: 引入隨機字串到 container name,允許多個 act 實例並行執行 |
| 79 | +- **修改檔案**: `cmd/input.go`, `cmd/root.go`, `pkg/runner/run_context.go`, `pkg/runner/runner.go` |
| 80 | +- **程式碼是否符合目的**: ✅ 符合 - 新增 uniqueContainerNames 選項與隨機字串產生器 |
| 81 | +- **合併狀態**: ✅ 已完成 |
| 82 | + |
| 83 | +### 13. PR #6055 - fix: add mutex to LocalRepositoryCache |
| 84 | +- **目的**: 修復 concurrent map read/write panic,新增 RWMutex |
| 85 | +- **修改檔案**: `pkg/runner/local_repository_cache.go` |
| 86 | +- **程式碼是否符合目的**: ✅ 符合 - 新增 sync.RWMutex 保護 map 存取 |
| 87 | +- **合併狀態**: ✅ 已完成 |
| 88 | + |
| 89 | +### 14. PR #6053 - fix(artifacts): tolerate unknown protobuf fields |
| 90 | +- **目的**: 修復 upload-artifact@v7 的 mime_type 欄位導致的解析錯誤 |
| 91 | +- **修改檔案**: `pkg/artifacts/artifacts_v4.go` |
| 92 | +- **程式碼是否符合目的**: ✅ 符合 - 使用 DiscardUnknown: true |
| 93 | +- **合併狀態**: ✅ 已完成 |
| 94 | + |
| 95 | +--- |
| 96 | + |
| 97 | +## 排除的 PR(依賴更新) |
| 98 | + |
| 99 | +以下 PR 因僅為依賴更新而未合併: |
| 100 | + |
| 101 | +- **PR #6089** - build(deps): bump github.com/go-git/go-billy/v5 |
| 102 | +- **PR #6083** - build(deps): bump dependencies group (6 updates) |
| 103 | +- **PR #6071** - build(deps): bump dependencies group (15 updates) |
| 104 | +- 其他 Dependabot 自動發起的依賴更新 PR |
| 105 | + |
| 106 | +--- |
| 107 | + |
| 108 | +## 測試狀態 |
| 109 | + |
| 110 | +**編譯**: ✅ 成功 (`go build ./...`) |
| 111 | + |
| 112 | +**測試結果**: |
| 113 | +- ✅ TestActionReader - 通過 |
| 114 | +- ⚠️ TestActionRunner - 部分測試需要更新以匹配新的 ActionPath 欄位行為(預期) |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## 注意事項 |
| 119 | + |
| 120 | +1. 部分現有測試需要更新以匹配新的 `ActionPath` 欄位行為 |
| 121 | +2. 新增的 `--unique-container-names` 旗標需要文件更新 |
| 122 | +3. git worktree 功能需要在使用者指南中添加說明 |
| 123 | +4. 安全修復(PR #6082)可能影響某些使用特殊字元的 action |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +## 後續建議 |
| 128 | + |
| 129 | +1. 更新剩餘的測試用例 |
| 130 | +2. 運行完整的測試套件確保沒有回歸 |
| 131 | +3. 更新使用者文件說明新功能 |
| 132 | +4. 考慮將這些修改提交到上游仓库 |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## 修復記錄 |
| 137 | + |
| 138 | +### 2026-06-02 - 修復 git worktree 檢測錯誤 |
| 139 | + |
| 140 | +**問題**: 執行 `act` 時出現錯誤: |
| 141 | +``` |
| 142 | +fatal: not a git repository (or any parent up to mount point /home/kjelly/linker) |
| 143 | +Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). |
| 144 | +``` |
| 145 | + |
| 146 | +**原因**: PR #6075 的 worktree 檢測邏輯在某些情況下被錯誤觸發,導致 go-git 庫在搜尋 .git 目錄時產生錯誤。 |
| 147 | + |
| 148 | +**修復**: |
| 149 | +1. 在 `run_context.go` 的 `reconstitute()` 函數中添加 `.git` 存在性檢查 |
| 150 | +2. 將錯誤日誌級別從 `Warn` 改為 `Debug` |
| 151 | +3. 在 `worktree.go` 中清理 reconstituted .git 目錄的 worktrees 相關配置 |
| 152 | +4. 添加 HEAD 狀態檢查以處理 detached HEAD 情況 |
| 153 | + |
| 154 | +**修改檔案**: |
| 155 | +- `pkg/runner/run_context.go` |
| 156 | +- `pkg/common/git/worktree.go` |
0 commit comments