Use product/version format and sanitize orchestration ID

Co-authored-by: TingluoHuang <1750815+TingluoHuang@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-06 16:26:29 +00:00
parent 6d9a3fe547
commit 32c52bb78a
2 changed files with 24 additions and 2 deletions
+20 -1
View File
@@ -387,7 +387,26 @@ describe('basics', () => {
const body: string = await res.readBody()
const obj = JSON.parse(body)
expect(obj.headers['user-agent']).toBe(
`http-client-tests (gh_orch_id:${orchId})`
`http-client-tests github_orchestration_id/${orchId}`
)
delete process.env['ACTIONS_ORCHESTRATION_ID']
})
it('sanitizes invalid characters in orchestration ID', async () => {
const orchId = 'test (with) special/chars'
process.env['ACTIONS_ORCHESTRATION_ID'] = orchId
const http: httpm.HttpClient = new httpm.HttpClient('http-client-tests')
const res: httpm.HttpClientResponse = await http.get(
'https://postman-echo.com/get'
)
expect(res.message.statusCode).toBe(200)
const body: string = await res.readBody()
const obj = JSON.parse(body)
// Spaces, parentheses, and slashes should be replaced with underscores
expect(obj.headers['user-agent']).toBe(
'http-client-tests github_orchestration_id/test__with__special_chars'
)
delete process.env['ACTIONS_ORCHESTRATION_ID']
+4 -1
View File
@@ -820,7 +820,10 @@ export class HttpClient {
private _getUserAgentWithOrchestrationId(userAgent: string): string {
const orchId = process.env['ACTIONS_ORCHESTRATION_ID']
if (orchId) {
return `${userAgent} (gh_orch_id:${orchId})`
// Sanitize the orchestration ID to ensure it contains only valid token characters
// Valid characters: alphanumeric, !, #, $, %, &, ', *, +, -, ., ^, _, `, |, ~
const sanitizedId = orchId.replace(/[^a-zA-Z0-9!#$%&'*+\-.^_`|~]/g, '_')
return `${userAgent} github_orchestration_id/${sanitizedId}`
}
return userAgent
}