mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 03:04:00 +08:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			v4.2.2
			...
			dependabot
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ![dependabot[bot]](/assets/img/avatar_default.png)  | a6b6acc11a | 
							
								
								
									
										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 | ||||
							
								
								
									
										12
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,17 +1,5 @@ | ||||
| # 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 | ||||
|  | ||||
| * Add Ref and Commit outputs by @lucacome in https://github.com/actions/checkout/pull/1180 | ||||
| * Dependency updates by @dependabot- https://github.com/actions/checkout/pull/1777, https://github.com/actions/checkout/pull/1872 | ||||
|  | ||||
| ## v4.1.7 | ||||
| * Bump the minor-npm-dependencies group across 1 directory with 4 updates by @dependabot in https://github.com/actions/checkout/pull/1739 | ||||
| * Bump actions/checkout from 3 to 4 by @dependabot in https://github.com/actions/checkout/pull/1697 | ||||
|   | ||||
| @@ -77,16 +77,6 @@ describe('ref-helper tests', () => { | ||||
|     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 () => { | ||||
|     git.branchExists = jest.fn(async (remote: boolean, pattern: string) => { | ||||
|       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; | ||||
|         } | ||||
|         // refs/
 | ||||
|         else if (upperRef.startsWith('REFS/')) { | ||||
|             result.ref = commit ? commit : ref; | ||||
|         else if (upperRef.startsWith('REFS/') && commit) { | ||||
|             result.ref = commit; | ||||
|         } | ||||
|         // Unqualified ref, check for a matching branch or tag
 | ||||
|         else { | ||||
| @@ -2454,50 +2454,22 @@ function getFetchUrl(settings) { | ||||
|     return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; | ||||
| } | ||||
| function getServerUrl(url) { | ||||
|     let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'; | ||||
|     if (hasContent(url, WhitespaceMode.Trim)) { | ||||
|         resolvedUrl = url; | ||||
|     } | ||||
|     return new url_1.URL(resolvedUrl); | ||||
|     let urlValue = url && url.trim().length > 0 | ||||
|         ? url | ||||
|         : process.env['GITHUB_SERVER_URL'] || 'https://github.com'; | ||||
|     return new url_1.URL(urlValue); | ||||
| } | ||||
| function getServerApiUrl(url) { | ||||
|     if (hasContent(url, WhitespaceMode.Trim)) { | ||||
|         let serverUrl = getServerUrl(url); | ||||
|         if (isGhes(url)) { | ||||
|             serverUrl.pathname = 'api/v3'; | ||||
|         } | ||||
|         else { | ||||
|             serverUrl.hostname = 'api.' + serverUrl.hostname; | ||||
|         } | ||||
|         return pruneSuffix(serverUrl.toString(), '/'); | ||||
|     let apiUrl = 'https://api.github.com'; | ||||
|     if (isGhes(url)) { | ||||
|         const serverUrl = getServerUrl(url); | ||||
|         apiUrl = new url_1.URL(`${serverUrl.origin}/api/v3`).toString(); | ||||
|     } | ||||
|     return process.env['GITHUB_API_URL'] || 'https://api.github.com'; | ||||
|     return apiUrl; | ||||
| } | ||||
| function isGhes(url) { | ||||
|     const ghUrl = new url_1.URL(url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'); | ||||
|     const hostname = ghUrl.hostname.trimEnd().toUpperCase(); | ||||
|     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; | ||||
|     const ghUrl = getServerUrl(url); | ||||
|     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
							
								
								
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "checkout", | ||||
|   "version": "4.2.2", | ||||
|   "version": "4.1.7", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "checkout", | ||||
|       "version": "4.2.2", | ||||
|       "version": "4.1.7", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@actions/core": "^1.10.1", | ||||
| @@ -14,12 +14,12 @@ | ||||
|         "@actions/github": "^6.0.0", | ||||
|         "@actions/io": "^1.1.3", | ||||
|         "@actions/tool-cache": "^2.0.1", | ||||
|         "uuid": "^9.0.1" | ||||
|         "uuid": "^10.0.0" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "@types/jest": "^29.5.12", | ||||
|         "@types/node": "^20.12.12", | ||||
|         "@types/uuid": "^9.0.8", | ||||
|         "@types/uuid": "^10.0.0", | ||||
|         "@typescript-eslint/eslint-plugin": "^7.9.0", | ||||
|         "@typescript-eslint/parser": "^7.9.0", | ||||
|         "@vercel/ncc": "^0.38.1", | ||||
| @@ -1603,9 +1603,9 @@ | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/@types/uuid": { | ||||
|       "version": "9.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", | ||||
|       "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", | ||||
|       "version": "10.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", | ||||
|       "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "node_modules/@types/yargs": { | ||||
| @@ -6991,9 +6991,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/uuid": { | ||||
|       "version": "9.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", | ||||
|       "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", | ||||
|       "version": "10.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", | ||||
|       "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", | ||||
|       "funding": [ | ||||
|         "https://github.com/sponsors/broofa", | ||||
|         "https://github.com/sponsors/ctavan" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "checkout", | ||||
|   "version": "4.2.2", | ||||
|   "version": "4.1.7", | ||||
|   "description": "checkout action", | ||||
|   "main": "lib/main.js", | ||||
|   "scripts": { | ||||
| @@ -33,12 +33,12 @@ | ||||
|     "@actions/github": "^6.0.0", | ||||
|     "@actions/io": "^1.1.3", | ||||
|     "@actions/tool-cache": "^2.0.1", | ||||
|     "uuid": "^9.0.1" | ||||
|     "uuid": "^10.0.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^29.5.12", | ||||
|     "@types/node": "^20.12.12", | ||||
|     "@types/uuid": "^9.0.8", | ||||
|     "@types/uuid": "^10.0.0", | ||||
|     "@typescript-eslint/eslint-plugin": "^7.9.0", | ||||
|     "@typescript-eslint/parser": "^7.9.0", | ||||
|     "@vercel/ncc": "^0.38.1", | ||||
|   | ||||
| @@ -46,8 +46,8 @@ export async function getCheckoutInfo( | ||||
|     result.ref = ref | ||||
|   } | ||||
|   // refs/ | ||||
|   else if (upperRef.startsWith('REFS/')) { | ||||
|     result.ref = commit ? commit : ref | ||||
|   else if (upperRef.startsWith('REFS/') && commit) { | ||||
|     result.ref = commit | ||||
|   } | ||||
|   // Unqualified ref, check for a matching branch or tag | ||||
|   else { | ||||
|   | ||||
| @@ -21,61 +21,26 @@ export function getFetchUrl(settings: IGitSourceSettings): string { | ||||
| } | ||||
|  | ||||
| export function getServerUrl(url?: string): URL { | ||||
|   let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com' | ||||
|   if (hasContent(url, WhitespaceMode.Trim)) { | ||||
|     resolvedUrl = url! | ||||
|   } | ||||
|  | ||||
|   return new URL(resolvedUrl) | ||||
|   let urlValue = | ||||
|     url && url.trim().length > 0 | ||||
|       ? url | ||||
|       : process.env['GITHUB_SERVER_URL'] || 'https://github.com' | ||||
|   return new URL(urlValue) | ||||
| } | ||||
|  | ||||
| export function getServerApiUrl(url?: string): string { | ||||
|   if (hasContent(url, WhitespaceMode.Trim)) { | ||||
|     let serverUrl = getServerUrl(url) | ||||
|     if (isGhes(url)) { | ||||
|       serverUrl.pathname = 'api/v3' | ||||
|     } else { | ||||
|       serverUrl.hostname = 'api.' + serverUrl.hostname | ||||
|     } | ||||
|   let apiUrl = 'https://api.github.com' | ||||
|  | ||||
|     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 { | ||||
|   const ghUrl = new URL( | ||||
|     url || process.env['GITHUB_SERVER_URL'] || 'https://github.com' | ||||
|   ) | ||||
|   const ghUrl = getServerUrl(url) | ||||
|  | ||||
|   const hostname = ghUrl.hostname.trimEnd().toUpperCase() | ||||
|   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 | ||||
|   return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM' | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user