Skip to content

Commit 442121e

Browse files
committed
Don't start ssh-agent if it's already running
This allows to run the action multiple times to add multiple keys without removing already added ones.
1 parent fc49353 commit 442121e

File tree

2 files changed

+32
-22
lines changed

2 files changed

+32
-22
lines changed

dist/index.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,26 @@ try {
139139
fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl\n');
140140
fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n');
141141

142-
console.log("Starting ssh-agent");
143-
144142
const authSock = core.getInput('ssh-auth-sock');
145143
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
146144

147-
// Extract auth socket path and agent pid and set them as job variables
148-
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
149-
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
150145

151-
if (matches && matches.length > 0) {
152-
// This will also set process.env accordingly, so changes take effect for this script
153-
core.exportVariable(matches[1], matches[2])
154-
console.log(`${matches[1]}=${matches[2]}`);
155-
}
156-
});
146+
if (child_process.spawnSync(sshAdd, ['-l'], { env: { ...process.env, SSH_AUTH_SOCK: authSock || process.env.SSH_AUTH_SOCK } }).status === 0) {
147+
console.log('ssh-agent is already running, not starting a new one')
148+
} else {
149+
console.log("Starting ssh-agent");
150+
151+
// Extract auth socket path and agent pid and set them as job variables
152+
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
153+
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
154+
155+
if (matches && matches.length > 0) {
156+
// This will also set process.env accordingly, so changes take effect for this script
157+
core.exportVariable(matches[1], matches[2])
158+
console.log(`${matches[1]}=${matches[2]}`);
159+
}
160+
});
161+
}
157162

158163
console.log("Adding private key(s) to agent");
159164

index.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,26 @@ try {
2222
fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl\n');
2323
fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n');
2424

25-
console.log("Starting ssh-agent");
26-
2725
const authSock = core.getInput('ssh-auth-sock');
2826
const sshAgentArgs = (authSock && authSock.length > 0) ? ['-a', authSock] : [];
2927

30-
// Extract auth socket path and agent pid and set them as job variables
31-
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
32-
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
3328

34-
if (matches && matches.length > 0) {
35-
// This will also set process.env accordingly, so changes take effect for this script
36-
core.exportVariable(matches[1], matches[2])
37-
console.log(`${matches[1]}=${matches[2]}`);
38-
}
39-
});
29+
if (child_process.spawnSync(sshAdd, ['-l'], { env: { ...process.env, SSH_AUTH_SOCK: authSock || process.env.SSH_AUTH_SOCK } }).status === 0) {
30+
console.log('ssh-agent is already running, not starting a new one')
31+
} else {
32+
console.log("Starting ssh-agent");
33+
34+
// Extract auth socket path and agent pid and set them as job variables
35+
child_process.execFileSync(sshAgent, sshAgentArgs).toString().split("\n").forEach(function(line) {
36+
const matches = /^(SSH_AUTH_SOCK|SSH_AGENT_PID)=(.*); export \1/.exec(line);
37+
38+
if (matches && matches.length > 0) {
39+
// This will also set process.env accordingly, so changes take effect for this script
40+
core.exportVariable(matches[1], matches[2])
41+
console.log(`${matches[1]}=${matches[2]}`);
42+
}
43+
});
44+
}
4045

4146
console.log("Adding private key(s) to agent");
4247

0 commit comments

Comments
 (0)