mirror of
https://github.com/goreleaser/goreleaser-action.git
synced 2026-05-14 23:00:33 +00:00
* feat: resolve nightly to latest vX.Y.Z-<sha>-nightly release
Query GitHub releases API to resolve the 'nightly' version input to the
latest immutable nightly tag, replacing the moving 'nightly' tag that is
being removed for supply-chain hardening.
Refs goreleaser/goreleaser#6550
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: keep legacy 'nightly' tag working during transition
Fall back to the moving 'nightly' tag when no immutable
vX.Y.Z-<sha>-nightly release is found, so the action keeps working
between this release and the goreleaser nightly switchover.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* test: assert isNightlyTag accepts legacy fallback
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: accept nightly tags without 'v' prefix
goreleaser-pro publishes nightly releases as e.g. 2.16.0-eaeb08c50-nightly
(no 'v' prefix). Make the nightly tag regex tolerate either form, and
split the integration tests so OSS asserts the legacy fallback while
Pro asserts the new <version>-<sha>-nightly format.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Revert "fix: accept nightly tags without 'v' prefix"
The missing 'v' prefix on the goreleaser-pro nightly was a release
mistake; new nightlies will keep the 'v' prefix.
This reverts commit 7673f7f.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* ci: pass GITHUB_TOKEN to tests
The new nightly resolution hits api.github.com/repos/.../releases,
which is rate-limited for unauthenticated requests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: note GITHUB_TOKEN need for nightly resolution
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
108 lines
4.2 KiB
TypeScript
108 lines
4.2 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 the legacy nightly tag for OSS GoReleaser', async () => {
|
|
// No <version>-<sha>-nightly release exists in goreleaser/goreleaser yet,
|
|
// so this should fall back to the legacy moving `nightly` tag.
|
|
const release = await github.getRelease('goreleaser', 'nightly');
|
|
expect(release).not.toBeNull();
|
|
expect(release.tag_name).toEqual('nightly');
|
|
});
|
|
|
|
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')
|
|
);
|
|
});
|
|
});
|