1
0
mirror of https://github.com/actions/checkout.git synced 2026-07-11 19:23:49 +08:00

Compare commits

..

3 Commits

Author SHA1 Message Date
Josh Gross
eef61447b9 Prepare 4.2.1 release (#1925) 2024-10-07 12:38:04 -04:00
Joel Ambass
6b42224f41 Add workflow file for publishing releases to immutable action package (#1919)
This workflow file publishes new action releases to the immutable action package of the same name as this repo.

This is part of the Immutable Actions project which is not yet fully released to the public. First party actions like this one are part of our initial testing of this feature.
2024-10-03 11:03:35 +02:00
Orhan Toy
de5a000abf Check out other refs/* by commit if provided, fall back to ref (#1924) 2024-10-01 20:24:28 -04:00
14 changed files with 48 additions and 79 deletions

View File

@@ -0,0 +1,20 @@
name: 'Publish Immutable Action Version'
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
packages: write
steps:
- name: Checking out
uses: actions/checkout@v4
- name: Publish
id: publish
uses: actions/publish-immutable-action@0.0.3

View File

@@ -1,5 +1,8 @@
# Changelog # Changelog
## v4.2.1
* Check out other refs/* by commit if provided, fall back to ref by @orhantoy in https://github.com/actions/checkout/pull/1924
## v4.2.0 ## v4.2.0
* Add Ref and Commit outputs by @lucacome in https://github.com/actions/checkout/pull/1180 * Add Ref and Commit outputs by @lucacome in https://github.com/actions/checkout/pull/1180

View File

@@ -29,11 +29,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# Otherwise, uses the default branch. # Otherwise, uses the default branch.
ref: '' ref: ''
# Indicates whether to checkout the default repository branch if the requested ref
# does not exist
# Default: false
default-branch-checkout: ''
# Personal access token (PAT) used to fetch the repository. The PAT is configured # Personal access token (PAT) used to fetch the repository. The PAT is configured
# with the local git config, which enables your scripts to run authenticated git # with the local git config, which enables your scripts to run authenticated git
# commands. The post-job step removes the PAT. # commands. The post-job step removes the PAT.

View File

@@ -815,7 +815,6 @@ async function setup(testName: string): Promise<void> {
nestedSubmodules: false, nestedSubmodules: false,
persistCredentials: true, persistCredentials: true,
ref: 'refs/heads/main', ref: 'refs/heads/main',
defaultBranchCheckout: false,
repositoryName: 'my-repo', repositoryName: 'my-repo',
repositoryOwner: 'my-org', repositoryOwner: 'my-org',
repositoryPath: '', repositoryPath: '',

View File

@@ -80,7 +80,6 @@ describe('input-helper tests', () => {
expect(settings.commit).toBeTruthy() expect(settings.commit).toBeTruthy()
expect(settings.commit).toBe('1234567890123456789012345678901234567890') expect(settings.commit).toBe('1234567890123456789012345678901234567890')
expect(settings.filter).toBe(undefined) expect(settings.filter).toBe(undefined)
expect(settings.defaultBranchCheckout).toBe(false)
expect(settings.sparseCheckout).toBe(undefined) expect(settings.sparseCheckout).toBe(undefined)
expect(settings.sparseCheckoutConeMode).toBe(true) expect(settings.sparseCheckoutConeMode).toBe(true)
expect(settings.fetchDepth).toBe(1) expect(settings.fetchDepth).toBe(1)

View File

@@ -77,6 +77,16 @@ describe('ref-helper tests', () => {
expect(checkoutInfo.startPoint).toBeFalsy() expect(checkoutInfo.startPoint).toBeFalsy()
}) })
it('getCheckoutInfo refs/ without commit', async () => {
const checkoutInfo = await refHelper.getCheckoutInfo(
git,
'refs/non-standard-ref',
''
)
expect(checkoutInfo.ref).toBe('refs/non-standard-ref')
expect(checkoutInfo.startPoint).toBeFalsy()
})
it('getCheckoutInfo unqualified branch only', async () => { it('getCheckoutInfo unqualified branch only', async () => {
git.branchExists = jest.fn(async (remote: boolean, pattern: string) => { git.branchExists = jest.fn(async (remote: boolean, pattern: string) => {
return true return true

View File

@@ -9,9 +9,6 @@ inputs:
The branch, tag or SHA to checkout. When checking out the repository that The branch, tag or SHA to checkout. When checking out the repository that
triggered a workflow, this defaults to the reference or SHA for that triggered a workflow, this defaults to the reference or SHA for that
event. Otherwise, uses the default branch. event. Otherwise, uses the default branch.
default-branch-checkout:
description: 'Indicates whether to checkout the default repository branch if the requested ref does not exist'
default: false
token: token:
description: > description: >
Personal access token (PAT) used to fetch the repository. The PAT is configured Personal access token (PAT) used to fetch the repository. The PAT is configured

28
dist/index.js vendored
View File

@@ -1278,7 +1278,7 @@ function getSource(settings) {
else if (settings.sparseCheckout) { else if (settings.sparseCheckout) {
fetchOptions.filter = 'blob:none'; fetchOptions.filter = 'blob:none';
} }
if (settings.fetchDepth <= 0 || settings.defaultBranchCheckout) { if (settings.fetchDepth <= 0) {
// Fetch all branches and tags // Fetch all branches and tags
let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit); let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit);
yield git.fetch(refSpec, fetchOptions); yield git.fetch(refSpec, fetchOptions);
@@ -1298,22 +1298,7 @@ function getSource(settings) {
core.endGroup(); core.endGroup();
// Checkout info // Checkout info
core.startGroup('Determining the checkout info'); core.startGroup('Determining the checkout info');
let checkoutInfo; const checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
try {
checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
}
catch (error) {
if (settings.defaultBranchCheckout) {
core.info('Could not determine the checkout info. Trying the default repository branch');
const repositoryDefaultBranch = settings.sshKey
? yield git.getDefaultBranch(repositoryUrl)
: yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName);
checkoutInfo = yield refHelper.getCheckoutInfo(git, repositoryDefaultBranch, settings.commit);
}
else {
throw error;
}
}
core.endGroup(); core.endGroup();
// LFS fetch // LFS fetch
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time). // Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
@@ -1778,11 +1763,6 @@ function getInputs() {
} }
core.debug(`ref = '${result.ref}'`); core.debug(`ref = '${result.ref}'`);
core.debug(`commit = '${result.commit}'`); core.debug(`commit = '${result.commit}'`);
// Default branch checkout
result.defaultBranchCheckout =
(core.getInput('default-branch-checkout') || 'false').toUpperCase() ===
'TRUE';
core.debug(`default-branch-checkout = '${result.defaultBranchCheckout}'`);
// Clean // Clean
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'; result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE';
core.debug(`clean = ${result.clean}`); core.debug(`clean = ${result.clean}`);
@@ -2025,8 +2005,8 @@ function getCheckoutInfo(git, ref, commit) {
result.ref = ref; result.ref = ref;
} }
// refs/ // refs/
else if (upperRef.startsWith('REFS/') && commit) { else if (upperRef.startsWith('REFS/')) {
result.ref = commit; result.ref = commit ? commit : ref;
} }
// Unqualified ref, check for a matching branch or tag // Unqualified ref, check for a matching branch or tag
else { else {

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "checkout", "name": "checkout",
"version": "4.2.0", "version": "4.2.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "checkout", "name": "checkout",
"version": "4.2.0", "version": "4.2.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.1", "@actions/core": "^1.10.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "checkout", "name": "checkout",
"version": "4.2.0", "version": "4.2.1",
"description": "checkout action", "description": "checkout action",
"main": "lib/main.js", "main": "lib/main.js",
"scripts": { "scripts": {

View File

@@ -169,7 +169,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
fetchOptions.filter = 'blob:none' fetchOptions.filter = 'blob:none'
} }
if (settings.fetchDepth <= 0 || settings.defaultBranchCheckout) { if (settings.fetchDepth <= 0) {
// Fetch all branches and tags // Fetch all branches and tags
let refSpec = refHelper.getRefSpecForAllHistory( let refSpec = refHelper.getRefSpecForAllHistory(
settings.ref, settings.ref,
@@ -193,34 +193,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Checkout info // Checkout info
core.startGroup('Determining the checkout info') core.startGroup('Determining the checkout info')
let checkoutInfo: refHelper.ICheckoutInfo const checkoutInfo = await refHelper.getCheckoutInfo(
try { git,
checkoutInfo = await refHelper.getCheckoutInfo( settings.ref,
git, settings.commit
settings.ref, )
settings.commit
)
} catch (error) {
if (settings.defaultBranchCheckout) {
core.info(
'Could not determine the checkout info. Trying the default repository branch'
)
const repositoryDefaultBranch = settings.sshKey
? await git.getDefaultBranch(repositoryUrl)
: await githubApiHelper.getDefaultBranch(
settings.authToken,
settings.repositoryOwner,
settings.repositoryName
)
checkoutInfo = await refHelper.getCheckoutInfo(
git,
repositoryDefaultBranch,
settings.commit
)
} else {
throw error
}
}
core.endGroup() core.endGroup()
// LFS fetch // LFS fetch

View File

@@ -19,11 +19,6 @@ export interface IGitSourceSettings {
*/ */
ref: string ref: string
/**
* Indicates whether to checkout the default repository branch if the requested ref does not exist
*/
defaultBranchCheckout: boolean
/** /**
* The commit to checkout * The commit to checkout
*/ */

View File

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

View File

@@ -46,8 +46,8 @@ export async function getCheckoutInfo(
result.ref = ref result.ref = ref
} }
// refs/ // refs/
else if (upperRef.startsWith('REFS/') && commit) { else if (upperRef.startsWith('REFS/')) {
result.ref = commit result.ref = commit ? commit : ref
} }
// Unqualified ref, check for a matching branch or tag // Unqualified ref, check for a matching branch or tag
else { else {