mirror of
https://github.com/actions/setup-dotnet.git
synced 2025-08-20 23:50:19 +00:00
Start cleaning up broken tests
This commit is contained in:
parent
277403db88
commit
fe82455c0b
@ -1,5 +1,6 @@
|
|||||||
import io = require('@actions/io');
|
import io = require('@actions/io');
|
||||||
import fs = require('fs');
|
import fs = require('fs');
|
||||||
|
import os = require('os');
|
||||||
import path = require('path');
|
import path = require('path');
|
||||||
import hc = require('@actions/http-client');
|
import hc = require('@actions/http-client');
|
||||||
|
|
||||||
@ -91,18 +92,16 @@ describe('installer tests', () => {
|
|||||||
it('Resolving a normal generic version works', async () => {
|
it('Resolving a normal generic version works', async () => {
|
||||||
const dotnetInstaller = new installer.DotnetCoreInstaller('3.1.x');
|
const dotnetInstaller = new installer.DotnetCoreInstaller('3.1.x');
|
||||||
let versInfo = await dotnetInstaller.resolveInfos(
|
let versInfo = await dotnetInstaller.resolveInfos(
|
||||||
['win-x64'],
|
|
||||||
new installer.DotNetVersionInfo('3.1.x')
|
new installer.DotNetVersionInfo('3.1.x')
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(versInfo.resolvedVersion.startsWith('3.1.'));
|
expect(versInfo.startsWith('3.1.'));
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Resolving a nonexistent generic version fails', async () => {
|
it('Resolving a nonexistent generic version fails', async () => {
|
||||||
const dotnetInstaller = new installer.DotnetCoreInstaller('999.1.x');
|
const dotnetInstaller = new installer.DotnetCoreInstaller('999.1.x');
|
||||||
try {
|
try {
|
||||||
await dotnetInstaller.resolveInfos(
|
await dotnetInstaller.resolveInfos(
|
||||||
['win-x64'],
|
|
||||||
new installer.DotNetVersionInfo('999.1.x')
|
new installer.DotNetVersionInfo('999.1.x')
|
||||||
);
|
);
|
||||||
fail();
|
fail();
|
||||||
@ -114,11 +113,10 @@ describe('installer tests', () => {
|
|||||||
it('Resolving a exact stable version works', async () => {
|
it('Resolving a exact stable version works', async () => {
|
||||||
const dotnetInstaller = new installer.DotnetCoreInstaller('3.1.201');
|
const dotnetInstaller = new installer.DotnetCoreInstaller('3.1.201');
|
||||||
let versInfo = await dotnetInstaller.resolveInfos(
|
let versInfo = await dotnetInstaller.resolveInfos(
|
||||||
['win-x64'],
|
|
||||||
new installer.DotNetVersionInfo('3.1.201')
|
new installer.DotNetVersionInfo('3.1.201')
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(versInfo.resolvedVersion).toBe('3.1.201');
|
expect(versInfo).toBe('3.1.201');
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Resolving a exact preview version works', async () => {
|
it('Resolving a exact preview version works', async () => {
|
||||||
@ -126,11 +124,10 @@ describe('installer tests', () => {
|
|||||||
'5.0.0-preview.4'
|
'5.0.0-preview.4'
|
||||||
);
|
);
|
||||||
let versInfo = await dotnetInstaller.resolveInfos(
|
let versInfo = await dotnetInstaller.resolveInfos(
|
||||||
['win-x64'],
|
|
||||||
new installer.DotNetVersionInfo('5.0.0-preview.4')
|
new installer.DotNetVersionInfo('5.0.0-preview.4')
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(versInfo.resolvedVersion).toBe('5.0.0-preview.4');
|
expect(versInfo).toBe('5.0.0-preview.4');
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Acquires version of dotnet if no matching version is installed', async () => {
|
it('Acquires version of dotnet if no matching version is installed', async () => {
|
||||||
|
1140
dist/index.js
vendored
1140
dist/index.js
vendored
File diff suppressed because it is too large
Load Diff
105
src/installer.ts
105
src/installer.ts
@ -2,6 +2,7 @@
|
|||||||
let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || '';
|
let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || '';
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from '@actions/exec';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
|
import hc = require('@actions/http-client');
|
||||||
import {chmodSync} from 'fs';
|
import {chmodSync} from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import {ExecOptions} from '@actions/exec/lib/interfaces';
|
import {ExecOptions} from '@actions/exec/lib/interfaces';
|
||||||
@ -86,27 +87,6 @@ export class DotNetVersionInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a resolved version from the Web-Api
|
|
||||||
*/
|
|
||||||
class ResolvedVersionInfo {
|
|
||||||
downloadUrls: string[];
|
|
||||||
resolvedVersion: string;
|
|
||||||
|
|
||||||
constructor(downloadUrls: string[], resolvedVersion: string) {
|
|
||||||
if (downloadUrls.length === 0) {
|
|
||||||
throw 'DownloadUrls can not be empty';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!resolvedVersion) {
|
|
||||||
throw 'Resolved version is invalid';
|
|
||||||
}
|
|
||||||
|
|
||||||
this.downloadUrls = downloadUrls;
|
|
||||||
this.resolvedVersion = resolvedVersion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DotnetCoreInstaller {
|
export class DotnetCoreInstaller {
|
||||||
constructor(version: string) {
|
constructor(version: string) {
|
||||||
this.version = version;
|
this.version = version;
|
||||||
@ -116,6 +96,10 @@ export class DotnetCoreInstaller {
|
|||||||
let output = '';
|
let output = '';
|
||||||
let resultCode = 0;
|
let resultCode = 0;
|
||||||
|
|
||||||
|
let calculatedVersion = await this.resolveInfos(
|
||||||
|
new DotNetVersionInfo(this.version)
|
||||||
|
);
|
||||||
|
|
||||||
var envVariables: {[key: string]: string} = {};
|
var envVariables: {[key: string]: string} = {};
|
||||||
for (let key in process.env) {
|
for (let key in process.env) {
|
||||||
if (process.env[key]) {
|
if (process.env[key]) {
|
||||||
@ -128,8 +112,8 @@ export class DotnetCoreInstaller {
|
|||||||
.join(__dirname, '..', 'externals', 'install-dotnet.ps1')
|
.join(__dirname, '..', 'externals', 'install-dotnet.ps1')
|
||||||
.replace(/'/g, "''");
|
.replace(/'/g, "''");
|
||||||
let command = `& '${escapedScript}'`;
|
let command = `& '${escapedScript}'`;
|
||||||
if (this.version) {
|
if (calculatedVersion) {
|
||||||
command += ` -Version ${this.version}`;
|
command += ` -Version ${calculatedVersion}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used
|
// process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used
|
||||||
@ -187,5 +171,80 @@ export class DotnetCoreInstaller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OsSuffixes - The suffix which is a part of the file name ex- linux-x64, windows-x86
|
||||||
|
// Type - SDK / Runtime
|
||||||
|
// versionInfo - versionInfo of the SDK/Runtime
|
||||||
|
async resolveInfos(versionInfo: DotNetVersionInfo): Promise<string> {
|
||||||
|
const httpClient = new hc.HttpClient('actions/setup-dotnet', [], {
|
||||||
|
allowRetries: true,
|
||||||
|
maxRetries: 3
|
||||||
|
});
|
||||||
|
|
||||||
|
const releasesJsonUrl: string = await this.getReleasesJsonUrl(
|
||||||
|
httpClient,
|
||||||
|
versionInfo.version().split('.')
|
||||||
|
);
|
||||||
|
|
||||||
|
const releasesResponse = await httpClient.getJson<any>(releasesJsonUrl);
|
||||||
|
const releasesResult = releasesResponse.result || {};
|
||||||
|
let releasesInfo: any[] = releasesResult['releases'];
|
||||||
|
releasesInfo = releasesInfo.filter((releaseInfo: any) => {
|
||||||
|
return (
|
||||||
|
semver.satisfies(
|
||||||
|
releaseInfo['sdk']['version'],
|
||||||
|
versionInfo.version()
|
||||||
|
) ||
|
||||||
|
semver.satisfies(
|
||||||
|
releaseInfo['sdk']['version-display'],
|
||||||
|
versionInfo.version()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exclude versions that are newer than the latest if using not exact
|
||||||
|
if (!versionInfo.isExactVersion()) {
|
||||||
|
let latestSdk: string = releasesResult['latest-sdk'];
|
||||||
|
|
||||||
|
releasesInfo = releasesInfo.filter((releaseInfo: any) =>
|
||||||
|
semver.lte(releaseInfo['sdk']['version'], latestSdk)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort for latest version
|
||||||
|
releasesInfo = releasesInfo.sort((a, b) =>
|
||||||
|
semver.rcompare(a['sdk']['version'], b['sdk']['version'])
|
||||||
|
);
|
||||||
|
|
||||||
|
let selectedVersion = releasesInfo[0]['sdk']['version'];
|
||||||
|
|
||||||
|
return selectedVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getReleasesJsonUrl(
|
||||||
|
httpClient: hc.HttpClient,
|
||||||
|
versionParts: string[]
|
||||||
|
): Promise<string> {
|
||||||
|
const response = await httpClient.getJson<any>(DotNetCoreIndexUrl);
|
||||||
|
const result = response.result || {};
|
||||||
|
let releasesInfo: any[] = result['releases-index'];
|
||||||
|
releasesInfo = releasesInfo.filter((info: any) => {
|
||||||
|
// channel-version is the first 2 elements of the version (e.g. 2.1), filter out versions that don't match 2.1.x.
|
||||||
|
const sdkParts: string[] = info['channel-version'].split('.');
|
||||||
|
if (versionParts.length >= 2 && versionParts[1] != 'x') {
|
||||||
|
return versionParts[0] == sdkParts[0] && versionParts[1] == sdkParts[1];
|
||||||
|
}
|
||||||
|
return versionParts[0] == sdkParts[0];
|
||||||
|
});
|
||||||
|
if (releasesInfo.length === 0) {
|
||||||
|
throw `Could not find info for version ${versionParts.join(
|
||||||
|
'.'
|
||||||
|
)} at ${DotNetCoreIndexUrl}`;
|
||||||
|
}
|
||||||
|
return releasesInfo[0]['releases.json'];
|
||||||
|
}
|
||||||
|
|
||||||
private version: string;
|
private version: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DotNetCoreIndexUrl: string =
|
||||||
|
'https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user