Skip to content

[file-diet] Refactor: Split compiler_activation_job_builder.go (1135 lines) into focused modules #44730

Description

@github-actions

Overview

The file pkg/workflow/compiler_activation_job_builder.go has grown to 1135 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/workflow/compiler_activation_job_builder.go
  • Size: 1135 lines
  • Test Coverage: No test file found — compiler_activation_job_builder_test.go does not exist
  • Complexity: High — the file mixes concerns across context initialization, permissions building, step generation, daily AIC guardrail logic, and job condition configuration
Full File Analysis

Symbols

  • 1 struct: activationJobBuildContext (build-state carrier)
  • 12 package-level functions including resolveActivationEngineID, newActivationBuildContext, cacheActivationPreStepPermissions, buildRuntimeFeaturesSummaryStep, buildPolicyStrictEnforcementStep, buildDailyAICActivationJobEnv, etc.
  • ~20 (*Compiler) methods covering setup, permissions, steps, guardrails, needs/condition, artifact upload, environment
  • 1 constant: dailyAICAppTokenStepID

Functional Domains

Domain Approx. LOC
Context init + engine setup ~150
Daily AIC guardrail (cache restore, token, enforcement) ~200
Repository/output steps (checkout, lock, comment, text output) ~200
Permissions building + app-token minting ~220
Env assembly + command/label outputs ~150
Needs/condition wiring + artifact upload ~200

Refactoring Strategy

Proposed File Splits

  1. compiler_activation_context.go

    • Struct: activationJobBuildContext; functions: newActivationBuildContext, resolveActivationEngineID, cacheActivationPreStepPermissions; methods: (*Compiler).newActivationJobBuildContext, addActivationSetupAndWorkflowCallSteps, addActivationWorkflowCallResolutionSteps, addActivationEngineOutputs
    • Responsibility: Context initialization and engine resolution
    • Estimated LOC: ~180
  2. compiler_activation_permissions.go

    • Functions: buildActivationAppTokenPermissions, activationJobNeedsAppToken; methods: buildActivationPermissions, buildActivationBasePermissions, addCentralizedCommandActivationPermissions, addWorkflowCallActivationPermissions, addActivationLabelPermissions, addActivationScriptPermissions, maybeAddActivationAppTokenMintStep
    • Responsibility: All permission scope computation and app-token minting
    • Estimated LOC: ~220
  3. compiler_activation_daily_aic.go

    • Constant: dailyAICAppTokenStepID; functions: buildDailyAICActivationJobEnv; methods: buildDailyAICAppTokenMintStep, resolveDailyAICToken, buildActivationDailyAICGuardrailStep
    • Responsibility: Daily AI Credit guardrail — cache restore, artifact fallback, token resolution, enforcement step
    • Estimated LOC: ~200
  4. compiler_activation_steps.go

    • Functions: buildRuntimeFeaturesSummaryStep, buildPolicyStrictEnforcementStep, buildActivationTextOutputEnvLines, addActivationSafeOutputMessagesEnv, ensureActivationCommentOutputs; methods: addActivationRepositoryAndOutputSteps, addActivationCheckoutAndBaseRestoreStep, addActivationLockFileStep, addActivationVersionCheckStep, addActivationSkillInstallSteps, addActivationTextOutputStep, computeActivationSanitizationDomains, addActivationStatusCommentStep, addActivationIssueLockStep, addActivationReactionStep, addActivationSecretValidationStep, addActivationOAuthTokenCheckStep, addActivationCrossRepoGuidanceStep
    • Responsibility: All step builders (checkout, text output, status comments, reactions, validation, skills)
    • Estimated LOC: ~350
  5. compiler_activation_outputs.go

    • Methods: addActivationCommandAndLabelOutputs, addActivationFeedbackAndValidationSteps, addActivationArtifactUploadStep, configureActivationNeedsAndCondition, buildActivationEnvironment
    • Responsibility: Job outputs, condition/needs wiring, environment assembly, artifact upload
    • Estimated LOC: ~200

Shared Utilities

  • Keep activationJobBuildContext in compiler_activation_context.go — all files share it
  • buildTemplatableIntEnvVar is already a shared helper; leave it in its existing location

Interface Abstractions

  • No new interfaces needed; the existing (*Compiler) receiver pattern is sufficient
Test Coverage Plan

Add unit tests alongside each new file:

  1. compiler_activation_context_test.go

    • Test resolveActivationEngineID with empty and non-empty engine IDs
    • Test newActivationBuildContext field initialization
    • Test (*Compiler).newActivationJobBuildContext error path (missing setup action ref)
    • Target coverage: >80%
  2. compiler_activation_permissions_test.go

    • Test activationJobNeedsAppToken for each trigger type
    • Test buildActivationBasePermissions baseline scopes
    • Test addActivationLabelPermissions with and without label commands
    • Test addActivationScriptPermissions error path (write gh CLI commands)
    • Target coverage: >80%
  3. compiler_activation_daily_aic_test.go

    • Test resolveDailyAICToken with and without max-daily-ai-credits configured
    • Test guardrail steps absent when max-daily-ai-credits is not set
    • Test buildActivationDailyAICGuardrailStep step count and step IDs
    • Target coverage: >80%
  4. compiler_activation_steps_test.go

    • Test buildRuntimeFeaturesSummaryStep output
    • Test buildPolicyStrictEnforcementStep output
    • Test addActivationStatusCommentStep with issues/PRs/discussions combinations
    • Target coverage: >80%
  5. compiler_activation_outputs_test.go

    • Test configureActivationNeedsAndCondition with/without pre-activation job
    • Test buildActivationEnvironment key env vars present
    • Test addActivationArtifactUploadStep path list
    • Target coverage: >80%

Implementation Guidelines

  1. Preserve Behavior: Ensure all existing functionality works identically
  2. Maintain Exports: Keep public API unchanged (exported functions/types)
  3. Add Tests First: Write tests for each new file before refactoring
  4. Incremental Changes: Split one module at a time
  5. Run Tests Frequently: Verify make test-unit passes after each split
  6. Update Imports: Ensure all import paths are correct
  7. Document Changes: Add comments explaining module boundaries

Acceptance Criteria

  • Original file is split into 5 focused files
  • Each new file is under 500 lines
  • All tests pass (make test-unit)
  • Test coverage is ≥80% for new files
  • No breaking changes to public API
  • Code passes linting (make lint)
  • Build succeeds (make build)
Additional Context
  • Repository Guidelines: Follow patterns in .github/agents/developer.instructions.agent.md
  • Code Organization: Prefer many small files grouped by functionality
  • Testing: Match existing test patterns in pkg/workflow/*_test.go

Priority: Medium
Effort: Medium — well-defined boundaries, no logic changes required, but zero existing tests means coverage must be written from scratch
Expected Impact: Improved maintainability, easier testing, reduced cognitive load when working on activation job compilation

Generated by 🧹 Daily File Diet · 53.4 AIC · ⌖ 12.7 AIC · ⊞ 6.8K ·

  • expires on Jul 12, 2026, 5:26 AM UTC-08:00

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions