mirror of
				https://git.mirrors.martin98.com/https://github.com/actions/setup-python
				synced 2025-10-31 13:41:06 +08:00 
			
		
		
		
	update MANIFEST_URL (#111)
This commit is contained in:
		
							parent
							
								
									2989dc4a1a
								
							
						
					
					
						commit
						6f45e887f6
					
				
							
								
								
									
										543
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										543
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -2361,46 +2361,46 @@ const Range = __webpack_require__(124) | |||||||
| /***/ (function(__unusedmodule, exports, __webpack_require__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||||||
|     result["default"] = mod; |     result["default"] = mod; | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const core = __importStar(__webpack_require__(470)); | const core = __importStar(__webpack_require__(470)); | ||||||
| const finder = __importStar(__webpack_require__(927)); | const finder = __importStar(__webpack_require__(927)); | ||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const os = __importStar(__webpack_require__(87)); | const os = __importStar(__webpack_require__(87)); | ||||||
| function run() { | function run() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         try { |         try { | ||||||
|             let version = core.getInput('python-version'); |             let version = core.getInput('python-version'); | ||||||
|             if (version) { |             if (version) { | ||||||
|                 const arch = core.getInput('architecture') || os.arch(); |                 const arch = core.getInput('architecture') || os.arch(); | ||||||
|                 const installed = yield finder.findPythonVersion(version, arch); |                 const installed = yield finder.findPythonVersion(version, arch); | ||||||
|                 core.info(`Successfully setup ${installed.impl} (${installed.version})`); |                 core.info(`Successfully setup ${installed.impl} (${installed.version})`); | ||||||
|             } |             } | ||||||
|             const matchersPath = path.join(__dirname, '..', '.github'); |             const matchersPath = path.join(__dirname, '..', '.github'); | ||||||
|             core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); |             core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); | ||||||
|         } |         } | ||||||
|         catch (err) { |         catch (err) { | ||||||
|             core.setFailed(err.message); |             core.setFailed(err.message); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| run(); | run(); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -6312,83 +6312,84 @@ module.exports = diff | |||||||
| /***/ (function(__unusedmodule, exports, __webpack_require__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||||||
|     result["default"] = mod; |     result["default"] = mod; | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const core = __importStar(__webpack_require__(470)); | const core = __importStar(__webpack_require__(470)); | ||||||
| const tc = __importStar(__webpack_require__(533)); | const tc = __importStar(__webpack_require__(533)); | ||||||
| const exec = __importStar(__webpack_require__(986)); | const exec = __importStar(__webpack_require__(986)); | ||||||
| const TOKEN = core.getInput('token'); | const TOKEN = core.getInput('token'); | ||||||
| const AUTH = !TOKEN || isGhes() ? undefined : `token ${TOKEN}`; | const AUTH = !TOKEN || isGhes() ? undefined : `token ${TOKEN}`; | ||||||
| const MANIFEST_REPO_OWNER = 'actions'; | const MANIFEST_REPO_OWNER = 'actions'; | ||||||
| const MANIFEST_REPO_NAME = 'python-versions'; | const MANIFEST_REPO_NAME = 'python-versions'; | ||||||
| exports.MANIFEST_URL = `https://raw.githubusercontent.com/${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}/master/versions-manifest.json`; | const MANIFEST_REPO_BRANCH = 'main'; | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | exports.MANIFEST_URL = `https://raw.githubusercontent.com/${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}/${MANIFEST_REPO_BRANCH}/versions-manifest.json`; | ||||||
| function findReleaseFromManifest(semanticVersionSpec, architecture) { | const IS_WINDOWS = process.platform === 'win32'; | ||||||
|     return __awaiter(this, void 0, void 0, function* () { | function findReleaseFromManifest(semanticVersionSpec, architecture) { | ||||||
|         const manifest = yield tc.getManifestFromRepo(MANIFEST_REPO_OWNER, MANIFEST_REPO_NAME, AUTH); |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         return yield tc.findFromManifest(semanticVersionSpec, true, manifest, architecture); |         const manifest = yield tc.getManifestFromRepo(MANIFEST_REPO_OWNER, MANIFEST_REPO_NAME, AUTH, MANIFEST_REPO_BRANCH); | ||||||
|     }); |         return yield tc.findFromManifest(semanticVersionSpec, true, manifest, architecture); | ||||||
| } |     }); | ||||||
| exports.findReleaseFromManifest = findReleaseFromManifest; | } | ||||||
| function installPython(workingDirectory) { | exports.findReleaseFromManifest = findReleaseFromManifest; | ||||||
|     return __awaiter(this, void 0, void 0, function* () { | function installPython(workingDirectory) { | ||||||
|         const options = { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|             cwd: workingDirectory, |         const options = { | ||||||
|             silent: true, |             cwd: workingDirectory, | ||||||
|             listeners: { |             silent: true, | ||||||
|                 stdout: (data) => { |             listeners: { | ||||||
|                     core.debug(data.toString().trim()); |                 stdout: (data) => { | ||||||
|                 } |                     core.debug(data.toString().trim()); | ||||||
|             } |                 } | ||||||
|         }; |             } | ||||||
|         if (IS_WINDOWS) { |         }; | ||||||
|             yield exec.exec('powershell', ['./setup.ps1'], options); |         if (IS_WINDOWS) { | ||||||
|         } |             yield exec.exec('powershell', ['./setup.ps1'], options); | ||||||
|         else { |         } | ||||||
|             yield exec.exec('bash', ['./setup.sh'], options); |         else { | ||||||
|         } |             yield exec.exec('bash', ['./setup.sh'], options); | ||||||
|     }); |         } | ||||||
| } |     }); | ||||||
| function installCpythonFromRelease(release) { | } | ||||||
|     return __awaiter(this, void 0, void 0, function* () { | function installCpythonFromRelease(release) { | ||||||
|         const downloadUrl = release.files[0].download_url; |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         core.info(`Download from "${downloadUrl}"`); |         const downloadUrl = release.files[0].download_url; | ||||||
|         const pythonPath = yield tc.downloadTool(downloadUrl, undefined, AUTH); |         core.info(`Download from "${downloadUrl}"`); | ||||||
|         const fileName = path.basename(pythonPath, '.zip'); |         const pythonPath = yield tc.downloadTool(downloadUrl, undefined, AUTH); | ||||||
|         core.info('Extract downloaded archive'); |         const fileName = path.basename(pythonPath, '.zip'); | ||||||
|         let pythonExtractedFolder; |         core.info('Extract downloaded archive'); | ||||||
|         if (IS_WINDOWS) { |         let pythonExtractedFolder; | ||||||
|             pythonExtractedFolder = yield tc.extractZip(pythonPath, `./${fileName}`); |         if (IS_WINDOWS) { | ||||||
|         } |             pythonExtractedFolder = yield tc.extractZip(pythonPath, `./${fileName}`); | ||||||
|         else { |         } | ||||||
|             pythonExtractedFolder = yield tc.extractTar(pythonPath, `./${fileName}`); |         else { | ||||||
|         } |             pythonExtractedFolder = yield tc.extractTar(pythonPath, `./${fileName}`); | ||||||
|         core.info('Execute installation script'); |         } | ||||||
|         yield installPython(pythonExtractedFolder); |         core.info('Execute installation script'); | ||||||
|     }); |         yield installPython(pythonExtractedFolder); | ||||||
| } |     }); | ||||||
| exports.installCpythonFromRelease = installCpythonFromRelease; | } | ||||||
| function isGhes() { | exports.installCpythonFromRelease = installCpythonFromRelease; | ||||||
|     const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); | function isGhes() { | ||||||
|     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; |     const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); | ||||||
| } |     return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| @ -6569,160 +6570,160 @@ module.exports = lte | |||||||
| /***/ (function(__unusedmodule, exports, __webpack_require__) { | /***/ (function(__unusedmodule, exports, __webpack_require__) { | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| var __importStar = (this && this.__importStar) || function (mod) { | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|     if (mod && mod.__esModule) return mod; |     if (mod && mod.__esModule) return mod; | ||||||
|     var result = {}; |     var result = {}; | ||||||
|     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; |     if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||||||
|     result["default"] = mod; |     result["default"] = mod; | ||||||
|     return result; |     return result; | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| const os = __importStar(__webpack_require__(87)); | const os = __importStar(__webpack_require__(87)); | ||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const semver = __importStar(__webpack_require__(876)); | const semver = __importStar(__webpack_require__(876)); | ||||||
| const installer = __importStar(__webpack_require__(824)); | const installer = __importStar(__webpack_require__(824)); | ||||||
| const core = __importStar(__webpack_require__(470)); | const core = __importStar(__webpack_require__(470)); | ||||||
| const tc = __importStar(__webpack_require__(533)); | const tc = __importStar(__webpack_require__(533)); | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | const IS_WINDOWS = process.platform === 'win32'; | ||||||
| // Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
 | // Python has "scripts" or "bin" directories where command-line tools that come with packages are installed.
 | ||||||
| // This is where pip is, along with anything that pip installs.
 | // This is where pip is, along with anything that pip installs.
 | ||||||
| // There is a seperate directory for `pip install --user`.
 | // There is a seperate directory for `pip install --user`.
 | ||||||
| //
 | //
 | ||||||
| // For reference, these directories are as follows:
 | // For reference, these directories are as follows:
 | ||||||
| //   macOS / Linux:
 | //   macOS / Linux:
 | ||||||
| //      <sys.prefix>/bin (by default /usr/local/bin, but not on hosted agents -- see the `else`)
 | //      <sys.prefix>/bin (by default /usr/local/bin, but not on hosted agents -- see the `else`)
 | ||||||
| //      (--user) ~/.local/bin
 | //      (--user) ~/.local/bin
 | ||||||
| //   Windows:
 | //   Windows:
 | ||||||
| //      <Python installation dir>\Scripts
 | //      <Python installation dir>\Scripts
 | ||||||
| //      (--user) %APPDATA%\Python\PythonXY\Scripts
 | //      (--user) %APPDATA%\Python\PythonXY\Scripts
 | ||||||
| // See https://docs.python.org/3/library/sysconfig.html
 | // See https://docs.python.org/3/library/sysconfig.html
 | ||||||
| function binDir(installDir) { | function binDir(installDir) { | ||||||
|     if (IS_WINDOWS) { |     if (IS_WINDOWS) { | ||||||
|         return path.join(installDir, 'Scripts'); |         return path.join(installDir, 'Scripts'); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         return path.join(installDir, 'bin'); |         return path.join(installDir, 'bin'); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| // Note on the tool cache layout for PyPy:
 | // Note on the tool cache layout for PyPy:
 | ||||||
| // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 | // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 | ||||||
| // A particular version of PyPy may contain one or more versions of the Python interpreter.
 | // A particular version of PyPy may contain one or more versions of the Python interpreter.
 | ||||||
| // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 | ||||||
| // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 | ||||||
| function usePyPy(majorVersion, architecture) { | function usePyPy(majorVersion, architecture) { | ||||||
|     const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); |     const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion.toString()); | ||||||
|     let installDir = findPyPy(architecture); |     let installDir = findPyPy(architecture); | ||||||
|     if (!installDir && IS_WINDOWS) { |     if (!installDir && IS_WINDOWS) { | ||||||
|         // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 |         // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 | ||||||
|         // On our Windows virtual environments, we only install an x86 version.
 |         // On our Windows virtual environments, we only install an x86 version.
 | ||||||
|         // Fall back to x86.
 |         // Fall back to x86.
 | ||||||
|         installDir = findPyPy('x86'); |         installDir = findPyPy('x86'); | ||||||
|     } |     } | ||||||
|     if (!installDir) { |     if (!installDir) { | ||||||
|         // PyPy not installed in $(Agent.ToolsDirectory)
 |         // PyPy not installed in $(Agent.ToolsDirectory)
 | ||||||
|         throw new Error(`PyPy ${majorVersion} not found`); |         throw new Error(`PyPy ${majorVersion} not found`); | ||||||
|     } |     } | ||||||
|     // For PyPy, Windows uses 'bin', not 'Scripts'.
 |     // For PyPy, Windows uses 'bin', not 'Scripts'.
 | ||||||
|     const _binDir = path.join(installDir, 'bin'); |     const _binDir = path.join(installDir, 'bin'); | ||||||
|     // On Linux and macOS, the Python interpreter is in 'bin'.
 |     // On Linux and macOS, the Python interpreter is in 'bin'.
 | ||||||
|     // On Windows, it is in the installation root.
 |     // On Windows, it is in the installation root.
 | ||||||
|     const pythonLocation = IS_WINDOWS ? installDir : _binDir; |     const pythonLocation = IS_WINDOWS ? installDir : _binDir; | ||||||
|     core.exportVariable('pythonLocation', pythonLocation); |     core.exportVariable('pythonLocation', pythonLocation); | ||||||
|     core.addPath(installDir); |     core.addPath(installDir); | ||||||
|     core.addPath(_binDir); |     core.addPath(_binDir); | ||||||
|     const impl = 'pypy' + majorVersion.toString(); |     const impl = 'pypy' + majorVersion.toString(); | ||||||
|     core.setOutput('python-version', impl); |     core.setOutput('python-version', impl); | ||||||
|     return { impl: impl, version: versionFromPath(installDir) }; |     return { impl: impl, version: versionFromPath(installDir) }; | ||||||
| } | } | ||||||
| function useCpythonVersion(version, architecture) { | function useCpythonVersion(version, architecture) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const desugaredVersionSpec = desugarDevVersion(version); |         const desugaredVersionSpec = desugarDevVersion(version); | ||||||
|         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); |         const semanticVersionSpec = pythonVersionToSemantic(desugaredVersionSpec); | ||||||
|         core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); |         core.debug(`Semantic version spec of ${version} is ${semanticVersionSpec}`); | ||||||
|         let installDir = tc.find('Python', semanticVersionSpec, architecture); |         let installDir = tc.find('Python', semanticVersionSpec, architecture); | ||||||
|         if (!installDir) { |         if (!installDir) { | ||||||
|             core.info(`Version ${semanticVersionSpec} was not found in the local cache`); |             core.info(`Version ${semanticVersionSpec} was not found in the local cache`); | ||||||
|             const foundRelease = yield installer.findReleaseFromManifest(semanticVersionSpec, architecture); |             const foundRelease = yield installer.findReleaseFromManifest(semanticVersionSpec, architecture); | ||||||
|             if (foundRelease && foundRelease.files && foundRelease.files.length > 0) { |             if (foundRelease && foundRelease.files && foundRelease.files.length > 0) { | ||||||
|                 core.info(`Version ${semanticVersionSpec} is available for downloading`); |                 core.info(`Version ${semanticVersionSpec} is available for downloading`); | ||||||
|                 yield installer.installCpythonFromRelease(foundRelease); |                 yield installer.installCpythonFromRelease(foundRelease); | ||||||
|                 installDir = tc.find('Python', semanticVersionSpec, architecture); |                 installDir = tc.find('Python', semanticVersionSpec, architecture); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!installDir) { |         if (!installDir) { | ||||||
|             throw new Error([ |             throw new Error([ | ||||||
|                 `Version ${version} with arch ${architecture} not found`, |                 `Version ${version} with arch ${architecture} not found`, | ||||||
|                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` |                 `The list of all available versions can be found here: ${installer.MANIFEST_URL}` | ||||||
|             ].join(os.EOL)); |             ].join(os.EOL)); | ||||||
|         } |         } | ||||||
|         core.exportVariable('pythonLocation', installDir); |         core.exportVariable('pythonLocation', installDir); | ||||||
|         core.addPath(installDir); |         core.addPath(installDir); | ||||||
|         core.addPath(binDir(installDir)); |         core.addPath(binDir(installDir)); | ||||||
|         if (IS_WINDOWS) { |         if (IS_WINDOWS) { | ||||||
|             // Add --user directory
 |             // Add --user directory
 | ||||||
|             // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 |             // `installDir` from tool cache should look like $RUNNER_TOOL_CACHE/Python/<semantic version>/x64/
 | ||||||
|             // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 |             // So if `findLocalTool` succeeded above, we must have a conformant `installDir`
 | ||||||
|             const version = path.basename(path.dirname(installDir)); |             const version = path.basename(path.dirname(installDir)); | ||||||
|             const major = semver.major(version); |             const major = semver.major(version); | ||||||
|             const minor = semver.minor(version); |             const minor = semver.minor(version); | ||||||
|             const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts'); |             const userScriptsDir = path.join(process.env['APPDATA'] || '', 'Python', `Python${major}${minor}`, 'Scripts'); | ||||||
|             core.addPath(userScriptsDir); |             core.addPath(userScriptsDir); | ||||||
|         } |         } | ||||||
|         // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 |         // On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
 | ||||||
|         const installed = versionFromPath(installDir); |         const installed = versionFromPath(installDir); | ||||||
|         core.setOutput('python-version', installed); |         core.setOutput('python-version', installed); | ||||||
|         return { impl: 'CPython', version: installed }; |         return { impl: 'CPython', version: installed }; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | ||||||
| function desugarDevVersion(versionSpec) { | function desugarDevVersion(versionSpec) { | ||||||
|     if (versionSpec.endsWith('-dev')) { |     if (versionSpec.endsWith('-dev')) { | ||||||
|         const versionRoot = versionSpec.slice(0, -'-dev'.length); |         const versionRoot = versionSpec.slice(0, -'-dev'.length); | ||||||
|         return `>= ${versionRoot}.0-a0`; |         return `>= ${versionRoot}.0-a0`; | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         return versionSpec; |         return versionSpec; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| /** Extracts python version from install path from hosted tool cache as described in README.md */ | /** Extracts python version from install path from hosted tool cache as described in README.md */ | ||||||
| function versionFromPath(installDir) { | function versionFromPath(installDir) { | ||||||
|     const parts = installDir.split(path.sep); |     const parts = installDir.split(path.sep); | ||||||
|     const idx = parts.findIndex(part => part === 'PyPy' || part === 'Python'); |     const idx = parts.findIndex(part => part === 'PyPy' || part === 'Python'); | ||||||
|     return parts[idx + 1] || ''; |     return parts[idx + 1] || ''; | ||||||
| } | } | ||||||
| /** | /** | ||||||
|  * Python's prelease versions look like `3.7.0b2`. |  * Python's prelease versions look like `3.7.0b2`. | ||||||
|  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. |  * This is the one part of Python versioning that does not look like semantic versioning, which specifies `3.7.0-b2`. | ||||||
|  * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. |  * If the version spec contains prerelease versions, we need to convert them to the semantic version equivalent. | ||||||
|  */ |  */ | ||||||
| function pythonVersionToSemantic(versionSpec) { | function pythonVersionToSemantic(versionSpec) { | ||||||
|     const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; |     const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; | ||||||
|     return versionSpec.replace(prereleaseVersion, '$1-$2'); |     return versionSpec.replace(prereleaseVersion, '$1-$2'); | ||||||
| } | } | ||||||
| exports.pythonVersionToSemantic = pythonVersionToSemantic; | exports.pythonVersionToSemantic = pythonVersionToSemantic; | ||||||
| function findPythonVersion(version, architecture) { | function findPythonVersion(version, architecture) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         switch (version.toUpperCase()) { |         switch (version.toUpperCase()) { | ||||||
|             case 'PYPY2': |             case 'PYPY2': | ||||||
|                 return usePyPy(2, architecture); |                 return usePyPy(2, architecture); | ||||||
|             case 'PYPY3': |             case 'PYPY3': | ||||||
|                 return usePyPy(3, architecture); |                 return usePyPy(3, architecture); | ||||||
|             default: |             default: | ||||||
|                 return yield useCpythonVersion(version, architecture); |                 return yield useCpythonVersion(version, architecture); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| exports.findPythonVersion = findPythonVersion; | exports.findPythonVersion = findPythonVersion; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
|  | |||||||
| @ -8,7 +8,8 @@ const TOKEN = core.getInput('token'); | |||||||
| const AUTH = !TOKEN || isGhes() ? undefined : `token ${TOKEN}`; | const AUTH = !TOKEN || isGhes() ? undefined : `token ${TOKEN}`; | ||||||
| const MANIFEST_REPO_OWNER = 'actions'; | const MANIFEST_REPO_OWNER = 'actions'; | ||||||
| const MANIFEST_REPO_NAME = 'python-versions'; | const MANIFEST_REPO_NAME = 'python-versions'; | ||||||
| export const MANIFEST_URL = `https://raw.githubusercontent.com/${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}/master/versions-manifest.json`; | const MANIFEST_REPO_BRANCH = 'main'; | ||||||
|  | export const MANIFEST_URL = `https://raw.githubusercontent.com/${MANIFEST_REPO_OWNER}/${MANIFEST_REPO_NAME}/${MANIFEST_REPO_BRANCH}/versions-manifest.json`; | ||||||
| 
 | 
 | ||||||
| const IS_WINDOWS = process.platform === 'win32'; | const IS_WINDOWS = process.platform === 'win32'; | ||||||
| 
 | 
 | ||||||
| @ -19,7 +20,8 @@ export async function findReleaseFromManifest( | |||||||
|   const manifest: tc.IToolRelease[] = await tc.getManifestFromRepo( |   const manifest: tc.IToolRelease[] = await tc.getManifestFromRepo( | ||||||
|     MANIFEST_REPO_OWNER, |     MANIFEST_REPO_OWNER, | ||||||
|     MANIFEST_REPO_NAME, |     MANIFEST_REPO_NAME, | ||||||
|     AUTH |     AUTH, | ||||||
|  |     MANIFEST_REPO_BRANCH | ||||||
|   ); |   ); | ||||||
|   return await tc.findFromManifest( |   return await tc.findFromManifest( | ||||||
|     semanticVersionSpec, |     semanticVersionSpec, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Maxim Lobanov
						Maxim Lobanov