Skip to content

Commit 7b20097

Browse files
Merge pull request #110 from GGG-KILLER/feature/include-prerelease
Include include-prerelease option to be able to match latest prerelease versions
2 parents 53d6483 + 291588d commit 7b20097

File tree

4 files changed

+44
-17
lines changed

4 files changed

+44
-17
lines changed

action.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ inputs:
1313
description: 'Optional OWNER for using packages from GitHub Package Registry organizations/users other than the current repository''s owner. Only used if a GPR URL is also provided in source-url'
1414
config-file:
1515
description: 'Optional NuGet.config location, if your NuGet.config isn''t located in the root of the repo.'
16+
include-prerelease:
17+
description: 'Whether prerelease versions should be matched with non-exact versions (for example 5.0.0-preview.6 being matched by 5, 5.0, 5.x or 5.0.x). Defaults to false if not provided.'
18+
required: False
1619
runs:
1720
using: 'node12'
1821
main: 'dist/index.js'

dist/index.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7838,7 +7838,9 @@ function run() {
78387838
}
78397839
}
78407840
if (version) {
7841-
const dotnetInstaller = new installer.DotnetCoreInstaller(version);
7841+
const includePrerelease = (core.getInput('include-prerelease') || 'false').toLowerCase() ===
7842+
'true';
7843+
const dotnetInstaller = new installer.DotnetCoreInstaller(version, includePrerelease);
78427844
yield dotnetInstaller.installDotnet();
78437845
}
78447846
const sourceUrl = core.getInput('source-url');
@@ -16885,7 +16887,6 @@ class DotNetVersionInfo {
1688516887
this.isExactVersionSet = true;
1688616888
return;
1688716889
}
16888-
//Note: No support for previews when using generic
1688916890
const parts = version.split('.');
1689016891
if (parts.length < 2 || parts.length > 3)
1689116892
this.throwInvalidVersionFormat();
@@ -16927,8 +16928,9 @@ class DotNetVersionInfo {
1692716928
}
1692816929
exports.DotNetVersionInfo = DotNetVersionInfo;
1692916930
class DotnetCoreInstaller {
16930-
constructor(version) {
16931+
constructor(version, includePrerelease = false) {
1693116932
this.version = version;
16933+
this.includePrerelease = includePrerelease;
1693216934
}
1693316935
installDotnet() {
1693416936
return __awaiter(this, void 0, void 0, function* () {
@@ -17035,14 +17037,22 @@ class DotnetCoreInstaller {
1703517037
const releasesResult = releasesResponse.result || {};
1703617038
let releasesInfo = releasesResult['releases'];
1703717039
releasesInfo = releasesInfo.filter((releaseInfo) => {
17038-
return (semver.satisfies(releaseInfo['sdk']['version'], versionInfo.version()) ||
17039-
semver.satisfies(releaseInfo['sdk']['version-display'], versionInfo.version()));
17040+
return (semver.satisfies(releaseInfo['sdk']['version'], versionInfo.version(), {
17041+
includePrerelease: this.includePrerelease
17042+
}) ||
17043+
semver.satisfies(releaseInfo['sdk']['version-display'], versionInfo.version(), {
17044+
includePrerelease: this.includePrerelease
17045+
}));
1704017046
});
1704117047
// Exclude versions that are newer than the latest if using not exact
1704217048
let latestSdk = releasesResult['latest-sdk'];
17043-
releasesInfo = releasesInfo.filter((releaseInfo) => semver.lte(releaseInfo['sdk']['version'], latestSdk));
17049+
releasesInfo = releasesInfo.filter((releaseInfo) => semver.lte(releaseInfo['sdk']['version'], latestSdk, {
17050+
includePrerelease: this.includePrerelease
17051+
}));
1704417052
// Sort for latest version
17045-
releasesInfo = releasesInfo.sort((a, b) => semver.rcompare(a['sdk']['version'], b['sdk']['version']));
17053+
releasesInfo = releasesInfo.sort((a, b) => semver.rcompare(a['sdk']['version'], b['sdk']['version'], {
17054+
includePrerelease: this.includePrerelease
17055+
}));
1704617056
if (releasesInfo.length == 0) {
1704717057
throw new Error(`Could not find dotnet core version. Please ensure that specified version ${versionInfo.inputVersion} is valid.`);
1704817058
}

src/installer.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export class DotNetVersionInfo {
2929
return;
3030
}
3131

32-
//Note: No support for previews when using generic
3332
const parts: string[] = version.split('.');
3433

3534
if (parts.length < 2 || parts.length > 3) this.throwInvalidVersionFormat();
@@ -80,8 +79,9 @@ export class DotNetVersionInfo {
8079
}
8180

8281
export class DotnetCoreInstaller {
83-
constructor(version: string) {
82+
constructor(version: string, includePrerelease: boolean = false) {
8483
this.version = version;
84+
this.includePrerelease = includePrerelease;
8585
}
8686

8787
public async installDotnet() {
@@ -216,13 +216,15 @@ export class DotnetCoreInstaller {
216216
let releasesInfo: any[] = releasesResult['releases'];
217217
releasesInfo = releasesInfo.filter((releaseInfo: any) => {
218218
return (
219-
semver.satisfies(
220-
releaseInfo['sdk']['version'],
221-
versionInfo.version()
222-
) ||
219+
semver.satisfies(releaseInfo['sdk']['version'], versionInfo.version(), {
220+
includePrerelease: this.includePrerelease
221+
}) ||
223222
semver.satisfies(
224223
releaseInfo['sdk']['version-display'],
225-
versionInfo.version()
224+
versionInfo.version(),
225+
{
226+
includePrerelease: this.includePrerelease
227+
}
226228
)
227229
);
228230
});
@@ -231,12 +233,16 @@ export class DotnetCoreInstaller {
231233
let latestSdk: string = releasesResult['latest-sdk'];
232234

233235
releasesInfo = releasesInfo.filter((releaseInfo: any) =>
234-
semver.lte(releaseInfo['sdk']['version'], latestSdk)
236+
semver.lte(releaseInfo['sdk']['version'], latestSdk, {
237+
includePrerelease: this.includePrerelease
238+
})
235239
);
236240

237241
// Sort for latest version
238242
releasesInfo = releasesInfo.sort((a, b) =>
239-
semver.rcompare(a['sdk']['version'], b['sdk']['version'])
243+
semver.rcompare(a['sdk']['version'], b['sdk']['version'], {
244+
includePrerelease: this.includePrerelease
245+
})
240246
);
241247

242248
if (releasesInfo.length == 0) {
@@ -281,6 +287,7 @@ export class DotnetCoreInstaller {
281287
}
282288

283289
private version: string;
290+
private includePrerelease: boolean;
284291
}
285292

286293
const DotNetCoreIndexUrl: string =

src/setup-dotnet.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ export async function run() {
3030
}
3131

3232
if (version) {
33-
const dotnetInstaller = new installer.DotnetCoreInstaller(version);
33+
const includePrerelease: boolean =
34+
(core.getInput('include-prerelease') || 'false').toLowerCase() ===
35+
'true';
36+
37+
const dotnetInstaller = new installer.DotnetCoreInstaller(
38+
version,
39+
includePrerelease
40+
);
3441
await dotnetInstaller.installDotnet();
3542
}
3643

0 commit comments

Comments
 (0)