mirror of
https://github.com/actions/setup-go
synced 2024-12-22 14:22:41 +00:00
pre-release version and test
This commit is contained in:
parent
43880314e9
commit
768458bd0b
4 changed files with 106 additions and 20 deletions
12
README.md
12
README.md
|
@ -18,6 +18,7 @@ The V2 beta offers:
|
||||||
- stable input
|
- stable input
|
||||||
- Bug Fixes (including issues around version matching and semver)
|
- Bug Fixes (including issues around version matching and semver)
|
||||||
|
|
||||||
|
Matching by semver spec:
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -27,6 +28,17 @@ steps:
|
||||||
- run: go version
|
- run: go version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Matching an unstable pre-release:
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-go@v2-beta
|
||||||
|
with:
|
||||||
|
stable: 'false'
|
||||||
|
go-version: '1.14.0-rc1' # The Go version to download (if necessary) and use.
|
||||||
|
- run: go version
|
||||||
|
```
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
See [action.yml](action.yml)
|
See [action.yml](action.yml)
|
||||||
|
|
|
@ -67,6 +67,29 @@ describe('setup-go', () => {
|
||||||
|
|
||||||
afterAll(async () => {}, 100000);
|
afterAll(async () => {}, 100000);
|
||||||
|
|
||||||
|
it('can query versions', async () => {
|
||||||
|
let versions: im.IGoVersion[] | null = await im.getVersions(
|
||||||
|
'https://non.existant.com/path'
|
||||||
|
);
|
||||||
|
expect(versions).toBeDefined();
|
||||||
|
let l: number = versions ? versions.length : 0;
|
||||||
|
expect(l).toBe(91);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('finds stable match for exact version', async () => {
|
||||||
|
os.platform = 'win32';
|
||||||
|
os.arch = 'x64';
|
||||||
|
|
||||||
|
// get request is already mocked
|
||||||
|
// spec: 1.13.7 => 1.13.7 (exact)
|
||||||
|
let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true);
|
||||||
|
expect(match).toBeDefined();
|
||||||
|
let version: string = match ? match.version : '';
|
||||||
|
expect(version).toBe('go1.13.7');
|
||||||
|
let fileName = match ? match.files[0].filename : '';
|
||||||
|
expect(fileName).toBe('go1.13.7.windows-amd64.zip');
|
||||||
|
});
|
||||||
|
|
||||||
it('finds stable match for exact dot zero version', async () => {
|
it('finds stable match for exact dot zero version', async () => {
|
||||||
os.platform = 'darwin';
|
os.platform = 'darwin';
|
||||||
os.arch = 'x64';
|
os.arch = 'x64';
|
||||||
|
@ -119,6 +142,22 @@ describe('setup-go', () => {
|
||||||
expect(fileName).toBe('go1.13.7.windows-386.zip');
|
expect(fileName).toBe('go1.13.7.windows-386.zip');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('finds unstable pre-release version', async () => {
|
||||||
|
os.platform = 'linux';
|
||||||
|
os.arch = 'x64';
|
||||||
|
|
||||||
|
// spec: 1.14, stable=false => go1.14rc1
|
||||||
|
let match: im.IGoVersion | undefined = await im.findMatch(
|
||||||
|
'1.14.0-rc1',
|
||||||
|
false
|
||||||
|
);
|
||||||
|
expect(match).toBeDefined();
|
||||||
|
let version: string = match ? match.version : '';
|
||||||
|
expect(version).toBe('go1.14rc1');
|
||||||
|
let fileName = match ? match.files[0].filename : '';
|
||||||
|
expect(fileName).toBe('go1.14rc1.linux-amd64.tar.gz');
|
||||||
|
});
|
||||||
|
|
||||||
it('evaluates to stable with input as true', async () => {
|
it('evaluates to stable with input as true', async () => {
|
||||||
inputs['go-version'] = '1.13.0';
|
inputs['go-version'] = '1.13.0';
|
||||||
inputs.stable = 'true';
|
inputs.stable = 'true';
|
||||||
|
@ -241,26 +280,20 @@ describe('setup-go', () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can query versions', async () => {
|
// 1.13.1 => 1.13.1
|
||||||
let versions: im.IGoVersion[] | null = await im.getVersions(
|
// 1.13 => 1.13.0
|
||||||
'https://non.existant.com/path'
|
// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
|
||||||
);
|
// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
|
||||||
expect(versions).toBeDefined();
|
it('converts prerelease versions', async () => {
|
||||||
let l: number = versions ? versions.length : 0;
|
expect(im.makeSemver('1.10beta1')).toBe('1.10.0-beta1');
|
||||||
expect(l).toBe(91);
|
expect(im.makeSemver('1.10rc1')).toBe('1.10.0-rc1');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('finds stable match for exact version', async () => {
|
it('converts dot zero versions', async () => {
|
||||||
os.platform = 'win32';
|
expect(im.makeSemver('1.13')).toBe('1.13.0');
|
||||||
os.arch = 'x64';
|
});
|
||||||
|
|
||||||
// get request is already mocked
|
it('does not convert exact versions', async () => {
|
||||||
// spec: 1.13.7 => 1.13.7 (exact)
|
expect(im.makeSemver('1.13.1')).toBe('1.13.1');
|
||||||
let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true);
|
|
||||||
expect(match).toBeDefined();
|
|
||||||
let version: string = match ? match.version : '';
|
|
||||||
expect(version).toBe('go1.13.7');
|
|
||||||
let fileName = match ? match.files[0].filename : '';
|
|
||||||
expect(fileName).toBe('go1.13.7.windows-amd64.zip');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
21
dist/index.js
vendored
21
dist/index.js
vendored
|
@ -4625,7 +4625,7 @@ function findMatch(versionSpec, stable) {
|
||||||
let goFile;
|
let goFile;
|
||||||
for (let i = 0; i < candidates.length; i++) {
|
for (let i = 0; i < candidates.length; i++) {
|
||||||
let candidate = candidates[i];
|
let candidate = candidates[i];
|
||||||
let version = candidate.version.replace('go', '');
|
let version = makeSemver(candidate.version);
|
||||||
// 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
|
// 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
|
||||||
// since a semver of 1.13 would match latest 1.13
|
// since a semver of 1.13 would match latest 1.13
|
||||||
let parts = version.split('.');
|
let parts = version.split('.');
|
||||||
|
@ -4663,6 +4663,25 @@ function getVersions(dlUrl) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.getVersions = getVersions;
|
exports.getVersions = getVersions;
|
||||||
|
//
|
||||||
|
// Convert the go version syntax into semver for semver matching
|
||||||
|
// 1.13.1 => 1.13.1
|
||||||
|
// 1.13 => 1.13.0
|
||||||
|
// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
|
||||||
|
// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
|
||||||
|
function makeSemver(version) {
|
||||||
|
version = version.replace('go', '');
|
||||||
|
version = version.replace('beta', '-beta').replace('rc', '-rc');
|
||||||
|
let parts = version.split('-');
|
||||||
|
let verPart = parts[0];
|
||||||
|
let prereleasePart = parts.length > 1 ? `-${parts[1]}` : '';
|
||||||
|
let verParts = verPart.split('.');
|
||||||
|
if (verParts.length == 2) {
|
||||||
|
verPart += '.0';
|
||||||
|
}
|
||||||
|
return `${verPart}${prereleasePart}`;
|
||||||
|
}
|
||||||
|
exports.makeSemver = makeSemver;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
|
@ -74,7 +74,7 @@ export async function findMatch(
|
||||||
let goFile: IGoVersionFile | undefined;
|
let goFile: IGoVersionFile | undefined;
|
||||||
for (let i = 0; i < candidates.length; i++) {
|
for (let i = 0; i < candidates.length; i++) {
|
||||||
let candidate: IGoVersion = candidates[i];
|
let candidate: IGoVersion = candidates[i];
|
||||||
let version = candidate.version.replace('go', '');
|
let version = makeSemver(candidate.version);
|
||||||
|
|
||||||
// 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
|
// 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
|
||||||
// since a semver of 1.13 would match latest 1.13
|
// since a semver of 1.13 would match latest 1.13
|
||||||
|
@ -115,3 +115,25 @@ export async function getVersions(dlUrl: string): Promise<IGoVersion[] | null> {
|
||||||
let http: httpm.HttpClient = new httpm.HttpClient('setup-go');
|
let http: httpm.HttpClient = new httpm.HttpClient('setup-go');
|
||||||
return (await http.getJson<IGoVersion[]>(dlUrl)).result;
|
return (await http.getJson<IGoVersion[]>(dlUrl)).result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Convert the go version syntax into semver for semver matching
|
||||||
|
// 1.13.1 => 1.13.1
|
||||||
|
// 1.13 => 1.13.0
|
||||||
|
// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
|
||||||
|
// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
|
||||||
|
export function makeSemver(version: string): string {
|
||||||
|
version = version.replace('go', '');
|
||||||
|
version = version.replace('beta', '-beta').replace('rc', '-rc');
|
||||||
|
let parts = version.split('-');
|
||||||
|
|
||||||
|
let verPart: string = parts[0];
|
||||||
|
let prereleasePart = parts.length > 1 ? `-${parts[1]}` : '';
|
||||||
|
|
||||||
|
let verParts: string[] = verPart.split('.');
|
||||||
|
if (verParts.length == 2) {
|
||||||
|
verPart += '.0';
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${verPart}${prereleasePart}`;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue