You've already forked setup-python
							
							
				mirror of
				https://github.com/actions/setup-python.git
				synced 2025-10-31 23:26:24 +07:00 
			
		
		
		
	Merge remote-tracking branch 'origin/main' into dependabot/npm_and_yarn/ts-jest-29.3.2 and fixed check failures
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/e2e-cache.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/e2e-cache.yml
									
									
									
									
										vendored
									
									
								
							| @ -82,6 +82,8 @@ jobs: | |||||||
|             python-version: pypy-3.10-v7.x |             python-version: pypy-3.10-v7.x | ||||||
|           - os: ubuntu-22.04-arm |           - os: ubuntu-22.04-arm | ||||||
|             python-version: pypy-3.11-v7.x |             python-version: pypy-3.11-v7.x | ||||||
|  |           - os: ubuntu-22.04-arm | ||||||
|  |             python-version: pypy-3.10-v7.x | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v4 |       - uses: actions/checkout@v4 | ||||||
|       - name: Setup Python |       - name: Setup Python | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								.licenses/npm/lru-cache.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										26
									
								
								.licenses/npm/lru-cache.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,26 +0,0 @@ | |||||||
| --- |  | ||||||
| name: lru-cache |  | ||||||
| version: 6.0.0 |  | ||||||
| type: npm |  | ||||||
| summary: A cache object that deletes the least-recently-used items. |  | ||||||
| homepage:  |  | ||||||
| license: isc |  | ||||||
| licenses: |  | ||||||
| - sources: LICENSE |  | ||||||
|   text: | |  | ||||||
|     The ISC License |  | ||||||
|  |  | ||||||
|     Copyright (c) Isaac Z. Schlueter and Contributors |  | ||||||
|  |  | ||||||
|     Permission to use, copy, modify, and/or distribute this software for any |  | ||||||
|     purpose with or without fee is hereby granted, provided that the above |  | ||||||
|     copyright notice and this permission notice appear in all copies. |  | ||||||
|  |  | ||||||
|     THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |  | ||||||
|     WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |  | ||||||
|     MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |  | ||||||
|     ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |  | ||||||
|     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |  | ||||||
|     ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR |  | ||||||
|     IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |  | ||||||
| notices: [] |  | ||||||
| @ -1,6 +1,6 @@ | |||||||
| --- | --- | ||||||
| name: semver | name: semver | ||||||
| version: 7.6.0 | version: 7.7.1 | ||||||
| type: npm | type: npm | ||||||
| summary: The semantic version parser used by npm. | summary: The semantic version parser used by npm. | ||||||
| homepage: | homepage: | ||||||
							
								
								
									
										26
									
								
								.licenses/npm/yallist.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										26
									
								
								.licenses/npm/yallist.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,26 +0,0 @@ | |||||||
| --- |  | ||||||
| name: yallist |  | ||||||
| version: 4.0.0 |  | ||||||
| type: npm |  | ||||||
| summary: Yet Another Linked List |  | ||||||
| homepage:  |  | ||||||
| license: isc |  | ||||||
| licenses: |  | ||||||
| - sources: LICENSE |  | ||||||
|   text: | |  | ||||||
|     The ISC License |  | ||||||
|  |  | ||||||
|     Copyright (c) Isaac Z. Schlueter and Contributors |  | ||||||
|  |  | ||||||
|     Permission to use, copy, modify, and/or distribute this software for any |  | ||||||
|     purpose with or without fee is hereby granted, provided that the above |  | ||||||
|     copyright notice and this permission notice appear in all copies. |  | ||||||
|  |  | ||||||
|     THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |  | ||||||
|     WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |  | ||||||
|     MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |  | ||||||
|     ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |  | ||||||
|     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |  | ||||||
|     ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR |  | ||||||
|     IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |  | ||||||
| notices: [] |  | ||||||
| @ -8,10 +8,29 @@ import * as tc from '@actions/tool-cache'; | |||||||
|  |  | ||||||
| jest.mock('@actions/http-client'); | jest.mock('@actions/http-client'); | ||||||
| jest.mock('@actions/tool-cache'); | jest.mock('@actions/tool-cache'); | ||||||
|  | jest.mock('@actions/tool-cache', () => ({ | ||||||
| const mockManifest = [{version: '1.0.0'}]; |   getManifestFromRepo: jest.fn() | ||||||
|  | })); | ||||||
|  | const mockManifest = [ | ||||||
|  |   { | ||||||
|  |     version: '1.0.0', | ||||||
|  |     stable: true, | ||||||
|  |     files: [ | ||||||
|  |       { | ||||||
|  |         filename: 'tool-v1.0.0-linux-x64.tar.gz', | ||||||
|  |         platform: 'linux', | ||||||
|  |         arch: 'x64', | ||||||
|  |         download_url: 'https://example.com/tool-v1.0.0-linux-x64.tar.gz' | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  |  | ||||||
| describe('getManifest', () => { | describe('getManifest', () => { | ||||||
|  |   beforeEach(() => { | ||||||
|  |     jest.resetAllMocks(); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|   it('should return manifest from repo', async () => { |   it('should return manifest from repo', async () => { | ||||||
|     (tc.getManifestFromRepo as jest.Mock).mockResolvedValue(mockManifest); |     (tc.getManifestFromRepo as jest.Mock).mockResolvedValue(mockManifest); | ||||||
|     const manifest = await getManifest(); |     const manifest = await getManifest(); | ||||||
|  | |||||||
							
								
								
									
										961
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										961
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -5,6 +5,7 @@ import * as exec from '@actions/exec'; | |||||||
| import * as httpm from '@actions/http-client'; | import * as httpm from '@actions/http-client'; | ||||||
| import {ExecOptions} from '@actions/exec/lib/interfaces'; | import {ExecOptions} from '@actions/exec/lib/interfaces'; | ||||||
| import {IS_WINDOWS, IS_LINUX, getDownloadFileName} from './utils'; | import {IS_WINDOWS, IS_LINUX, getDownloadFileName} from './utils'; | ||||||
|  | import {IToolRelease} from '@actions/tool-cache'; | ||||||
|  |  | ||||||
| const TOKEN = core.getInput('token'); | const TOKEN = core.getInput('token'); | ||||||
| const AUTH = !TOKEN ? undefined : `token ${TOKEN}`; | const AUTH = !TOKEN ? undefined : `token ${TOKEN}`; | ||||||
| @ -31,14 +32,41 @@ export async function findReleaseFromManifest( | |||||||
|  |  | ||||||
|   return foundRelease; |   return foundRelease; | ||||||
| } | } | ||||||
|  | function isIToolRelease(obj: any): obj is IToolRelease { | ||||||
|  |   return ( | ||||||
|  |     typeof obj === 'object' && | ||||||
|  |     obj !== null && | ||||||
|  |     typeof obj.version === 'string' && | ||||||
|  |     typeof obj.stable === 'boolean' && | ||||||
|  |     Array.isArray(obj.files) && | ||||||
|  |     obj.files.every( | ||||||
|  |       (file: any) => | ||||||
|  |         typeof file.filename === 'string' && | ||||||
|  |         typeof file.platform === 'string' && | ||||||
|  |         typeof file.arch === 'string' && | ||||||
|  |         typeof file.download_url === 'string' | ||||||
|  |     ) | ||||||
|  |   ); | ||||||
|  | } | ||||||
| export async function getManifest(): Promise<tc.IToolRelease[]> { | export async function getManifest(): Promise<tc.IToolRelease[]> { | ||||||
|   try { |   try { | ||||||
|     return await getManifestFromRepo(); |     const repoManifest = await getManifestFromRepo(); | ||||||
|  |     if ( | ||||||
|  |       Array.isArray(repoManifest) && | ||||||
|  |       repoManifest.length && | ||||||
|  |       repoManifest.every(isIToolRelease) | ||||||
|  |     ) { | ||||||
|  |       return repoManifest; | ||||||
|  |     } | ||||||
|  |     throw new Error( | ||||||
|  |       'The repository manifest is invalid or does not include any valid tool release (IToolRelease) entries.' | ||||||
|  |     ); | ||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     core.debug('Fetching the manifest via the API failed.'); |     core.debug('Fetching the manifest via the API failed.'); | ||||||
|     if (err instanceof Error) { |     if (err instanceof Error) { | ||||||
|       core.debug(err.message); |       core.debug(err.message); | ||||||
|  |     } else { | ||||||
|  |       core.error('An unexpected error occurred while fetching the manifest.'); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   return await getManifestFromURL(); |   return await getManifestFromURL(); | ||||||
| @ -93,6 +121,9 @@ async function installPython(workingDirectory: string) { | |||||||
| } | } | ||||||
|  |  | ||||||
| export async function installCpythonFromRelease(release: tc.IToolRelease) { | export async function installCpythonFromRelease(release: tc.IToolRelease) { | ||||||
|  |   if (!release.files || release.files.length === 0) { | ||||||
|  |     throw new Error('No files found in the release to download.'); | ||||||
|  |   } | ||||||
|   const downloadUrl = release.files[0].download_url; |   const downloadUrl = release.files[0].download_url; | ||||||
|  |  | ||||||
|   core.info(`Download from "${downloadUrl}"`); |   core.info(`Download from "${downloadUrl}"`); | ||||||
| @ -113,9 +144,13 @@ export async function installCpythonFromRelease(release: tc.IToolRelease) { | |||||||
|   } catch (err) { |   } catch (err) { | ||||||
|     if (err instanceof tc.HTTPError) { |     if (err instanceof tc.HTTPError) { | ||||||
|       // Rate limit? |       // Rate limit? | ||||||
|       if (err.httpStatusCode === 403 || err.httpStatusCode === 429) { |       if (err.httpStatusCode === 403) { | ||||||
|  |         core.error( | ||||||
|  |           `Received HTTP status code 403. This indicates a permission issue or restricted access.` | ||||||
|  |         ); | ||||||
|  |       } else if (err.httpStatusCode === 429) { | ||||||
|         core.info( |         core.info( | ||||||
|           `Received HTTP status code ${err.httpStatusCode}.  This usually indicates the rate limit has been exceeded` |           `Received HTTP status code 429.  This usually indicates the rate limit has been exceeded` | ||||||
|         ); |         ); | ||||||
|       } else { |       } else { | ||||||
|         core.info(err.message); |         core.info(err.message); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Aparna Jyothi
					Aparna Jyothi