mirror of
https://github.com/peaceiris/actions-hugo.git
synced 2026-06-05 19:18:40 +02:00
187a5efe81
## Summary - Support multiple Hugo release asset names for Linux, macOS, and Windows so renamed upstream assets no longer fail with a plain 404. - Preserve compatibility with legacy Hugo assets that used filename forms such as `hugo_v0.20.3_*`, macOS `.zip` archives, and `Linux_ARM`-style names. - Add retry handling for missing candidate assets and macOS `.pkg` extraction via `pkgutil --expand-full`, with focused URL and installer tests plus the rebuilt `lib/index.js` bundle. ## References - Fixes https://github.com/peaceiris/actions-hugo/issues/652 - `hugo-version: latest` still resolves through Homebrew; this change does not fall back to an older Hugo version when the resolved release has no compatible asset. - Review note: `lib/index.js` is generated by `npm run build` and contains bundled dependency code. ## Test plan - [x] `RUNNER_TEMP=/tmp npm run all` - [x] `npm run build` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Broadened test coverage for asset URL generation, download retry behavior, and extraction across OSes and architectures. * **Bug Fixes** * More resilient installer with multiple candidate download URLs and retry handling for transient failures. * Improved extraction logic to correctly handle platform- and format-specific archives. [](https://app.coderabbit.ai/change-stack/peaceiris/actions-hugo/pull/687) <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Codex <noreply@openai.com>
88 lines
3.0 KiB
TypeScript
88 lines
3.0 KiB
TypeScript
import * as main from '../src/main';
|
|
import * as io from '@actions/io';
|
|
import path from 'path';
|
|
import nock from 'nock';
|
|
import {Tool, Action} from '../src/constants';
|
|
import {FetchError} from 'node-fetch';
|
|
import jsonTestBrew from './data/brew.json';
|
|
// import jsonTestGithub from './data/github.json';
|
|
|
|
jest.setTimeout(30000);
|
|
|
|
describe('Integration testing run()', () => {
|
|
beforeEach(() => {
|
|
jest.resetModules();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
const workDir = path.join(`${process.env.HOME}`, Action.WorkDirName);
|
|
await io.rmRF(workDir);
|
|
|
|
delete process.env['INPUT_HUGO-VERSION'];
|
|
delete process.env['INPUT_EXTENDED'];
|
|
nock.cleanAll();
|
|
});
|
|
|
|
test('succeed in installing a custom version', async () => {
|
|
const testVersion = Tool.TestVersionSpec;
|
|
process.env['INPUT_HUGO-VERSION'] = testVersion;
|
|
const result: main.ActionResult = await main.run();
|
|
expect(result.exitcode).toBe(0);
|
|
expect(result.output).toMatch(`hugo v${testVersion}`);
|
|
});
|
|
|
|
test('succeed in installing a custom extended version', async () => {
|
|
const testVersion = Tool.TestVersionSpec;
|
|
process.env['INPUT_HUGO-VERSION'] = testVersion;
|
|
process.env['INPUT_EXTENDED'] = 'true';
|
|
const result: main.ActionResult = await main.run();
|
|
expect(result.exitcode).toBe(0);
|
|
expect(result.output).toMatch(`hugo v${testVersion}`);
|
|
expect(result.output).toMatch(`extended`);
|
|
});
|
|
|
|
test('succeed in installing the latest version', async () => {
|
|
const testVersion = 'latest';
|
|
process.env['INPUT_HUGO-VERSION'] = testVersion;
|
|
nock('https://formulae.brew.sh').get(`/api/formula/${Tool.Repo}.json`).reply(200, jsonTestBrew);
|
|
const result: main.ActionResult = await main.run();
|
|
expect(result.exitcode).toBe(0);
|
|
expect(result.output).toMatch(`hugo v${Tool.TestVersionLatest}`);
|
|
});
|
|
|
|
test('succeed in installing the latest extended version', async () => {
|
|
const testVersion = 'latest';
|
|
process.env['INPUT_HUGO-VERSION'] = testVersion;
|
|
process.env['INPUT_EXTENDED'] = 'true';
|
|
nock('https://formulae.brew.sh').get(`/api/formula/${Tool.Repo}.json`).reply(200, jsonTestBrew);
|
|
const result: main.ActionResult = await main.run();
|
|
expect(result.exitcode).toBe(0);
|
|
expect(result.output).toMatch(`hugo v${Tool.TestVersionLatest}`);
|
|
expect(result.output).toMatch(`extended`);
|
|
});
|
|
|
|
test('fail to install the latest version due to 404 of brew', async () => {
|
|
process.env['INPUT_HUGO-VERSION'] = 'latest';
|
|
nock('https://formulae.brew.sh').get(`/api/formula/${Tool.Repo}.json`).reply(404);
|
|
|
|
await expect(main.run()).rejects.toThrowError(FetchError);
|
|
});
|
|
});
|
|
|
|
describe('showVersion()', () => {
|
|
let result: main.ActionResult = {
|
|
exitcode: 0,
|
|
output: ''
|
|
};
|
|
|
|
test('return version', async () => {
|
|
result = await main.showVersion('git', ['--version']);
|
|
expect(result.exitcode).toBe(0);
|
|
expect(result.output).toMatch(/git version/);
|
|
});
|
|
|
|
test('return not found', async () => {
|
|
await expect(main.showVersion('gitgit', ['--version'])).rejects.toThrowError(Error);
|
|
});
|
|
});
|