Centralize workflow filename manipulation and file type detection into helper functions #9310
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The codebase had 250+ instances of manual string manipulation for workflow filename transformations (
.md↔.lock.yml, campaign specs, etc.) scattered across files, making maintenance error-prone and inconsistent. Additionally, file type detection logic usingstrings.HasSuffix()was duplicated throughout the codebase.Changes
Created centralized helpers in
pkg/stringutil/identifiers.go:Filename Transformations:
MarkdownToLockFile()-.md→.lock.ymlLockFileToMarkdown()-.lock.yml→.mdCampaignSpecToOrchestrator()-.campaign.md→.campaign.g.mdCampaignOrchestratorToLockFile()-.campaign.g.md→.campaign.lock.ymlCampaignSpecToLockFile()-.campaign.md→.campaign.lock.ymlFile Type Detection:
IsCampaignSpec()- Detects campaign specification files (.campaign.md)IsCampaignOrchestrator()- Detects campaign orchestrator files (.campaign.g.md)IsAgenticWorkflow()- Detects agentic workflow files (.mdexcluding campaigns)IsLockFile()- Detects compiled lock files (.lock.yml)IsCampaignLockFile()- Detects campaign lock files (.campaign.lock.yml)Replaced patterns across 119 files:
strings.TrimSuffix(path, ".md") + ".lock.yml"→stringutil.MarkdownToLockFile(path)strings.Replace(path, ".md", ".lock.yml", 1)→stringutil.MarkdownToLockFile(path)Examples
Filename Transformation - Before:
Filename Transformation - After:
File Type Detection - Before:
File Type Detection - After:
All helpers include comprehensive tests with round-trip validation and exclusivity testing to ensure file types are correctly distinguished.
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.