goreleaser-action/__tests__/github.test.ts
Copilot 5daf1e915a
Some checks are pending
ci / ci (goreleaser, macos-latest, latest) (push) Waiting to run
ci / ci (goreleaser, macos-latest, ~> 2.13) (push) Waiting to run
ci / ci (goreleaser, ubuntu-latest, latest) (push) Waiting to run
ci / ci (goreleaser, ubuntu-latest, ~> 2.13) (push) Waiting to run
ci / ci (goreleaser, windows-latest, latest) (push) Waiting to run
ci / ci (goreleaser, windows-latest, ~> 2.13) (push) Waiting to run
ci / ci (goreleaser-pro, macos-latest, latest) (push) Waiting to run
ci / ci (goreleaser-pro, macos-latest, ~> 2.13) (push) Waiting to run
ci / ci (goreleaser-pro, ubuntu-latest, latest) (push) Waiting to run
ci / ci (goreleaser-pro, ubuntu-latest, ~> 2.13) (push) Waiting to run
ci / ci (goreleaser-pro, windows-latest, latest) (push) Waiting to run
ci / ci (goreleaser-pro, windows-latest, ~> 2.13) (push) Waiting to run
ci / install-only (false, goreleaser, latest) (push) Waiting to run
ci / install-only (false, goreleaser, ~> 2.13) (push) Waiting to run
ci / install-only (false, goreleaser-pro, latest) (push) Waiting to run
ci / install-only (false, goreleaser-pro, ~> 2.13) (push) Waiting to run
ci / install-only (true, goreleaser, latest) (push) Waiting to run
ci / install-only (true, goreleaser, ~> 2.13) (push) Waiting to run
ci / install-only (true, goreleaser-pro, latest) (push) Waiting to run
ci / install-only (true, goreleaser-pro, ~> 2.13) (push) Waiting to run
ci / signing (macos-latest) (push) Waiting to run
ci / signing (ubuntu-latest) (push) Waiting to run
ci / signing (windows-latest) (push) Waiting to run
ci / upload-artifact (push) Waiting to run
ci / dist (push) Waiting to run
ci / nightly (goreleaser, macos-latest) (push) Waiting to run
ci / nightly (goreleaser, ubuntu-latest) (push) Waiting to run
ci / nightly (goreleaser, windows-latest) (push) Waiting to run
ci / nightly (goreleaser-pro, macos-latest) (push) Waiting to run
ci / nightly (goreleaser-pro, ubuntu-latest) (push) Waiting to run
ci / nightly (goreleaser-pro, windows-latest) (push) Waiting to run
test / test (push) Waiting to run
validate / lint (push) Waiting to run
validate / build (push) Waiting to run
validate / vendor (push) Waiting to run
fix: nightly resolution to select newest published release (#562)
* fix(nightly): pick latest nightly by published_at

GitHub's /releases endpoint is not reliably ordered by published_at,
so resolveNightly could pick an older nightly than the most recent
one. Filter, sort by published_at desc, and take the first.

* test(nightly): add regression coverage for release ordering

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-05-18 21:38:28 -03:00

119 lines
4.6 KiB
TypeScript

import {describe, expect, it} from '@jest/globals';
import * as github from '../src/github';
describe('getRelease', () => {
it('returns latest GoReleaser GitHub release', async () => {
const release = await github.getRelease('goreleaser', 'latest');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns v0.182.0 GoReleaser GitHub release', async () => {
const release = await github.getRelease('goreleaser', 'v0.182.0');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.182.0');
});
it('returns v0.182.1 GoReleaser GitHub release', async () => {
const release = await github.getRelease('goreleaser', '~> 0.182');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.182.1');
});
it('unknown GoReleaser release', async () => {
await expect(github.getRelease('goreleaser', 'foo')).rejects.toThrow(
new Error('Cannot find GoReleaser release foo in https://goreleaser.com/releases.json')
);
});
it('returns latest GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', 'latest');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns latest v1 GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', '~> v1');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns latest v1 GoReleaser GitHub release', async () => {
const release = await github.getRelease('goreleaser', '~> v1');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns latest v2 GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', '~> v2');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('returns latest v2 GoReleaser GitHub release', async () => {
const release = await github.getRelease('goreleaser', '~> v2');
expect(release).not.toBeNull();
expect(release?.tag_name).not.toEqual('');
});
it('resolves nightly to a <version>-<sha>-nightly release for OSS GoReleaser', async () => {
const release = await github.getRelease('goreleaser', 'nightly');
expect(release).not.toBeNull();
expect(release.tag_name).toMatch(github.nightlyTagRegex);
});
it('resolves nightly to a <version>-<sha>-nightly release for GoReleaser Pro', async () => {
const release = await github.getRelease('goreleaser-pro', 'nightly');
expect(release).not.toBeNull();
expect(release.tag_name).toMatch(github.nightlyTagRegex);
});
it('returns v0.182.0 GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', 'v0.182.0');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.182.0-pro');
});
it('returns v0.182.1 GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', '~> 0.182');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v0.182.1-pro');
});
it('returns v2.7.0 GoReleaser Pro GitHub release', async () => {
const release = await github.getRelease('goreleaser-pro', '~> v2.7');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v2.7.0');
});
it('skips JSON check for specific version v2.8.1', async () => {
const release = await github.getRelease('goreleaser', 'v2.8.1');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v2.8.1');
});
it('skips JSON check for specific version without v prefix', async () => {
const release = await github.getRelease('goreleaser', '2.8.1');
expect(release).not.toBeNull();
expect(release?.tag_name).toEqual('v2.8.1');
});
it('unknown GoReleaser Pro release', async () => {
await expect(github.getRelease('goreleaser-pro', 'foo')).rejects.toThrow(
new Error('Cannot find GoReleaser release foo in https://goreleaser.com/releases-pro.json')
);
});
});
describe('latestNightlyRelease', () => {
it('returns the newest nightly by published_at even when API order is wrong', () => {
const release = github.latestNightlyRelease([
{tag_name: 'v2.16.0-c9b458fa-nightly', published_at: '2026-05-12T01:27:50Z'},
{tag_name: 'v2.16.0-6724de64-nightly', published_at: '2026-05-13T01:32:53Z'},
{tag_name: 'v2.16.0-2827930b-nightly', published_at: '2026-05-17T01:34:11Z'},
{tag_name: 'v2.15.4', published_at: '2026-04-21T14:07:57Z'}
]);
expect(release?.tag_name).toEqual('v2.16.0-2827930b-nightly');
});
});