mirror of
https://github.com/actions/setup-go.git
synced 2025-12-27 08:58:17 +00:00
fix normalizeVersionSpec to cover edge cases pointed out by review comments
This commit is contained in:
parent
389daec209
commit
f5562dd1e7
3 changed files with 49 additions and 19 deletions
|
|
@ -710,6 +710,41 @@ describe('setup-go', () => {
|
|||
expect(im.makeSemver('1.13.1')).toBe('1.13.1');
|
||||
});
|
||||
|
||||
describe('normalizeVersionSpec', () => {
|
||||
it('converts Go-style prerelease to semver format', () => {
|
||||
expect(im.normalizeVersionSpec('1.14rc1')).toBe('1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('1.14beta1')).toBe('1.14.0-beta.1');
|
||||
expect(im.normalizeVersionSpec('1.21rc2')).toBe('1.21.0-rc.2');
|
||||
});
|
||||
|
||||
it('preserves range prefixes when converting', () => {
|
||||
expect(im.normalizeVersionSpec('^1.14rc1')).toBe('^1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('~1.14beta1')).toBe('~1.14.0-beta.1');
|
||||
expect(im.normalizeVersionSpec('>=1.14rc1')).toBe('>=1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('>1.14rc1')).toBe('>1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('<=1.14rc1')).toBe('<=1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('<1.14rc1')).toBe('<1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('=1.14rc1')).toBe('=1.14.0-rc.1');
|
||||
});
|
||||
|
||||
it('preserves versions without Go-style prerelease', () => {
|
||||
expect(im.normalizeVersionSpec('1.13')).toBe('1.13');
|
||||
expect(im.normalizeVersionSpec('1.13.7')).toBe('1.13.7');
|
||||
expect(im.normalizeVersionSpec('^1.13.6')).toBe('^1.13.6');
|
||||
expect(im.normalizeVersionSpec('>=1.13')).toBe('>=1.13');
|
||||
});
|
||||
|
||||
it('preserves already valid semver prerelease format', () => {
|
||||
expect(im.normalizeVersionSpec('1.14.0-rc.1')).toBe('1.14.0-rc.1');
|
||||
expect(im.normalizeVersionSpec('^1.14.0-beta.1')).toBe('^1.14.0-beta.1');
|
||||
});
|
||||
|
||||
it('does not match false positives like "traced"', () => {
|
||||
// "traced" contains "rc" but should not be treated as prerelease
|
||||
expect(im.normalizeVersionSpec('1.13traced')).toBe('1.13traced');
|
||||
});
|
||||
});
|
||||
|
||||
describe('check-latest flag', () => {
|
||||
it("use local version and don't check manifest if check-latest is not specified", async () => {
|
||||
os.platform = 'linux';
|
||||
|
|
|
|||
16
dist/setup/index.js
vendored
16
dist/setup/index.js
vendored
|
|
@ -94801,16 +94801,14 @@ function getVersionsDist(dlUrl) {
|
|||
// 1.13 => 1.13 (preserved for range matching)
|
||||
// 1.14rc1 => 1.14.0-rc.1
|
||||
// ^1.14rc1 => ^1.14.0-rc.1
|
||||
// ~1.14beta1 => ~1.14.0-beta.1
|
||||
// >=1.14beta1 => >=1.14.0-beta.1
|
||||
function normalizeVersionSpec(versionSpec) {
|
||||
var _a;
|
||||
const rangePrefix = ((_a = versionSpec.match(/^[~^]/)) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
||||
const version = versionSpec.replace(/^[~^]/, '');
|
||||
// Only convert if it has Go-style prerelease (rc/beta without hyphen prefix)
|
||||
const hasGoStylePrerelease = (version.includes('rc') || version.includes('beta')) &&
|
||||
!version.includes('-rc.') &&
|
||||
!version.includes('-beta.');
|
||||
if (!hasGoStylePrerelease) {
|
||||
// Match semver range prefixes: ^, ~, >, >=, <, <=, =
|
||||
const rangePrefixMatch = versionSpec.match(/^([~^]|[<>]=?|=)/);
|
||||
const rangePrefix = (rangePrefixMatch === null || rangePrefixMatch === void 0 ? void 0 : rangePrefixMatch[0]) || '';
|
||||
const version = versionSpec.slice(rangePrefix.length);
|
||||
// Only convert if it has Go-style prerelease (e.g., rc1, beta1)
|
||||
if (!/(?:rc|beta)\d+/.test(version)) {
|
||||
return versionSpec;
|
||||
}
|
||||
return rangePrefix + makeSemver(version);
|
||||
|
|
|
|||
|
|
@ -467,18 +467,15 @@ export async function getVersionsDist(
|
|||
// 1.13 => 1.13 (preserved for range matching)
|
||||
// 1.14rc1 => 1.14.0-rc.1
|
||||
// ^1.14rc1 => ^1.14.0-rc.1
|
||||
// ~1.14beta1 => ~1.14.0-beta.1
|
||||
// >=1.14beta1 => >=1.14.0-beta.1
|
||||
export function normalizeVersionSpec(versionSpec: string): string {
|
||||
const rangePrefix = versionSpec.match(/^[~^]/)?.[0] || '';
|
||||
const version = versionSpec.replace(/^[~^]/, '');
|
||||
// Match semver range prefixes: ^, ~, >, >=, <, <=, =
|
||||
const rangePrefixMatch = versionSpec.match(/^([~^]|[<>]=?|=)/);
|
||||
const rangePrefix = rangePrefixMatch?.[0] || '';
|
||||
const version = versionSpec.slice(rangePrefix.length);
|
||||
|
||||
// Only convert if it has Go-style prerelease (rc/beta without hyphen prefix)
|
||||
const hasGoStylePrerelease =
|
||||
(version.includes('rc') || version.includes('beta')) &&
|
||||
!version.includes('-rc.') &&
|
||||
!version.includes('-beta.');
|
||||
|
||||
if (!hasGoStylePrerelease) {
|
||||
// Only convert if it has Go-style prerelease (e.g., rc1, beta1)
|
||||
if (!/(?:rc|beta)\d+/.test(version)) {
|
||||
return versionSpec;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue