Add support for native Go version syntax in go-version input (#804)
* Add support for native Go version syntax in go-version input * Enhance Go-native version handling and update tests and documentation * Update docs
This commit is contained in:
1 parent
90ad2b35f6
commit
3c1b57c66a
7 files changed
+208
-9
No files matched your search
@@ -866,6 +866,11 @@ describe('setup-go', () => {
|
||||
expect(im.makeSemver('1.10rc1')).toBe('1.10.0-rc.1');
|
||||
});
|
||||
|
||||
it('preserves already-normalized prerelease versions', () => {
|
||||
expect(im.makeSemver('1.18.0-beta.2')).toBe('1.18.0-beta.2');
|
||||
expect(im.makeSemver('1.21.0-rc.2')).toBe('1.21.0-rc.2');
|
||||
});
|
||||
|
||||
it('converts dot zero versions', async () => {
|
||||
expect(im.makeSemver('1.13')).toBe('1.13.0');
|
||||
});
|
||||
@@ -874,6 +879,102 @@ describe('setup-go', () => {
|
||||
expect(im.makeSemver('1.13.1')).toBe('1.13.1');
|
||||
});
|
||||
|
||||
it('isGoNativeVersion accepts supported Go-native version formats', () => {
|
||||
expect(im.isGoNativeVersion('go1.21')).toBe(true);
|
||||
expect(im.isGoNativeVersion('go1.21.5')).toBe(true);
|
||||
expect(im.isGoNativeVersion('go1.18beta2')).toBe(true);
|
||||
expect(im.isGoNativeVersion('go1.21rc2')).toBe(true);
|
||||
|
||||
expect(im.isGoNativeVersion('go1.21.x')).toBe(false);
|
||||
expect(im.isGoNativeVersion('go^1.21')).toBe(false);
|
||||
expect(im.isGoNativeVersion('1.21')).toBe(false);
|
||||
expect(im.isGoNativeVersion('go1')).toBe(false);
|
||||
expect(im.isGoNativeVersion('go1.21.5beta1')).toBe(false);
|
||||
expect(im.isGoNativeVersion('go1.21.0rc1')).toBe(false);
|
||||
});
|
||||
|
||||
it('accepts a Go-native go-version input and normalizes it', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
inputs['go-version'] = 'go1.21';
|
||||
findSpy.mockImplementation(() => path.normalize('/cache/go/1.21.0/x64'));
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(logSpy).toHaveBeenCalledWith('Setup go version spec go1.21');
|
||||
expect(findSpy).toHaveBeenCalledWith('go', '1.21.0', 'x64');
|
||||
expect(logSpy).toHaveBeenCalledWith(
|
||||
'Successfully set up Go version go1.21'
|
||||
);
|
||||
});
|
||||
|
||||
it('rejects a malformed Go-native go-version input', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
inputs['go-version'] = 'go1.21.x';
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(cnSpy).toHaveBeenCalledWith(
|
||||
expect.stringContaining('Invalid Go version "go1.21.x"')
|
||||
);
|
||||
});
|
||||
|
||||
it('accepts a Go-native go-version input with beta suffix and normalizes it', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
inputs['go-version'] = 'go1.18beta2';
|
||||
findSpy.mockImplementation(() =>
|
||||
path.normalize('/cache/go/1.18.0-beta.2/x64')
|
||||
);
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(logSpy).toHaveBeenCalledWith('Setup go version spec go1.18beta2');
|
||||
expect(findSpy).toHaveBeenCalledWith('go', '1.18.0-beta.2', 'x64');
|
||||
expect(logSpy).toHaveBeenCalledWith(
|
||||
'Successfully set up Go version go1.18beta2'
|
||||
);
|
||||
});
|
||||
|
||||
it('accepts a Go-native go-version input with rc suffix and normalizes it', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
inputs['go-version'] = 'go1.21rc2';
|
||||
findSpy.mockImplementation(() =>
|
||||
path.normalize('/cache/go/1.21.0-rc.2/x64')
|
||||
);
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(logSpy).toHaveBeenCalledWith('Setup go version spec go1.21rc2');
|
||||
expect(findSpy).toHaveBeenCalledWith('go', '1.21.0-rc.2', 'x64');
|
||||
expect(logSpy).toHaveBeenCalledWith(
|
||||
'Successfully set up Go version go1.21rc2'
|
||||
);
|
||||
});
|
||||
|
||||
it('downloads a normalized Go-native version on cache miss', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
inputs['go-version'] = 'go1.13';
|
||||
|
||||
findSpy.mockImplementation(() => '');
|
||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
||||
extractTarSpy.mockImplementation(async () => '/some/other/temp/path');
|
||||
cacheSpy.mockImplementation(async () =>
|
||||
path.normalize('/cache/go/1.13.0/x64')
|
||||
);
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(logSpy).toHaveBeenCalledWith('Attempting to download 1.13.0...');
|
||||
expect(dlSpy).toHaveBeenCalled();
|
||||
expect(logSpy).toHaveBeenCalledWith(
|
||||
'Successfully set up Go version go1.13'
|
||||
);
|
||||
});
|
||||
|
||||
describe('check-latest flag', () => {
|
||||
it("use local version and don't check manifest if check-latest is not specified", async () => {
|
||||
os.platform = 'linux';
|
||||
@@ -1297,6 +1398,43 @@ use .
|
||||
});
|
||||
|
||||
describe('go-download-base-url', () => {
|
||||
it('normalizes native versions but preserves custom download filenames', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
|
||||
const versionSpec = 'go1.21rc2';
|
||||
const customBaseUrl = 'https://example.com/golang';
|
||||
const toolName = im.customToolCacheName(customBaseUrl);
|
||||
const toolPath = path.normalize(`/cache/${toolName}/1.21.0-rc.2/x64`);
|
||||
|
||||
inputs['go-version'] = versionSpec;
|
||||
inputs['go-download-base-url'] = customBaseUrl;
|
||||
|
||||
getSpy.mockImplementationOnce(() => {
|
||||
throw new Error('Not a JSON endpoint');
|
||||
});
|
||||
findSpy.mockImplementation(() => '');
|
||||
dlSpy.mockImplementation(async () => '/some/temp/path');
|
||||
extractTarSpy.mockImplementation(async () => '/some/other/temp/path');
|
||||
execFileSpy.mockImplementation(() => 'go version go1.21rc2 linux/amd64');
|
||||
cacheSpy.mockImplementation(async () => toolPath);
|
||||
|
||||
await main.run();
|
||||
|
||||
expect(findSpy).toHaveBeenCalledWith(toolName, '1.21.0-rc.2', 'x64');
|
||||
expect(getSpy).toHaveBeenCalledWith(
|
||||
`${customBaseUrl}/?mode=json&include=all`
|
||||
);
|
||||
expect(dlSpy).toHaveBeenCalledWith(
|
||||
`${customBaseUrl}/go1.21rc2.linux-amd64.tar.gz`,
|
||||
undefined,
|
||||
undefined
|
||||
);
|
||||
expect(cnSpy).toHaveBeenCalledWith(
|
||||
`::add-path::${path.join(toolPath, 'bin')}${osm.EOL}`
|
||||
);
|
||||
});
|
||||
|
||||
it('downloads a version from custom base URL using version listing', async () => {
|
||||
os.platform = 'linux';
|
||||
os.arch = 'x64';
|
||||
|
||||
Reference in new issue
Block a user