Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/daily-perf-improver.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions .github/workflows/daily-test-improver.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 4 additions & 9 deletions pkg/workflow/add_comment.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,10 @@ func (c *Compiler) buildCreateOutputAddCommentJob(data *WorkflowData, mainJobNam

// Build custom environment variables specific to add-comment
var customEnvVars []string
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_NAME: %q\n", data.Name))
// Pass the workflow source URL for installation instructions
if data.Source != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE: %q\n", data.Source))
sourceURL := buildSourceURL(data.Source)
if sourceURL != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE_URL: %q\n", sourceURL))
}
}

// Add workflow metadata (name and source)
customEnvVars = append(customEnvVars, buildWorkflowMetadataEnvVars(data.Name, data.Source)...)

// Pass the comment target configuration
if data.SafeOutputs.AddComments.Target != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_COMMENT_TARGET: %q\n", data.SafeOutputs.AddComments.Target))
Expand Down
5 changes: 4 additions & 1 deletion pkg/workflow/create_discussion.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ func (c *Compiler) buildCreateOutputDiscussionJob(data *WorkflowData, mainJobNam

// Build custom environment variables specific to create-discussion
var customEnvVars []string
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_NAME: %q\n", data.Name))

// Add workflow metadata (name and source)
customEnvVars = append(customEnvVars, buildWorkflowMetadataEnvVars(data.Name, data.Source)...)

if data.SafeOutputs.CreateDiscussions.TitlePrefix != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_DISCUSSION_TITLE_PREFIX: %q\n", data.SafeOutputs.CreateDiscussions.TitlePrefix))
}
Expand Down
13 changes: 4 additions & 9 deletions pkg/workflow/create_issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,10 @@ func (c *Compiler) buildCreateOutputIssueJob(data *WorkflowData, mainJobName str

// Build custom environment variables specific to create-issue
var customEnvVars []string
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_NAME: %q\n", data.Name))
// Pass the workflow source URL for installation instructions
if data.Source != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE: %q\n", data.Source))
sourceURL := buildSourceURL(data.Source)
if sourceURL != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE_URL: %q\n", sourceURL))
}
}

// Add workflow metadata (name and source)
customEnvVars = append(customEnvVars, buildWorkflowMetadataEnvVars(data.Name, data.Source)...)

if data.SafeOutputs.CreateIssues.TitlePrefix != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_ISSUE_TITLE_PREFIX: %q\n", data.SafeOutputs.CreateIssues.TitlePrefix))
}
Expand Down
13 changes: 4 additions & 9 deletions pkg/workflow/create_pr_review_comment.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,10 @@ func (c *Compiler) buildCreateOutputPullRequestReviewCommentJob(data *WorkflowDa

// Build custom environment variables specific to create-pull-request-review-comment
var customEnvVars []string
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_NAME: %q\n", data.Name))
// Pass the workflow source URL for installation instructions
if data.Source != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE: %q\n", data.Source))
sourceURL := buildSourceURL(data.Source)
if sourceURL != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE_URL: %q\n", sourceURL))
}
}

// Add workflow metadata (name and source)
customEnvVars = append(customEnvVars, buildWorkflowMetadataEnvVars(data.Name, data.Source)...)

// Pass the side configuration
if data.SafeOutputs.CreatePullRequestReviewComments.Side != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_PR_REVIEW_COMMENT_SIDE: %q\n", data.SafeOutputs.CreatePullRequestReviewComments.Side))
Expand Down
80 changes: 80 additions & 0 deletions pkg/workflow/safe_output_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,86 @@ func TestApplySafeOutputEnvToSlice(t *testing.T) {
}
}

// TestBuildWorkflowMetadataEnvVars verifies the helper function for workflow metadata env vars
func TestBuildWorkflowMetadataEnvVars(t *testing.T) {
tests := []struct {
name string
workflowName string
workflowSource string
expected []string
}{
{
name: "workflow name only",
workflowName: "Test Workflow",
expected: []string{
" GH_AW_WORKFLOW_NAME: \"Test Workflow\"\n",
},
},
{
name: "workflow name and source",
workflowName: "Issue Triage",
workflowSource: "owner/repo/workflows/triage.md@main",
expected: []string{
" GH_AW_WORKFLOW_NAME: \"Issue Triage\"\n",
" GH_AW_WORKFLOW_SOURCE: \"owner/repo/workflows/triage.md@main\"\n",
" GH_AW_WORKFLOW_SOURCE_URL: \"${{ github.server_url }}/owner/repo/tree/main/workflows/triage.md\"\n",
},
},
{
name: "workflow name and source without ref",
workflowName: "CI Helper",
workflowSource: "org/project/ci/helper.md",
expected: []string{
" GH_AW_WORKFLOW_NAME: \"CI Helper\"\n",
" GH_AW_WORKFLOW_SOURCE: \"org/project/ci/helper.md\"\n",
" GH_AW_WORKFLOW_SOURCE_URL: \"${{ github.server_url }}/org/project/tree/main/ci/helper.md\"\n",
},
},
{
name: "empty workflow name",
workflowName: "",
workflowSource: "owner/repo/workflow.md",
expected: []string{
" GH_AW_WORKFLOW_NAME: \"\"\n",
" GH_AW_WORKFLOW_SOURCE: \"owner/repo/workflow.md\"\n",
" GH_AW_WORKFLOW_SOURCE_URL: \"${{ github.server_url }}/owner/repo/tree/main/workflow.md\"\n",
},
},
{
name: "source with invalid format does not produce URL",
workflowName: "Test",
workflowSource: "invalid-source",
expected: []string{
" GH_AW_WORKFLOW_NAME: \"Test\"\n",
" GH_AW_WORKFLOW_SOURCE: \"invalid-source\"\n",
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := buildWorkflowMetadataEnvVars(tt.workflowName, tt.workflowSource)

if len(result) != len(tt.expected) {
t.Errorf("Expected %d env vars, got %d", len(tt.expected), len(result))
t.Logf("Expected: %v", tt.expected)
t.Logf("Got: %v", result)
return
}

for i, expectedVar := range tt.expected {
if i >= len(result) {
t.Errorf("Missing expected env var %d: %q", i, expectedVar)
continue
}
if result[i] != expectedVar {
t.Errorf("Env var %d: expected %q, got %q", i, expectedVar, result[i])
}
}
})
}
}

// TestBuildSafeOutputJobEnvVars verifies the helper function for safe-output job env vars
func TestBuildSafeOutputJobEnvVars(t *testing.T) {
tests := []struct {
Expand Down
20 changes: 20 additions & 0 deletions pkg/workflow/safe_outputs.go
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,26 @@ func applySafeOutputEnvToSlice(stepLines *[]string, workflowData *WorkflowData)
}
}

// buildWorkflowMetadataEnvVars builds workflow name and source environment variables
// This extracts the duplicated workflow metadata setup logic from safe-output job builders
func buildWorkflowMetadataEnvVars(workflowName string, workflowSource string) []string {
var customEnvVars []string

// Add workflow name
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_NAME: %q\n", workflowName))

// Add workflow source and source URL if present
if workflowSource != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE: %q\n", workflowSource))
sourceURL := buildSourceURL(workflowSource)
if sourceURL != "" {
customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_WORKFLOW_SOURCE_URL: %q\n", sourceURL))
}
}

return customEnvVars
}

// buildSafeOutputJobEnvVars builds environment variables for safe-output jobs with staged/target repo handling
// This extracts the duplicated env setup logic in safe-output job builders (create_issue, add_comment, etc.)
func buildSafeOutputJobEnvVars(trialMode bool, trialLogicalRepoSlug string, staged bool, targetRepoSlug string) []string {
Expand Down
Loading