check latest and tagged releases using releases-json

This commit is contained in:
CrazyMax 2023-01-29 16:03:29 +01:00
parent 4c84b78119
commit c26e09cbb4
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7
4 changed files with 49 additions and 35 deletions

View File

@ -1,16 +0,0 @@
import {describe, expect, it} from '@jest/globals';
import * as github from '../src/github';
describe('github', () => {
it('returns latest UPX GitHub release', async () => {
const release = await github.getRelease('latest');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns v3.96 GoReleaser GitHub release', async () => {
const release = await github.getRelease('v3.96');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v3.96');
});
});

View File

@ -2,6 +2,30 @@ import {describe, expect, it} from '@jest/globals';
import * as fs from 'fs'; import * as fs from 'fs';
import * as installer from '../src/installer'; import * as installer from '../src/installer';
describe('getRelease', () => {
it('returns latest UPX GitHub release', async () => {
const release = await installer.getRelease('latest');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns v3.95 UPX GitHub release', async () => {
const release = await installer.getRelease('v3.95');
expect(release).not.toBeNull();
expect(release?.id).toEqual(12577195);
expect(release?.tag_name).toEqual('v3.95');
expect(release?.html_url).toEqual('https://github.com/upx/upx/releases/tag/v3.95');
});
it('unknown release', async () => {
await expect(installer.getRelease('foo')).rejects.toThrowError(
new Error(
'Cannot find UPX release foo in https://raw.githubusercontent.com/crazy-max/ghaction-upx/master/.github/upx-releases.json'
)
);
});
});
describe('installer', () => { describe('installer', () => {
it('acquires v3.95 version of UPX', async () => { it('acquires v3.95 version of UPX', async () => {
const upx = await installer.getUPX('v3.95'); const upx = await installer.getUPX('v3.95');

View File

@ -1,12 +0,0 @@
import * as httpm from '@actions/http-client';
export interface GitHubRelease {
id: number;
tag_name: string;
}
export const getRelease = async (version: string): Promise<GitHubRelease | null> => {
const url = `https://github.com/upx/upx/releases/${version}`;
const http: httpm.HttpClient = new httpm.HttpClient('ghaction-upx');
return (await http.getJson<GitHubRelease>(url)).result;
};

View File

@ -1,22 +1,40 @@
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import * as util from 'util'; import * as util from 'util';
import * as github from './github';
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as httpm from '@actions/http-client';
import * as tc from '@actions/tool-cache'; import * as tc from '@actions/tool-cache';
const osPlat: string = os.platform(); const osPlat: string = os.platform();
const osArch: string = os.arch(); const osArch: string = os.arch();
export async function getUPX(version: string): Promise<string> { export interface GitHubRelease {
core.startGroup(`Checking UPX ${version} release...`); id: number;
const release: github.GitHubRelease | null = await github.getRelease(version); tag_name: string;
if (!release) { html_url: string;
throw new Error(`Cannot find UPX ${version} release`); assets: Array<string>;
}
export const getRelease = async (version: string): Promise<GitHubRelease> => {
const url = `https://raw.githubusercontent.com/crazy-max/ghaction-upx/master/.github/upx-releases.json`;
const http: httpm.HttpClient = new httpm.HttpClient('ghaction-upx');
const resp: httpm.HttpClientResponse = await http.get(url);
const body = await resp.readBody();
const statusCode = resp.message.statusCode || 500;
if (statusCode >= 400) {
throw new Error(`Failed to get UPX release ${version} from ${url} with status code ${statusCode}: ${body}`);
} }
const releases = <Record<string, GitHubRelease>>JSON.parse(body);
if (!releases[version]) {
throw new Error(`Cannot find UPX release ${version} in ${url}`);
}
return releases[version];
};
export async function getUPX(version: string): Promise<string> {
const release: GitHubRelease = await getRelease(version);
const semver: string = release.tag_name.replace(/^v/, ''); const semver: string = release.tag_name.replace(/^v/, '');
core.info(`UPX ${semver} found`); core.info(`UPX ${semver} found`);
core.endGroup();
const filename = util.format('%s.%s', getName(semver), osPlat == 'win32' ? 'zip' : 'tar.xz'); const filename = util.format('%s.%s', getName(semver), osPlat == 'win32' ? 'zip' : 'tar.xz');
const downloadUrl = util.format('https://github.com/upx/upx/releases/download/v%s/%s', semver, filename); const downloadUrl = util.format('https://github.com/upx/upx/releases/download/v%s/%s', semver, filename);