mirror of https://github.com/actions/setup-python
Fix: Add `.zip` extension to Windows package downloads for `Expand-Archive` Compatibility (#916)
* Fix: specify filename during Windows package download * Changed unit test download urls
This commit is contained in:
parent
04c1311429
commit
036a523674
|
@ -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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
|
@ -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…
Reference in New Issue