mirror of
https://github.com/actions/setup-python.git
synced 2025-04-24 07:22:14 +00:00
Merge branch 'actions:main' into doc-update
This commit is contained in:
commit
35c11e13a5
7 changed files with 81 additions and 12 deletions
|
@ -12,7 +12,9 @@ import {
|
||||||
getVersionInputFromFile,
|
getVersionInputFromFile,
|
||||||
getVersionInputFromPlainFile,
|
getVersionInputFromPlainFile,
|
||||||
getVersionInputFromTomlFile,
|
getVersionInputFromTomlFile,
|
||||||
getNextPageUrl
|
getNextPageUrl,
|
||||||
|
IS_WINDOWS,
|
||||||
|
getDownloadFileName
|
||||||
} from '../src/utils';
|
} from '../src/utils';
|
||||||
|
|
||||||
jest.mock('@actions/cache');
|
jest.mock('@actions/cache');
|
||||||
|
@ -159,3 +161,37 @@ describe('getNextPageUrl', () => {
|
||||||
expect(getNextPageUrl(generateResponse(page2Links))).toBeNull();
|
expect(getNextPageUrl(generateResponse(page2Links))).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getDownloadFileName', () => {
|
||||||
|
const originalEnv = process.env;
|
||||||
|
const tempDir = path.join(__dirname, 'runner', 'temp');
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
process.env = {...originalEnv};
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the correct path on Windows', () => {
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
process.env['RUNNER_TEMP'] = tempDir;
|
||||||
|
const downloadUrl =
|
||||||
|
'https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-win32-x64.zip';
|
||||||
|
const expectedPath = path.join(
|
||||||
|
process.env.RUNNER_TEMP,
|
||||||
|
path.basename(downloadUrl)
|
||||||
|
);
|
||||||
|
expect(getDownloadFileName(downloadUrl)).toBe(expectedPath);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return undefined on non-Windows', () => {
|
||||||
|
if (!IS_WINDOWS) {
|
||||||
|
const downloadUrl =
|
||||||
|
'https://github.com/actions/sometool/releases/tag/1.2.3-20200402.6/sometool-1.2.3-linux-x64.tar.gz';
|
||||||
|
expect(getDownloadFileName(downloadUrl)).toBeUndefined();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
22
dist/setup/index.js
vendored
22
dist/setup/index.js
vendored
|
@ -91441,7 +91441,8 @@ function installPyPy(pypyVersion, pythonVersion, architecture, allowPreReleases,
|
||||||
const downloadUrl = `${foundAsset.download_url}`;
|
const downloadUrl = `${foundAsset.download_url}`;
|
||||||
core.info(`Downloading PyPy from "${downloadUrl}" ...`);
|
core.info(`Downloading PyPy from "${downloadUrl}" ...`);
|
||||||
try {
|
try {
|
||||||
const pypyPath = yield tc.downloadTool(downloadUrl);
|
const fileName = (0, utils_1.getDownloadFileName)(downloadUrl);
|
||||||
|
const pypyPath = yield tc.downloadTool(downloadUrl, fileName);
|
||||||
core.info('Extracting downloaded archive...');
|
core.info('Extracting downloaded archive...');
|
||||||
if (utils_1.IS_WINDOWS) {
|
if (utils_1.IS_WINDOWS) {
|
||||||
downloadDir = yield tc.extractZip(pypyPath);
|
downloadDir = yield tc.extractZip(pypyPath);
|
||||||
|
@ -91703,7 +91704,8 @@ function installCpythonFromRelease(release) {
|
||||||
core.info(`Download from "${downloadUrl}"`);
|
core.info(`Download from "${downloadUrl}"`);
|
||||||
let pythonPath = '';
|
let pythonPath = '';
|
||||||
try {
|
try {
|
||||||
pythonPath = yield tc.downloadTool(downloadUrl, undefined, AUTH);
|
const fileName = (0, utils_1.getDownloadFileName)(downloadUrl);
|
||||||
|
pythonPath = yield tc.downloadTool(downloadUrl, fileName, AUTH);
|
||||||
core.info('Extract downloaded archive');
|
core.info('Extract downloaded archive');
|
||||||
let pythonExtractedFolder;
|
let pythonExtractedFolder;
|
||||||
if (utils_1.IS_WINDOWS) {
|
if (utils_1.IS_WINDOWS) {
|
||||||
|
@ -91938,7 +91940,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.getNextPageUrl = exports.getBinaryDirectory = exports.getVersionInputFromFile = exports.getVersionInputFromPlainFile = exports.getVersionInputFromTomlFile = exports.getOSInfo = exports.getLinuxInfo = exports.logWarning = exports.isCacheFeatureAvailable = exports.isGhes = exports.validatePythonVersionFormatForPyPy = exports.writeExactPyPyVersionFile = exports.readExactPyPyVersionFile = exports.getPyPyVersionFromPath = exports.isNightlyKeyword = exports.validateVersion = exports.createSymlinkInFolder = exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0;
|
exports.getDownloadFileName = exports.getNextPageUrl = exports.getBinaryDirectory = exports.getVersionInputFromFile = exports.getVersionInputFromPlainFile = exports.getVersionInputFromTomlFile = exports.getOSInfo = exports.getLinuxInfo = exports.logWarning = exports.isCacheFeatureAvailable = exports.isGhes = exports.validatePythonVersionFormatForPyPy = exports.writeExactPyPyVersionFile = exports.readExactPyPyVersionFile = exports.getPyPyVersionFromPath = exports.isNightlyKeyword = exports.validateVersion = exports.createSymlinkInFolder = exports.WINDOWS_PLATFORMS = exports.WINDOWS_ARCHS = exports.IS_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0;
|
||||||
/* eslint no-unsafe-finally: "off" */
|
/* eslint no-unsafe-finally: "off" */
|
||||||
const cache = __importStar(__nccwpck_require__(7799));
|
const cache = __importStar(__nccwpck_require__(7799));
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
|
@ -92198,6 +92200,20 @@ function getNextPageUrl(response) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
exports.getNextPageUrl = getNextPageUrl;
|
exports.getNextPageUrl = getNextPageUrl;
|
||||||
|
/**
|
||||||
|
* Add temporary fix for Windows
|
||||||
|
* On Windows, it is necessary to retain the .zip extension for proper extraction.
|
||||||
|
* because the tc.extractZip() failure due to tc.downloadTool() not adding .zip extension.
|
||||||
|
* Related issue: https://github.com/actions/toolkit/issues/1179
|
||||||
|
* Related issue: https://github.com/actions/setup-python/issues/819
|
||||||
|
*/
|
||||||
|
function getDownloadFileName(downloadUrl) {
|
||||||
|
const tempDir = process.env.RUNNER_TEMP || '.';
|
||||||
|
return exports.IS_WINDOWS
|
||||||
|
? path.join(tempDir, path.basename(downloadUrl))
|
||||||
|
: undefined;
|
||||||
|
}
|
||||||
|
exports.getDownloadFileName = getDownloadFileName;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
|
@ -18,7 +18,7 @@ Integration of caching functionality into `actions/setup-python` action will bri
|
||||||
|
|
||||||
We will add support for Pip and Pipenv dependency caching.
|
We will add support for Pip and Pipenv dependency caching.
|
||||||
|
|
||||||
We won't pursue the goal to provide wide customization of caching in the scope of `actions/setup-python` action. The purpose of this integration is to cover ~90% of basic use-cases. If users need flexible customization, we will advise them to use `actions/cache` directly.
|
We won't pursue the goal to provide wide customization of caching in the scope of `actions/setup-python` action. The purpose of this integration is to cover ~90% of basic use-cases. The action does not support dependency-specific caching for each job. If different dependencies are installed across jobs the cache from the first job will be used in the second job. To manage this aspect, users should create separate caches for jobs with different requirements. If users need flexible customization, we will advise them to use `actions/cache` directly.
|
||||||
|
|
||||||
## Decision
|
## Decision
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,8 @@ import {
|
||||||
createSymlinkInFolder,
|
createSymlinkInFolder,
|
||||||
isNightlyKeyword,
|
isNightlyKeyword,
|
||||||
writeExactPyPyVersionFile,
|
writeExactPyPyVersionFile,
|
||||||
getBinaryDirectory
|
getBinaryDirectory,
|
||||||
|
getDownloadFileName
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
export async function installPyPy(
|
export async function installPyPy(
|
||||||
|
@ -69,7 +70,8 @@ export async function installPyPy(
|
||||||
core.info(`Downloading PyPy from "${downloadUrl}" ...`);
|
core.info(`Downloading PyPy from "${downloadUrl}" ...`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const pypyPath = await tc.downloadTool(downloadUrl);
|
const fileName = getDownloadFileName(downloadUrl);
|
||||||
|
const pypyPath = await tc.downloadTool(downloadUrl, fileName);
|
||||||
|
|
||||||
core.info('Extracting downloaded archive...');
|
core.info('Extracting downloaded archive...');
|
||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import * as tc from '@actions/tool-cache';
|
||||||
import * as exec from '@actions/exec';
|
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} from './utils';
|
import {IS_WINDOWS, IS_LINUX, getDownloadFileName} from './utils';
|
||||||
|
|
||||||
const TOKEN = core.getInput('token');
|
const TOKEN = core.getInput('token');
|
||||||
const AUTH = !TOKEN ? undefined : `token ${TOKEN}`;
|
const AUTH = !TOKEN ? undefined : `token ${TOKEN}`;
|
||||||
|
@ -98,7 +98,8 @@ export async function installCpythonFromRelease(release: tc.IToolRelease) {
|
||||||
core.info(`Download from "${downloadUrl}"`);
|
core.info(`Download from "${downloadUrl}"`);
|
||||||
let pythonPath = '';
|
let pythonPath = '';
|
||||||
try {
|
try {
|
||||||
pythonPath = await tc.downloadTool(downloadUrl, undefined, AUTH);
|
const fileName = getDownloadFileName(downloadUrl);
|
||||||
|
pythonPath = await tc.downloadTool(downloadUrl, fileName, AUTH);
|
||||||
core.info('Extract downloaded archive');
|
core.info('Extract downloaded archive');
|
||||||
let pythonExtractedFolder;
|
let pythonExtractedFolder;
|
||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
|
|
14
src/utils.ts
14
src/utils.ts
|
@ -310,3 +310,17 @@ export function getNextPageUrl<T>(response: ifm.TypedResponse<T>) {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add temporary fix for Windows
|
||||||
|
* On Windows, it is necessary to retain the .zip extension for proper extraction.
|
||||||
|
* because the tc.extractZip() failure due to tc.downloadTool() not adding .zip extension.
|
||||||
|
* Related issue: https://github.com/actions/toolkit/issues/1179
|
||||||
|
* Related issue: https://github.com/actions/setup-python/issues/819
|
||||||
|
*/
|
||||||
|
export function getDownloadFileName(downloadUrl: string): string | undefined {
|
||||||
|
const tempDir = process.env.RUNNER_TEMP || '.';
|
||||||
|
return IS_WINDOWS
|
||||||
|
? path.join(tempDir, path.basename(downloadUrl))
|
||||||
|
: undefined;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue