mirror of
https://github.com/webfactory/ssh-agent.git
synced 2024-11-21 08:40:49 +00:00
Provide gitPath
for Windows to avoid failures on windows-2022
(GitHub-hosted runner) (#137)
### Problem: Observed error on `windows-2022` ([GitHub-hosted runner](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources)) that `git` command cannot be found. ### Issue: Cannot find git executable on on windows-2022 (GitHub-hosted runner) #136 ### Solution: This path improvement makes use of existing `path.js` to resolve and return correct `git.exe` path for Windows, leaving the executable name as it was for other operating systems. ### Caveats: No idea how and why this `c://progra~1//git//usr//bin//git.exe` mumbo-jumbo works but it apparently did for other executables so figured it should work for `git.exe` (and it does).
This commit is contained in:
parent
fbef2c7bd0
commit
df2f741a87
5 changed files with 49 additions and 55 deletions
|
@ -1,11 +1,11 @@
|
||||||
const core = require('@actions/core');
|
const core = require('@actions/core');
|
||||||
const { execFileSync } = require('child_process');
|
const { execFileSync } = require('child_process');
|
||||||
const { sshAgent } = require('./paths.js');
|
const { sshAgentCmd } = require('./paths.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Kill the started SSH agent
|
// Kill the started SSH agent
|
||||||
console.log('Stopping SSH agent');
|
console.log('Stopping SSH agent');
|
||||||
execFileSync(sshAgent, ['-k'], { stdio: 'inherit' });
|
execFileSync(sshAgentCmd, ['-k'], { stdio: 'inherit' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error.message);
|
console.log(error.message);
|
||||||
console.log('Error stopping the SSH agent, proceeding anyway');
|
console.log('Error stopping the SSH agent, proceeding anyway');
|
||||||
|
|
24
dist/cleanup.js
vendored
24
dist/cleanup.js
vendored
|
@ -599,12 +599,12 @@ exports.debug = debug; // for test
|
||||||
|
|
||||||
const core = __webpack_require__(470);
|
const core = __webpack_require__(470);
|
||||||
const { execFileSync } = __webpack_require__(129);
|
const { execFileSync } = __webpack_require__(129);
|
||||||
const { sshAgent } = __webpack_require__(972);
|
const { sshAgentCmd } = __webpack_require__(972);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Kill the started SSH agent
|
// Kill the started SSH agent
|
||||||
console.log('Stopping SSH agent');
|
console.log('Stopping SSH agent');
|
||||||
execFileSync(sshAgent, ['-k'], { stdio: 'inherit' });
|
execFileSync(sshAgentCmd, ['-k'], { stdio: 'inherit' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error.message);
|
console.log(error.message);
|
||||||
console.log('Error stopping the SSH agent, proceeding anyway');
|
console.log('Error stopping the SSH agent, proceeding anyway');
|
||||||
|
@ -2824,23 +2824,21 @@ exports.default = _default;
|
||||||
const os = __webpack_require__(87);
|
const os = __webpack_require__(87);
|
||||||
|
|
||||||
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
||||||
|
|
||||||
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
||||||
// Action runs, where $HOME is different from the pwent
|
// Action runs, where $HOME is different from the pwent
|
||||||
home: os.userInfo().homedir,
|
homePath: os.userInfo().homedir,
|
||||||
sshAgent: 'ssh-agent',
|
sshAgentCmd: 'ssh-agent',
|
||||||
sshAdd: 'ssh-add'
|
sshAddCmd: 'ssh-add',
|
||||||
|
gitCmd: 'git'
|
||||||
} : {
|
} : {
|
||||||
|
// Assuming GitHub hosted `windows-*` runners for now
|
||||||
home: os.homedir(),
|
homePath: os.homedir(),
|
||||||
sshAgent: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
sshAgentCmd: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
||||||
sshAdd: 'c://progra~1//git//usr//bin//ssh-add.exe'
|
sshAddCmd: 'c://progra~1//git//usr//bin//ssh-add.exe',
|
||||||
|
gitCmd: 'c://progra~1//git//usr//bin//git.exe'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***/ })
|
/***/ })
|
||||||
|
|
||||||
/******/ });
|
/******/ });
|
38
dist/index.js
vendored
38
dist/index.js
vendored
|
@ -322,7 +322,7 @@ const core = __webpack_require__(470);
|
||||||
const child_process = __webpack_require__(129);
|
const child_process = __webpack_require__(129);
|
||||||
const fs = __webpack_require__(747);
|
const fs = __webpack_require__(747);
|
||||||
const crypto = __webpack_require__(417);
|
const crypto = __webpack_require__(417);
|
||||||
const { home, sshAgent, sshAdd } = __webpack_require__(972);
|
const { homePath, sshAgentCmd, sshAddCmd, gitCmd } = __webpack_require__(972);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const privateKey = core.getInput('ssh-private-key');
|
const privateKey = core.getInput('ssh-private-key');
|
||||||
|
@ -334,7 +334,7 @@ try {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const homeSsh = home + '/.ssh';
|
const homeSsh = homePath + '/.ssh';
|
||||||
|
|
||||||
console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`);
|
console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`);
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ try {
|
||||||
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
|
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
|
||||||
|
|
||||||
// Extract auth socket path and agent pid and set them as job variables
|
// Extract auth socket path and agent pid and set them as job variables
|
||||||
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
|
child_process.execFileSync(sshAgentCmd, sshAgentArgs).toString().split("\n").forEach(function(line) {
|
||||||
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
|
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
|
||||||
|
|
||||||
if (matches && matches.length > 0) {
|
if (matches && matches.length > 0) {
|
||||||
|
@ -362,16 +362,16 @@ try {
|
||||||
console.log("Adding private key(s) to agent");
|
console.log("Adding private key(s) to agent");
|
||||||
|
|
||||||
privateKey.split(/(?=-----BEGIN)/).forEach(function(key) {
|
privateKey.split(/(?=-----BEGIN)/).forEach(function(key) {
|
||||||
child_process.execFileSync(sshAdd, ['-'], { input: key.trim() + "\n" });
|
child_process.execFileSync(sshAddCmd, ['-'], { input: key.trim() + "\n" });
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("Key(s) added:");
|
console.log("Key(s) added:");
|
||||||
|
|
||||||
child_process.execFileSync(sshAdd, ['-l'], { stdio: 'inherit' });
|
child_process.execFileSync(sshAddCmd, ['-l'], { stdio: 'inherit' });
|
||||||
|
|
||||||
console.log('Configuring deployment key(s)');
|
console.log('Configuring deployment key(s)');
|
||||||
|
|
||||||
child_process.execFileSync(sshAdd, ['-L']).toString().split(/\r?\n/).forEach(function(key) {
|
child_process.execFileSync(sshAddCmd, ['-L']).toString().split(/\r?\n/).forEach(function(key) {
|
||||||
const parts = key.match(/\bgithub\.com[:/]([_.a-z0-9-]+\/[_.a-z0-9-]+)/i);
|
const parts = key.match(/\bgithub\.com[:/]([_.a-z0-9-]+\/[_.a-z0-9-]+)/i);
|
||||||
|
|
||||||
if (!parts) {
|
if (!parts) {
|
||||||
|
@ -386,9 +386,9 @@ try {
|
||||||
|
|
||||||
fs.writeFileSync(`${homeSsh}/key-${sha256}`, key + "\n", { mode: '600' });
|
fs.writeFileSync(`${homeSsh}/key-${sha256}`, key + "\n", { mode: '600' });
|
||||||
|
|
||||||
child_process.execSync(`git config --global --replace-all url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "https://github.com/${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --replace-all url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "https://github.com/${ownerAndRepo}"`);
|
||||||
child_process.execSync(`git config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "git@github.com:${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "git@github.com:${ownerAndRepo}"`);
|
||||||
child_process.execSync(`git config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "ssh://git@github.com/${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "ssh://git@github.com/${ownerAndRepo}"`);
|
||||||
|
|
||||||
const sshConfig = `\nHost key-${sha256}.github.com\n`
|
const sshConfig = `\nHost key-${sha256}.github.com\n`
|
||||||
+ ` HostName github.com\n`
|
+ ` HostName github.com\n`
|
||||||
|
@ -2903,23 +2903,21 @@ exports.default = _default;
|
||||||
const os = __webpack_require__(87);
|
const os = __webpack_require__(87);
|
||||||
|
|
||||||
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
||||||
|
|
||||||
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
||||||
// Action runs, where $HOME is different from the pwent
|
// Action runs, where $HOME is different from the pwent
|
||||||
home: os.userInfo().homedir,
|
homePath: os.userInfo().homedir,
|
||||||
sshAgent: 'ssh-agent',
|
sshAgentCmd: 'ssh-agent',
|
||||||
sshAdd: 'ssh-add'
|
sshAddCmd: 'ssh-add',
|
||||||
|
gitCmd: 'git'
|
||||||
} : {
|
} : {
|
||||||
|
// Assuming GitHub hosted `windows-*` runners for now
|
||||||
home: os.homedir(),
|
homePath: os.homedir(),
|
||||||
sshAgent: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
sshAgentCmd: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
||||||
sshAdd: 'c://progra~1//git//usr//bin//ssh-add.exe'
|
sshAddCmd: 'c://progra~1//git//usr//bin//ssh-add.exe',
|
||||||
|
gitCmd: 'c://progra~1//git//usr//bin//git.exe'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***/ })
|
/***/ })
|
||||||
|
|
||||||
/******/ });
|
/******/ });
|
18
index.js
18
index.js
|
@ -2,7 +2,7 @@ const core = require('@actions/core');
|
||||||
const child_process = require('child_process');
|
const child_process = require('child_process');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const { home, sshAgent, sshAdd } = require('./paths.js');
|
const { homePath, sshAgentCmd, sshAddCmd, gitCmd } = require('./paths.js');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const privateKey = core.getInput('ssh-private-key');
|
const privateKey = core.getInput('ssh-private-key');
|
||||||
|
@ -14,7 +14,7 @@ try {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const homeSsh = home + '/.ssh';
|
const homeSsh = homePath + '/.ssh';
|
||||||
|
|
||||||
console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`);
|
console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`);
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ try {
|
||||||
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
|
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
|
||||||
|
|
||||||
// Extract auth socket path and agent pid and set them as job variables
|
// Extract auth socket path and agent pid and set them as job variables
|
||||||
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
|
child_process.execFileSync(sshAgentCmd, sshAgentArgs).toString().split("\n").forEach(function(line) {
|
||||||
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
|
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
|
||||||
|
|
||||||
if (matches && matches.length > 0) {
|
if (matches && matches.length > 0) {
|
||||||
|
@ -42,16 +42,16 @@ try {
|
||||||
console.log("Adding private key(s) to agent");
|
console.log("Adding private key(s) to agent");
|
||||||
|
|
||||||
privateKey.split(/(?=-----BEGIN)/).forEach(function(key) {
|
privateKey.split(/(?=-----BEGIN)/).forEach(function(key) {
|
||||||
child_process.execFileSync(sshAdd, ['-'], { input: key.trim() + "\n" });
|
child_process.execFileSync(sshAddCmd, ['-'], { input: key.trim() + "\n" });
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("Key(s) added:");
|
console.log("Key(s) added:");
|
||||||
|
|
||||||
child_process.execFileSync(sshAdd, ['-l'], { stdio: 'inherit' });
|
child_process.execFileSync(sshAddCmd, ['-l'], { stdio: 'inherit' });
|
||||||
|
|
||||||
console.log('Configuring deployment key(s)');
|
console.log('Configuring deployment key(s)');
|
||||||
|
|
||||||
child_process.execFileSync(sshAdd, ['-L']).toString().split(/\r?\n/).forEach(function(key) {
|
child_process.execFileSync(sshAddCmd, ['-L']).toString().split(/\r?\n/).forEach(function(key) {
|
||||||
const parts = key.match(/\bgithub\.com[:/]([_.a-z0-9-]+\/[_.a-z0-9-]+)/i);
|
const parts = key.match(/\bgithub\.com[:/]([_.a-z0-9-]+\/[_.a-z0-9-]+)/i);
|
||||||
|
|
||||||
if (!parts) {
|
if (!parts) {
|
||||||
|
@ -66,9 +66,9 @@ try {
|
||||||
|
|
||||||
fs.writeFileSync(`${homeSsh}/key-${sha256}`, key + "\n", { mode: '600' });
|
fs.writeFileSync(`${homeSsh}/key-${sha256}`, key + "\n", { mode: '600' });
|
||||||
|
|
||||||
child_process.execSync(`git config --global --replace-all url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "https://github.com/${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --replace-all url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "https://github.com/${ownerAndRepo}"`);
|
||||||
child_process.execSync(`git config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "git@github.com:${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "git@github.com:${ownerAndRepo}"`);
|
||||||
child_process.execSync(`git config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "ssh://git@github.com/${ownerAndRepo}"`);
|
child_process.execSync(`${gitCmd} config --global --add url."git@key-${sha256}.github.com:${ownerAndRepo}".insteadOf "ssh://git@github.com/${ownerAndRepo}"`);
|
||||||
|
|
||||||
const sshConfig = `\nHost key-${sha256}.github.com\n`
|
const sshConfig = `\nHost key-${sha256}.github.com\n`
|
||||||
+ ` HostName github.com\n`
|
+ ` HostName github.com\n`
|
||||||
|
|
20
paths.js
20
paths.js
|
@ -1,18 +1,16 @@
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
|
|
||||||
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
module.exports = (process.env['OS'] != 'Windows_NT') ? {
|
||||||
|
|
||||||
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
// Use getent() system call, since this is what ssh does; makes a difference in Docker-based
|
||||||
// Action runs, where $HOME is different from the pwent
|
// Action runs, where $HOME is different from the pwent
|
||||||
home: os.userInfo().homedir,
|
homePath: os.userInfo().homedir,
|
||||||
sshAgent: 'ssh-agent',
|
sshAgentCmd: 'ssh-agent',
|
||||||
sshAdd: 'ssh-add'
|
sshAddCmd: 'ssh-add',
|
||||||
|
gitCmd: 'git'
|
||||||
} : {
|
} : {
|
||||||
|
// Assuming GitHub hosted `windows-*` runners for now
|
||||||
home: os.homedir(),
|
homePath: os.homedir(),
|
||||||
sshAgent: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
sshAgentCmd: 'c://progra~1//git//usr//bin//ssh-agent.exe',
|
||||||
sshAdd: 'c://progra~1//git//usr//bin//ssh-add.exe'
|
sshAddCmd: 'c://progra~1//git//usr//bin//ssh-add.exe',
|
||||||
|
gitCmd: 'c://progra~1//git//usr//bin//git.exe'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue