Skip to content

feat(go-pr-validation): expose golangci_lint_args and app_name_prefix (pass-through to go-pr-analysis) #427

Description

@bedatty

Request Type

Enhancement to an existing workflow.

Affected Workflow

.github/workflows/go-pr-validation.yml

Problem / Motivation

The consolidated go-pr-validation.yml runs Go analysis by calling the reusable go-pr-analysis.yml. However, it only forwards a subset of go-pr-analysis's inputs. Two inputs that callers actively rely on are not exposed by go-pr-validation and therefore cannot be set when adopting the consolidated workflow:

  • golangci_lint_args — e.g. "--timeout=5m". Without it, large Go modules hit the default golangci-lint timeout and lint fails in CI.
  • app_name_prefix — e.g. "plugin-fees". Used to namespace coverage/build artifacts so they don't collide and are identifiable.

These are not edge cases: across our portfolio, ~13 active service repos set app_name_prefix and ~11 set golangci_lint_args: "--timeout=5m" on their develop branches (currently via the separate go-pr-analysis.yml at v1.33.0). Migrating them to the consolidated go-pr-validation.yml (the current go-boilerplate-ddd main shape) would silently drop both, regressing lint timeouts and artifact naming.

Reference — in go-pr-validation.yml@v1.33.1, the analysis job forwards only these inputs (lines ~206-217), omitting the two above:

  uses: ./.github/workflows/go-pr-analysis.yml
  with:
    runner_type: ${{ inputs.runner_type }}
    go_version: ${{ inputs.go_version }}
    golangci_lint_version: ${{ inputs.golangci_lint_version }}
    coverage_threshold: ${{ inputs.coverage_threshold }}
    fail_on_coverage_threshold: ${{ inputs.fail_on_coverage_threshold }}
    go_private_modules: ${{ inputs.go_private_modules }}
    enable_integration_tests: ${{ inputs.enable_integration_tests }}
    system_packages: ${{ inputs.system_packages }}
    shared_paths: ${{ inputs.shared_paths }}
  secrets: inherit

go-pr-analysis.yml already accepts both golangci_lint_args and app_name_prefix, so this is purely a pass-through gap in go-pr-validation.yml.

Proposed Solution

Add two optional inputs to go-pr-validation.yml and forward them to the go-pr-analysis.yml call:

# in on.workflow_call.inputs, under the "Go analysis" section:
      golangci_lint_args:
        description: 'Extra arguments passed to golangci-lint (e.g. --timeout=5m)'
        type: string
        default: ''
      app_name_prefix:
        description: 'Prefix used to namespace coverage/build artifacts'
        type: string
        default: ''
# in the go-analysis job's `with:` block:
      golangci_lint_args: ${{ inputs.golangci_lint_args }}
      app_name_prefix: ${{ inputs.app_name_prefix }}

Empty-string defaults preserve current behavior for existing callers.

Alternatives Considered

  • Keep the separate-structure workflows (go-pr-analysis.yml + pr-security-scan.yml + ...) instead of consolidating — preserves the inputs but prevents adopting the consolidated boilerplate shape org-wide.
  • Drop the customizations when consolidating — rejected: removing --timeout=5m causes real lint failures on larger modules.

Example Usage

jobs:
  validate:
    uses: LerianStudio/github-actions-shared-workflows/.github/workflows/go-pr-validation.yml@vX.Y.Z
    with:
      go_version: "1.26.4"
      golangci_lint_version: "v2.11.3"
      golangci_lint_args: "--timeout=5m"
      app_name_prefix: "plugin-fees"
      coverage_threshold: 85
      fail_on_coverage_threshold: true
      go_private_modules: "github.com/LerianStudio/*"
      ignore_file: ".trivyignore.yaml"
    secrets: inherit

Would This Be a Breaking Change?

No. Both inputs are optional with empty-string defaults; existing callers are unaffected.

Additional Context

This unblocks migrating the active plugin/service repos from the separate-structure (v1.33.0) to the consolidated go-pr-validation/go-release shape used by go-boilerplate-ddd main, without regressing lint timeouts or artifact naming.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or improvement requestgolangChanges to Go-related workflowsworkflowChanges to one or more reusable workflow files

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions