3
0
Fork 0
mirror of https://code.forgejo.org/actions/checkout.git synced 2026-06-30 00:28:54 +00:00

Pin GIT_CONFIG_GLOBAL to the temp config during global auth setup

configureTempGlobalConfig isolates global git config by overriding HOME to
a temporary directory. But GIT_CONFIG_GLOBAL takes precedence over HOME when
git locates the global config file, so when a workflow already has
GIT_CONFIG_GLOBAL set in the environment, 'git config --global' writes land
in that file instead of the temporary config. replaceTokenPlaceholder then
reads the temporary config, cannot find the placeholder, and fails with
'Unable to replace auth placeholder'.

Set GIT_CONFIG_GLOBAL to the temporary config alongside the HOME override so
global config operations always target the temp file regardless of any
inherited value, and unset it again in removeGlobalConfig.

Assisted-By: Claude Opus 4.8
This commit is contained in:
Nathan Moin Vaziri 2026-06-05 11:08:14 -07:00
parent df4cb1c069
commit e1d91899ae
No known key found for this signature in database
3 changed files with 34 additions and 2 deletions

View file

@ -902,6 +902,25 @@ describe('git-auth-helper tests', () => {
}
})
const configureGlobalAuth_overridesGitConfigGlobal =
'configureGlobalAuth overrides GIT_CONFIG_GLOBAL'
it(configureGlobalAuth_overridesGitConfigGlobal, async () => {
// Arrange
await setup(configureGlobalAuth_overridesGitConfigGlobal)
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
// Act
await authHelper.configureAuth()
await authHelper.configureGlobalAuth()
// Assert GIT_CONFIG_GLOBAL is pinned to the temporary global config, so an
// inherited GIT_CONFIG_GLOBAL cannot redirect --global writes
expect(git.env['HOME']).toBeTruthy()
expect(git.env['GIT_CONFIG_GLOBAL']).toBe(
path.join(git.env['HOME'], '.gitconfig')
)
})
const removeGlobalConfig_removesOverride =
'removeGlobalConfig removes override'
it(removeGlobalConfig_removesOverride, async () => {
@ -912,6 +931,7 @@ describe('git-auth-helper tests', () => {
await authHelper.configureGlobalAuth()
const homeOverride = git.env['HOME'] // Sanity check
expect(homeOverride).toBeTruthy()
expect(git.env['GIT_CONFIG_GLOBAL']).toBeTruthy()
await fs.promises.stat(path.join(git.env['HOME'], '.gitconfig'))
// Act
@ -919,6 +939,7 @@ describe('git-auth-helper tests', () => {
// Assert
expect(git.env['HOME']).toBeUndefined()
expect(git.env['GIT_CONFIG_GLOBAL']).toBeUndefined()
try {
await fs.promises.stat(homeOverride)
throw new Error(`Should have been deleted '${homeOverride}'`)