mirror of
https://github.com/actions/checkout.git
synced 2026-03-07 08:51:46 +08:00
Compare commits
1 Commits
76d5cf98fb
...
a43de711ce
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a43de711ce |
@ -376,120 +376,3 @@ describe('Test fetchDepth and fetchTags options', () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('git user-agent with orchestration ID', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn())
|
|
||||||
jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn())
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.restoreAllMocks()
|
|
||||||
// Clean up environment variable to prevent test pollution
|
|
||||||
delete process.env['ACTIONS_ORCHESTRATION_ID']
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should include orchestration ID in user-agent when ACTIONS_ORCHESTRATION_ID is set', async () => {
|
|
||||||
const orchId = 'test-orch-id-12345'
|
|
||||||
process.env['ACTIONS_ORCHESTRATION_ID'] = orchId
|
|
||||||
|
|
||||||
let capturedEnv: any = null
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
}
|
|
||||||
// Capture env on any command
|
|
||||||
capturedEnv = options.env
|
|
||||||
return 0
|
|
||||||
})
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
// Call a git command to trigger env capture after user-agent is set
|
|
||||||
await git.init()
|
|
||||||
|
|
||||||
// Verify the user agent includes the orchestration ID
|
|
||||||
expect(git).toBeDefined()
|
|
||||||
expect(capturedEnv).toBeDefined()
|
|
||||||
expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
|
|
||||||
`git/2.18 (github-actions-checkout) actions_orchestration_id/${orchId}`
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should sanitize invalid characters in orchestration ID', async () => {
|
|
||||||
const orchId = 'test (with) special/chars'
|
|
||||||
process.env['ACTIONS_ORCHESTRATION_ID'] = orchId
|
|
||||||
|
|
||||||
let capturedEnv: any = null
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
}
|
|
||||||
// Capture env on any command
|
|
||||||
capturedEnv = options.env
|
|
||||||
return 0
|
|
||||||
})
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
// Call a git command to trigger env capture after user-agent is set
|
|
||||||
await git.init()
|
|
||||||
|
|
||||||
// Verify the user agent has sanitized orchestration ID (spaces, parentheses, slash replaced)
|
|
||||||
expect(git).toBeDefined()
|
|
||||||
expect(capturedEnv).toBeDefined()
|
|
||||||
expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
|
|
||||||
'git/2.18 (github-actions-checkout) actions_orchestration_id/test__with__special_chars'
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should not modify user-agent when ACTIONS_ORCHESTRATION_ID is not set', async () => {
|
|
||||||
delete process.env['ACTIONS_ORCHESTRATION_ID']
|
|
||||||
|
|
||||||
let capturedEnv: any = null
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
}
|
|
||||||
// Capture env on any command
|
|
||||||
capturedEnv = options.env
|
|
||||||
return 0
|
|
||||||
})
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
// Call a git command to trigger env capture after user-agent is set
|
|
||||||
await git.init()
|
|
||||||
|
|
||||||
// Verify the user agent does NOT contain orchestration ID
|
|
||||||
expect(git).toBeDefined()
|
|
||||||
expect(capturedEnv).toBeDefined()
|
|
||||||
expect(capturedEnv['GIT_HTTP_USER_AGENT']).toBe(
|
|
||||||
'git/2.18 (github-actions-checkout)'
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|||||||
12
dist/index.js
vendored
12
dist/index.js
vendored
@ -1206,17 +1206,7 @@ class GitCommandManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Set the user agent
|
// Set the user agent
|
||||||
let gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
|
const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
|
||||||
// Append orchestration ID if set
|
|
||||||
const orchId = process.env['ACTIONS_ORCHESTRATION_ID'];
|
|
||||||
if (orchId) {
|
|
||||||
// Sanitize the orchestration ID to ensure it contains only valid characters
|
|
||||||
// Valid characters: 0-9, a-z, _, -, .
|
|
||||||
const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, '_');
|
|
||||||
if (sanitizedId) {
|
|
||||||
gitHttpUserAgent = `${gitHttpUserAgent} actions_orchestration_id/${sanitizedId}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
|
core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
|
||||||
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
|
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
|
||||||
});
|
});
|
||||||
|
|||||||
@ -730,19 +730,7 @@ class GitCommandManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Set the user agent
|
// Set the user agent
|
||||||
let gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`
|
const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`
|
||||||
|
|
||||||
// Append orchestration ID if set
|
|
||||||
const orchId = process.env['ACTIONS_ORCHESTRATION_ID']
|
|
||||||
if (orchId) {
|
|
||||||
// Sanitize the orchestration ID to ensure it contains only valid characters
|
|
||||||
// Valid characters: 0-9, a-z, _, -, .
|
|
||||||
const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, '_')
|
|
||||||
if (sanitizedId) {
|
|
||||||
gitHttpUserAgent = `${gitHttpUserAgent} actions_orchestration_id/${sanitizedId}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
|
core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
|
||||||
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
|
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user