Refactor Large Go File: pkg/cli/trial_command.go
Overview
The file pkg/cli/trial_command.go has grown to 1,805 lines, making it difficult to maintain and test. This task involves refactoring it into smaller, focused files with improved test coverage.
Current State
- File:
pkg/cli/trial_command.go
- Size: 1,805 lines
- Test Coverage: 605 LOC tests → ratio ≈ 0.34:1 (34%)
- Complexity:
RunWorkflowTrials interleaves CLI orchestration, repository lifecycle management, secret provisioning, artifact downloads, and filesystem mutations inside one file (e.g., RunWorkflowTrials at pkg/cli/trial_command.go:169, ensureTrialRepository at pkg/cli/trial_command.go:760, determineAndAddEngineSecret at pkg/cli/trial_command.go:1163, downloadAllArtifacts at pkg/cli/trial_command.go:1483). These concerns have separate dependencies and would benefit from isolation.
Refactoring Strategy
Proposed File Splits
-
trial_runner.go
- Functions:
NewTrialCommand, RunWorkflowTrials, showTrialConfirmation, triggerWorkflowRun, parseIssueSpec, saveTrialResult, copyTrialResultsToHostRepo, sanitizeRepoSlugForFilename
- Responsibility: CLI wiring plus orchestration of workflow execution, confirmation prompts, trigger contexts, and result persistence
- Estimated LOC: 600
-
trial_repository.go
- Functions:
ensureTrialRepository, cleanupTrialRepository, cloneTrialHostRepository, installWorkflowInTrialMode, installLocalWorkflowInTrialMode, modifyWorkflowForTrialMode, commitAndPushWorkflow, cloneRepoContentsIntoHost
- Responsibility: Manage temporary repo lifecycle, workflow installation, cloning, and commit/push steps
- Estimated LOC: 650
-
trial_support.go
- Functions:
TrialSecretTracker, NewTrialSecretTracker, determineAndAddEngineSecret, addEngineSecret, addGitHubTokenSecret, cleanupTrialSecrets, TrialArtifacts, downloadAllArtifacts, parseJSONArtifact, readTextArtifact
- Responsibility: Secret tracking/provisioning plus artifact download/serialization utilities that can be reused by the runner after refactor
- Estimated LOC: 450
Shared Utilities
Extract common filesystem helper logic (temporary tarball handling, filename sanitization) into trial_io.go so both repository and runner modules can reuse them without cyclical imports.
Interface Abstractions
- Introduce a
TrialRepoManager interface (methods: Ensure, CloneHost, InstallWorkflow, Cleanup) that can be mocked in tests.
- Introduce a
SecretProvisioner interface encapsulating Add, Cleanup, and DetermineRequiredSecrets behaviors for different engines.
Test Coverage Plan
-
trial_runner_test.go
- Test cases: single vs multi-workflow orchestration, CLI flag permutations (logical vs clone repos), retry/repeat handling, trigger-context parsing, result aggregation persistence
- Target coverage: >80%
-
trial_repository_test.go
- Test cases: repo creation/deletion flows, local vs remote host repo paths, workflow modifications (
modifyWorkflowForTrialMode), commit/push error handling, clone-repo content syncing
- Target coverage: >80%
-
trial_support_test.go
- Test cases: secret tracker bookkeeping, engine-specific secret branching, artifact download/parsing happy-path and failure modes, filename sanitization edge cases
- Target coverage: >80%
Implementation Guidelines
- Preserve Behavior: Ensure all existing functionality works identically
- Maintain Exports: Keep public API unchanged (exported functions/types)
- Add Tests First: Write tests for each new file before refactoring
- Incremental Changes: Split one module at a time
- Run Tests Frequently: Verify
make test-unit passes after each split
- Update Imports: Ensure all import paths are correct
- Document Changes: Add comments explaining module boundaries
Acceptance Criteria
Additional Context
- Repository Guidelines: Follow patterns in
.github/instructions/developer.instructions.md
- Code Organization: Prefer many small files grouped by functionality
- Testing: Match existing test patterns in
pkg/cli/*_test.go
Priority: Medium
Effort: Medium
Expected Impact: Improved maintainability, easier testing, reduced complexity
AI generated by Daily File Diet
Refactor Large Go File: pkg/cli/trial_command.go
Overview
The file
pkg/cli/trial_command.gohas grown to 1,805 lines, making it difficult to maintain and test. This task involves refactoring it into smaller, focused files with improved test coverage.Current State
pkg/cli/trial_command.goRunWorkflowTrialsinterleaves CLI orchestration, repository lifecycle management, secret provisioning, artifact downloads, and filesystem mutations inside one file (e.g.,RunWorkflowTrialsatpkg/cli/trial_command.go:169,ensureTrialRepositoryatpkg/cli/trial_command.go:760,determineAndAddEngineSecretatpkg/cli/trial_command.go:1163,downloadAllArtifactsatpkg/cli/trial_command.go:1483). These concerns have separate dependencies and would benefit from isolation.Refactoring Strategy
Proposed File Splits
trial_runner.goNewTrialCommand,RunWorkflowTrials,showTrialConfirmation,triggerWorkflowRun,parseIssueSpec,saveTrialResult,copyTrialResultsToHostRepo,sanitizeRepoSlugForFilenametrial_repository.goensureTrialRepository,cleanupTrialRepository,cloneTrialHostRepository,installWorkflowInTrialMode,installLocalWorkflowInTrialMode,modifyWorkflowForTrialMode,commitAndPushWorkflow,cloneRepoContentsIntoHosttrial_support.goTrialSecretTracker,NewTrialSecretTracker,determineAndAddEngineSecret,addEngineSecret,addGitHubTokenSecret,cleanupTrialSecrets,TrialArtifacts,downloadAllArtifacts,parseJSONArtifact,readTextArtifactShared Utilities
Extract common filesystem helper logic (temporary tarball handling, filename sanitization) into
trial_io.goso both repository and runner modules can reuse them without cyclical imports.Interface Abstractions
TrialRepoManagerinterface (methods:Ensure,CloneHost,InstallWorkflow,Cleanup) that can be mocked in tests.SecretProvisionerinterface encapsulatingAdd,Cleanup, andDetermineRequiredSecretsbehaviors for different engines.Test Coverage Plan
trial_runner_test.gotrial_repository_test.gomodifyWorkflowForTrialMode), commit/push error handling, clone-repo content syncingtrial_support_test.goImplementation Guidelines
make test-unitpasses after each splitAcceptance Criteria
make test-unit)make lint)make build)Additional Context
.github/instructions/developer.instructions.mdpkg/cli/*_test.goPriority: Medium
Effort: Medium
Expected Impact: Improved maintainability, easier testing, reduced complexity