mirror of
https://github.com/actions/setup-dotnet.git
synced 2024-11-22 11:31:07 +07:00
Merge pull request #433 from akv-platform/sequential-version-install-fix
Sequential version install fix
This commit is contained in:
commit
9b40770825
30
.github/workflows/e2e-tests.yml
vendored
30
.github/workflows/e2e-tests.yml
vendored
@ -451,3 +451,33 @@ jobs:
|
|||||||
- name: Verify dotnet
|
- name: Verify dotnet
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$" -CheckNugetConfig
|
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$" -CheckNugetConfig
|
||||||
|
|
||||||
|
test-sequential-version-installation:
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
|
lower-version: ['3.1.426']
|
||||||
|
higher-version: ['7.0.203']
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Clear toolcache
|
||||||
|
shell: pwsh
|
||||||
|
run: __tests__/clear-toolcache.ps1 ${{ runner.os }}
|
||||||
|
# Install one version, use it for something, then switch to next version
|
||||||
|
- name: Setup dotnet (lower version)
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
dotnet-version: ${{ matrix.lower-version }}
|
||||||
|
- name: Verify dotnet (lower version)
|
||||||
|
shell: pwsh
|
||||||
|
run: __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.lower-version }}$"
|
||||||
|
- name: Setup dotnet (higher version)
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
dotnet-version: ${{ matrix.higher-version }}
|
||||||
|
- name: Verify dotnet (higher version)
|
||||||
|
shell: pwsh
|
||||||
|
run: __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.lower-version }}$", "^${{ matrix.higher-version }}$"
|
||||||
|
@ -102,8 +102,15 @@ describe('installer tests', () => {
|
|||||||
|
|
||||||
await dotnetInstaller.installDotnet();
|
await dotnetInstaller.installDotnet();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First time script would be called to
|
||||||
|
* install runtime, here we checking only the
|
||||||
|
* second one that installs actual SDK. i.e. 1
|
||||||
|
*/
|
||||||
|
const callIndex = 1;
|
||||||
|
|
||||||
const scriptArguments = (
|
const scriptArguments = (
|
||||||
getExecOutputSpy.mock.calls[0][1] as string[]
|
getExecOutputSpy.mock.calls[callIndex][1] as string[]
|
||||||
).join(' ');
|
).join(' ');
|
||||||
const expectedArgument = IS_WINDOWS
|
const expectedArgument = IS_WINDOWS
|
||||||
? `-Version ${inputVersion}`
|
? `-Version ${inputVersion}`
|
||||||
@ -185,8 +192,15 @@ describe('installer tests', () => {
|
|||||||
|
|
||||||
await dotnetInstaller.installDotnet();
|
await dotnetInstaller.installDotnet();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First time script would be called to
|
||||||
|
* install runtime, here we checking only the
|
||||||
|
* second one that installs actual SDK. i.e. 1
|
||||||
|
*/
|
||||||
|
const callIndex = 1;
|
||||||
|
|
||||||
const scriptArguments = (
|
const scriptArguments = (
|
||||||
getExecOutputSpy.mock.calls[0][1] as string[]
|
getExecOutputSpy.mock.calls[callIndex][1] as string[]
|
||||||
).join(' ');
|
).join(' ');
|
||||||
const expectedArgument = IS_WINDOWS
|
const expectedArgument = IS_WINDOWS
|
||||||
? `-Quality ${inputQuality}`
|
? `-Quality ${inputQuality}`
|
||||||
@ -218,8 +232,15 @@ describe('installer tests', () => {
|
|||||||
|
|
||||||
await dotnetInstaller.installDotnet();
|
await dotnetInstaller.installDotnet();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First time script would be called to
|
||||||
|
* install runtime, here we checking only the
|
||||||
|
* second one that installs actual SDK. i.e. 1
|
||||||
|
*/
|
||||||
|
const callIndex = 1;
|
||||||
|
|
||||||
const scriptArguments = (
|
const scriptArguments = (
|
||||||
getExecOutputSpy.mock.calls[0][1] as string[]
|
getExecOutputSpy.mock.calls[callIndex][1] as string[]
|
||||||
).join(' ');
|
).join(' ');
|
||||||
const expectedArgument = IS_WINDOWS
|
const expectedArgument = IS_WINDOWS
|
||||||
? `-Channel 6.0`
|
? `-Channel 6.0`
|
||||||
@ -252,8 +273,15 @@ describe('installer tests', () => {
|
|||||||
|
|
||||||
await dotnetInstaller.installDotnet();
|
await dotnetInstaller.installDotnet();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First time script would be called to
|
||||||
|
* install runtime, here we checking only the
|
||||||
|
* second one that installs actual SDK. i.e. 1
|
||||||
|
*/
|
||||||
|
const callIndex = 1;
|
||||||
|
|
||||||
const scriptArguments = (
|
const scriptArguments = (
|
||||||
getExecOutputSpy.mock.calls[0][1] as string[]
|
getExecOutputSpy.mock.calls[callIndex][1] as string[]
|
||||||
).join(' ');
|
).join(' ');
|
||||||
|
|
||||||
expect(scriptArguments).toContain(
|
expect(scriptArguments).toContain(
|
||||||
@ -283,8 +311,15 @@ describe('installer tests', () => {
|
|||||||
|
|
||||||
await dotnetInstaller.installDotnet();
|
await dotnetInstaller.installDotnet();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* First time script would be called to
|
||||||
|
* install runtime, here we checking only the
|
||||||
|
* second one that installs actual SDK. i.e. 1
|
||||||
|
*/
|
||||||
|
const callIndex = 1;
|
||||||
|
|
||||||
const scriptArguments = (
|
const scriptArguments = (
|
||||||
getExecOutputSpy.mock.calls[0][1] as string[]
|
getExecOutputSpy.mock.calls[callIndex][1] as string[]
|
||||||
).join(' ');
|
).join(' ');
|
||||||
|
|
||||||
expect(scriptArguments).toContain(
|
expect(scriptArguments).toContain(
|
||||||
|
37
dist/setup/index.js
vendored
37
dist/setup/index.js
vendored
@ -72843,14 +72843,39 @@ class DotnetCoreInstaller {
|
|||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const versionResolver = new DotnetVersionResolver(this.version);
|
const versionResolver = new DotnetVersionResolver(this.version);
|
||||||
const dotnetVersion = yield versionResolver.createDotnetVersion();
|
const dotnetVersion = yield versionResolver.createDotnetVersion();
|
||||||
const installScript = new DotnetInstallScript()
|
/**
|
||||||
|
* Install dotnet runitme first in order to get
|
||||||
|
* the latest stable version of dotnet CLI
|
||||||
|
*/
|
||||||
|
const runtimeInstallOutput = yield new DotnetInstallScript()
|
||||||
|
// If dotnet CLI is already installed - avoid overwriting it
|
||||||
.useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files')
|
.useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files')
|
||||||
.useVersion(dotnetVersion, this.quality);
|
// Install only runtime + CLI
|
||||||
const { exitCode, stderr, stdout } = yield installScript.execute();
|
.useArguments(utils_1.IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet')
|
||||||
if (exitCode) {
|
// Use latest stable version
|
||||||
throw new Error(`Failed to install dotnet, exit code: ${exitCode}. ${stderr}`);
|
.useArguments(utils_1.IS_WINDOWS ? '-Channel' : '--channel', 'LTS')
|
||||||
|
.execute();
|
||||||
|
if (runtimeInstallOutput.exitCode) {
|
||||||
|
/**
|
||||||
|
* dotnetInstallScript will install CLI and runtime even if previous script haven't succeded,
|
||||||
|
* so at this point it's too early to throw an error
|
||||||
|
*/
|
||||||
|
core.warning(`Failed to install dotnet runtime + cli, exit code: ${runtimeInstallOutput.exitCode}. ${runtimeInstallOutput.stderr}`);
|
||||||
}
|
}
|
||||||
return this.parseInstalledVersion(stdout);
|
/**
|
||||||
|
* Install dotnet over the latest version of
|
||||||
|
* dotnet CLI
|
||||||
|
*/
|
||||||
|
const dotnetInstallOutput = yield new DotnetInstallScript()
|
||||||
|
// Don't overwrite CLI because it should be already installed
|
||||||
|
.useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files')
|
||||||
|
// Use version provided by user
|
||||||
|
.useVersion(dotnetVersion, this.quality)
|
||||||
|
.execute();
|
||||||
|
if (dotnetInstallOutput.exitCode) {
|
||||||
|
throw new Error(`Failed to install dotnet, exit code: ${dotnetInstallOutput.exitCode}. ${dotnetInstallOutput.stderr}`);
|
||||||
|
}
|
||||||
|
return this.parseInstalledVersion(dotnetInstallOutput.stdout);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
parseInstalledVersion(stdout) {
|
parseInstalledVersion(stdout) {
|
||||||
|
@ -259,21 +259,51 @@ export class DotnetCoreInstaller {
|
|||||||
const versionResolver = new DotnetVersionResolver(this.version);
|
const versionResolver = new DotnetVersionResolver(this.version);
|
||||||
const dotnetVersion = await versionResolver.createDotnetVersion();
|
const dotnetVersion = await versionResolver.createDotnetVersion();
|
||||||
|
|
||||||
const installScript = new DotnetInstallScript()
|
/**
|
||||||
|
* Install dotnet runitme first in order to get
|
||||||
|
* the latest stable version of dotnet CLI
|
||||||
|
*/
|
||||||
|
const runtimeInstallOutput = await new DotnetInstallScript()
|
||||||
|
// If dotnet CLI is already installed - avoid overwriting it
|
||||||
.useArguments(
|
.useArguments(
|
||||||
IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files'
|
IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files'
|
||||||
)
|
)
|
||||||
.useVersion(dotnetVersion, this.quality);
|
// Install only runtime + CLI
|
||||||
|
.useArguments(IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet')
|
||||||
|
// Use latest stable version
|
||||||
|
.useArguments(IS_WINDOWS ? '-Channel' : '--channel', 'LTS')
|
||||||
|
.execute();
|
||||||
|
|
||||||
const {exitCode, stderr, stdout} = await installScript.execute();
|
if (runtimeInstallOutput.exitCode) {
|
||||||
|
/**
|
||||||
if (exitCode) {
|
* dotnetInstallScript will install CLI and runtime even if previous script haven't succeded,
|
||||||
throw new Error(
|
* so at this point it's too early to throw an error
|
||||||
`Failed to install dotnet, exit code: ${exitCode}. ${stderr}`
|
*/
|
||||||
|
core.warning(
|
||||||
|
`Failed to install dotnet runtime + cli, exit code: ${runtimeInstallOutput.exitCode}. ${runtimeInstallOutput.stderr}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.parseInstalledVersion(stdout);
|
/**
|
||||||
|
* Install dotnet over the latest version of
|
||||||
|
* dotnet CLI
|
||||||
|
*/
|
||||||
|
const dotnetInstallOutput = await new DotnetInstallScript()
|
||||||
|
// Don't overwrite CLI because it should be already installed
|
||||||
|
.useArguments(
|
||||||
|
IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files'
|
||||||
|
)
|
||||||
|
// Use version provided by user
|
||||||
|
.useVersion(dotnetVersion, this.quality)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
if (dotnetInstallOutput.exitCode) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to install dotnet, exit code: ${dotnetInstallOutput.exitCode}. ${dotnetInstallOutput.stderr}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.parseInstalledVersion(dotnetInstallOutput.stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseInstalledVersion(stdout: string): string | null {
|
private parseInstalledVersion(stdout: string): string | null {
|
||||||
|
Loading…
Reference in New Issue
Block a user