Skip to content

Commit 159dc5e

Browse files
authored
fix: auto-inject GH_HOST from GITHUB_SERVER_URL when --env-all is used (#1453)
* Initial plan * fix: auto-inject GH_HOST from GITHUB_SERVER_URL when --env-all is used Agent-Logs-Url: https://github.com/github/gh-aw-firewall/sessions/d254ea34-0814-4343-9ede-cac2de6d5d21 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent 284e5f9 commit 159dc5e

2 files changed

Lines changed: 48 additions & 8 deletions

File tree

src/docker-manager.test.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,6 +1295,45 @@ describe('docker-manager', () => {
12951295
}
12961296
});
12971297

1298+
it('should auto-inject GH_HOST from GITHUB_SERVER_URL when envAll is true', () => {
1299+
const prevServerUrl = process.env.GITHUB_SERVER_URL;
1300+
const prevGhHost = process.env.GH_HOST;
1301+
process.env.GITHUB_SERVER_URL = 'https://mycompany.ghe.com';
1302+
delete process.env.GH_HOST;
1303+
1304+
try {
1305+
const configWithEnvAll = { ...mockConfig, envAll: true };
1306+
const result = generateDockerCompose(configWithEnvAll, mockNetworkConfig);
1307+
const env = result.services.agent.environment as Record<string, string>;
1308+
1309+
expect(env.GH_HOST).toBe('mycompany.ghe.com');
1310+
} finally {
1311+
if (prevServerUrl !== undefined) process.env.GITHUB_SERVER_URL = prevServerUrl;
1312+
else delete process.env.GITHUB_SERVER_URL;
1313+
if (prevGhHost !== undefined) process.env.GH_HOST = prevGhHost;
1314+
}
1315+
});
1316+
1317+
it('should not overwrite explicit GH_HOST from env-all with auto-injected value', () => {
1318+
const prevServerUrl = process.env.GITHUB_SERVER_URL;
1319+
const prevGhHost = process.env.GH_HOST;
1320+
process.env.GITHUB_SERVER_URL = 'https://mycompany.ghe.com';
1321+
process.env.GH_HOST = 'explicit.ghe.com';
1322+
1323+
try {
1324+
const configWithEnvAll = { ...mockConfig, envAll: true };
1325+
const result = generateDockerCompose(configWithEnvAll, mockNetworkConfig);
1326+
const env = result.services.agent.environment as Record<string, string>;
1327+
1328+
expect(env.GH_HOST).toBe('explicit.ghe.com');
1329+
} finally {
1330+
if (prevServerUrl !== undefined) process.env.GITHUB_SERVER_URL = prevServerUrl;
1331+
else delete process.env.GITHUB_SERVER_URL;
1332+
if (prevGhHost !== undefined) process.env.GH_HOST = prevGhHost;
1333+
else delete process.env.GH_HOST;
1334+
}
1335+
});
1336+
12981337
it('should configure DNS to use Google DNS', () => {
12991338
const result = generateDockerCompose(mockConfig, mockNetworkConfig);
13001339
const agent = result.services.agent;

src/docker-manager.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -595,14 +595,15 @@ export function generateDockerCompose(
595595
// interfere with credential isolation.
596596
if (process.env.GITHUB_API_URL) environment.GITHUB_API_URL = process.env.GITHUB_API_URL;
597597

598-
// Auto-inject GH_HOST when GITHUB_SERVER_URL points to a GHES/GHEC instance
599-
// This ensures gh CLI inside the agent container targets the correct GitHub instance
600-
// instead of defaulting to github.com
601-
const ghHost = extractGhHostFromServerUrl(process.env.GITHUB_SERVER_URL);
602-
if (ghHost) {
603-
environment.GH_HOST = ghHost;
604-
logger.debug(`Auto-injected GH_HOST=${ghHost} from GITHUB_SERVER_URL`);
605-
}
598+
}
599+
600+
// Auto-inject GH_HOST when GITHUB_SERVER_URL points to a GHES/GHEC instance.
601+
// Must run AFTER the env-all block so it applies in both paths.
602+
// The !environment.GH_HOST guard preserves an explicit GH_HOST passed through via --env-all.
603+
const ghHost = extractGhHostFromServerUrl(process.env.GITHUB_SERVER_URL);
604+
if (ghHost && !environment.GH_HOST) {
605+
environment.GH_HOST = ghHost;
606+
logger.debug(`Auto-injected GH_HOST=${ghHost} from GITHUB_SERVER_URL`);
606607
}
607608

608609
// Forward one-shot-token debug flag if set (used for testing/debugging)

0 commit comments

Comments
 (0)