Add ability to set credential provider for the LFS server

This commit is contained in:
Matthew Endsley 2022-10-12 12:09:34 -07:00
parent 5262024a96
commit fd6a72039b
6 changed files with 47 additions and 2 deletions

View file

@ -86,6 +86,10 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl
# Default: https://lfscache.office.playeveryware.com/${{ github.repository }}
lfs-url: ''
# Credential provider for the Git-LFS server
# Default: github
lfs-url-cred-provider: ''
# Whether to checkout submodules: `true` to checkout submodules or `recursive` to
# recursively checkout submodules.
#

View file

@ -62,6 +62,9 @@ inputs:
lfs-url:
description: 'URL to use when fetching Git-LFS files'
default: 'https://lfscache.office.playeveryware.com/${{ github.repository }}'
lfs-url-cred-provider:
description: 'Credential provider for the Git-LFS server'
default: 'github'
submodules:
description: >
Whether to checkout submodules: `true` to checkout submodules or `recursive` to

17
dist/index.js vendored
View file

@ -18456,6 +18456,7 @@ function getInputs() {
// LFS
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
result.lfsurl = (core.getInput('lfs-url') || '');
result.lfsCredProvider = (core.getInput('lfs-url-cred-provider') || '');
core.debug(`lfs = ${result.lfs}`);
// Submodules
result.submodules = false;
@ -31808,6 +31809,7 @@ const path = __importStar(__webpack_require__(622));
const refHelper = __importStar(__webpack_require__(227));
const stateHelper = __importStar(__webpack_require__(153));
const urlHelper = __importStar(__webpack_require__(81));
const url_1 = __webpack_require__(835);
function getSource(settings) {
return __awaiter(this, void 0, void 0, function* () {
// Repository URL
@ -31924,12 +31926,25 @@ function getSource(settings) {
// LFS URL
if (settings.lfs && settings.lfsurl) {
core.startGroup('Setting LFS URL');
let remote = new url_1.URL(settings.lfsurl);
remote.password = core.getInput('token');
yield git
.config('lfs.url', settings.lfsurl, false, false)
.config('lfs.url', remote.href, false, false)
.catch(error => {
core.info(`Failed to initialize safe directory with error: ${error}`);
});
core.endGroup();
if (settings.lfsCredProvider) {
core.startGroup('Setting LFS credential provider');
let url = new url_1.URL(settings.lfsurl);
let key = 'credential.' + url.host + '.provider';
yield git
.config(key, settings.lfsCredProvider, false, false)
.catch(error => {
core.info(`Failed to initialize safe directory with error: ${error}`);
});
core.endGroup();
}
}
// LFS fetch
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).

View file

@ -11,6 +11,7 @@ import * as stateHelper from './state-helper'
import * as urlHelper from './url-helper'
import {IGitCommandManager} from './git-command-manager'
import {IGitSourceSettings} from './git-source-settings'
import {URL} from "url";
export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Repository URL
@ -185,14 +186,30 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// LFS URL
if (settings.lfs && settings.lfsurl) {
core.startGroup('Setting LFS URL')
let remote = new URL(settings.lfsurl)
remote.password = core.getInput('token')
await git
.config('lfs.url', settings.lfsurl, false, false)
.config('lfs.url', remote.href, false, false)
.catch(error => {
core.info(
`Failed to initialize safe directory with error: ${error}`
)
})
core.endGroup()
if (settings.lfsCredProvider) {
core.startGroup('Setting LFS credential provider')
let url = new URL(settings.lfsurl);
let key = 'credential.' + url.host + '.provider'
await git
.config(key, settings.lfsCredProvider, false, false)
.catch(error => {
core.info(
`Failed to initialize safe directory with error: ${error}`
)
})
core.endGroup()
}
}
// LFS fetch

View file

@ -44,6 +44,11 @@ export interface IGitSourceSettings {
*/
lfsurl: string
/**
* The credential provider to usse for the Git LFS server
*/
lfsCredProvider: string
/**
* Indicates whether to checkout submodules
*/

View file

@ -92,6 +92,7 @@ export async function getInputs(): Promise<IGitSourceSettings> {
// LFS
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'
result.lfsurl = (core.getInput('lfs-url') || '')
result.lfsCredProvider = (core.getInput('lfs-url-cred-provider') || '')
core.debug(`lfs = ${result.lfs}`)
// Submodules