mirror of
				https://github.com/actions/setup-dotnet.git
				synced 2025-11-04 12:03:45 +00:00 
			
		
		
		
	Merge branch 'main' of https://github.com/actions/setup-dotnet into main
This commit is contained in:
		
						commit
						41aa78ac89
					
				
							
								
								
									
										1
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					* @actions/virtual-environments-owners
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@ -2,7 +2,7 @@
 | 
				
			|||||||
name: Bug report
 | 
					name: Bug report
 | 
				
			||||||
about: Create a bug report
 | 
					about: Create a bug report
 | 
				
			||||||
title: ''
 | 
					title: ''
 | 
				
			||||||
labels: bug
 | 
					labels: bug, needs triage
 | 
				
			||||||
assignees: ''
 | 
					assignees: ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@ -1,4 +1,4 @@
 | 
				
			|||||||
blank_issues_enabled: true
 | 
					blank_issues_enabled: false
 | 
				
			||||||
contact_links:
 | 
					contact_links:
 | 
				
			||||||
  - name: .NET issues
 | 
					  - name: .NET issues
 | 
				
			||||||
    url: https://github.com/dotnet/runtime#filing-issues
 | 
					    url: https://github.com/dotnet/runtime#filing-issues
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							@ -2,7 +2,7 @@
 | 
				
			|||||||
name: Feature request
 | 
					name: Feature request
 | 
				
			||||||
about: Suggest an idea for this project
 | 
					about: Suggest an idea for this project
 | 
				
			||||||
title: ''
 | 
					title: ''
 | 
				
			||||||
labels: feature request
 | 
					labels: feature request, needs triage
 | 
				
			||||||
assignees: ''
 | 
					assignees: ''
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ This action sets up a [dotnet core cli](https://github.com/dotnet/cli) environme
 | 
				
			|||||||
Please Note: GitHub hosted runners have some versions of the .NET SDK
 | 
					Please Note: GitHub hosted runners have some versions of the .NET SDK
 | 
				
			||||||
preinstalled. Installed versions are subject to change. Please refer to the
 | 
					preinstalled. Installed versions are subject to change. Please refer to the
 | 
				
			||||||
documentation
 | 
					documentation
 | 
				
			||||||
[software installed on github hosted runners](https://help.github.com/en/actions/reference/software-installed-on-github-hosted-runners)
 | 
					[software installed on github hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software)
 | 
				
			||||||
for .NET SDK versions that are currently available.
 | 
					for .NET SDK versions that are currently available.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Usage
 | 
					# Usage
 | 
				
			||||||
@ -37,7 +37,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        dotnet: [ '2.2.103', '3.0', '3.1.x' ]
 | 
					        dotnet: [ '2.1.x', '3.1.x', '5.0.x' ]
 | 
				
			||||||
    name: Dotnet ${{ matrix.dotnet }} sample
 | 
					    name: Dotnet ${{ matrix.dotnet }} sample
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@v2
 | 
					      - uses: actions/checkout@v2
 | 
				
			||||||
@ -59,7 +59,7 @@ jobs:
 | 
				
			|||||||
      - name: Setup dotnet
 | 
					      - name: Setup dotnet
 | 
				
			||||||
        uses: actions/setup-dotnet@v1
 | 
					        uses: actions/setup-dotnet@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          dotnet-version: '2.2.103'
 | 
					          dotnet-version: '2.1.x'
 | 
				
			||||||
      - name: Setup dotnet
 | 
					      - name: Setup dotnet
 | 
				
			||||||
        uses: actions/setup-dotnet@v1
 | 
					        uses: actions/setup-dotnet@v1
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
@ -113,7 +113,7 @@ build:
 | 
				
			|||||||
    - uses: actions/checkout@main
 | 
					    - uses: actions/checkout@main
 | 
				
			||||||
    - uses: actions/setup-dotnet@v1
 | 
					    - uses: actions/setup-dotnet@v1
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        dotnet-version: '3.1.100' # SDK Version to use.
 | 
					        dotnet-version: '3.1.x' # SDK Version to use.
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# License
 | 
					# License
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,8 @@ describe('version tests', () => {
 | 
				
			|||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  each([
 | 
					  each([
 | 
				
			||||||
 | 
					    ['3.x', '3.x'],
 | 
				
			||||||
 | 
					    ['3.*', '3.*'],
 | 
				
			||||||
    ['3.1.x', '3.1'],
 | 
					    ['3.1.x', '3.1'],
 | 
				
			||||||
    ['1.1.*', '1.1'],
 | 
					    ['1.1.*', '1.1'],
 | 
				
			||||||
    ['2.0', '2.0']
 | 
					    ['2.0', '2.0']
 | 
				
			||||||
@ -42,7 +44,6 @@ describe('version tests', () => {
 | 
				
			|||||||
    '.2.3',
 | 
					    '.2.3',
 | 
				
			||||||
    '.2.x',
 | 
					    '.2.x',
 | 
				
			||||||
    '1',
 | 
					    '1',
 | 
				
			||||||
    '2.x',
 | 
					 | 
				
			||||||
    '*.*.1',
 | 
					    '*.*.1',
 | 
				
			||||||
    '*.1',
 | 
					    '*.1',
 | 
				
			||||||
    '*.',
 | 
					    '*.',
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@ branding:
 | 
				
			|||||||
  color: green
 | 
					  color: green
 | 
				
			||||||
inputs:
 | 
					inputs:
 | 
				
			||||||
  dotnet-version:
 | 
					  dotnet-version:
 | 
				
			||||||
    description: 'SDK version to use. Examples: 2.2.104, 3.1, 3.1.x'
 | 
					    description: 'Optional SDK version to use. If not provided, will install global.json version when available. Examples: 2.2.104, 3.1, 3.1.x'
 | 
				
			||||||
  source-url:
 | 
					  source-url:
 | 
				
			||||||
    description: 'Optional package source for which to set up authentication. Will consult any existing NuGet.config in the root of the repo and provide a temporary NuGet.config using the NUGET_AUTH_TOKEN environment variable as a ClearTextPassword'
 | 
					    description: 'Optional package source for which to set up authentication. Will consult any existing NuGet.config in the root of the repo and provide a temporary NuGet.config using the NUGET_AUTH_TOKEN environment variable as a ClearTextPassword'
 | 
				
			||||||
  owner:
 | 
					  owner:
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										30
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							@ -4840,11 +4840,23 @@ const github = __importStar(__webpack_require__(469));
 | 
				
			|||||||
const xmlbuilder = __importStar(__webpack_require__(312));
 | 
					const xmlbuilder = __importStar(__webpack_require__(312));
 | 
				
			||||||
const xmlParser = __importStar(__webpack_require__(989));
 | 
					const xmlParser = __importStar(__webpack_require__(989));
 | 
				
			||||||
function configAuthentication(feedUrl, existingFileLocation = '', processRoot = process.cwd()) {
 | 
					function configAuthentication(feedUrl, existingFileLocation = '', processRoot = process.cwd()) {
 | 
				
			||||||
    const existingNuGetConfig = path.resolve(processRoot, existingFileLocation == '' ? 'nuget.config' : existingFileLocation);
 | 
					    const existingNuGetConfig = path.resolve(processRoot, existingFileLocation === ''
 | 
				
			||||||
 | 
					        ? getExistingNugetConfig(processRoot)
 | 
				
			||||||
 | 
					        : existingFileLocation);
 | 
				
			||||||
    const tempNuGetConfig = path.resolve(processRoot, '../', 'nuget.config');
 | 
					    const tempNuGetConfig = path.resolve(processRoot, '../', 'nuget.config');
 | 
				
			||||||
    writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig);
 | 
					    writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
exports.configAuthentication = configAuthentication;
 | 
					exports.configAuthentication = configAuthentication;
 | 
				
			||||||
 | 
					function getExistingNugetConfig(processRoot) {
 | 
				
			||||||
 | 
					    const defaultConfigName = 'nuget.config';
 | 
				
			||||||
 | 
					    const configFileNames = fs
 | 
				
			||||||
 | 
					        .readdirSync(processRoot)
 | 
				
			||||||
 | 
					        .filter(filename => filename.toLowerCase() === defaultConfigName);
 | 
				
			||||||
 | 
					    if (configFileNames.length) {
 | 
				
			||||||
 | 
					        return configFileNames[0];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return defaultConfigName;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
 | 
					function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
 | 
				
			||||||
    console.log(`dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}`);
 | 
					    console.log(`dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}`);
 | 
				
			||||||
    let xml;
 | 
					    let xml;
 | 
				
			||||||
@ -16869,14 +16881,16 @@ class DotNetVersionInfo {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //Note: No support for previews when using generic
 | 
					        //Note: No support for previews when using generic
 | 
				
			||||||
        let parts = version.split('.');
 | 
					        const parts = version.split('.');
 | 
				
			||||||
        if (parts.length < 2 || parts.length > 3)
 | 
					        if (parts.length < 2 || parts.length > 3)
 | 
				
			||||||
            this.throwInvalidVersionFormat();
 | 
					            this.throwInvalidVersionFormat();
 | 
				
			||||||
        if (parts.length == 3 && parts[2] !== 'x' && parts[2] !== '*') {
 | 
					        if (parts.length == 3 && parts[2] !== 'x' && parts[2] !== '*') {
 | 
				
			||||||
            this.throwInvalidVersionFormat();
 | 
					            this.throwInvalidVersionFormat();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        let major = this.getVersionNumberOrThrow(parts[0]);
 | 
					        const major = this.getVersionNumberOrThrow(parts[0]);
 | 
				
			||||||
        let minor = this.getVersionNumberOrThrow(parts[1]);
 | 
					        const minor = ['x', '*'].includes(parts[1])
 | 
				
			||||||
 | 
					            ? parts[1]
 | 
				
			||||||
 | 
					            : this.getVersionNumberOrThrow(parts[1]);
 | 
				
			||||||
        this.fullversion = major + '.' + minor;
 | 
					        this.fullversion = major + '.' + minor;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    getVersionNumberOrThrow(input) {
 | 
					    getVersionNumberOrThrow(input) {
 | 
				
			||||||
@ -16894,7 +16908,7 @@ class DotNetVersionInfo {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    throwInvalidVersionFormat() {
 | 
					    throwInvalidVersionFormat() {
 | 
				
			||||||
        throw 'Invalid version format! Supported: 1.2.3, 1.2, 1.2.x, 1.2.*';
 | 
					        throw new Error('Invalid version format! Supported: 1.2.3, 1.2, 1.2.x, 1.2.*');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * If true exacatly one version should be resolved
 | 
					     * If true exacatly one version should be resolved
 | 
				
			||||||
@ -16997,7 +17011,7 @@ class DotnetCoreInstaller {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            console.log(process.env['PATH']);
 | 
					            console.log(process.env['PATH']);
 | 
				
			||||||
            if (resultCode != 0) {
 | 
					            if (resultCode != 0) {
 | 
				
			||||||
                throw `Failed to install dotnet ${resultCode}. ${output}`;
 | 
					                throw new Error(`Failed to install dotnet ${resultCode}. ${output}`);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -17025,7 +17039,7 @@ class DotnetCoreInstaller {
 | 
				
			|||||||
            // Sort for latest version
 | 
					            // Sort for latest version
 | 
				
			||||||
            releasesInfo = releasesInfo.sort((a, b) => semver.rcompare(a['sdk']['version'], b['sdk']['version']));
 | 
					            releasesInfo = releasesInfo.sort((a, b) => semver.rcompare(a['sdk']['version'], b['sdk']['version']));
 | 
				
			||||||
            if (releasesInfo.length == 0) {
 | 
					            if (releasesInfo.length == 0) {
 | 
				
			||||||
                throw `Could not find dotnet core version. Please ensure that specified version ${versionInfo.inputVersion} is valid.`;
 | 
					                throw new Error(`Could not find dotnet core version. Please ensure that specified version ${versionInfo.inputVersion} is valid.`);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            let release = releasesInfo[0];
 | 
					            let release = releasesInfo[0];
 | 
				
			||||||
            return release['sdk']['version'];
 | 
					            return release['sdk']['version'];
 | 
				
			||||||
@ -17046,7 +17060,7 @@ class DotnetCoreInstaller {
 | 
				
			|||||||
                return versionParts[0] == sdkParts[0];
 | 
					                return versionParts[0] == sdkParts[0];
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            if (releasesInfo.length === 0) {
 | 
					            if (releasesInfo.length === 0) {
 | 
				
			||||||
                throw `Could not find info for version ${versionParts.join('.')} at ${DotNetCoreIndexUrl}`;
 | 
					                throw new Error(`Could not find info for version ${versionParts.join('.')} at ${DotNetCoreIndexUrl}`);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return releasesInfo[0]['releases.json'];
 | 
					            return releasesInfo[0]['releases.json'];
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										101
									
								
								externals/install-dotnet.ps1
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										101
									
								
								externals/install-dotnet.ps1
									
									
									
									
										vendored
									
									
								
							@ -340,9 +340,8 @@ function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel) {
 | 
				
			|||||||
    elseif ($Runtime -eq "aspnetcore") {
 | 
					    elseif ($Runtime -eq "aspnetcore") {
 | 
				
			||||||
        $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
 | 
					        $VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    # Currently, the WindowsDesktop runtime is manufactured with the .Net core runtime
 | 
					 | 
				
			||||||
    elseif ($Runtime -eq "windowsdesktop") {
 | 
					    elseif ($Runtime -eq "windowsdesktop") {
 | 
				
			||||||
        $VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
 | 
					        $VersionFileUrl = "$UncachedFeed/WindowsDesktop/$Channel/latest.version"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elseif (-not $Runtime) {
 | 
					    elseif (-not $Runtime) {
 | 
				
			||||||
        $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
 | 
					        $VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
 | 
				
			||||||
@ -438,7 +437,16 @@ function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string
 | 
				
			|||||||
        $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
					        $PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elseif ($Runtime -eq "windowsdesktop") {
 | 
					    elseif ($Runtime -eq "windowsdesktop") {
 | 
				
			||||||
 | 
					        # The windows desktop runtime is part of the core runtime layout prior to 5.0
 | 
				
			||||||
        $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
					        $PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
				
			||||||
 | 
					        if ($SpecificVersion -match '^(\d+)\.(.*)$')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $majorVersion = [int]$Matches[1]
 | 
				
			||||||
 | 
					            if ($majorVersion -ge 5)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                $PayloadURL = "$AzureFeed/WindowsDesktop/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elseif (-not $Runtime) {
 | 
					    elseif (-not $Runtime) {
 | 
				
			||||||
        $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
					        $PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificProductVersion-win-$CLIArchitecture.zip"
 | 
				
			||||||
@ -480,7 +488,16 @@ function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion) {
 | 
				
			|||||||
        $ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/productVersion.txt"
 | 
					        $ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/productVersion.txt"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elseif ($Runtime -eq "windowsdesktop") {
 | 
					    elseif ($Runtime -eq "windowsdesktop") {
 | 
				
			||||||
 | 
					        # The windows desktop runtime is part of the core runtime layout prior to 5.0
 | 
				
			||||||
        $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
 | 
					        $ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
 | 
				
			||||||
 | 
					        if ($SpecificVersion -match '^(\d+)\.(.*)')
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $majorVersion = [int]$Matches[1]
 | 
				
			||||||
 | 
					            if ($majorVersion -ge 5)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                $ProductVersionTxtURL = "$AzureFeed/WindowsDesktop/$SpecificVersion/productVersion.txt"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    elseif (-not $Runtime) {
 | 
					    elseif (-not $Runtime) {
 | 
				
			||||||
        $ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/productVersion.txt"
 | 
					        $ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/productVersion.txt"
 | 
				
			||||||
@ -885,10 +902,10 @@ Say "Note that the script does not resolve dependencies during installation."
 | 
				
			|||||||
Say "To check the list of dependencies, go to https://docs.microsoft.com/dotnet/core/install/windows#dependencies"
 | 
					Say "To check the list of dependencies, go to https://docs.microsoft.com/dotnet/core/install/windows#dependencies"
 | 
				
			||||||
Say "Installation finished"
 | 
					Say "Installation finished"
 | 
				
			||||||
# SIG # Begin signature block
 | 
					# SIG # Begin signature block
 | 
				
			||||||
# MIIjkgYJKoZIhvcNAQcCoIIjgzCCI38CAQExDzANBglghkgBZQMEAgEFADB5Bgor
 | 
					# MIIjjwYJKoZIhvcNAQcCoIIjgDCCI3wCAQExDzANBglghkgBZQMEAgEFADB5Bgor
 | 
				
			||||||
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
 | 
					# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
 | 
				
			||||||
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD2c707qnCLOLIC
 | 
					# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCNsnhcJvx/hXmM
 | 
				
			||||||
# n6Mu5Gr4+Xp68foyZlGlTycnycc5l6CCDYEwggX/MIID56ADAgECAhMzAAABh3IX
 | 
					# w8KjuvvIMDBFonhg9XJFc1QwfTyH4aCCDYEwggX/MIID56ADAgECAhMzAAABh3IX
 | 
				
			||||||
# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
 | 
					# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
 | 
				
			||||||
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
 | 
					# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
 | 
				
			||||||
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
 | 
					# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
 | 
				
			||||||
@ -960,29 +977,29 @@ Say "Installation finished"
 | 
				
			|||||||
# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
 | 
					# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
 | 
				
			||||||
# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
 | 
					# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
 | 
				
			||||||
# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
 | 
					# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
 | 
				
			||||||
# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVZzCCFWMCAQEwgZUwfjELMAkG
 | 
					# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVZDCCFWACAQEwgZUwfjELMAkG
 | 
				
			||||||
# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
 | 
					# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
 | 
				
			||||||
# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
 | 
					# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
 | 
				
			||||||
# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN
 | 
					# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN
 | 
				
			||||||
# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
 | 
					# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
 | 
				
			||||||
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgE/MRhWyu
 | 
					# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgpT/bxWwe
 | 
				
			||||||
# Zg+EA2WKcxYC31nHVCTE6guHppZppc70RtkwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
 | 
					# aW0EinKMWCAzDXUjwXkIHldYzR6lw4/1Pc0wQgYKKwYBBAGCNwIBDDE0MDKgFIAS
 | 
				
			||||||
# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
 | 
					# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
 | 
				
			||||||
# BgkqhkiG9w0BAQEFAASCAQBvcYCjRDXUYEIz9j2j0r4GFI2Y3g/CoNxDDBaeQ+gV
 | 
					# BgkqhkiG9w0BAQEFAASCAQCHd7sSQVq0YDg8QDx6/kLWn3s6jtvvIDCCgsO9spHM
 | 
				
			||||||
# khO0fK0oLh18RbV271Mg6SF7X7+mXB5MnL68voVQDqHnsCYrIAuMF/AEpv9YuDDp
 | 
					# quPd4FPbG67DCsKDClekQs52qrtRO3Zo+JMnCw4j3bS+gZHzeJr2shbftOrpsFoD
 | 
				
			||||||
# ZRJuqN7Vwg3HM02l/FyATBIMgf/V79aYzJL3jjtt9bRIyxk6aPU4XcwMeA4usnUQ
 | 
					# l7OPcUmtrqul9dkQCOp8t0MP3ls0n96/YyNy6lz4BAlTdkdDx957uAxalKaCIBzb
 | 
				
			||||||
# rMhIiQz07DgfSrcQWe4AvGFAIvqTAKE4P944EZWWVnWI/10rvatEAefqJZX3XljW
 | 
					# R9QyppOKIfNFvwD4EI5KI6tpmSy/uH8SrRg7ZExAYZl6J6R18WkL7KHn649lPoAQ
 | 
				
			||||||
# sK/6NY/0MyAyiILOuXbvVS0YFbHaR2qd1jUXbrY79fS+H4Ts6qnbufOkHQvmcDxs
 | 
					# ujwrIXH10xOJops45ILGzKWQcHmCzLJGYapL4VHUuK+73nT+9ZROGHdk/PyvIcdw
 | 
				
			||||||
# 801wKLHumMdPTtMVzfVMCwPvrHP0wtzsFlmCcKjBbGpvoYIS8TCCEu0GCisGAQQB
 | 
					# iERa+C06v305t3DA+CuHFy1tvyw7IFF6RVbLZPwxrJjToYIS7jCCEuoGCisGAQQB
 | 
				
			||||||
# gjcDAwExghLdMIIS2QYJKoZIhvcNAQcCoIISyjCCEsYCAQMxDzANBglghkgBZQME
 | 
					# gjcDAwExghLaMIIS1gYJKoZIhvcNAQcCoIISxzCCEsMCAQMxDzANBglghkgBZQME
 | 
				
			||||||
# AgEFADCCAVUGCyqGSIb3DQEJEAEEoIIBRASCAUAwggE8AgEBBgorBgEEAYRZCgMB
 | 
					# AgEFADCCAVUGCyqGSIb3DQEJEAEEoIIBRASCAUAwggE8AgEBBgorBgEEAYRZCgMB
 | 
				
			||||||
# MDEwDQYJYIZIAWUDBAIBBQAEINdeoXtuzW+Dihw6n+VdG+91si0f6TvWhJXaPtvW
 | 
					# MDEwDQYJYIZIAWUDBAIBBQAEIOCaTmvM1AP0WaEVqzKaaCu/R+bTlR4kCrM/ZXsb
 | 
				
			||||||
# oF4cAgZfu+i3IT8YEzIwMjAxMjE3MDYzMDM2LjU0M1owBIACAfSggdSkgdEwgc4x
 | 
					# /eNOAgZgGeLsMwsYEzIwMjEwMjAzMjExNzQ5LjU5MVowBIACAfSggdSkgdEwgc4x
 | 
				
			||||||
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
 | 
					# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
 | 
				
			||||||
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1p
 | 
					# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1p
 | 
				
			||||||
# Y3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMg
 | 
					# Y3Jvc29mdCBPcGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMg
 | 
				
			||||||
# VFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
 | 
					# VFNTIEVTTjo4OTdBLUUzNTYtMTcwMTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUt
 | 
				
			||||||
# U3RhbXAgU2VydmljZaCCDkQwggT1MIID3aADAgECAhMzAAABLCKvRZd1+RvuAAAA
 | 
					# U3RhbXAgU2VydmljZaCCDkEwggT1MIID3aADAgECAhMzAAABLCKvRZd1+RvuAAAA
 | 
				
			||||||
# AAEsMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
 | 
					# AAEsMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
 | 
				
			||||||
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
 | 
					# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
 | 
				
			||||||
# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
 | 
					# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
 | 
				
			||||||
@ -1043,7 +1060,7 @@ Say "Installation finished"
 | 
				
			|||||||
# cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7a
 | 
					# cs0d9LiFAR6A+xuJKlQ5slvayA1VmXqHczsI5pgt6o3gMy4SKfXAL1QnIffIrE7a
 | 
				
			||||||
# KLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQ
 | 
					# KLixqduWsqdCosnPGUFN4Ib5KpqjEWYw07t0MkvfY3v1mYovG8chr1m1rtxEPJdQ
 | 
				
			||||||
# cdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+
 | 
					# cdeh0sVV42neV8HR3jDA/czmTfsNv11P6Z0eGTgvvM9YBS7vDaBQNdrvCScc1bN+
 | 
				
			||||||
# NR4Iuto229Nfj950iEkSoYIC0jCCAjsCAQEwgfyhgdSkgdEwgc4xCzAJBgNVBAYT
 | 
					# NR4Iuto229Nfj950iEkSoYICzzCCAjgCAQEwgfyhgdSkgdEwgc4xCzAJBgNVBAYT
 | 
				
			||||||
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
 | 
					# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
 | 
				
			||||||
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP
 | 
					# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKTAnBgNVBAsTIE1pY3Jvc29mdCBP
 | 
				
			||||||
# cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4
 | 
					# cGVyYXRpb25zIFB1ZXJ0byBSaWNvMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjo4
 | 
				
			||||||
@ -1052,27 +1069,27 @@ Say "Installation finished"
 | 
				
			|||||||
# fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
 | 
					# fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
 | 
				
			||||||
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
 | 
					# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
 | 
				
			||||||
# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIF
 | 
					# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIF
 | 
				
			||||||
# AOOFYaowIhgPMjAyMDEyMTcwODQ4NDJaGA8yMDIwMTIxODA4NDg0MlowdzA9Bgor
 | 
					# AOPFChkwIhgPMjAyMTAyMDMxNTQwMDlaGA8yMDIxMDIwNDE1NDAwOVowdDA6Bgor
 | 
				
			||||||
# BgEEAYRZCgQBMS8wLTAKAgUA44VhqgIBADAKAgEAAgIoWgIB/zAHAgEAAgISJTAK
 | 
					# BgEEAYRZCgQBMSwwKjAKAgUA48UKGQIBADAHAgEAAgIXmDAHAgEAAgIRyTAKAgUA
 | 
				
			||||||
# AgUA44azKgIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIB
 | 
					# 48ZbmQIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAID
 | 
				
			||||||
# AAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBAB53NDoDDF4vqFWY
 | 
					# B6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBAHeeznL2n6HWCjHH94Fl
 | 
				
			||||||
# fwUnSvAy3z0CtqSFeA9RzDKGklPRwVkya5DtmVBDTZUbVQ2ST9hvRAVxhktfyVBZ
 | 
					# hcdW6TEXzq4XNgp1Gx1W9F8gJ4x+SwoV7elJZkwgGffcpHomLvIY/VSuzsl1NgtJ
 | 
				
			||||||
# ewapGJsvwMhg7nnEqBOumt6TvueIZpbs+p5z//3+iFYGkT3YFQI0Gd2JkvgBxfs5
 | 
					# TWM2UxoqSv58BBOrl4eGhH6kkg8Ucy2tdeK5T8cHa8pMkq2j9pFd2mRG/6VMk0dl
 | 
				
			||||||
# +GptO6JKtiyA+zkKijxqXZvMqMxBMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMC
 | 
					# Xz7Uy3Z6bZqkcABMyAfuAaGbMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMx
 | 
				
			||||||
# VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
 | 
					# EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
 | 
				
			||||||
# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
 | 
					# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
 | 
				
			||||||
# bWUtU3RhbXAgUENBIDIwMTACEzMAAAEsIq9Fl3X5G+4AAAAAASwwDQYJYIZIAWUD
 | 
					# U3RhbXAgUENBIDIwMTACEzMAAAEsIq9Fl3X5G+4AAAAAASwwDQYJYIZIAWUDBAIB
 | 
				
			||||||
# BAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0B
 | 
					# BQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQx
 | 
				
			||||||
# CQQxIgQg3wEUtEvxwCp3aAFB2vGXOOqg/AXHyXZh9P9J+0uArDMwgfoGCyqGSIb3
 | 
					# IgQg/QYv7yp+354WTjWUIsXWndTEzXjaYjqwYjcBxCJKjdUwgfoGCyqGSIb3DQEJ
 | 
				
			||||||
# DQEJEAIvMYHqMIHnMIHkMIG9BCBbn/0uFFh42hTM5XOoKdXevBaiSxmYK9Ilcn9n
 | 
					# EAIvMYHqMIHnMIHkMIG9BCBbn/0uFFh42hTM5XOoKdXevBaiSxmYK9Ilcn9nu5ZH
 | 
				
			||||||
# u5ZH4TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u
 | 
					# 4TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
 | 
				
			||||||
# MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp
 | 
					# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
 | 
				
			||||||
# b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB
 | 
					# JjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABLCKv
 | 
				
			||||||
# LCKvRZd1+RvuAAAAAAEsMCIEINBRtGID6jvA2ptfwIuPyG7qPcLRYb9YrJ8aKfVg
 | 
					# RZd1+RvuAAAAAAEsMCIEIIfIM3YbzHswb/Kj/qq1l1cHA6QBl+gEXYanUNJomrpT
 | 
				
			||||||
# TulFMA0GCSqGSIb3DQEBCwUABIIBACQQpFGWW6JmH5MTKwhaE/8+gyzI2bT8XJnA
 | 
					# MA0GCSqGSIb3DQEBCwUABIIBAAwdcXssUZGO7ho5+NHLjIxLtQk543aKGo+lrRMY
 | 
				
			||||||
# t8k7PHFvEGA7whgp9eNgW+wWJm1gnsmswjx2l7FW4DLg9lghM8FK77JRCg7CJfse
 | 
					# Q9abE1h/AaaNJl0iGxX4IihNWyfovSfYL3L4eODUBAu68tWSxeceRfWNsb/ZZfUi
 | 
				
			||||||
# dSbnTv81/4VhSXOAO0jMP2dALP7DF59vQmlDh50u8/Wu61ActMOt6cArkoUhBRXO
 | 
					# v89hpLssI/Gf1BEgNMA4zCuIGQiC8okusVumEpAhhvCEbSiTTTtBdolTnU/CAKui
 | 
				
			||||||
# LnqOQCOEEku5Xy2ES9g9eUfLUvTvlWo6HiAq+cJnNV08QRBOnGWRxdwy8YJ5vwNW
 | 
					# oxaU3R9XkKh1F4oAM26+dJ1J2BLQXPs5afNvvedDsZWNQUPK1sFF3JRfzxiTrwBW
 | 
				
			||||||
# Pwx0ZG3rTvMtGzOaW6Ve5O36H2ynoEdzCmpakeDaF2sZ86/LNERKyIXiykV/Uig1
 | 
					# EJRyflev9gyDoqCHzippgb+6+eti1WTkcA9Q49GIT11S6LOAVqkSC9N7Nqf8ksh8
 | 
				
			||||||
# SZh2VLY/Yni9SCVHbYgvTOCh5ZZE5eOi6BwLf0T4xl5alHUx+AA=
 | 
					# ARdwT8jigpsm+mj7lrVU9upDkhVYhKeO8oiZq95Q53Zkteo=
 | 
				
			||||||
# SIG # End signature block
 | 
					# SIG # End signature block
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										43
									
								
								externals/install-dotnet.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								externals/install-dotnet.sh
									
									
									
									
										vendored
									
									
								
							@ -303,7 +303,7 @@ get_machine_architecture() {
 | 
				
			|||||||
            echo "arm"
 | 
					            echo "arm"
 | 
				
			||||||
            return 0
 | 
					            return 0
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
        aarch64)
 | 
					        aarch64|arm64)
 | 
				
			||||||
            echo "arm64"
 | 
					            echo "arm64"
 | 
				
			||||||
            return 0
 | 
					            return 0
 | 
				
			||||||
            ;;
 | 
					            ;;
 | 
				
			||||||
@ -744,13 +744,30 @@ download() {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    local failed=false
 | 
					    local failed=false
 | 
				
			||||||
    if machine_has "curl"; then
 | 
					    local attempts=0
 | 
				
			||||||
        downloadcurl "$remote_path" "$out_path" || failed=true
 | 
					    while [ $attempts -lt 3 ]; do
 | 
				
			||||||
    elif machine_has "wget"; then
 | 
					        attempts=$((attempts+1))
 | 
				
			||||||
        downloadwget "$remote_path" "$out_path" || failed=true
 | 
					        failed=false
 | 
				
			||||||
    else
 | 
					        if machine_has "curl"; then
 | 
				
			||||||
        failed=true
 | 
					            downloadcurl "$remote_path" "$out_path" || failed=true
 | 
				
			||||||
    fi
 | 
					        elif machine_has "wget"; then
 | 
				
			||||||
 | 
					            downloadwget "$remote_path" "$out_path" || failed=true
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            say_err "Missing dependency: neither curl nor wget was found."
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if [ "$failed" = false ] || [ $attempts -ge 3 ] || { [ ! -z $http_code ] && [ $http_code = "404" ]; }; then
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        say "Download attempt #$attempts has failed: $http_code $download_error_msg"
 | 
				
			||||||
 | 
					        say "Attempt #$((attempts+1)) will start in $((attempts*10)) seconds."
 | 
				
			||||||
 | 
					        sleep $((attempts*20))
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [ "$failed" = true ]; then
 | 
					    if [ "$failed" = true ]; then
 | 
				
			||||||
        say_verbose "Download failed: $remote_path"
 | 
					        say_verbose "Download failed: $remote_path"
 | 
				
			||||||
        return 1
 | 
					        return 1
 | 
				
			||||||
@ -761,6 +778,8 @@ download() {
 | 
				
			|||||||
# Updates global variables $http_code and $download_error_msg
 | 
					# Updates global variables $http_code and $download_error_msg
 | 
				
			||||||
downloadcurl() {
 | 
					downloadcurl() {
 | 
				
			||||||
    eval $invocation
 | 
					    eval $invocation
 | 
				
			||||||
 | 
					    unset http_code
 | 
				
			||||||
 | 
					    unset download_error_msg
 | 
				
			||||||
    local remote_path="$1"
 | 
					    local remote_path="$1"
 | 
				
			||||||
    local out_path="${2:-}"
 | 
					    local out_path="${2:-}"
 | 
				
			||||||
    # Append feed_credential as late as possible before calling curl to avoid logging feed_credential
 | 
					    # Append feed_credential as late as possible before calling curl to avoid logging feed_credential
 | 
				
			||||||
@ -789,6 +808,8 @@ downloadcurl() {
 | 
				
			|||||||
# Updates global variables $http_code and $download_error_msg
 | 
					# Updates global variables $http_code and $download_error_msg
 | 
				
			||||||
downloadwget() {
 | 
					downloadwget() {
 | 
				
			||||||
    eval $invocation
 | 
					    eval $invocation
 | 
				
			||||||
 | 
					    unset http_code
 | 
				
			||||||
 | 
					    unset download_error_msg
 | 
				
			||||||
    local remote_path="$1"
 | 
					    local remote_path="$1"
 | 
				
			||||||
    local out_path="${2:-}"
 | 
					    local out_path="${2:-}"
 | 
				
			||||||
    # Append feed_credential as late as possible before calling wget to avoid logging feed_credential
 | 
					    # Append feed_credential as late as possible before calling wget to avoid logging feed_credential
 | 
				
			||||||
@ -882,12 +903,11 @@ install_dotnet() {
 | 
				
			|||||||
    say "Downloading primary link $download_link"
 | 
					    say "Downloading primary link $download_link"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # The download function will set variables $http_code and $download_error_msg in case of failure.
 | 
					    # The download function will set variables $http_code and $download_error_msg in case of failure.
 | 
				
			||||||
    http_code=""; download_error_msg=""
 | 
					 | 
				
			||||||
    download "$download_link" "$zip_path" 2>&1 || download_failed=true
 | 
					    download "$download_link" "$zip_path" 2>&1 || download_failed=true
 | 
				
			||||||
    primary_path_http_code="$http_code"; primary_path_download_error_msg="$download_error_msg"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #  if the download fails, download the legacy_download_link
 | 
					    #  if the download fails, download the legacy_download_link
 | 
				
			||||||
    if [ "$download_failed" = true ]; then
 | 
					    if [ "$download_failed" = true ]; then
 | 
				
			||||||
 | 
					        primary_path_http_code="$http_code"; primary_path_download_error_msg="$download_error_msg"
 | 
				
			||||||
        case $primary_path_http_code in
 | 
					        case $primary_path_http_code in
 | 
				
			||||||
        404)
 | 
					        404)
 | 
				
			||||||
            say "The resource at $download_link is not available."
 | 
					            say "The resource at $download_link is not available."
 | 
				
			||||||
@ -906,11 +926,10 @@ install_dotnet() {
 | 
				
			|||||||
            say "Downloading legacy link $download_link"
 | 
					            say "Downloading legacy link $download_link"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # The download function will set variables $http_code and $download_error_msg in case of failure.
 | 
					            # The download function will set variables $http_code and $download_error_msg in case of failure.
 | 
				
			||||||
            http_code=""; download_error_msg=""
 | 
					 | 
				
			||||||
            download "$download_link" "$zip_path" 2>&1 || download_failed=true
 | 
					            download "$download_link" "$zip_path" 2>&1 || download_failed=true
 | 
				
			||||||
            legacy_path_http_code="$http_code";  legacy_path_download_error_msg="$download_error_msg"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if [ "$download_failed" = true ]; then
 | 
					            if [ "$download_failed" = true ]; then
 | 
				
			||||||
 | 
					                legacy_path_http_code="$http_code";  legacy_path_download_error_msg="$download_error_msg"
 | 
				
			||||||
                case $legacy_path_http_code in
 | 
					                case $legacy_path_http_code in
 | 
				
			||||||
                404)
 | 
					                404)
 | 
				
			||||||
                    say "The resource at $download_link is not available."
 | 
					                    say "The resource at $download_link is not available."
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -5342,9 +5342,9 @@
 | 
				
			|||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "y18n": {
 | 
					    "y18n": {
 | 
				
			||||||
      "version": "4.0.0",
 | 
					      "version": "4.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
 | 
					      "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "yaml": {
 | 
					    "yaml": {
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,9 @@ export function configAuthentication(
 | 
				
			|||||||
) {
 | 
					) {
 | 
				
			||||||
  const existingNuGetConfig: string = path.resolve(
 | 
					  const existingNuGetConfig: string = path.resolve(
 | 
				
			||||||
    processRoot,
 | 
					    processRoot,
 | 
				
			||||||
    existingFileLocation == '' ? 'nuget.config' : existingFileLocation
 | 
					    existingFileLocation === ''
 | 
				
			||||||
 | 
					      ? getExistingNugetConfig(processRoot)
 | 
				
			||||||
 | 
					      : existingFileLocation
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const tempNuGetConfig: string = path.resolve(
 | 
					  const tempNuGetConfig: string = path.resolve(
 | 
				
			||||||
@ -25,6 +27,17 @@ export function configAuthentication(
 | 
				
			|||||||
  writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig);
 | 
					  writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getExistingNugetConfig(processRoot: string) {
 | 
				
			||||||
 | 
					  const defaultConfigName = 'nuget.config';
 | 
				
			||||||
 | 
					  const configFileNames = fs
 | 
				
			||||||
 | 
					    .readdirSync(processRoot)
 | 
				
			||||||
 | 
					    .filter(filename => filename.toLowerCase() === defaultConfigName);
 | 
				
			||||||
 | 
					  if (configFileNames.length) {
 | 
				
			||||||
 | 
					    return configFileNames[0];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return defaultConfigName;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function writeFeedToFile(
 | 
					function writeFeedToFile(
 | 
				
			||||||
  feedUrl: string,
 | 
					  feedUrl: string,
 | 
				
			||||||
  existingFileLocation: string,
 | 
					  existingFileLocation: string,
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ export class DotNetVersionInfo {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Note: No support for previews when using generic
 | 
					    //Note: No support for previews when using generic
 | 
				
			||||||
    let parts: string[] = version.split('.');
 | 
					    const parts: string[] = version.split('.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (parts.length < 2 || parts.length > 3) this.throwInvalidVersionFormat();
 | 
					    if (parts.length < 2 || parts.length > 3) this.throwInvalidVersionFormat();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,8 +38,10 @@ export class DotNetVersionInfo {
 | 
				
			|||||||
      this.throwInvalidVersionFormat();
 | 
					      this.throwInvalidVersionFormat();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let major = this.getVersionNumberOrThrow(parts[0]);
 | 
					    const major = this.getVersionNumberOrThrow(parts[0]);
 | 
				
			||||||
    let minor = this.getVersionNumberOrThrow(parts[1]);
 | 
					    const minor = ['x', '*'].includes(parts[1])
 | 
				
			||||||
 | 
					      ? parts[1]
 | 
				
			||||||
 | 
					      : this.getVersionNumberOrThrow(parts[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.fullversion = major + '.' + minor;
 | 
					    this.fullversion = major + '.' + minor;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -60,7 +62,9 @@ export class DotNetVersionInfo {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private throwInvalidVersionFormat() {
 | 
					  private throwInvalidVersionFormat() {
 | 
				
			||||||
    throw 'Invalid version format! Supported: 1.2.3, 1.2, 1.2.x, 1.2.*';
 | 
					    throw new Error(
 | 
				
			||||||
 | 
					      'Invalid version format! Supported: 1.2.3, 1.2, 1.2.x, 1.2.*'
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
@ -187,7 +191,7 @@ export class DotnetCoreInstaller {
 | 
				
			|||||||
    console.log(process.env['PATH']);
 | 
					    console.log(process.env['PATH']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (resultCode != 0) {
 | 
					    if (resultCode != 0) {
 | 
				
			||||||
      throw `Failed to install dotnet ${resultCode}. ${output}`;
 | 
					      throw new Error(`Failed to install dotnet ${resultCode}. ${output}`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -236,7 +240,9 @@ export class DotnetCoreInstaller {
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (releasesInfo.length == 0) {
 | 
					    if (releasesInfo.length == 0) {
 | 
				
			||||||
      throw `Could not find dotnet core version. Please ensure that specified version ${versionInfo.inputVersion} is valid.`;
 | 
					      throw new Error(
 | 
				
			||||||
 | 
					        `Could not find dotnet core version. Please ensure that specified version ${versionInfo.inputVersion} is valid.`
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let release = releasesInfo[0];
 | 
					    let release = releasesInfo[0];
 | 
				
			||||||
@ -264,9 +270,11 @@ export class DotnetCoreInstaller {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (releasesInfo.length === 0) {
 | 
					    if (releasesInfo.length === 0) {
 | 
				
			||||||
      throw `Could not find info for version ${versionParts.join(
 | 
					      throw new Error(
 | 
				
			||||||
        '.'
 | 
					        `Could not find info for version ${versionParts.join(
 | 
				
			||||||
      )} at ${DotNetCoreIndexUrl}`;
 | 
					          '.'
 | 
				
			||||||
 | 
					        )} at ${DotNetCoreIndexUrl}`
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return releasesInfo[0]['releases.json'];
 | 
					    return releasesInfo[0]['releases.json'];
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user