add our feature

This commit is contained in:
alexanderkranga 2024-02-06 15:30:36 +02:00
parent b4ffde65f4
commit e72243fb91
7 changed files with 101 additions and 8 deletions

View file

@ -130,6 +130,21 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
await authHelper.configureAuth()
core.endGroup()
if (settings.defaultRefOnError && settings.defaultRefOnError === true) {
// Configure default branch
core.startGroup('Setting up default branch')
if (settings.sshKey) {
settings.defaultBranch = await git.getDefaultBranch(repositoryUrl)
} else {
settings.defaultBranch = await githubApiHelper.getDefaultBranch(
settings.authToken,
settings.repositoryOwner,
settings.repositoryName
)
}
core.endGroup()
}
// Determine the default branch
if (!settings.ref && !settings.commit) {
core.startGroup('Determining the default branch')
@ -166,7 +181,10 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
fetchOptions.filter = 'blob:none'
}
if (settings.fetchDepth <= 0) {
if (
settings.fetchDepth <= 0 ||
(settings.defaultRefOnError && settings.defaultRefOnError === true)
) {
// Fetch all branches and tags
let refSpec = refHelper.getRefSpecForAllHistory(
settings.ref,
@ -190,11 +208,31 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Checkout info
core.startGroup('Determining the checkout info')
const checkoutInfo = await refHelper.getCheckoutInfo(
git,
settings.ref,
settings.commit
)
let checkoutInfo: refHelper.ICheckoutInfo
if (settings.defaultRefOnError && settings.defaultRefOnError === true) {
try {
checkoutInfo = await refHelper.getCheckoutInfo(
git,
settings.ref,
settings.commit
)
} catch (error) {
core.info(
'Could not determine the checkout info. Trying the default repo branch'
)
checkoutInfo = await refHelper.getCheckoutInfo(
git,
settings.defaultBranch,
settings.commit
)
}
} else {
checkoutInfo = await refHelper.getCheckoutInfo(
git,
settings.ref,
settings.commit
)
}
core.endGroup()
// LFS fetch

View file

@ -19,6 +19,16 @@ export interface IGitSourceSettings {
*/
ref: string
/**
* Whether to checkout the default repository branch if specified ref does not exist.
*/
defaultRefOnError: boolean
/**
* The target ref to fetch if it exists
*/
defaultBranch: string
/**
* The commit to checkout
*/

View file

@ -78,6 +78,11 @@ export async function getInputs(): Promise<IGitSourceSettings> {
core.debug(`ref = '${result.ref}'`)
core.debug(`commit = '${result.commit}'`)
// Default ref on error
result.defaultRefOnError =
(core.getInput('default-ref-on-error') || 'true').toUpperCase() === 'TRUE'
core.debug(`default-ref-on-error = '${result.defaultRefOnError}'`)
// Clean
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
core.debug(`clean = ${result.clean}`)