From e10ccec9a19644a99c06e85b024c7abb611c6626 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 19:33:42 +0000 Subject: [PATCH 1/2] Initial plan From a5f764c894df0a0d5d8269b1f01ad3269cf209d9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 6 Sep 2025 19:43:34 +0000 Subject: [PATCH 2/2] Fix directory creation issue in Claude settings generation - Add mkdir -p .claude command before creating settings.json - Update test to verify directory creation happens before file creation - Fix resolves "No such file or directory" error in agent-cook workflow - All tests pass and workflows compile successfully Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/agent-cook.lock.yml | 1 + .../example-engine-network-permissions.lock.yml | 1 + .../workflows/test-claude-add-issue-comment.lock.yml | 1 + .../workflows/test-claude-add-issue-labels.lock.yml | 1 + .github/workflows/test-claude-command.lock.yml | 1 + .github/workflows/test-claude-create-issue.lock.yml | 1 + ...laude-create-pull-request-review-comment.lock.yml | 1 + .../test-claude-create-pull-request.lock.yml | 1 + .../test-claude-create-security-report.lock.yml | 1 + .github/workflows/test-claude-mcp.lock.yml | 1 + .../workflows/test-claude-push-to-branch.lock.yml | 1 + .github/workflows/test-claude-update-issue.lock.yml | 1 + .github/workflows/test-codex-command.lock.yml | 1 + .github/workflows/test-proxy.lock.yml | 1 + pkg/workflow/claude_settings.go | 3 ++- pkg/workflow/claude_settings_test.go | 12 ++++++++++++ 16 files changed, 28 insertions(+), 1 deletion(-) diff --git a/.github/workflows/agent-cook.lock.yml b/.github/workflows/agent-cook.lock.yml index 291bcaa5f0e..5b4330200de 100644 --- a/.github/workflows/agent-cook.lock.yml +++ b/.github/workflows/agent-cook.lock.yml @@ -39,6 +39,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/example-engine-network-permissions.lock.yml b/.github/workflows/example-engine-network-permissions.lock.yml index 6c4e09e96bf..c84bd91bb2a 100644 --- a/.github/workflows/example-engine-network-permissions.lock.yml +++ b/.github/workflows/example-engine-network-permissions.lock.yml @@ -36,6 +36,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-add-issue-comment.lock.yml b/.github/workflows/test-claude-add-issue-comment.lock.yml index 66d32ed36f6..eb41026e3b8 100644 --- a/.github/workflows/test-claude-add-issue-comment.lock.yml +++ b/.github/workflows/test-claude-add-issue-comment.lock.yml @@ -216,6 +216,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-add-issue-labels.lock.yml b/.github/workflows/test-claude-add-issue-labels.lock.yml index c05643030be..8ed4cfa4cb8 100644 --- a/.github/workflows/test-claude-add-issue-labels.lock.yml +++ b/.github/workflows/test-claude-add-issue-labels.lock.yml @@ -216,6 +216,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-command.lock.yml b/.github/workflows/test-claude-command.lock.yml index 99f6efab9fe..cb7b40bb75d 100644 --- a/.github/workflows/test-claude-command.lock.yml +++ b/.github/workflows/test-claude-command.lock.yml @@ -479,6 +479,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-create-issue.lock.yml b/.github/workflows/test-claude-create-issue.lock.yml index d9db5d3a725..ad87f9ccd8c 100644 --- a/.github/workflows/test-claude-create-issue.lock.yml +++ b/.github/workflows/test-claude-create-issue.lock.yml @@ -24,6 +24,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-create-pull-request-review-comment.lock.yml b/.github/workflows/test-claude-create-pull-request-review-comment.lock.yml index c1e23f0b3b9..953c516d972 100644 --- a/.github/workflows/test-claude-create-pull-request-review-comment.lock.yml +++ b/.github/workflows/test-claude-create-pull-request-review-comment.lock.yml @@ -227,6 +227,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-create-pull-request.lock.yml b/.github/workflows/test-claude-create-pull-request.lock.yml index 330ff43814e..aee87190f39 100644 --- a/.github/workflows/test-claude-create-pull-request.lock.yml +++ b/.github/workflows/test-claude-create-pull-request.lock.yml @@ -24,6 +24,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-create-security-report.lock.yml b/.github/workflows/test-claude-create-security-report.lock.yml index 2f7cd2e07f9..8a5c3cc78af 100644 --- a/.github/workflows/test-claude-create-security-report.lock.yml +++ b/.github/workflows/test-claude-create-security-report.lock.yml @@ -213,6 +213,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-mcp.lock.yml b/.github/workflows/test-claude-mcp.lock.yml index c5111fc7431..3c21cfe19bc 100644 --- a/.github/workflows/test-claude-mcp.lock.yml +++ b/.github/workflows/test-claude-mcp.lock.yml @@ -213,6 +213,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-push-to-branch.lock.yml b/.github/workflows/test-claude-push-to-branch.lock.yml index f8aad4b5fd0..0448558307f 100644 --- a/.github/workflows/test-claude-push-to-branch.lock.yml +++ b/.github/workflows/test-claude-push-to-branch.lock.yml @@ -78,6 +78,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-claude-update-issue.lock.yml b/.github/workflows/test-claude-update-issue.lock.yml index 8a5f509aa2c..fc91cb35d97 100644 --- a/.github/workflows/test-claude-update-issue.lock.yml +++ b/.github/workflows/test-claude-update-issue.lock.yml @@ -216,6 +216,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-codex-command.lock.yml b/.github/workflows/test-codex-command.lock.yml index f6e2e91391a..b939fc478c7 100644 --- a/.github/workflows/test-codex-command.lock.yml +++ b/.github/workflows/test-codex-command.lock.yml @@ -479,6 +479,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/.github/workflows/test-proxy.lock.yml b/.github/workflows/test-proxy.lock.yml index abf5e4e36b7..9837d0b3f88 100644 --- a/.github/workflows/test-proxy.lock.yml +++ b/.github/workflows/test-proxy.lock.yml @@ -37,6 +37,7 @@ jobs: uses: actions/checkout@v5 - name: Generate Claude Settings run: | + mkdir -p .claude cat > .claude/settings.json << 'EOF' { "hooks": { diff --git a/pkg/workflow/claude_settings.go b/pkg/workflow/claude_settings.go index fe836f386d6..b2f5b6546f1 100644 --- a/pkg/workflow/claude_settings.go +++ b/pkg/workflow/claude_settings.go @@ -57,7 +57,8 @@ func (g *ClaudeSettingsGenerator) GenerateSettingsJSON() string { func (g *ClaudeSettingsGenerator) GenerateSettingsWorkflowStep() GitHubActionStep { settingsJSON := g.GenerateSettingsJSON() - runContent := fmt.Sprintf(`cat > .claude/settings.json << 'EOF' + runContent := fmt.Sprintf(`mkdir -p .claude +cat > .claude/settings.json << 'EOF' %s EOF`, settingsJSON) diff --git a/pkg/workflow/claude_settings_test.go b/pkg/workflow/claude_settings_test.go index 1d5f38f9a17..a4e3a846f54 100644 --- a/pkg/workflow/claude_settings_test.go +++ b/pkg/workflow/claude_settings_test.go @@ -118,11 +118,23 @@ func TestClaudeSettingsWorkflowGeneration(t *testing.T) { t.Error("Step should use multi-line run format") } + // Check directory creation command + if !strings.Contains(stepStr, "mkdir -p .claude") { + t.Error("Step should create .claude directory before creating settings file") + } + // Check file creation if !strings.Contains(stepStr, "cat > .claude/settings.json") { t.Error("Step should create .claude/settings.json file") } + // Verify the order - mkdir should come before cat + mkdirIndex := strings.Index(stepStr, "mkdir -p .claude") + catIndex := strings.Index(stepStr, "cat > .claude/settings.json") + if mkdirIndex == -1 || catIndex == -1 || mkdirIndex > catIndex { + t.Error("Directory creation (mkdir) should come before file creation (cat)") + } + // Check heredoc usage if !strings.Contains(stepStr, "EOF") { t.Error("Step should use heredoc for JSON content")