Skip to content

[duplicate-code] Close entity safe-output jobs duplicate parsing/build logic #5694

@github-actions

Description

@github-actions

🔍 Duplicate Code Detected: Close entity safe-output parsing/builders

Analysis of commit 1733516

Assignee: @copilot

Summary

The safe-output handling for closing issues, pull requests, and discussions repeats the same config parsing and job construction logic across three files. Each implementation differs only by entity-specific strings and permissions, leading to duplicated validation, env var setup, outputs, and conditional checks.

Duplication Details

Pattern: Close entity safe-output jobs

  • Severity: Medium
  • Occurrences: 3
  • Locations:
    • pkg/workflow/close_issue.go:18-101
    • pkg/workflow/close_pull_request.go:18-101
    • pkg/workflow/close_discussion.go:18-107
  • Code Sample:
if data.SafeOutputs == nil || data.SafeOutputs.CloseIssues == nil {
    return nil, fmt.Errorf("safe-outputs.close-issue configuration is required")
}
cfg := data.SafeOutputs.CloseIssues
closeJobConfig := CloseJobConfig{SafeOutputTargetConfig: cfg.SafeOutputTargetConfig, SafeOutputFilterConfig: cfg.SafeOutputFilterConfig}
customEnvVars := BuildCloseJobEnvVars("GH_AW_CLOSE_ISSUE", closeJobConfig)
customEnvVars = append(customEnvVars, c.buildStandardSafeOutputEnvVars(data, cfg.TargetRepoSlug)...)
outputs := map[string]string{...}
jobCondition := BuildSafeOutputType("close_issue")
if cfg.Target == "" || cfg.Target == "triggering" {
    eventCondition := buildOr(...)
    jobCondition = buildAnd(jobCondition, eventCondition)
}
return c.buildSafeOutputJob(...)

Same structure appears in the PR and discussion variants with only identifiers/permissions changed.

Impact Analysis

  • Maintainability: Three separate copies increase effort to update validation, conditions, or env vars consistently.
  • Bug Risk: Fixes (e.g., target handling, permission tweaks) may be applied to one entity but missed in the others, causing inconsistent behavior.
  • Code Bloat: ~50+ lines repeated across three files.

Refactoring Recommendations

  1. Extract a shared helper for close-entity safe-output jobs
    • Move common parsing/build logic into a single function (e.g., buildCloseEntityJob(entityType, cfg, permissions, script, outputs, eventAccessors)), and call it from issue/PR/discussion wrappers.
    • Estimated effort: Medium (1-2h) to centralize logic and adjust call sites.
    • Benefits: Single source for validation/conditions/env vars; reduces risk of divergence.
  2. Deduplicate parse helpers
    • Introduce a shared parser for close-issue/close-pull-request that reuses ParseCloseJobConfig and base config defaults, parameterized by defaults and required fields.
    • Estimated effort: Low (<1h) if combined with the builder refactor.

Implementation Checklist

  • Review duplication findings
  • Prioritize refactoring tasks
  • Create refactoring plan
  • Implement changes
  • Update tests
  • Verify no functionality broken

Analysis Metadata

  • Analyzed Files: 3
  • Detection Method: Serena semantic code analysis
  • Commit: 1733516
  • Analysis Date: 2025-12-06

AI generated by Duplicate Code Detector

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions