diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f40def..d3d2627 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,20 +1,9 @@ # Changelog -## v2.3.1 - -- [Fix default branch resolution for .wiki and when using SSH](https://github.com/actions/checkout/pull/284) - - -## v2.3.0 - -- [Fallback to the default branch](https://github.com/actions/checkout/pull/278) - ## v2.2.0 - - [Fetch all history for all tags and branches when fetch-depth=0](https://github.com/actions/checkout/pull/258) ## v2.1.1 - - Changes to support GHES ([here](https://github.com/actions/checkout/pull/236) and [here](https://github.com/actions/checkout/pull/248)) ## v2.1.0 diff --git a/README.md b/README.md index c2bd069..9104f8b 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous # 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 event. - # Otherwise, uses the default branch. + # Otherwise, defaults to `master`. ref: '' # Personal access token (PAT) used to fetch the repository. The PAT is configured @@ -89,7 +89,7 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous # Default: true clean: '' - # Number of commits to fetch. 0 indicates all history for all branches and tags. + # Number of commits to fetch. 0 indicates all history. # Default: 1 fetch-depth: '' diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index e4e640c..92a462a 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -714,7 +714,6 @@ async function setup(testName: string): Promise { ), env: {}, fetch: jest.fn(), - getDefaultBranch: jest.fn(), getWorkingDirectory: jest.fn(() => workspace), init: jest.fn(), isDetached: jest.fn(), diff --git a/__test__/git-directory-helper.test.ts b/__test__/git-directory-helper.test.ts index 70849b5..7283102 100644 --- a/__test__/git-directory-helper.test.ts +++ b/__test__/git-directory-helper.test.ts @@ -408,7 +408,6 @@ async function setup(testName: string): Promise { config: jest.fn(), configExists: jest.fn(), fetch: jest.fn(), - getDefaultBranch: jest.fn(), getWorkingDirectory: jest.fn(() => repositoryPath), init: jest.fn(), isDetached: jest.fn(), diff --git a/__test__/input-helper.test.ts b/__test__/input-helper.test.ts index 920bc8e..00732ef 100644 --- a/__test__/input-helper.test.ts +++ b/__test__/input-helper.test.ts @@ -110,6 +110,13 @@ describe('input-helper tests', () => { ) }) + it('sets correct default ref/sha for other repo', () => { + inputs.repository = 'some-owner/some-other-repo' + const settings: IGitSourceSettings = inputHelper.getInputs() + expect(settings.ref).toBe('refs/heads/master') + expect(settings.commit).toBeFalsy() + }) + it('sets ref to empty when explicit sha', () => { inputs.ref = '1111111111222222222233333333334444444444' const settings: IGitSourceSettings = inputHelper.getInputs() diff --git a/__test__/verify-no-unstaged-changes.sh b/__test__/verify-no-unstaged-changes.sh index 9b30471..9fe6173 100755 --- a/__test__/verify-no-unstaged-changes.sh +++ b/__test__/verify-no-unstaged-changes.sh @@ -12,6 +12,6 @@ if [[ "$(git status --porcelain)" != "" ]]; then echo ---------------------------------------- echo Troubleshooting echo ---------------------------------------- - echo "::error::Unstaged changes detected. Locally try running: git clean -ffdx && npm ci && npm run format && npm run build" + echo "::error::Unstaged changes detected. Locally try running: git clean -ffdx && npm ci && npm run all" exit 1 fi diff --git a/action.yml b/action.yml index 91d3982..58e11b7 100644 --- a/action.yml +++ b/action.yml @@ -8,7 +8,7 @@ inputs: description: > 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 - event. Otherwise, uses the default branch. + event. Otherwise, defaults to `master`. token: description: > Personal access token (PAT) used to fetch the repository. The PAT is configured @@ -54,7 +54,7 @@ inputs: description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' default: true fetch-depth: - description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' + description: 'Number of commits to fetch. 0 indicates all history.' default: 1 lfs: description: 'Whether to download Git-LFS files' diff --git a/dist/index.js b/dist/index.js index e0d0238..0c78d25 100644 --- a/dist/index.js +++ b/dist/index.js @@ -5827,33 +5827,6 @@ class GitCommandManager { })); }); } - getDefaultBranch(repositoryUrl) { - return __awaiter(this, void 0, void 0, function* () { - let output; - yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { - output = yield this.execGit([ - 'ls-remote', - '--quiet', - '--exit-code', - '--symref', - repositoryUrl, - 'HEAD' - ]); - })); - if (output) { - // Satisfy compiler, will always be set - for (let line of output.stdout.trim().split('\n')) { - line = line.trim(); - if (line.startsWith('ref:') || line.endsWith('HEAD')) { - return line - .substr('ref:'.length, line.length - 'ref:'.length - 'HEAD'.length) - .trim(); - } - } - } - throw new Error('Unexpected output when retrieving default branch'); - }); - } getWorkingDirectory() { return this.workingDirectory; } @@ -6193,17 +6166,6 @@ function getSource(settings) { core.startGroup('Setting up auth'); yield authHelper.configureAuth(); core.endGroup(); - // Determine the default branch - if (!settings.ref && !settings.commit) { - core.startGroup('Determining the default branch'); - if (settings.sshKey) { - settings.ref = yield git.getDefaultBranch(repositoryUrl); - } - else { - settings.ref = yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName); - } - core.endGroup(); - } // LFS install if (settings.lfs) { yield git.lfsInstall(); @@ -9563,11 +9525,6 @@ const v4_1 = __importDefault(__webpack_require__(826)); const IS_WINDOWS = process.platform === 'win32'; function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) { return __awaiter(this, void 0, void 0, function* () { - // Determine the default branch - if (!ref && !commit) { - core.info('Determining the default branch'); - ref = yield getDefaultBranch(authToken, owner, repo); - } // Download the archive let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { core.info('Downloading the archive'); @@ -9612,42 +9569,6 @@ function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) }); } exports.downloadRepository = downloadRepository; -/** - * Looks up the default branch name - */ -function getDefaultBranch(authToken, owner, repo) { - return __awaiter(this, void 0, void 0, function* () { - return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { - core.info('Retrieving the default branch name'); - const octokit = new github.GitHub(authToken); - let result; - try { - // Get the default branch from the repo info - const response = yield octokit.repos.get({ owner, repo }); - result = response.data.default_branch; - assert.ok(result, 'default_branch cannot be empty'); - } - catch (err) { - // Handle .wiki repo - if (err['status'] === 404 && repo.toUpperCase().endsWith('.WIKI')) { - result = 'master'; - } - // Otherwise error - else { - throw err; - } - } - // Print the default branch - core.info(`Default branch '${result}'`); - // Prefix with 'refs/heads' - if (!result.startsWith('refs/')) { - result = `refs/heads/${result}`; - } - return result; - })); - }); -} -exports.getDefaultBranch = getDefaultBranch; function downloadArchive(authToken, owner, repo, ref, commit) { return __awaiter(this, void 0, void 0, function* () { const octokit = new github.GitHub(authToken); @@ -14550,6 +14471,9 @@ function getInputs() { result.ref = `refs/heads/${result.ref}`; } } + if (!result.ref && !result.commit) { + result.ref = 'refs/heads/master'; + } } // SHA? else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) { @@ -14584,7 +14508,7 @@ function getInputs() { core.debug(`submodules = ${result.submodules}`); core.debug(`recursive submodules = ${result.nestedSubmodules}`); // Auth token - result.authToken = core.getInput('token', { required: true }); + result.authToken = core.getInput('token'); // SSH result.sshKey = core.getInput('ssh-key'); result.sshKnownHosts = core.getInput('ssh-known-hosts'); diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 8bf3aa1..9d2d45f 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -25,7 +25,6 @@ export interface IGitCommandManager { ): Promise configExists(configKey: string, globalConfig?: boolean): Promise fetch(refSpec: string[], fetchDepth?: number): Promise - getDefaultBranch(repositoryUrl: string): Promise getWorkingDirectory(): string init(): Promise isDetached(): Promise @@ -196,34 +195,6 @@ class GitCommandManager { }) } - async getDefaultBranch(repositoryUrl: string): Promise { - let output: GitOutput | undefined - await retryHelper.execute(async () => { - output = await this.execGit([ - 'ls-remote', - '--quiet', - '--exit-code', - '--symref', - repositoryUrl, - 'HEAD' - ]) - }) - - if (output) { - // Satisfy compiler, will always be set - for (let line of output.stdout.trim().split('\n')) { - line = line.trim() - if (line.startsWith('ref:') || line.endsWith('HEAD')) { - return line - .substr('ref:'.length, line.length - 'ref:'.length - 'HEAD'.length) - .trim() - } - } - } - - throw new Error('Unexpected output when retrieving default branch') - } - getWorkingDirectory(): string { return this.workingDirectory } diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 366ff33..89c16b5 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -103,21 +103,6 @@ export async function getSource(settings: IGitSourceSettings): Promise { await authHelper.configureAuth() core.endGroup() - // Determine the default branch - if (!settings.ref && !settings.commit) { - core.startGroup('Determining the default branch') - if (settings.sshKey) { - settings.ref = await git.getDefaultBranch(repositoryUrl) - } else { - settings.ref = await githubApiHelper.getDefaultBranch( - settings.authToken, - settings.repositoryOwner, - settings.repositoryName - ) - } - core.endGroup() - } - // LFS install if (settings.lfs) { await git.lfsInstall() diff --git a/src/github-api-helper.ts b/src/github-api-helper.ts index 8bbcf2d..e559c45 100644 --- a/src/github-api-helper.ts +++ b/src/github-api-helper.ts @@ -19,12 +19,6 @@ export async function downloadRepository( commit: string, repositoryPath: string ): Promise { - // Determine the default branch - if (!ref && !commit) { - core.info('Determining the default branch') - ref = await getDefaultBranch(authToken, owner, repo) - } - // Download the archive let archiveData = await retryHelper.execute(async () => { core.info('Downloading the archive') @@ -73,46 +67,6 @@ export async function downloadRepository( io.rmRF(extractPath) } -/** - * Looks up the default branch name - */ -export async function getDefaultBranch( - authToken: string, - owner: string, - repo: string -): Promise { - return await retryHelper.execute(async () => { - core.info('Retrieving the default branch name') - const octokit = new github.GitHub(authToken) - let result: string - try { - // Get the default branch from the repo info - const response = await octokit.repos.get({owner, repo}) - result = response.data.default_branch - assert.ok(result, 'default_branch cannot be empty') - } catch (err) { - // Handle .wiki repo - if (err['status'] === 404 && repo.toUpperCase().endsWith('.WIKI')) { - result = 'master' - } - // Otherwise error - else { - throw err - } - } - - // Print the default branch - core.info(`Default branch '${result}'`) - - // Prefix with 'refs/heads' - if (!result.startsWith('refs/')) { - result = `refs/heads/${result}` - } - - return result - }) -} - async function downloadArchive( authToken: string, owner: string, diff --git a/src/input-helper.ts b/src/input-helper.ts index eabb9e0..11a1ab6 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -68,6 +68,10 @@ export function getInputs(): IGitSourceSettings { result.ref = `refs/heads/${result.ref}` } } + + if (!result.ref && !result.commit) { + result.ref = 'refs/heads/master' + } } // SHA? else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) { @@ -106,7 +110,7 @@ export function getInputs(): IGitSourceSettings { core.debug(`recursive submodules = ${result.nestedSubmodules}`) // Auth token - result.authToken = core.getInput('token', {required: true}) + result.authToken = core.getInput('token') // SSH result.sshKey = core.getInput('ssh-key')