feat: implement (optional) semver parsing of version (#213)

This commit is contained in:
Radek Simko 2020-06-15 17:05:51 +01:00 committed by GitHub
parent de0cc32957
commit 62b67a060c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 1572 additions and 9 deletions

View File

@ -3,7 +3,6 @@ import * as git from '../src/git';
describe('git', () => {
it('returns git tag', async () => {
const tag: string = await git.getTag();
console.log(tag);
expect(tag).not.toEqual('');
});
it('checks if tag is dirty', async () => {
@ -11,7 +10,6 @@ describe('git', () => {
});
it('returns short commit', async () => {
const commit: string = await git.getShortCommit();
console.log(commit);
expect(commit).not.toEqual('');
});
});

View File

@ -3,14 +3,17 @@ import * as github from '../src/github';
describe('github', () => {
it('returns latest GoReleaser GitHub release', async () => {
const release = await github.getRelease('latest');
console.log(release);
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns v0.117.0 GoReleaser GitHub release', async () => {
const release = await github.getRelease('v0.117.0');
console.log(release);
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.117.0');
});
it('returns v0.132.1 GoReleaser GitHub release', async () => {
const release = await github.getRelease('~> 0.132');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.132.1');
});
});

View File

@ -4,13 +4,11 @@ import * as installer from '../src/installer';
describe('installer', () => {
it('acquires v0.117.0 version of GoReleaser', async () => {
const goreleaser = await installer.getGoReleaser('v0.117.0');
console.log(goreleaser);
expect(fs.existsSync(goreleaser)).toBe(true);
}, 100000);
it('acquires latest version of GoReleaser', async () => {
const goreleaser = await installer.getGoReleaser('latest');
console.log(goreleaser);
expect(fs.existsSync(goreleaser)).toBe(true);
}, 100000);
});

1514
dist/index.js generated vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,14 @@
module.exports = {
clearMocks: true,
moduleFileExtensions: ['js', 'ts'],
setupFiles: ["dotenv/config"],
setupFiles: [
"dotenv/config",
"<rootDir>/src/test_setup.ts"
],
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
testRunner: 'jest-circus/runner',
testTimeout: 10000,
transform: {
'^.+\\.ts$': 'ts-jest'
},

View File

@ -35,6 +35,7 @@
"jest-circus": "^26.0.1",
"jest-runtime": "^26.0.1",
"prettier": "^2.0.5",
"tmp": "^0.2.1",
"ts-jest": "^26.1.0",
"typescript": "^3.9.5",
"typescript-formatter": "^7.2.2"

View File

@ -1,4 +1,6 @@
import * as httpm from '@actions/http-client';
import * as core from '@actions/core';
import * as semver from 'semver';
export interface GitHubRelease {
id: number;
@ -6,7 +8,36 @@ export interface GitHubRelease {
}
export const getRelease = async (version: string): Promise<GitHubRelease | null> => {
const url: string = `https://github.com/goreleaser/goreleaser/releases/${version}`;
const resolvedVersion: string = (await resolveVersion(version)) || version;
const url: string = `https://github.com/goreleaser/goreleaser/releases/${resolvedVersion}`;
const http: httpm.HttpClient = new httpm.HttpClient('goreleaser-action');
return (await http.getJson<GitHubRelease>(url)).result;
};
const resolveVersion = async (version: string): Promise<string | null> => {
const allTags: Array<string> | null = await getAllTags();
if (!allTags) {
throw new Error(`Cannot find GoReleaser tags`);
}
core.debug(`Found ${allTags.length} tags in total`);
return semver.maxSatisfying(allTags, version);
};
interface GitHubTag {
tag_name: string;
}
const getAllTags = async (): Promise<Array<string>> => {
const http: httpm.HttpClient = new httpm.HttpClient('goreleaser-action');
const url: string = `https://goreleaser.com/static/releases.json`;
const getTags = http.getJson<Array<GitHubTag>>(url);
return getTags.then(response => {
if (response.result == null) {
return [];
}
return response.result.map(obj => obj.tag_name);
});
};

9
src/test_setup.ts Normal file
View File

@ -0,0 +1,9 @@
import tmp = require('tmp');
tmp.setGracefulCleanup();
const tmpdir = tmp.dirSync({template: 'goreleaser-XXXXXX'});
process.env = Object.assign(process.env, {
RUNNER_TEMP: tmpdir.name,
RUNNER_TOOL_CACHE: tmpdir.name,
GITHUB_ACTION: '1'
});

View File

@ -3381,6 +3381,13 @@ throat@^5.0.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
tmp@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
dependencies:
rimraf "^3.0.0"
tmpl@1.0.x:
version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"