From 1d96c772d19495a3b5c517cd2bc0cb401ea0529f Mon Sep 17 00:00:00 2001 From: Cory Miller <13227161+cory-miller@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:29:55 -0400 Subject: [PATCH] Add SSH user parameter (#1685) * Add a configurable SSH user * Update docs with param * Indentation of readme * formatting woes * Update src/url-helper.ts Co-authored-by: Josh Gross * Update action.yml Co-authored-by: Josh Gross * Update genfiles --------- Co-authored-by: Josh Gross --- README.md | 5 +++++ __test__/git-auth-helper.test.ts | 1 + action.yml | 4 ++++ dist/index.js | 4 +++- src/git-source-settings.ts | 5 +++++ src/input-helper.ts | 1 + src/url-helper.ts | 3 ++- 7 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bfecf464d..a7924cdf6 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,11 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/ # Default: true ssh-strict: '' + # The user to use when connecting to the remote SSH host. By default 'git' is + # used. + # Default: git + ssh-user: '' + # Whether to configure the token or SSH key with the local git config # Default: true persist-credentials: '' diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index 4081cb10e..694c0ba0c 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -821,6 +821,7 @@ async function setup(testName: string): Promise { sshKey: sshPath ? 'some ssh private key' : '', sshKnownHosts: '', sshStrict: true, + sshUser: '', workflowOrganizationId: 123456, setSafeDirectory: true, githubServerUrl: githubServerUrl diff --git a/action.yml b/action.yml index 5aa90a738..75d5ae2d8 100644 --- a/action.yml +++ b/action.yml @@ -45,6 +45,10 @@ inputs: and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to configure additional hosts. default: true + ssh-user: + description: > + The user to use when connecting to the remote SSH host. By default 'git' is used. + default: git persist-credentials: description: 'Whether to configure the token or SSH key with the local git config' default: true diff --git a/dist/index.js b/dist/index.js index 35f6780de..b21024745 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1798,6 +1798,7 @@ function getInputs() { result.sshKnownHosts = core.getInput('ssh-known-hosts'); result.sshStrict = (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'; + result.sshUser = core.getInput('ssh-user'); // Persist credentials result.persistCredentials = (core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE'; @@ -2400,7 +2401,8 @@ function getFetchUrl(settings) { const encodedOwner = encodeURIComponent(settings.repositoryOwner); const encodedName = encodeURIComponent(settings.repositoryName); if (settings.sshKey) { - return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`; + const user = settings.sshUser.length > 0 ? settings.sshUser : 'git'; + return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`; } // "origin" is SCHEME://HOSTNAME[:PORT] return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts index 629350b2c..4e41ac302 100644 --- a/src/git-source-settings.ts +++ b/src/git-source-settings.ts @@ -94,6 +94,11 @@ export interface IGitSourceSettings { */ sshStrict: boolean + /** + * The SSH user to login as + */ + sshUser: string + /** * Indicates whether to persist the credentials on disk to enable scripting authenticated git commands */ diff --git a/src/input-helper.ts b/src/input-helper.ts index e546c196d..e230a5518 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -143,6 +143,7 @@ export async function getInputs(): Promise { result.sshKnownHosts = core.getInput('ssh-known-hosts') result.sshStrict = (core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE' + result.sshUser = core.getInput('ssh-user') // Persist credentials result.persistCredentials = diff --git a/src/url-helper.ts b/src/url-helper.ts index 6807b7f8e..64ecbf3fb 100644 --- a/src/url-helper.ts +++ b/src/url-helper.ts @@ -12,7 +12,8 @@ export function getFetchUrl(settings: IGitSourceSettings): string { const encodedOwner = encodeURIComponent(settings.repositoryOwner) const encodedName = encodeURIComponent(settings.repositoryName) if (settings.sshKey) { - return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git` + const user = settings.sshUser.length > 0 ? settings.sshUser : 'git' + return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git` } // "origin" is SCHEME://HOSTNAME[:PORT]