【架构优化】拆分 runner.collectTaskOutputs 的输出文件读取、补丁目录推导与补丁采集
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 22/100
Piste de recherche
Work is confined to internal/runner/outputs.go, where collectTaskOutputs mixes file reading, patch-directory derivation and patch collection. The payload names no entry point beyond that function. Done means three helpers are extracted with unchanged behaviour, the existing TestCollectTaskOutputsReportsOnlyRegularFilesInsideWorkspace still passes, and new tests cover the extracted pieces. However, a linked pull request (#432) is already open, so the work is likely claimed.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
现状问题
internal/runner/outputs.go 的 collectTaskOutputs 约 50 行,在一个函数里串行做了三件互不相关的事:
- 逐个读取
OutputFiles(路径安全校验、Lstat 只认普通文件、超过maxArtifactUploadBytes记入TooLarge、读入Files); - 推导需要采集补丁清单的仓库目录(无仓库时为工作区根
"",否则为各仓库的safeRunnerRepoDir(WorkspaceDir)),并逐个调用gitwork.PatchInventory填Patches; - 检测前端工作区事实
Facts。
其中「仓库目录推导」是纯逻辑却埋在 I/O 循环里,无法单独测试;现有测试也只覆盖了第 1 步。
重构方案
仅在 internal/runner/outputs.go 内拆函数,不改逻辑:
readOutputFiles(workspace, rels) (files map[string]string, tooLarge []string):原第 1 段循环原样搬入;patchInventoryDirs(inv) []string:原目录推导原样搬入;collectPatchInventories(workspace, dirs) map[string]string:原补丁采集循环原样搬入;collectTaskOutputs只负责编排:恢复缺失输出 → 读文件 → 采补丁 → 采事实。
nil map / nil slice 的语义保持不变(没有文件时 Files/Patches 仍为 nil,JSON omitempty 输出不变)。
影响范围
仅 internal/runner/outputs.go(及新增测试文件),collectTaskOutputs 签名与三个调用方(daemon.go)不变,对外接口与行为不变。
验证方式
- 新增测试覆盖
patchInventoryDirs(无仓库 / 多仓库)、collectPatchInventories(真实 git 仓库有改动 / 无改动 / 非仓库目录)与readOutputFiles的 nil 语义; - 原有
TestCollectTaskOutputsReportsOnlyRegularFilesInsideWorkspace不改动且通过; gofmt、go vet ./internal/runner/、go test ./internal/runner/。
- Langage dominant
- Go
- Étoiles
- 141
- Forks
- 28
- Merge moyen
- 1 j 15 h
- PR mergées (30 j)
- 113
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de Tencent/LoopForge
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: 官方镜像未安装 wecom-cli,企业微信通知报「通知服务未安装 wecom-cli」Peut-être pris @newexploreor l’a pris il y a 1 jour. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Tencent/LoopForge#156 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
【架构优化】合并 gitwork/workbranch.go 中 push/pull 重复的默认提交身份注入为 withFallbackIdentityPeut-être pris @fx-kurumi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 40/100
Les mainteneurs répondent en général sous 1 jour
-
【架构优化】从 runtime.installNPMCLI 中拆出 npm 参数拼装 npmCLIInstallArgs 与安装结果启用 activateNPMStagePeut-être pris @fx-kurumi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 30/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de Tencent/LoopForge
Issues similaires
-
team:library-maintainers
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
padok-team/burrito#1208 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
bazel-contrib/rules_go#4784 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Уязвимые компоненты в GoOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
POSIdev-community/aictl#40 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 62/100
prime-radiant-inc/evener#6306 ·
Les mainteneurs répondent en général sous 1 jour