mirror of
				https://github.com/actions/checkout.git
				synced 2025-11-01 06:18:06 +08:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			dependabot
			...
			d3fe023418
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | d3fe023418 | ||
|  | d86d1a437e | ||
|  | fe77b196f4 | 
							
								
								
									
										20
									
								
								.github/workflows/publish-immutable-actions.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/publish-immutable-actions.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,20 +0,0 @@ | |||||||
| 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 |  | ||||||
							
								
								
									
										7
									
								
								.github/workflows/update-main-version.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/update-main-version.yml
									
									
									
									
										vendored
									
									
								
							| @@ -18,6 +18,9 @@ on: | |||||||
| jobs: | jobs: | ||||||
|   tag: |   tag: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |     env: | ||||||
|  |       TARGET: ${{ github.event.inputs.target }} | ||||||
|  |       MAIN_VERSION: ${{ github.event.inputs.major_version }} | ||||||
|     steps: |     steps: | ||||||
|     # Note this update workflow can also be used as a rollback tool. |     # Note this update workflow can also be used as a rollback tool. | ||||||
|     # For that reason, it's best to pin `actions/checkout` to a known, stable version |     # For that reason, it's best to pin `actions/checkout` to a known, stable version | ||||||
| @@ -30,6 +33,6 @@ jobs: | |||||||
|         git config user.name "github-actions[bot]" |         git config user.name "github-actions[bot]" | ||||||
|         git config user.email "41898282+github-actions[bot]@users.noreply.github.com" |         git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | ||||||
|     - name: Tag new target |     - name: Tag new target | ||||||
|       run: git tag -f ${{ github.event.inputs.major_version }} ${{ github.event.inputs.target }} |       run: git tag -f "$MAIN_VERSION" "$TARGET" | ||||||
|     - name: Push new tag |     - name: Push new tag | ||||||
|       run: git push origin ${{ github.event.inputs.major_version }} --force |       run: git push origin "$MAIN_VERSION" --force | ||||||
|   | |||||||
| @@ -1,12 +1,5 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
| ## v4.2.2 |  | ||||||
| * `url-helper.ts` now leverages well-known environment variables by @jww3 in https://github.com/actions/checkout/pull/1941 |  | ||||||
| * Expand unit test coverage for `isGhes` by @jww3 in https://github.com/actions/checkout/pull/1946 |  | ||||||
|  |  | ||||||
| ## 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 | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								README.md
									
									
									
									
									
								
							| @@ -143,7 +143,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/ | |||||||
| - [Checkout pull request HEAD commit instead of merge commit](#Checkout-pull-request-HEAD-commit-instead-of-merge-commit) | - [Checkout pull request HEAD commit instead of merge commit](#Checkout-pull-request-HEAD-commit-instead-of-merge-commit) | ||||||
| - [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event) | - [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event) | ||||||
| - [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token) | - [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token) | ||||||
| - [Push a commit to a PR using the built-in token](#Push-a-commit-to-a-PR-using-the-built-in-token) |  | ||||||
|  |  | ||||||
| ## Fetch only the root files | ## Fetch only the root files | ||||||
|  |  | ||||||
| @@ -212,7 +211,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/ | |||||||
|     repository: my-org/my-tools |     repository: my-org/my-tools | ||||||
|     path: my-tools |     path: my-tools | ||||||
| ``` | ``` | ||||||
| > - If your secondary repository is private or internal you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private) | > - If your secondary repository is private you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private) | ||||||
|  |  | ||||||
| ## Checkout multiple repos (nested) | ## Checkout multiple repos (nested) | ||||||
|  |  | ||||||
| @@ -226,7 +225,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/ | |||||||
|     repository: my-org/my-tools |     repository: my-org/my-tools | ||||||
|     path: my-tools |     path: my-tools | ||||||
| ``` | ``` | ||||||
| > - If your secondary repository is private or internal you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private) | > - If your secondary repository is private you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private) | ||||||
|  |  | ||||||
| ## Checkout multiple repos (private) | ## Checkout multiple repos (private) | ||||||
|  |  | ||||||
| @@ -289,31 +288,6 @@ jobs: | |||||||
| ``` | ``` | ||||||
| *NOTE:* The user email is `{user.id}+{user.login}@users.noreply.github.com`. See users API: https://api.github.com/users/github-actions%5Bbot%5D | *NOTE:* The user email is `{user.id}+{user.login}@users.noreply.github.com`. See users API: https://api.github.com/users/github-actions%5Bbot%5D | ||||||
|  |  | ||||||
| ## Push a commit to a PR using the built-in token |  | ||||||
|  |  | ||||||
| In a pull request trigger, `ref` is required as GitHub Actions checks out in detached HEAD mode, meaning it doesn’t check out your branch by default. |  | ||||||
|  |  | ||||||
| ```yaml |  | ||||||
| on: pull_request |  | ||||||
| jobs: |  | ||||||
|   build: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@v4 |  | ||||||
|         with: |  | ||||||
|           ref: ${{ github.head_ref }} |  | ||||||
|       - run: | |  | ||||||
|           date > generated.txt |  | ||||||
|           # Note: the following account information will not work on GHES |  | ||||||
|           git config user.name "github-actions[bot]" |  | ||||||
|           git config user.email "41898282+github-actions[bot]@users.noreply.github.com" |  | ||||||
|           git add . |  | ||||||
|           git commit -m "generated" |  | ||||||
|           git push |  | ||||||
| ``` |  | ||||||
| *NOTE:* The user email is `{user.id}+{user.login}@users.noreply.github.com`. See users API: https://api.github.com/users/github-actions%5Bbot%5D |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # License | # License | ||||||
|  |  | ||||||
| The scripts and documentation in this project are released under the [MIT License](LICENSE) | The scripts and documentation in this project are released under the [MIT License](LICENSE) | ||||||
|   | |||||||
| @@ -77,16 +77,6 @@ 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 | ||||||
|   | |||||||
| @@ -1,92 +0,0 @@ | |||||||
| import * as urlHelper from '../src/url-helper' |  | ||||||
|  |  | ||||||
| describe('getServerUrl tests', () => { |  | ||||||
|   it('basics', async () => { |  | ||||||
|     // Note that URL::toString will append a trailing / when passed just a domain name ... |  | ||||||
|     expect(urlHelper.getServerUrl().toString()).toBe('https://github.com/') |  | ||||||
|     expect(urlHelper.getServerUrl(' ').toString()).toBe('https://github.com/') |  | ||||||
|     expect(urlHelper.getServerUrl('   ').toString()).toBe('https://github.com/') |  | ||||||
|     expect(urlHelper.getServerUrl('http://contoso.com').toString()).toBe( |  | ||||||
|       'http://contoso.com/' |  | ||||||
|     ) |  | ||||||
|     expect(urlHelper.getServerUrl('https://contoso.com').toString()).toBe( |  | ||||||
|       'https://contoso.com/' |  | ||||||
|     ) |  | ||||||
|     expect(urlHelper.getServerUrl('https://contoso.com/').toString()).toBe( |  | ||||||
|       'https://contoso.com/' |  | ||||||
|     ) |  | ||||||
|  |  | ||||||
|     // ... but can't make that same assumption when passed an URL that includes some deeper path. |  | ||||||
|     expect(urlHelper.getServerUrl('https://contoso.com/a/b').toString()).toBe( |  | ||||||
|       'https://contoso.com/a/b' |  | ||||||
|     ) |  | ||||||
|   }) |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| describe('isGhes tests', () => { |  | ||||||
|   const pristineEnv = process.env |  | ||||||
|  |  | ||||||
|   beforeEach(() => { |  | ||||||
|     jest.resetModules() |  | ||||||
|     process.env = {...pristineEnv} |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   afterAll(() => { |  | ||||||
|     process.env = pristineEnv |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('basics', async () => { |  | ||||||
|     delete process.env['GITHUB_SERVER_URL'] |  | ||||||
|     expect(urlHelper.isGhes()).toBeFalsy() |  | ||||||
|     expect(urlHelper.isGhes('https://github.com')).toBeFalsy() |  | ||||||
|     expect(urlHelper.isGhes('https://contoso.ghe.com')).toBeFalsy() |  | ||||||
|     expect(urlHelper.isGhes('https://test.github.localhost')).toBeFalsy() |  | ||||||
|     expect(urlHelper.isGhes('https://src.onpremise.fabrikam.com')).toBeTruthy() |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('returns false when the GITHUB_SERVER_URL environment variable is not defined', async () => { |  | ||||||
|     delete process.env['GITHUB_SERVER_URL'] |  | ||||||
|     expect(urlHelper.isGhes()).toBeFalsy() |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('returns false when the GITHUB_SERVER_URL environment variable is set to github.com', async () => { |  | ||||||
|     process.env['GITHUB_SERVER_URL'] = 'https://github.com' |  | ||||||
|     expect(urlHelper.isGhes()).toBeFalsy() |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('returns false when the GITHUB_SERVER_URL environment variable is set to a GitHub Enterprise Cloud-style URL', async () => { |  | ||||||
|     process.env['GITHUB_SERVER_URL'] = 'https://contoso.ghe.com' |  | ||||||
|     expect(urlHelper.isGhes()).toBeFalsy() |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('returns false when the GITHUB_SERVER_URL environment variable has a .localhost suffix', async () => { |  | ||||||
|     process.env['GITHUB_SERVER_URL'] = 'https://mock-github.localhost' |  | ||||||
|     expect(urlHelper.isGhes()).toBeFalsy() |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   it('returns true when the GITHUB_SERVER_URL environment variable is set to some other URL', async () => { |  | ||||||
|     process.env['GITHUB_SERVER_URL'] = 'https://src.onpremise.fabrikam.com' |  | ||||||
|     expect(urlHelper.isGhes()).toBeTruthy() |  | ||||||
|   }) |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| describe('getServerApiUrl tests', () => { |  | ||||||
|   it('basics', async () => { |  | ||||||
|     expect(urlHelper.getServerApiUrl()).toBe('https://api.github.com') |  | ||||||
|     expect(urlHelper.getServerApiUrl('https://github.com')).toBe( |  | ||||||
|       'https://api.github.com' |  | ||||||
|     ) |  | ||||||
|     expect(urlHelper.getServerApiUrl('https://GitHub.com')).toBe( |  | ||||||
|       'https://api.github.com' |  | ||||||
|     ) |  | ||||||
|     expect(urlHelper.getServerApiUrl('https://contoso.ghe.com')).toBe( |  | ||||||
|       'https://api.contoso.ghe.com' |  | ||||||
|     ) |  | ||||||
|     expect(urlHelper.getServerApiUrl('https://fabrikam.GHE.COM')).toBe( |  | ||||||
|       'https://api.fabrikam.ghe.com' |  | ||||||
|     ) |  | ||||||
|     expect( |  | ||||||
|       urlHelper.getServerApiUrl('https://src.onpremise.fabrikam.com') |  | ||||||
|     ).toBe('https://src.onpremise.fabrikam.com/api/v3') |  | ||||||
|   }) |  | ||||||
| }) |  | ||||||
							
								
								
									
										54
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										54
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -2005,8 +2005,8 @@ function getCheckoutInfo(git, ref, commit) { | |||||||
|             result.ref = ref; |             result.ref = ref; | ||||||
|         } |         } | ||||||
|         // refs/
 |         // refs/
 | ||||||
|         else if (upperRef.startsWith('REFS/')) { |         else if (upperRef.startsWith('REFS/') && commit) { | ||||||
|             result.ref = commit ? commit : ref; |             result.ref = commit; | ||||||
|         } |         } | ||||||
|         // Unqualified ref, check for a matching branch or tag
 |         // Unqualified ref, check for a matching branch or tag
 | ||||||
|         else { |         else { | ||||||
| @@ -2454,50 +2454,22 @@ function getFetchUrl(settings) { | |||||||
|     return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; |     return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; | ||||||
| } | } | ||||||
| function getServerUrl(url) { | function getServerUrl(url) { | ||||||
|     let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'; |     let urlValue = url && url.trim().length > 0 | ||||||
|     if (hasContent(url, WhitespaceMode.Trim)) { |         ? url | ||||||
|         resolvedUrl = url; |         : process.env['GITHUB_SERVER_URL'] || 'https://github.com'; | ||||||
|     } |     return new url_1.URL(urlValue); | ||||||
|     return new url_1.URL(resolvedUrl); |  | ||||||
| } | } | ||||||
| function getServerApiUrl(url) { | function getServerApiUrl(url) { | ||||||
|     if (hasContent(url, WhitespaceMode.Trim)) { |     let apiUrl = 'https://api.github.com'; | ||||||
|         let serverUrl = getServerUrl(url); |     if (isGhes(url)) { | ||||||
|         if (isGhes(url)) { |         const serverUrl = getServerUrl(url); | ||||||
|             serverUrl.pathname = 'api/v3'; |         apiUrl = new url_1.URL(`${serverUrl.origin}/api/v3`).toString(); | ||||||
|         } |  | ||||||
|         else { |  | ||||||
|             serverUrl.hostname = 'api.' + serverUrl.hostname; |  | ||||||
|         } |  | ||||||
|         return pruneSuffix(serverUrl.toString(), '/'); |  | ||||||
|     } |     } | ||||||
|     return process.env['GITHUB_API_URL'] || 'https://api.github.com'; |     return apiUrl; | ||||||
| } | } | ||||||
| function isGhes(url) { | function isGhes(url) { | ||||||
|     const ghUrl = new url_1.URL(url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'); |     const ghUrl = getServerUrl(url); | ||||||
|     const hostname = ghUrl.hostname.trimEnd().toUpperCase(); |     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; | ||||||
|     const isGitHubHost = hostname === 'GITHUB.COM'; |  | ||||||
|     const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM'); |  | ||||||
|     const isLocalHost = hostname.endsWith('.LOCALHOST'); |  | ||||||
|     return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost; |  | ||||||
| } |  | ||||||
| function pruneSuffix(text, suffix) { |  | ||||||
|     if (hasContent(suffix, WhitespaceMode.Preserve) && (text === null || text === void 0 ? void 0 : text.endsWith(suffix))) { |  | ||||||
|         return text.substring(0, text.length - suffix.length); |  | ||||||
|     } |  | ||||||
|     return text; |  | ||||||
| } |  | ||||||
| var WhitespaceMode; |  | ||||||
| (function (WhitespaceMode) { |  | ||||||
|     WhitespaceMode[WhitespaceMode["Trim"] = 0] = "Trim"; |  | ||||||
|     WhitespaceMode[WhitespaceMode["Preserve"] = 1] = "Preserve"; |  | ||||||
| })(WhitespaceMode || (WhitespaceMode = {})); |  | ||||||
| function hasContent(text, whitespaceMode) { |  | ||||||
|     let refinedText = text !== null && text !== void 0 ? text : ''; |  | ||||||
|     if (whitespaceMode == WhitespaceMode.Trim) { |  | ||||||
|         refinedText = refinedText.trim(); |  | ||||||
|     } |  | ||||||
|     return refinedText.length > 0; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   | |||||||
							
								
								
									
										70
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										70
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,15 +1,15 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.2.2", |   "version": "4.2.0", | ||||||
|   "lockfileVersion": 3, |   "lockfileVersion": 3, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "packages": { |   "packages": { | ||||||
|     "": { |     "": { | ||||||
|       "name": "checkout", |       "name": "checkout", | ||||||
|       "version": "4.2.2", |       "version": "4.2.0", | ||||||
|       "license": "MIT", |       "license": "MIT", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/core": "^1.11.1", |         "@actions/core": "^1.10.1", | ||||||
|         "@actions/exec": "^1.1.1", |         "@actions/exec": "^1.1.1", | ||||||
|         "@actions/github": "^6.0.0", |         "@actions/github": "^6.0.0", | ||||||
|         "@actions/io": "^1.1.3", |         "@actions/io": "^1.1.3", | ||||||
| @@ -17,21 +17,21 @@ | |||||||
|         "uuid": "^9.0.1" |         "uuid": "^9.0.1" | ||||||
|       }, |       }, | ||||||
|       "devDependencies": { |       "devDependencies": { | ||||||
|         "@types/jest": "^29.5.14", |         "@types/jest": "^29.5.12", | ||||||
|         "@types/node": "^20.12.12", |         "@types/node": "^20.12.12", | ||||||
|         "@types/uuid": "^9.0.8", |         "@types/uuid": "^9.0.8", | ||||||
|         "@typescript-eslint/eslint-plugin": "^7.9.0", |         "@typescript-eslint/eslint-plugin": "^7.9.0", | ||||||
|         "@typescript-eslint/parser": "^7.9.0", |         "@typescript-eslint/parser": "^7.9.0", | ||||||
|         "@vercel/ncc": "^0.38.3", |         "@vercel/ncc": "^0.38.1", | ||||||
|         "eslint": "^8.57.0", |         "eslint": "^8.57.0", | ||||||
|         "eslint-plugin-github": "^4.10.2", |         "eslint-plugin-github": "^4.10.2", | ||||||
|         "eslint-plugin-jest": "^28.9.0", |         "eslint-plugin-jest": "^28.8.2", | ||||||
|         "jest": "^29.7.0", |         "jest": "^29.7.0", | ||||||
|         "jest-circus": "^29.7.0", |         "jest-circus": "^29.7.0", | ||||||
|         "js-yaml": "^4.1.0", |         "js-yaml": "^4.1.0", | ||||||
|         "prettier": "^3.4.1", |         "prettier": "^3.3.3", | ||||||
|         "ts-jest": "^29.2.5", |         "ts-jest": "^29.2.5", | ||||||
|         "typescript": "^5.7.2" |         "typescript": "^5.5.4" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@aashutoshrathi/word-wrap": { |     "node_modules/@aashutoshrathi/word-wrap": { | ||||||
| @@ -44,13 +44,20 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/core": { |     "node_modules/@actions/core": { | ||||||
|       "version": "1.11.1", |       "version": "1.10.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", |       "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", | ||||||
|       "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", |       "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", | ||||||
|       "license": "MIT", |  | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@actions/exec": "^1.1.1", |         "@actions/http-client": "^2.0.1", | ||||||
|         "@actions/http-client": "^2.0.1" |         "uuid": "^8.3.2" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "node_modules/@actions/core/node_modules/uuid": { | ||||||
|  |       "version": "8.3.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", | ||||||
|  |       "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", | ||||||
|  |       "bin": { | ||||||
|  |         "uuid": "dist/bin/uuid" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@actions/exec": { |     "node_modules/@actions/exec": { | ||||||
| @@ -1565,11 +1572,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@types/jest": { |     "node_modules/@types/jest": { | ||||||
|       "version": "29.5.14", |       "version": "29.5.12", | ||||||
|       "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", |       "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", | ||||||
|       "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", |       "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "license": "MIT", |  | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "expect": "^29.0.0", |         "expect": "^29.0.0", | ||||||
|         "pretty-format": "^29.0.0" |         "pretty-format": "^29.0.0" | ||||||
| @@ -1821,11 +1827,10 @@ | |||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|     "node_modules/@vercel/ncc": { |     "node_modules/@vercel/ncc": { | ||||||
|       "version": "0.38.3", |       "version": "0.38.1", | ||||||
|       "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", |       "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz", | ||||||
|       "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==", |       "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "license": "MIT", |  | ||||||
|       "bin": { |       "bin": { | ||||||
|         "ncc": "dist/ncc/cli.js" |         "ncc": "dist/ncc/cli.js" | ||||||
|       } |       } | ||||||
| @@ -3213,11 +3218,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/eslint-plugin-jest": { |     "node_modules/eslint-plugin-jest": { | ||||||
|       "version": "28.9.0", |       "version": "28.8.2", | ||||||
|       "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz", |       "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.2.tgz", | ||||||
|       "integrity": "sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==", |       "integrity": "sha512-mC3OyklHmS5i7wYU1rGId9EnxRI8TVlnFG56AE+8U9iRy6zwaNygZR+DsdZuCL0gRG0wVeyzq+uWcPt6yJrrMA==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "license": "MIT", |  | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" |         "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" | ||||||
|       }, |       }, | ||||||
| @@ -5974,11 +5978,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/prettier": { |     "node_modules/prettier": { | ||||||
|       "version": "3.4.1", |       "version": "3.3.3", | ||||||
|       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", |       "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", | ||||||
|       "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", |       "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "license": "MIT", |  | ||||||
|       "bin": { |       "bin": { | ||||||
|         "prettier": "bin/prettier.cjs" |         "prettier": "bin/prettier.cjs" | ||||||
|       }, |       }, | ||||||
| @@ -6899,11 +6902,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/typescript": { |     "node_modules/typescript": { | ||||||
|       "version": "5.7.2", |       "version": "5.5.4", | ||||||
|       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", |       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", | ||||||
|       "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", |       "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", | ||||||
|       "dev": true, |       "dev": true, | ||||||
|       "license": "Apache-2.0", |  | ||||||
|       "bin": { |       "bin": { | ||||||
|         "tsc": "bin/tsc", |         "tsc": "bin/tsc", | ||||||
|         "tsserver": "bin/tsserver" |         "tsserver": "bin/tsserver" | ||||||
|   | |||||||
							
								
								
									
										14
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "4.2.2", |   "version": "4.2.0", | ||||||
|   "description": "checkout action", |   "description": "checkout action", | ||||||
|   "main": "lib/main.js", |   "main": "lib/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
| @@ -28,7 +28,7 @@ | |||||||
|   }, |   }, | ||||||
|   "homepage": "https://github.com/actions/checkout#readme", |   "homepage": "https://github.com/actions/checkout#readme", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@actions/core": "^1.11.1", |     "@actions/core": "^1.10.1", | ||||||
|     "@actions/exec": "^1.1.1", |     "@actions/exec": "^1.1.1", | ||||||
|     "@actions/github": "^6.0.0", |     "@actions/github": "^6.0.0", | ||||||
|     "@actions/io": "^1.1.3", |     "@actions/io": "^1.1.3", | ||||||
| @@ -36,20 +36,20 @@ | |||||||
|     "uuid": "^9.0.1" |     "uuid": "^9.0.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@types/jest": "^29.5.14", |     "@types/jest": "^29.5.12", | ||||||
|     "@types/node": "^20.12.12", |     "@types/node": "^20.12.12", | ||||||
|     "@types/uuid": "^9.0.8", |     "@types/uuid": "^9.0.8", | ||||||
|     "@typescript-eslint/eslint-plugin": "^7.9.0", |     "@typescript-eslint/eslint-plugin": "^7.9.0", | ||||||
|     "@typescript-eslint/parser": "^7.9.0", |     "@typescript-eslint/parser": "^7.9.0", | ||||||
|     "@vercel/ncc": "^0.38.3", |     "@vercel/ncc": "^0.38.1", | ||||||
|     "eslint": "^8.57.0", |     "eslint": "^8.57.0", | ||||||
|     "eslint-plugin-github": "^4.10.2", |     "eslint-plugin-github": "^4.10.2", | ||||||
|     "eslint-plugin-jest": "^28.9.0", |     "eslint-plugin-jest": "^28.8.2", | ||||||
|     "jest": "^29.7.0", |     "jest": "^29.7.0", | ||||||
|     "jest-circus": "^29.7.0", |     "jest-circus": "^29.7.0", | ||||||
|     "js-yaml": "^4.1.0", |     "js-yaml": "^4.1.0", | ||||||
|     "prettier": "^3.4.1", |     "prettier": "^3.3.3", | ||||||
|     "ts-jest": "^29.2.5", |     "ts-jest": "^29.2.5", | ||||||
|     "typescript": "^5.7.2" |     "typescript": "^5.5.4" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -46,8 +46,8 @@ export async function getCheckoutInfo( | |||||||
|     result.ref = ref |     result.ref = ref | ||||||
|   } |   } | ||||||
|   // refs/ |   // refs/ | ||||||
|   else if (upperRef.startsWith('REFS/')) { |   else if (upperRef.startsWith('REFS/') && commit) { | ||||||
|     result.ref = commit ? commit : ref |     result.ref = commit | ||||||
|   } |   } | ||||||
|   // Unqualified ref, check for a matching branch or tag |   // Unqualified ref, check for a matching branch or tag | ||||||
|   else { |   else { | ||||||
|   | |||||||
| @@ -21,61 +21,26 @@ export function getFetchUrl(settings: IGitSourceSettings): string { | |||||||
| } | } | ||||||
|  |  | ||||||
| export function getServerUrl(url?: string): URL { | export function getServerUrl(url?: string): URL { | ||||||
|   let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com' |   let urlValue = | ||||||
|   if (hasContent(url, WhitespaceMode.Trim)) { |     url && url.trim().length > 0 | ||||||
|     resolvedUrl = url! |       ? url | ||||||
|   } |       : process.env['GITHUB_SERVER_URL'] || 'https://github.com' | ||||||
|  |   return new URL(urlValue) | ||||||
|   return new URL(resolvedUrl) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| export function getServerApiUrl(url?: string): string { | export function getServerApiUrl(url?: string): string { | ||||||
|   if (hasContent(url, WhitespaceMode.Trim)) { |   let apiUrl = 'https://api.github.com' | ||||||
|     let serverUrl = getServerUrl(url) |  | ||||||
|     if (isGhes(url)) { |  | ||||||
|       serverUrl.pathname = 'api/v3' |  | ||||||
|     } else { |  | ||||||
|       serverUrl.hostname = 'api.' + serverUrl.hostname |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     return pruneSuffix(serverUrl.toString(), '/') |   if (isGhes(url)) { | ||||||
|  |     const serverUrl = getServerUrl(url) | ||||||
|  |     apiUrl = new URL(`${serverUrl.origin}/api/v3`).toString() | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   return process.env['GITHUB_API_URL'] || 'https://api.github.com' |   return apiUrl | ||||||
| } | } | ||||||
|  |  | ||||||
| export function isGhes(url?: string): boolean { | export function isGhes(url?: string): boolean { | ||||||
|   const ghUrl = new URL( |   const ghUrl = getServerUrl(url) | ||||||
|     url || process.env['GITHUB_SERVER_URL'] || 'https://github.com' |  | ||||||
|   ) |  | ||||||
|  |  | ||||||
|   const hostname = ghUrl.hostname.trimEnd().toUpperCase() |   return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM' | ||||||
|   const isGitHubHost = hostname === 'GITHUB.COM' |  | ||||||
|   const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM') |  | ||||||
|   const isLocalHost = hostname.endsWith('.LOCALHOST') |  | ||||||
|  |  | ||||||
|   return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function pruneSuffix(text: string, suffix: string) { |  | ||||||
|   if (hasContent(suffix, WhitespaceMode.Preserve) && text?.endsWith(suffix)) { |  | ||||||
|     return text.substring(0, text.length - suffix.length) |  | ||||||
|   } |  | ||||||
|   return text |  | ||||||
| } |  | ||||||
|  |  | ||||||
| enum WhitespaceMode { |  | ||||||
|   Trim, |  | ||||||
|   Preserve |  | ||||||
| } |  | ||||||
|  |  | ||||||
| function hasContent( |  | ||||||
|   text: string | undefined, |  | ||||||
|   whitespaceMode: WhitespaceMode |  | ||||||
| ): boolean { |  | ||||||
|   let refinedText = text ?? '' |  | ||||||
|   if (whitespaceMode == WhitespaceMode.Trim) { |  | ||||||
|     refinedText = refinedText.trim() |  | ||||||
|   } |  | ||||||
|   return refinedText.length > 0 |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user