Skip to content

Commit

Permalink
Merge pull request #250 from jromero/feature/windows-download-filename
Browse files Browse the repository at this point in the history
Use explicit filename when downloading Windows go package
  • Loading branch information
marko-zivic-93 committed Aug 4, 2022
2 parents 1022489 + e0dce94 commit f279813
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 2 deletions.
40 changes: 40 additions & 0 deletions __tests__/setup-go.test.ts
Expand Up @@ -13,6 +13,8 @@ let matchers = require('../matchers.json');
let goTestManifest = require('./data/versions-manifest.json');
let matcherPattern = matchers.problemMatcher[0].pattern[0];
let matcherRegExp = new RegExp(matcherPattern.regexp);
let win32Join = path.win32.join;
let posixJoin = path.posix.join;

describe('setup-go', () => {
let inputs = {} as any;
Expand All @@ -27,8 +29,10 @@ describe('setup-go', () => {
let getSpy: jest.SpyInstance;
let platSpy: jest.SpyInstance;
let archSpy: jest.SpyInstance;
let joinSpy: jest.SpyInstance;
let dlSpy: jest.SpyInstance;
let extractTarSpy: jest.SpyInstance;
let extractZipSpy: jest.SpyInstance;
let cacheSpy: jest.SpyInstance;
let dbgSpy: jest.SpyInstance;
let whichSpy: jest.SpyInstance;
Expand Down Expand Up @@ -61,10 +65,21 @@ describe('setup-go', () => {
archSpy.mockImplementation(() => os['arch']);
execSpy = jest.spyOn(cp, 'execSync');

// switch path join behaviour based on set os.platform
joinSpy = jest.spyOn(path, 'join');
joinSpy.mockImplementation((...paths: string[]): string => {
if (os['platform'] == 'win32') {
return win32Join(...paths);
}

return posixJoin(...paths);
});

// @actions/tool-cache
findSpy = jest.spyOn(tc, 'find');
dlSpy = jest.spyOn(tc, 'downloadTool');
extractTarSpy = jest.spyOn(tc, 'extractTar');
extractZipSpy = jest.spyOn(tc, 'extractZip');
cacheSpy = jest.spyOn(tc, 'cacheDir');
getSpy = jest.spyOn(im, 'getVersionsDist');
getManifestSpy = jest.spyOn(tc, 'getManifestFromRepo');
Expand Down Expand Up @@ -325,6 +340,31 @@ describe('setup-go', () => {
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
});

it('downloads a version not in the cache (windows)', async () => {
os.platform = 'win32';
os.arch = 'x64';

inputs['go-version'] = '1.13.1';
process.env['RUNNER_TEMP'] = 'C:\\temp\\';

findSpy.mockImplementation(() => '');
dlSpy.mockImplementation(() => 'C:\\temp\\some\\path');
extractZipSpy.mockImplementation(() => 'C:\\temp\\some\\other\\path');

let toolPath = path.normalize('C:\\cache\\go\\1.13.0\\x64');
cacheSpy.mockImplementation(() => toolPath);

await main.run();

let expPath = path.win32.join(toolPath, 'bin');
expect(dlSpy).toHaveBeenCalledWith(
'https://storage.googleapis.com/golang/go1.13.1.windows-amd64.zip',
'C:\\temp\\go1.13.1.windows-amd64.zip',
undefined
);
expect(cnSpy).toHaveBeenCalledWith(`::add-path::${expPath}${osm.EOL}`);
});

it('does not find a version that does not exist', async () => {
os.platform = 'linux';
os.arch = 'x64';
Expand Down
6 changes: 5 additions & 1 deletion dist/setup/index.js
Expand Up @@ -62942,7 +62942,11 @@ function resolveVersionFromManifest(versionSpec, stable, auth) {
function installGoVersion(info, auth) {
return __awaiter(this, void 0, void 0, function* () {
core.info(`Acquiring ${info.resolvedVersion} from ${info.downloadUrl}`);
const downloadPath = yield tc.downloadTool(info.downloadUrl, undefined, auth);
// Windows requires that we keep the extension (.zip) for extraction
const isWindows = os_1.default.platform() === 'win32';
const tempDir = process.env.RUNNER_TEMP || '.';
const fileName = isWindows ? path.join(tempDir, info.fileName) : undefined;
const downloadPath = yield tc.downloadTool(info.downloadUrl, fileName, auth);
core.info('Extracting Go...');
let extPath = yield extractGoArchive(downloadPath);
core.info(`Successfully extracted go to ${extPath}`);
Expand Down
8 changes: 7 additions & 1 deletion src/installer.ts
Expand Up @@ -132,7 +132,13 @@ async function installGoVersion(
auth: string | undefined
): Promise<string> {
core.info(`Acquiring ${info.resolvedVersion} from ${info.downloadUrl}`);
const downloadPath = await tc.downloadTool(info.downloadUrl, undefined, auth);

// Windows requires that we keep the extension (.zip) for extraction
const isWindows = os.platform() === 'win32';
const tempDir = process.env.RUNNER_TEMP || '.';
const fileName = isWindows ? path.join(tempDir, info.fileName) : undefined;

const downloadPath = await tc.downloadTool(info.downloadUrl, fileName, auth);

core.info('Extracting Go...');
let extPath = await extractGoArchive(downloadPath);
Expand Down

0 comments on commit f279813

Please sign in to comment.