goreleaser-action/src/installer.ts

53 lines
1.8 KiB
TypeScript
Raw Normal View History

2019-09-20 20:23:45 +00:00
import * as os from 'os';
import * as path from 'path';
import * as util from 'util';
import * as github from './github';
import * as core from '@actions/core';
import * as tc from '@actions/tool-cache';
2019-09-20 20:23:45 +00:00
const osPlat: string = os.platform();
const osArch: string = os.arch();
2019-09-20 20:23:45 +00:00
export async function getGoReleaser(version: string): Promise<string> {
const release: github.GitHubRelease | null = await github.getRelease(version);
if (!release) {
throw new Error(`Cannot find GoReleaser ${version} release`);
2019-09-20 20:23:45 +00:00
}
core.info(`✅ GoReleaser version found: ${release.tag_name}`);
const filename = getFilename();
2019-09-20 20:23:45 +00:00
const downloadUrl = util.format(
'https://github.com/goreleaser/goreleaser/releases/download/%s/%s',
release.tag_name,
filename
2019-09-20 20:23:45 +00:00
);
core.info(`⬇️ Downloading ${downloadUrl}...`);
const downloadPath: string = await tc.downloadTool(downloadUrl);
core.debug(`Downloaded to ${downloadPath}`);
2019-09-20 20:23:45 +00:00
core.info('📦 Extracting GoReleaser...');
let extPath: string;
2019-09-20 20:23:45 +00:00
if (osPlat == 'win32') {
extPath = await tc.extractZip(downloadPath);
2019-09-20 20:23:45 +00:00
} else {
extPath = await tc.extractTar(downloadPath);
2019-09-20 20:23:45 +00:00
}
core.debug(`Extracted to ${extPath}`);
2019-09-20 20:23:45 +00:00
const cachePath: string = await tc.cacheDir(extPath, 'goreleaser-action', release.tag_name.replace(/^v/, ''));
core.debug(`Cached to ${cachePath}`);
const exePath: string = path.join(cachePath, osPlat == 'win32' ? 'goreleaser.exe' : 'goreleaser');
core.debug(`Exe path is ${exePath}`);
return exePath;
2019-09-20 20:23:45 +00:00
}
const getFilename = (): string => {
2019-11-11 23:05:29 +00:00
const platform: string = osPlat == 'win32' ? 'Windows' : osPlat == 'darwin' ? 'Darwin' : 'Linux';
2019-09-20 20:23:45 +00:00
const arch: string = osArch == 'x64' ? 'x86_64' : 'i386';
const ext: string = osPlat == 'win32' ? 'zip' : 'tar.gz';
return util.format('goreleaser_%s_%s.%s', platform, arch, ext);
};