Skip to content

Commit f8b8402

Browse files
CopilotlpcoxCopilotpelikhangithub-actions[bot]
authored
Fix threat detection AWF run missing --copilot-api-target and GHE domains on data residency (#21527)
* Initial plan * Fix threat detection AWF run missing --copilot-api-target and GHE domains on data residency When engine.api-target is configured for GHE Cloud with data residency, propagate the APITarget from the main engine config to the detection engine config so the threat detection AWF invocation receives the same --copilot-api-target flag and GHE-specific domains in --allow-domains. Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Add GITHUB_COPILOT_BASE_URL env var support and fix integration test api-target - Fix TestAPITargetDomainsInThreatDetectionStep to use api.contoso-aw.ghe.com (copilot-api. prefix does not trigger base-domain derivation in GetAPITargetDomains) - Add GetCopilotAPITarget() helper: resolves --copilot-api-target from engine.api-target (explicit) or GITHUB_COPILOT_BASE_URL in engine.env (fallback), mirroring the OPENAI_BASE_URL/ANTHROPIC_BASE_URL pattern for Codex/Claude - Update awf_helpers.go, copilot_engine_execution.go, and domains.go to use the helper - Add unit tests for GetCopilotAPITarget and engine execution step - Add integration test TestGitHubCopilotBaseURLInCompiledWorkflow - Update engines.md docs to document GITHUB_COPILOT_BASE_URL Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> * Update DefaultMCPGatewayVersion to v0.1.17 and regenerate golden/lock files (#21609) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> * fix: merge main to resolve failing build-wasm and test CI jobs (#21612) * docs: add GH_HOST and RUNNER_TEMP to glossary (daily scan 2026-03-18) (#21553) * docs: update GHES CLI docs and add Copilot GHES troubleshooting guide (#21528) * Fix list height not updating on terminal resize (#21555) * fix(daily-workflow-updater): unblock PR creation by setting protected-files: allowed (#21554) * chore: bump MCP Gateway v0.1.15→v0.1.17 (#21552) * feat: custom Huh theme mapped from pkg/styles Dracula palette (#21557) * Add top-level `github-app` frontmatter as universal fallback for token minting (#21510) * feat: add GitHub App-only permissions support (#21511) * fix: fall back to existing remote tracking ref when incremental patch fetch fails (#21568) * Add weekly blog post writer agentic workflow (#21575) * ci: add timeout-minutes to all 25 jobs lacking explicit limits (#21601) * fix: add setupGlobals in generate_aw_info step to fix staged mode ReferenceError (#21602) * Disable lockdown mode for weekly blog post generator (#21598) * fix: replace git push with GraphQL signed commits to satisfy required_signatures rulesets (#21576) * docs: add weekly update blog post for 2026-03-18 (#21608) Covers v0.58.0 through v0.61.0 (7 releases this week), notable PRs, and auto-triage-issues as Agent of the Week. Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix failing CI: merge main to include setupGlobals in generate_aw_info step and update golden files Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com> Co-authored-by: Landon Cox <landon.cox@microsoft.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 0789340 commit f8b8402

12 files changed

Lines changed: 442 additions & 20 deletions

File tree

.changeset/patch-threat-detection-ghe-api-target.md

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/src/content/docs/reference/engines.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,9 @@ The specified hostname must also be listed in `network.allowed` for the firewall
139139

140140
#### Custom API Endpoints via Environment Variables
141141

142-
Two environment variables receive special treatment when set in `engine.env`: `OPENAI_BASE_URL` (for `codex`) and `ANTHROPIC_BASE_URL` (for `claude`). When either is present, the AWF sandbox proxy automatically routes API calls to the specified host instead of the default `api.openai.com` or `api.anthropic.com`. Credential isolation and firewall enforcement remain active.
142+
Three environment variables receive special treatment when set in `engine.env`: `OPENAI_BASE_URL` (for `codex`), `ANTHROPIC_BASE_URL` (for `claude`), and `GITHUB_COPILOT_BASE_URL` (for `copilot`). When any of these is present, the AWF sandbox proxy automatically routes API calls to the specified host instead of the default endpoint. Credential isolation and firewall enforcement remain active.
143143

144-
This enables workflows to use internal LLM routers, Azure OpenAI deployments, or other OpenAI-compatible endpoints without bypassing AWF's security model.
144+
This enables workflows to use internal LLM routers, Azure OpenAI deployments, corporate Copilot proxies, or other compatible endpoints without bypassing AWF's security model.
145145

146146
```yaml wrap
147147
engine:
@@ -172,7 +172,23 @@ network:
172172
- anthropic-proxy.internal.example.com
173173
```
174174

175-
The custom hostname is extracted from the URL and passed to the AWF `--openai-api-target` or `--anthropic-api-target` flag automatically at compile time. No additional configuration is required.
175+
For Copilot workflows routed through a custom Copilot-compatible endpoint (e.g., a corporate proxy or a GHE Cloud data residency instance):
176+
177+
```yaml wrap
178+
engine:
179+
id: copilot
180+
env:
181+
GITHUB_COPILOT_BASE_URL: "https://copilot-proxy.corp.example.com"
182+
183+
network:
184+
allowed:
185+
- github.com
186+
- copilot-proxy.corp.example.com
187+
```
188+
189+
`GITHUB_COPILOT_BASE_URL` is used as a fallback when `engine.api-target` is not explicitly set. If both are configured, `engine.api-target` takes precedence.
190+
191+
The custom hostname is extracted from the URL and passed to the AWF `--openai-api-target`, `--anthropic-api-target`, or `--copilot-api-target` flag automatically at compile time. No additional configuration is required.
176192

177193
### Engine Command-Line Arguments
178194

pkg/workflow/allowed_domains_sanitization_test.go

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,164 @@ Test workflow with non-api prefix api-target.
658658
}
659659
}
660660

661+
// TestGitHubCopilotBaseURLInCompiledWorkflow verifies that when GITHUB_COPILOT_BASE_URL is set
662+
// in engine.env (without an explicit engine.api-target), the compiled lock file contains
663+
// --copilot-api-target and includes the extracted hostname in both --allow-domains and
664+
// GH_AW_ALLOWED_DOMAINS — matching the OPENAI_BASE_URL/ANTHROPIC_BASE_URL pattern for other engines.
665+
func TestGitHubCopilotBaseURLInCompiledWorkflow(t *testing.T) {
666+
workflow := `---
667+
on: push
668+
permissions:
669+
contents: read
670+
issues: read
671+
pull-requests: read
672+
engine:
673+
id: copilot
674+
env:
675+
GITHUB_COPILOT_BASE_URL: "https://copilot-proxy.corp.example.com"
676+
strict: false
677+
safe-outputs:
678+
create-issue:
679+
---
680+
681+
# Test Workflow
682+
683+
Test workflow with GITHUB_COPILOT_BASE_URL in engine.env.
684+
`
685+
686+
tmpDir := testutil.TempDir(t, "copilot-base-url-test")
687+
testFile := filepath.Join(tmpDir, "test-workflow.md")
688+
if err := os.WriteFile(testFile, []byte(workflow), 0644); err != nil {
689+
t.Fatal(err)
690+
}
691+
692+
compiler := NewCompiler()
693+
if err := compiler.CompileWorkflow(testFile); err != nil {
694+
t.Fatalf("Failed to compile workflow: %v", err)
695+
}
696+
697+
lockFile := stringutil.MarkdownToLockFile(testFile)
698+
lockContent, err := os.ReadFile(lockFile)
699+
if err != nil {
700+
t.Fatalf("Failed to read lock file: %v", err)
701+
}
702+
lockStr := string(lockContent)
703+
704+
// --copilot-api-target should be derived from the env var
705+
if !strings.Contains(lockStr, "--copilot-api-target copilot-proxy.corp.example.com") {
706+
t.Error("Expected --copilot-api-target to be derived from GITHUB_COPILOT_BASE_URL")
707+
}
708+
709+
// Extracted hostname should appear in --allow-domains
710+
allowDomainsIdx := strings.Index(lockStr, "--allow-domains")
711+
if allowDomainsIdx < 0 {
712+
t.Fatal("--allow-domains flag not found in compiled lock file")
713+
}
714+
allowDomainsEnd := strings.Index(lockStr[allowDomainsIdx:], "\n")
715+
if allowDomainsEnd < 0 {
716+
allowDomainsEnd = len(lockStr) - allowDomainsIdx
717+
}
718+
allowDomainsLine := lockStr[allowDomainsIdx : allowDomainsIdx+allowDomainsEnd]
719+
if !strings.Contains(allowDomainsLine, "copilot-proxy.corp.example.com") {
720+
t.Errorf("Expected hostname from GITHUB_COPILOT_BASE_URL in --allow-domains.\nLine: %s", allowDomainsLine)
721+
}
722+
723+
// Extracted hostname should appear in GH_AW_ALLOWED_DOMAINS
724+
lines := strings.Split(lockStr, "\n")
725+
var domainsLine string
726+
for _, line := range lines {
727+
if strings.Contains(line, "GH_AW_ALLOWED_DOMAINS:") {
728+
domainsLine = line
729+
break
730+
}
731+
}
732+
if domainsLine == "" {
733+
t.Fatal("GH_AW_ALLOWED_DOMAINS not found in compiled lock file")
734+
}
735+
if !strings.Contains(domainsLine, "copilot-proxy.corp.example.com") {
736+
t.Errorf("Expected hostname from GITHUB_COPILOT_BASE_URL in GH_AW_ALLOWED_DOMAINS.\nLine: %s", domainsLine)
737+
}
738+
}
739+
740+
// TestAPITargetDomainsInThreatDetectionStep is a regression test verifying that when engine.api-target
741+
// is configured, the threat detection AWF invocation in the compiled lock file also receives
742+
// --copilot-api-target and includes the GHE domains in its --allow-domains list.
743+
// Regression test for: Threat detection AWF run missing --copilot-api-target on data residency.
744+
func TestAPITargetDomainsInThreatDetectionStep(t *testing.T) {
745+
workflow := `---
746+
on: push
747+
permissions:
748+
contents: read
749+
issues: read
750+
pull-requests: read
751+
engine:
752+
id: copilot
753+
api-target: api.contoso-aw.ghe.com
754+
strict: false
755+
safe-outputs:
756+
create-issue:
757+
---
758+
759+
# Test Workflow
760+
761+
Test workflow with GHE data residency api-target and threat detection.
762+
`
763+
764+
tmpDir := testutil.TempDir(t, "api-target-threat-detection-test")
765+
testFile := filepath.Join(tmpDir, "test-workflow.md")
766+
if err := os.WriteFile(testFile, []byte(workflow), 0644); err != nil {
767+
t.Fatal(err)
768+
}
769+
770+
compiler := NewCompiler()
771+
if err := compiler.CompileWorkflow(testFile); err != nil {
772+
t.Fatalf("Failed to compile workflow: %v", err)
773+
}
774+
775+
lockFile := stringutil.MarkdownToLockFile(testFile)
776+
lockContent, err := os.ReadFile(lockFile)
777+
if err != nil {
778+
t.Fatalf("Failed to read lock file: %v", err)
779+
}
780+
lockStr := string(lockContent)
781+
782+
// Verify --copilot-api-target appears at least twice:
783+
// once for the main agent AWF run and once for the threat detection AWF run.
784+
apiTargetCount := strings.Count(lockStr, "--copilot-api-target api.contoso-aw.ghe.com")
785+
if apiTargetCount < 2 {
786+
t.Errorf("Expected --copilot-api-target to appear in both the main agent and threat detection AWF invocations (at least 2 times), but found %d occurrence(s).", apiTargetCount)
787+
}
788+
789+
// Find all --allow-domains occurrences and verify each contains the GHE domains.
790+
// api.contoso-aw.ghe.com triggers base-domain derivation, so both the API domain
791+
// and the base domain (contoso-aw.ghe.com) must appear in each AWF invocation.
792+
requiredDomains := []string{"api.contoso-aw.ghe.com", "contoso-aw.ghe.com"}
793+
remaining := lockStr
794+
occurrenceIdx := 0
795+
for {
796+
idx := strings.Index(remaining, "--allow-domains")
797+
if idx < 0 {
798+
break
799+
}
800+
occurrenceIdx++
801+
lineEnd := strings.Index(remaining[idx:], "\n")
802+
if lineEnd < 0 {
803+
lineEnd = len(remaining) - idx
804+
}
805+
line := remaining[idx : idx+lineEnd]
806+
for _, domain := range requiredDomains {
807+
if !strings.Contains(line, domain) {
808+
t.Errorf("--allow-domains occurrence #%d is missing GHE domain %q.\nLine: %s", occurrenceIdx, domain, line)
809+
}
810+
}
811+
remaining = remaining[idx+lineEnd:]
812+
}
813+
814+
if occurrenceIdx < 2 {
815+
t.Errorf("Expected at least 2 --allow-domains occurrences (main agent + threat detection), found %d", occurrenceIdx)
816+
}
817+
}
818+
661819
// TestAllowedDomainsUnionWithNetworkConfig tests that safe-outputs.allowed-domains
662820
// is unioned with network.allowed and always includes localhost and github.com
663821
func TestAllowedDomainsUnionWithNetworkConfig(t *testing.T) {

pkg/workflow/awf_helpers.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,11 @@ func BuildAWFArgs(config AWFCommandConfig) []string {
221221
awfHelpersLog.Printf("Added --anthropic-api-target=%s", anthropicTarget)
222222
}
223223

224-
// Add Copilot API target for custom Copilot endpoints (GHEC, GHES, or custom)
225-
// This uses the engine.api-target field if configured
226-
if config.WorkflowData.EngineConfig != nil && config.WorkflowData.EngineConfig.APITarget != "" {
227-
awfArgs = append(awfArgs, "--copilot-api-target", config.WorkflowData.EngineConfig.APITarget)
228-
awfHelpersLog.Printf("Added --copilot-api-target=%s", config.WorkflowData.EngineConfig.APITarget)
224+
// Add Copilot API target for custom Copilot endpoints (GHEC, GHES, or custom).
225+
// Resolved from engine.api-target (explicit) or GITHUB_COPILOT_BASE_URL in engine.env (implicit).
226+
if copilotTarget := GetCopilotAPITarget(config.WorkflowData); copilotTarget != "" {
227+
awfArgs = append(awfArgs, "--copilot-api-target", copilotTarget)
228+
awfHelpersLog.Printf("Added --copilot-api-target=%s", copilotTarget)
229229
}
230230

231231
// Add SSL Bump support for HTTPS content inspection (v0.9.0+)
@@ -348,3 +348,23 @@ func extractAPITargetHost(workflowData *WorkflowData, envVar string) string {
348348
awfHelpersLog.Printf("Extracted API target host from %s: %s", envVar, host)
349349
return host
350350
}
351+
352+
// GetCopilotAPITarget returns the effective Copilot API target hostname, checking in order:
353+
// 1. engine.api-target (explicit, takes precedence)
354+
// 2. GITHUB_COPILOT_BASE_URL in engine.env (implicit, derived from the configured Copilot base URL)
355+
//
356+
// This mirrors the pattern used by other engines:
357+
// - Codex: OPENAI_BASE_URL → --openai-api-target
358+
// - Claude: ANTHROPIC_BASE_URL → --anthropic-api-target
359+
// - Copilot: GITHUB_COPILOT_BASE_URL → --copilot-api-target (fallback when api-target not set)
360+
//
361+
// Returns empty string if neither source is configured.
362+
func GetCopilotAPITarget(workflowData *WorkflowData) string {
363+
// Explicit engine.api-target takes precedence.
364+
if workflowData != nil && workflowData.EngineConfig != nil && workflowData.EngineConfig.APITarget != "" {
365+
return workflowData.EngineConfig.APITarget
366+
}
367+
368+
// Fallback: derive from the well-known GITHUB_COPILOT_BASE_URL env var.
369+
return extractAPITargetHost(workflowData, "GITHUB_COPILOT_BASE_URL")
370+
}

pkg/workflow/awf_helpers_test.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,101 @@ func TestEngineExecutionWithCustomAPITarget(t *testing.T) {
308308
assert.Contains(t, stepContent, "claude-proxy.internal.company.com", "Should include custom hostname")
309309
})
310310
}
311+
312+
// TestGetCopilotAPITarget tests the GetCopilotAPITarget helper that resolves the effective
313+
// Copilot API target from either engine.api-target or GITHUB_COPILOT_BASE_URL in engine.env.
314+
func TestGetCopilotAPITarget(t *testing.T) {
315+
tests := []struct {
316+
name string
317+
workflowData *WorkflowData
318+
expected string
319+
}{
320+
{
321+
name: "engine.api-target takes precedence over GITHUB_COPILOT_BASE_URL",
322+
workflowData: &WorkflowData{
323+
EngineConfig: &EngineConfig{
324+
ID: "copilot",
325+
APITarget: "api.acme.ghe.com",
326+
Env: map[string]string{
327+
"GITHUB_COPILOT_BASE_URL": "https://other.endpoint.com",
328+
},
329+
},
330+
},
331+
expected: "api.acme.ghe.com",
332+
},
333+
{
334+
name: "GITHUB_COPILOT_BASE_URL used as fallback when api-target not set",
335+
workflowData: &WorkflowData{
336+
EngineConfig: &EngineConfig{
337+
ID: "copilot",
338+
Env: map[string]string{
339+
"GITHUB_COPILOT_BASE_URL": "https://copilot-api.contoso-aw.ghe.com",
340+
},
341+
},
342+
},
343+
expected: "copilot-api.contoso-aw.ghe.com",
344+
},
345+
{
346+
name: "GITHUB_COPILOT_BASE_URL with path extracts hostname only",
347+
workflowData: &WorkflowData{
348+
EngineConfig: &EngineConfig{
349+
ID: "copilot",
350+
Env: map[string]string{
351+
"GITHUB_COPILOT_BASE_URL": "https://copilot-proxy.corp.example.com/v1",
352+
},
353+
},
354+
},
355+
expected: "copilot-proxy.corp.example.com",
356+
},
357+
{
358+
name: "empty when neither api-target nor GITHUB_COPILOT_BASE_URL is set",
359+
workflowData: &WorkflowData{
360+
EngineConfig: &EngineConfig{
361+
ID: "copilot",
362+
},
363+
},
364+
expected: "",
365+
},
366+
{
367+
name: "empty when workflowData is nil",
368+
workflowData: nil,
369+
expected: "",
370+
},
371+
}
372+
373+
for _, tt := range tests {
374+
t.Run(tt.name, func(t *testing.T) {
375+
result := GetCopilotAPITarget(tt.workflowData)
376+
assert.Equal(t, tt.expected, result, "GetCopilotAPITarget should return expected hostname")
377+
})
378+
}
379+
}
380+
381+
// TestCopilotEngineIncludesCopilotAPITargetFromEnvVar tests that the Copilot engine execution
382+
// step includes --copilot-api-target when GITHUB_COPILOT_BASE_URL is configured in engine.env.
383+
func TestCopilotEngineIncludesCopilotAPITargetFromEnvVar(t *testing.T) {
384+
workflowData := &WorkflowData{
385+
Name: "test-workflow",
386+
EngineConfig: &EngineConfig{
387+
ID: "copilot",
388+
Env: map[string]string{
389+
"GITHUB_COPILOT_BASE_URL": "https://copilot-api.contoso-aw.ghe.com",
390+
},
391+
},
392+
NetworkPermissions: &NetworkPermissions{
393+
Firewall: &FirewallConfig{
394+
Enabled: true,
395+
},
396+
},
397+
}
398+
399+
engine := NewCopilotEngine()
400+
steps := engine.GetExecutionSteps(workflowData, "test.log")
401+
402+
assert.NotEmpty(t, steps, "Should generate execution steps")
403+
404+
stepContent := strings.Join(steps[0], "\n")
405+
406+
assert.Contains(t, stepContent, "--copilot-api-target", "Should include --copilot-api-target flag")
407+
assert.Contains(t, stepContent, "copilot-api.contoso-aw.ghe.com", "Should include custom Copilot hostname")
408+
}

pkg/workflow/copilot_engine_execution.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,10 @@ func (e *CopilotEngine) GetExecutionSteps(workflowData *WorkflowData, logFile st
179179
// Build AWF-wrapped command using helper function - no mkdir needed, AWF handles it
180180
// Get allowed domains (copilot defaults + network permissions + HTTP MCP server URLs + runtime ecosystem domains)
181181
allowedDomains := GetCopilotAllowedDomainsWithToolsAndRuntimes(workflowData.NetworkPermissions, workflowData.Tools, workflowData.Runtimes)
182-
// Add GHES/custom API target domains to the firewall allow-list when engine.api-target is set
183-
if workflowData.EngineConfig != nil && workflowData.EngineConfig.APITarget != "" {
184-
allowedDomains = mergeAPITargetDomains(allowedDomains, workflowData.EngineConfig.APITarget)
182+
// Add Copilot API target domains to the firewall allow-list.
183+
// Resolved from engine.api-target or GITHUB_COPILOT_BASE_URL in engine.env.
184+
if copilotAPITarget := GetCopilotAPITarget(workflowData); copilotAPITarget != "" {
185+
allowedDomains = mergeAPITargetDomains(allowedDomains, copilotAPITarget)
185186
}
186187

187188
// AWF v0.15.0+ uses chroot mode by default, providing transparent access to host binaries

pkg/workflow/domains.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -727,9 +727,10 @@ func (c *Compiler) computeAllowedDomainsForSanitization(data *WorkflowData) stri
727727
base = strings.Join(domains, ",")
728728
}
729729

730-
// Add GHES/custom API target domains so GH_AW_ALLOWED_DOMAINS stays in sync with --allow-domains
731-
if data.EngineConfig != nil && data.EngineConfig.APITarget != "" {
732-
base = mergeAPITargetDomains(base, data.EngineConfig.APITarget)
730+
// Add Copilot API target domains so GH_AW_ALLOWED_DOMAINS stays in sync with --allow-domains.
731+
// Resolved from engine.api-target or GITHUB_COPILOT_BASE_URL in engine.env.
732+
if copilotAPITarget := GetCopilotAPITarget(data); copilotAPITarget != "" {
733+
base = mergeAPITargetDomains(base, copilotAPITarget)
733734
}
734735

735736
return base

pkg/workflow/testdata/wasm_golden/TestWasmGolden_CompileFixtures/basic-copilot.golden

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ jobs:
5454
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
5555
with:
5656
script: |
57+
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
58+
setupGlobals(core, github, context, exec, io);
5759
const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');
5860
await main(core, context);
5961
- name: Validate COPILOT_GITHUB_TOKEN secret

pkg/workflow/testdata/wasm_golden/TestWasmGolden_CompileFixtures/smoke-copilot.golden

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ jobs:
6868
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
6969
with:
7070
script: |
71+
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
72+
setupGlobals(core, github, context, exec, io);
7173
const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');
7274
await main(core, context);
7375
- name: Validate COPILOT_GITHUB_TOKEN secret

0 commit comments

Comments
 (0)