You've already forked setup-dotnet
							
							
				mirror of
				https://github.com/actions/setup-dotnet.git
				synced 2025-10-31 15:26:22 +07:00 
			
		
		
		
	Compare commits
	
		
			201 Commits
		
	
	
		
			v1.7.2
			...
			add-publis
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 27dbb7f407 | |||
| 9c99f11032 | |||
| 871f041373 | |||
| 67cd79ce76 | |||
| b3da5ab48f | |||
| 65c71668de | |||
| f2d774a272 | |||
| 8f3cbf74e2 | |||
| e31c9045e5 | |||
| 0d16f91084 | |||
| 71a4fd9b27 | |||
| 608ee757cf | |||
| e54e706650 | |||
| c20f59e04a | |||
| 13b852df87 | |||
| f85bcda870 | |||
| 499789684c | |||
| 76ddd67c90 | |||
| 550702114f | |||
| e3ce4164b3 | |||
| 463326422f | |||
| 547d075822 | |||
| fc9265379f | |||
| 32c76e2669 | |||
| 8ca0cf75a1 | |||
| 7f88dbf08f | |||
| af0ed6536b | |||
| 9dd9d27e57 | |||
| 44530e8569 | |||
| 5a3fa01c67 | |||
| f2da928c08 | |||
| fb9fd97b03 | |||
| f0b9e4cf3f | |||
| b66058b059 | |||
| 7323c4e7cb | |||
| 6eab455d72 | |||
| b2cf6c7cd4 | |||
| ff5b78971e | |||
| e26fc623bc | |||
| e974974b42 | |||
| 9969bca445 | |||
| deee0f6246 | |||
| 33fad1d142 | |||
| 2c3efd1f04 | |||
| f3822c3b02 | |||
| 5e45b4b591 | |||
| b7b99f337e | |||
| f92687c910 | |||
| 0067f023d2 | |||
| 9480036ff9 | |||
| 6b8ad2e725 | |||
| 078f7c4a73 | |||
| 13fd5bf191 | |||
| 26be14c4e1 | |||
| 8309d4ee7e | |||
| bab14f40fd | |||
| 4b337272b7 | |||
| d62c876481 | |||
| 5306333434 | |||
| 5070486392 | |||
| 9647326bcf | |||
| f720d14d91 | |||
| 7f3ad75595 | |||
| 634914df32 | |||
| 4fc55d8fdb | |||
| c98cd238db | |||
| b25fa305a3 | |||
| 181f10df92 | |||
| c65a26fe6d | |||
| dd9ada314c | |||
| 12194cb2cd | |||
| b8ab602c41 | |||
| 95f03216f8 | |||
| 5529ce4143 | |||
| 5b0ff19756 | |||
| bf3c3eb1fd | |||
| 450b569534 | |||
| e1cf912aaf | |||
| 03d6eb5402 | |||
| effa3e26d2 | |||
| a71d1eb2c8 | |||
| b50d70502b | |||
| d8cff32ae5 | |||
| 7b2009794e | |||
| 53d6483af8 | |||
| 34c59b7d0b | |||
| bd485b6bd1 | |||
| 0cfae9b3a5 | |||
| 23fa2c1473 | |||
| 291588df6a | |||
| 87189a16c7 | |||
| cde58ab948 | |||
| 20e68089c2 | |||
| 7790315509 | |||
| c47e26f841 | |||
| 3edf2e9363 | |||
| a8c97016ef | |||
| 07b4a80293 | |||
| d08d2193f9 | |||
| 632ccbdfb9 | |||
| b81836a248 | |||
| 3b539379a8 | |||
| 596753d72c | |||
| f9d7f16c00 | |||
| 56d96e897e | |||
| 5a201f5e82 | |||
| 13ccc115f4 | |||
| f2eb44dadd | |||
| 8dcf1ee9bc | |||
| 3707a44789 | |||
| 385512c5e5 | |||
| 083d63a2ff | |||
| 6930747f7f | |||
| 20afff9c90 | |||
| 36fa9877a9 | |||
| 77a48bbb85 | |||
| 4f71fcfa81 | |||
| 768b4eb7db | |||
| ba7e1e2155 | |||
| 6803d4b94d | |||
| 3c80e97cbd | |||
| 8d30c127da | |||
| 2d101adc9f | |||
| c8b60fb6bf | |||
| bea420f2fd | |||
| 3a3dbe976e | |||
| ce38f90a9a | |||
| c32ed2108b | |||
| d99c06115d | |||
| f311b6d978 | |||
| 9427b17c42 | |||
| f39691d155 | |||
| 19e6ad3fe0 | |||
| efeb86e5ce | |||
| 8e5c71c8f8 | |||
| c0d7255256 | |||
| c1ca14bb7b | |||
| e1655545c1 | |||
| 2a58294d0c | |||
| 92ffa484b1 | |||
| 3698118d95 | |||
| cfb7e25be1 | |||
| 5865234247 | |||
| 0cb99b2a12 | |||
| 4a01d86a5b | |||
| 1c7be1087d | |||
| ac1baccba4 | |||
| 92451e3d46 | |||
| a841c568fd | |||
| 5d1a72cb19 | |||
| 8889c6748f | |||
| f4159a6d20 | |||
| 7164f75e01 | |||
| 44b8627225 | |||
| 054db1cac2 | |||
| 1317beb53a | |||
| fabe7d52fe | |||
| 993f819e3d | |||
| 831e0d4070 | |||
| bb2233aaa5 | |||
| 24ed2d0102 | |||
| 059f1aa99b | |||
| 5c5ac76dc6 | |||
| a0f70ab98c | |||
| 5dcd27b0bc | |||
| 79735df611 | |||
| a1105722ad | |||
| 131ac602dc | |||
| c8cb48ba8b | |||
| 7bbfec324f | |||
| 6b7d951977 | |||
| c7eaa2ec00 | |||
| 8807004b20 | |||
| 2d640ec739 | |||
| 53b5bae1f6 | |||
| 45c0959fcd | |||
| d33a835564 | |||
| 347456b934 | |||
| 76a91b1af8 | |||
| 9d49fb8e98 | |||
| 10ad86dc12 | |||
| 71f0d4bd07 | |||
| 7669e56997 | |||
| c8cf369c29 | |||
| 6ade6c061b | |||
| 843b5197ce | |||
| a3d47e556c | |||
| 7261940ea5 | |||
| 8ada5b5558 | |||
| 62230c5409 | |||
| 51b6fb2610 | |||
| c47b497cff | |||
| 975b958e4c | |||
| 13bccd131e | |||
| daad66578a | |||
| 29c0c6cee8 | |||
| 5551aab1c3 | |||
| 9a46dbb681 | |||
| 9fdd50a4bb | |||
| 8336fd394b | |||
| 8aad93f856 | 
							
								
								
									
										1
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| * @actions/virtual-environments-owners | ||||
							
								
								
									
										33
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							| @ -2,22 +2,31 @@ | ||||
| name: Bug report | ||||
| about: Create a bug report | ||||
| title: '' | ||||
| labels: '' | ||||
| labels: bug, needs triage | ||||
| assignees: '' | ||||
|  | ||||
| --- | ||||
|  | ||||
| ### Description | ||||
| **Description:** | ||||
| A clear and concise description of what the bug is. | ||||
|  | ||||
| <!-- | ||||
| * Please share short description of the problem | ||||
|   --> | ||||
| **Task version:** | ||||
| Specify the task version | ||||
|  | ||||
| ### Details | ||||
| **Platform:** | ||||
| - [ ] Ubuntu | ||||
| - [ ] macOS | ||||
| - [ ] Windows | ||||
|  | ||||
| <!-- | ||||
| * Include the relevant yaml, platform, and dotnet versions in use | ||||
| * If an error occurred on a public action, please share a link | ||||
| * Include any error messages received in text (search does not work for images) | ||||
| * Was this a regression from previous behavior? | ||||
|   --> | ||||
| **Runner type:** | ||||
| - [ ] Hosted | ||||
| - [ ] Self-hosted | ||||
|  | ||||
| **Repro steps:**   | ||||
| A description with steps to reproduce the issue. If your have a public example or repo to share, please provide the link. | ||||
|  | ||||
| **Expected behavior:** | ||||
| A description of what you expected to happen. | ||||
|  | ||||
| **Actual behavior:** | ||||
| A description of what is actually happening. | ||||
							
								
								
									
										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: | ||||
|   - name: .NET issues | ||||
|     url: https://github.com/dotnet/runtime#filing-issues | ||||
|  | ||||
							
								
								
									
										16
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| --- | ||||
| name: Feature request | ||||
| about: Suggest an idea for this project | ||||
| title: '' | ||||
| labels: feature request, needs triage | ||||
| assignees: '' | ||||
| --- | ||||
|  | ||||
| **Description:** | ||||
| Describe your proposal. | ||||
|  | ||||
| **Justification:** | ||||
| Justification or a use case for your proposal. | ||||
|  | ||||
| **Are you willing to submit a PR?** | ||||
| <!--- We accept contributions! --> | ||||
							
								
								
									
										9
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| **Description:** | ||||
| Describe your changes. | ||||
|  | ||||
| **Related issue:** | ||||
| Add link to the related issue. | ||||
|  | ||||
| **Check list:** | ||||
| - [ ] Mark if documentation changes are required. | ||||
| - [ ] Mark if tests were added or updated to cover the changes. | ||||
							
								
								
									
										51
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/check-dist.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | ||||
| # `dist/index.js` is a special file in Actions. | ||||
| # When you reference an action with `uses:` in a workflow, | ||||
| # `index.js` is the code that will run. | ||||
| # For our project, we generate this file through a build process from other source files. | ||||
| # We need to make sure the checked-in `index.js` actually matches what we expect it to be. | ||||
| name: Check dist/ | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   pull_request: | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   workflow_dispatch: | ||||
|  | ||||
| jobs: | ||||
|   check-dist: | ||||
|     runs-on: ubuntu-latest | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
|  | ||||
|       - name: Set Node.js 12.x | ||||
|         uses: actions/setup-node@v1 | ||||
|         with: | ||||
|           node-version: 12.x | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: npm ci | ||||
|  | ||||
|       - name: Rebuild the dist/ directory | ||||
|         run: npm run build | ||||
|  | ||||
|       - name: Compare the expected and actual dist/ directories | ||||
|         run: | | ||||
|           if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then | ||||
|             echo "Detected uncommitted changes after build.  See status below:" | ||||
|             git diff | ||||
|             exit 1 | ||||
|           fi | ||||
|         id: diff | ||||
|  | ||||
|       # If index.js was different than expected, upload the expected version as an artifact | ||||
|       - uses: actions/upload-artifact@v4 | ||||
|         if: ${{ failure() && steps.diff.conclusion == 'failure' }} | ||||
|         with: | ||||
|           name: dist | ||||
|           path: dist/ | ||||
							
								
								
									
										13
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/licensed.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,8 +1,13 @@ | ||||
| name: Licensed | ||||
|  | ||||
| on: | ||||
|   push: {branches: main} | ||||
|   pull_request: {branches: main} | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - main | ||||
|   workflow_dispatch: | ||||
|  | ||||
| jobs: | ||||
|   test: | ||||
| @ -14,7 +19,7 @@ jobs: | ||||
|       - name: Install licensed | ||||
|         run: | | ||||
|           cd $RUNNER_TEMP | ||||
|           curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz | ||||
|           curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/3.3.1/licensed-3.3.1-linux-x64.tar.gz | ||||
|           sudo tar -xzf licensed.tar.gz | ||||
|           sudo mv licensed /usr/local/bin/licensed | ||||
|       - run: licensed status | ||||
|       - run: licensed status | ||||
|  | ||||
							
								
								
									
										20
									
								
								.github/workflows/publish-immutable-action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/publish-immutable-action.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| name: 'Publish Immutable Action Version' | ||||
|  | ||||
| on: | ||||
|   release: | ||||
|     types: [published] | ||||
|  | ||||
| jobs: | ||||
|   publish: | ||||
|     runs-on: ubuntu-latest | ||||
|     permissions: | ||||
|       contents: read | ||||
|       id-token: write | ||||
|       packages: write | ||||
|  | ||||
|     steps: | ||||
|       - name: Checking out | ||||
|         uses: actions/checkout@v4 | ||||
|       - name: Publish | ||||
|         id: publish | ||||
|         uses: actions/publish-immutable-action@v0.0.4 | ||||
							
								
								
									
										28
									
								
								.github/workflows/release-new-action-version.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/release-new-action-version.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| name: Release new action version | ||||
| on: | ||||
|   release: | ||||
|     types: [released] | ||||
|   workflow_dispatch: | ||||
|     inputs: | ||||
|       TAG_NAME: | ||||
|         description: 'Tag name that the major tag will point to' | ||||
|         required: true | ||||
|  | ||||
| env: | ||||
|   TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} | ||||
| permissions: | ||||
|   contents: write | ||||
|  | ||||
| jobs: | ||||
|   update_tag: | ||||
|     name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes | ||||
|     environment: | ||||
|       name: releaseNewActionVersion | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Update the ${{ env.TAG_NAME }} tag | ||||
|       id: update-major-tag | ||||
|       uses: actions/publish-action@v0.1.0 | ||||
|       with: | ||||
|         source-tag: ${{ env.TAG_NAME }} | ||||
|         slack-webhook: ${{ secrets.SLACK_WEBHOOK }} | ||||
							
								
								
									
										37
									
								
								.github/workflows/test-dotnet.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.github/workflows/test-dotnet.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| name: Validate dotnet | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|       - releases/* | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|  | ||||
| jobs: | ||||
|   setup-version: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macOS-latest] | ||||
|         dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0'] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       - name: Setup dotnet ${{ matrix.dotnet-version }} | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: ${{ matrix.dotnet-version }} | ||||
|       - name: Check installed version | ||||
|         shell: pwsh | ||||
|         run: | | ||||
|           $version = & dotnet --version | ||||
|           Write-Host "Installed version: $version" | ||||
|           if (-not $version.StartsWith("${{ matrix.dotnet-version }}")) { throw "Unexpected version" } | ||||
							
								
								
									
										193
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										193
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @ -2,10 +2,14 @@ name: Main workflow | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|       - releases/* | ||||
|     paths-ignore: | ||||
|       - '**.md' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
| @ -13,7 +17,7 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macOS-latest] | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macos-13] | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v2 | ||||
| @ -28,35 +32,42 @@ jobs: | ||||
|     - name: Verify no unstaged changes | ||||
|       if: runner.os != 'windows' | ||||
|       run: __tests__/verify-no-unstaged-changes.sh | ||||
|  | ||||
|   test: | ||||
|    | ||||
|   test-setup-multiple-versions: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-latest, windows-latest, macOS-latest] | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macOS-latest] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear tool cache (macOS) | ||||
|         if: runner.os == 'macos' | ||||
|         run: | | ||||
|           echo $PATH | ||||
|           dotnet --info | ||||
|           rm -rf "/Users/runner/.dotnet" | ||||
|       - name: Clear tool cache (Ubuntu) | ||||
|         if: runner.os == 'linux' | ||||
|         run: | | ||||
|           echo $PATH | ||||
|           dotnet --info | ||||
|           rm -rf "/usr/share/dotnet" | ||||
|       - name: Clear tool cache (Windows) | ||||
|         if: runner.os == 'windows' | ||||
|         run: | | ||||
|           echo $env:PATH | ||||
|           dotnet --info | ||||
|           Remove-Item $env:LocalAppData\Microsoft\dotnet/*  -Recurse -Force -ErrorAction SilentlyContinue | ||||
|           Remove-Item "$env:ProgramFiles\dotnet/*"  -Recurse -Force -ErrorAction SilentlyContinue | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       - name: Setup dotnet 2.2.402 and 3.1.404 | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: | | ||||
|              2.2.402 | ||||
|              3.1.404 | ||||
|              3.0.x | ||||
|       - name: Verify dotnet | ||||
|         shell: pwsh | ||||
|         run: __tests__/verify-dotnet.ps1 2.2.402 3.1.404 '3.0' | ||||
|  | ||||
|   test-setup-full-version: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macos-13] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       # Side-by-side install of 2.2 and 3.1 used for the test project | ||||
|       - name: Setup dotnet 2.2.402 | ||||
|         uses: ./ | ||||
| @ -70,84 +81,102 @@ jobs: | ||||
|           source-url: https://api.nuget.org/v3/index.json | ||||
|         env: | ||||
|           NUGET_AUTH_TOKEN: NOTATOKEN | ||||
|       - name: Verify nuget config file | ||||
|         shell: pwsh | ||||
|         run: | | ||||
|           if (-Not (Test-Path "../nuget.config")) { throw "nuget file not generated correctly" } | ||||
|       - name: Verify dotnet | ||||
|         if: runner.os != 'windows' | ||||
|         run: __tests__/verify-dotnet.sh 3.1.201 2.2.402 | ||||
|       - name: Verify dotnet (Windows) | ||||
|         if: runner.os == 'windows' | ||||
|         shell: pwsh | ||||
|         run: __tests__/verify-dotnet.ps1 3.1.201 2.2.402 | ||||
|  | ||||
|       # Set new cache before 2 digit install | ||||
|       - name: Set new tool cache (macOS) | ||||
|         if: runner.os == 'macos' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/Users/runner/.dotnet2" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Ubuntu) | ||||
|         if: runner.os == 'linux' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/home/runner/.dotnet2" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Windows) | ||||
|         if: runner.os == 'windows' | ||||
|         shell: bash | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=$LocalAppData\Microsoft\dotnet2" >> $GITHUB_ENV | ||||
|   test-setup-without-patch-version: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macOS-latest] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       # 2.0, 3.0, 5.0 needs to be in single quotes to interpret as a string instead of as an integer | ||||
|       - name: Setup dotnet '2.0' | ||||
|       - name: Setup dotnet '3.1' | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: '2.0' | ||||
|           dotnet-version: '3.1' | ||||
|       - name: Setup dotnet '2.2' | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: '2.2' | ||||
|       - name: Verify dotnet | ||||
|         shell: pwsh | ||||
|         run: __tests__/verify-dotnet.ps1 3.1 2.2 | ||||
|    | ||||
|   test-setup-latest-patch-version: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macOS-latest] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       - name: Setup dotnet 3.1.x | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: 3.1.x | ||||
|       - name: Setup dotnet 2.2.x | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: 2.2.x | ||||
|       - name: Verify dotnet | ||||
|         shell: pwsh | ||||
|         run: __tests__/verify-dotnet.ps1 3.1 2.2 | ||||
|  | ||||
|       # Clear cache before .x version install | ||||
|       - name: Set new tool cache (macOS) | ||||
|         if: runner.os == 'macos' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/Users/runner/.dotnet3" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Ubuntu) | ||||
|         if: runner.os == 'linux' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/home/runner/.dotnet3" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Windows) | ||||
|         if: runner.os == 'windows' | ||||
|         shell: bash | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=$LocalAppData\Microsoft\dotnet3"  >> $GITHUB_ENV | ||||
|       - name: Setup dotnet 2.0.x | ||||
|   test-setup-with-wildcard: | ||||
|     runs-on: ${{ matrix.operating-system }} | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         operating-system: [ubuntu-22.04, windows-latest, macOS-latest] | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - name: Clear toolcache | ||||
|         shell: pwsh | ||||
|         run: __tests__/clear-toolcache.ps1 ${{ runner.os }} | ||||
|       - name: Setup dotnet 3.1.* | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: 2.0.x | ||||
|  | ||||
|       # Clear cache before .* version install | ||||
|       - name: Set new tool cache (macOS) | ||||
|         if: runner.os == 'macos' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/Users/runner/.dotnet4" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Ubuntu) | ||||
|         if: runner.os == 'linux' | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=/home/runner/.dotnet4" >> $GITHUB_ENV | ||||
|       - name: Set new tool cache (Windows) | ||||
|         if: runner.os == 'windows' | ||||
|         shell: bash | ||||
|         run: | | ||||
|           echo "DOTNET_INSTALL_DIR=$LocalAppData\Microsoft\dotnet4" >> $GITHUB_ENV | ||||
|       - name: Setup dotnet 2.0.* | ||||
|           dotnet-version: 3.1.* | ||||
|       - name: Setup dotnet 2.2.* | ||||
|         uses: ./ | ||||
|         with: | ||||
|           dotnet-version: 2.0.* | ||||
|           dotnet-version: 2.2.* | ||||
|       - name: Verify dotnet | ||||
|         shell: pwsh | ||||
|         run: __tests__/verify-dotnet.ps1 3.1 2.2 | ||||
|  | ||||
|   test-proxy: | ||||
|     runs-on: ubuntu-latest | ||||
|     runs-on: ubuntu-22.04 | ||||
|     container: | ||||
|       image: mcr.microsoft.com/dotnet/core/runtime-deps:3.0-bionic | ||||
|       image: ubuntu:22.04 | ||||
|       options: --dns 127.0.0.1 | ||||
|     services: | ||||
|       squid-proxy: | ||||
|         image: datadog/squid:latest | ||||
|         image: ubuntu/squid:latest | ||||
|         ports: | ||||
|           - 3128:3128 | ||||
|     env: | ||||
|       https_proxy: http://squid-proxy:3128 | ||||
|       http_proxy: http://squid-proxy:3128 | ||||
|       DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: true | ||||
|  | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
| @ -156,7 +185,7 @@ jobs: | ||||
|       - name: Install curl | ||||
|         run: | | ||||
|           apt update | ||||
|           apt -y install curl | ||||
|           apt -y install curl libssl-dev | ||||
|       - name: Setup dotnet 3.1.201 | ||||
|         uses: ./ | ||||
|         with: | ||||
| @ -168,10 +197,10 @@ jobs: | ||||
|         run: __tests__/verify-dotnet.sh 3.1.201 | ||||
|  | ||||
|   test-bypass-proxy: | ||||
|     runs-on: ubuntu-latest | ||||
|     runs-on: ubuntu-22.04 | ||||
|     env: | ||||
|       https_proxy: http://no-such-proxy:3128 | ||||
|       no_proxy: github.com,dotnetcli.blob.core.windows.net,download.visualstudio.microsoft.com,api.nuget.org,dotnetcli.azureedge.net | ||||
|       no_proxy: github.com,download.visualstudio.microsoft.com,api.nuget.org,builds.dotnet.microsoft.com,ci.dot.net | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|  | ||||
							
								
								
									
										2
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.licenses/npm/@actions/core.dep.yml
									
									
									
										generated
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| --- | ||||
| name: "@actions/core" | ||||
| version: 1.2.6 | ||||
| version: 1.6.0 | ||||
| type: npm | ||||
| summary: Actions core lib | ||||
| homepage: https://github.com/actions/toolkit/tree/main/packages/core | ||||
|  | ||||
							
								
								
									
										32
									
								
								.licenses/npm/@actions/http-client-1.0.11.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.licenses/npm/@actions/http-client-1.0.11.dep.yml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| --- | ||||
| name: "@actions/http-client" | ||||
| version: 1.0.11 | ||||
| type: npm | ||||
| summary: Actions Http Client | ||||
| homepage: https://github.com/actions/http-client#readme | ||||
| license: mit | ||||
| licenses: | ||||
| - sources: LICENSE | ||||
|   text: | | ||||
|     Actions Http Client for Node.js | ||||
|  | ||||
|     Copyright (c) GitHub, Inc. | ||||
|  | ||||
|     All rights reserved. | ||||
|  | ||||
|     MIT License | ||||
|  | ||||
|     Permission is hereby granted, free of charge, to any person obtaining a copy of this software and | ||||
|     associated documentation files (the "Software"), to deal in the Software without restriction, | ||||
|     including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|     and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, | ||||
|     subject to the following conditions: | ||||
|  | ||||
|     The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||||
|  | ||||
|     THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT | ||||
|     LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN | ||||
|     NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
|     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||||
|     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| notices: [] | ||||
							
								
								
									
										54
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								README.md
									
									
									
									
									
								
							| @ -4,16 +4,16 @@ | ||||
|   <a href="https://github.com/actions/setup-dotnet"><img alt="GitHub Actions status" src="https://github.com/actions/setup-dotnet/workflows/Main%20workflow/badge.svg"></a> | ||||
| </p> | ||||
|  | ||||
| This action sets up a [dotnet core cli](https://github.com/dotnet/cli) environment for use in actions by: | ||||
| This action sets up a [.NET CLI](https://github.com/dotnet/sdk) environment for use in actions by: | ||||
|  | ||||
| - optionally downloading and caching a version of dotnet by SDK version and adding to PATH | ||||
| - optionally downloading and caching a version(s) of dotnet by SDK version(s) and adding to PATH | ||||
| - registering problem matchers for error output | ||||
| - setting up authentication to private package sources like GitHub Packages | ||||
|  | ||||
| Please Note: GitHub hosted runners have some versions of the .NET SDK | ||||
| preinstalled. Installed versions are subject to change. Please refer to the | ||||
| 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. | ||||
|  | ||||
| # Usage | ||||
| @ -23,12 +23,36 @@ See [action.yml](action.yml) | ||||
| Basic: | ||||
| ```yaml | ||||
| steps: | ||||
| - uses: actions/checkout@main | ||||
| - uses: actions/checkout@v2 | ||||
| - uses: actions/setup-dotnet@v1 | ||||
|   with: | ||||
|     dotnet-version: '3.1.x' # SDK Version to use; x will use the latest version of the 3.1 channel | ||||
| - run: dotnet build <my project> | ||||
| ``` | ||||
| Multiple versions: | ||||
| > Note: In case multiple versions are installed, the latest .NET version will be used by default unless another version is specified in the `global.json` file. | ||||
|  | ||||
| ```yml | ||||
| steps: | ||||
| - uses: actions/checkout@v2 | ||||
| - name: Setup dotnet | ||||
|   uses: actions/setup-dotnet@v1 | ||||
|   with: | ||||
|     dotnet-version: |  | ||||
|       3.1.x | ||||
|       5.0.x | ||||
| - run: dotnet build <my project> | ||||
| ``` | ||||
| Preview version: | ||||
| ```yml | ||||
| steps: | ||||
| - uses: actions/checkout@v2 | ||||
| - uses: actions/setup-dotnet@v1 | ||||
|   with: | ||||
|     dotnet-version: '6.0.x' | ||||
|     include-prerelease: true | ||||
| - run: dotnet build <my project> | ||||
| ``` | ||||
|  | ||||
| Matrix Testing: | ||||
| ```yaml | ||||
| @ -37,7 +61,7 @@ jobs: | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       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 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v2 | ||||
| @ -59,7 +83,7 @@ jobs: | ||||
|       - name: Setup dotnet | ||||
|         uses: actions/setup-dotnet@v1 | ||||
|         with: | ||||
|           dotnet-version: '2.2.103' | ||||
|           dotnet-version: '2.1.x' | ||||
|       - name: Setup dotnet | ||||
|         uses: actions/setup-dotnet@v1 | ||||
|         with: | ||||
| @ -82,10 +106,10 @@ steps: | ||||
| - run: dotnet build <my project> | ||||
| - name: Create the package | ||||
|   run: dotnet pack --configuration Release <my project> | ||||
|  - name: Publish the package to GPR | ||||
| - name: Publish the package to GPR | ||||
|   run: dotnet nuget push <my project>/bin/Release/*.nupkg | ||||
|  | ||||
| # Authticates packages to push to Azure Artifacts | ||||
| # Authenticates packages to push to Azure Artifacts | ||||
| - uses: actions/setup-dotnet@v1 | ||||
|   with: | ||||
|     source-url: https://pkgs.dev.azure.com/<your-organization>/_packaging/<your-feed-name>/nuget/v3/index.json | ||||
| @ -93,11 +117,21 @@ steps: | ||||
|     NUGET_AUTH_TOKEN: ${{secrets.AZURE_DEVOPS_PAT}} # Note, create a secret with this name in Settings | ||||
| - name: Publish the package to Azure Artifacts | ||||
|   run: dotnet nuget push <my project>/bin/Release/*.nupkg | ||||
|  | ||||
| # Authenticates packages to push to nuget.org. | ||||
| # It's only the way to push a package to nuget.org feed for macOS/Linux machines due to API key config store limitations. | ||||
| - uses: actions/setup-dotnet@v1 | ||||
|   with: | ||||
|     dotnet-version: 3.1.x | ||||
| - name: Publish the package to nuget.org | ||||
|   run: dotnet nuget push */bin/Release/*.nupkg -k $NUGET_AUTH_TOKEN -s https://api.nuget.org/v3/index.json | ||||
|   env: | ||||
|     NUGET_AUTH_TOKEN: ${{ secrets.NUGET_TOKEN }} | ||||
| ``` | ||||
|  | ||||
| ## Environment Variables to use with dotnet | ||||
|  | ||||
| Some environment variables may be necessary for your particular case or to improve logging. Some examples are listed below, but the full list with complete details can be found here: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet#environment-variables | ||||
| Some environment variables may be necessary for your particular case or to improve logging. Some examples are listed below, but the full list with complete details can be found here: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables | ||||
|  | ||||
| - DOTNET_NOLOGO - removes logo and telemetry message from first run of dotnet cli (default: false) | ||||
| - DOTNET_CLI_TELEMETRY_OPTOUT - opt-out of telemetry being sent to Microsoft (default: false) | ||||
| @ -113,7 +147,7 @@ build: | ||||
|     - uses: actions/checkout@main | ||||
|     - uses: actions/setup-dotnet@v1 | ||||
|       with: | ||||
|         dotnet-version: '3.1.100' # SDK Version to use. | ||||
|         dotnet-version: '3.1.x' # SDK Version to use. | ||||
| ``` | ||||
|  | ||||
| # License | ||||
|  | ||||
							
								
								
									
										13
									
								
								__tests__/clear-toolcache.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								__tests__/clear-toolcache.ps1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| $dotnetPaths = @{ | ||||
|     Linux = "/usr/share/dotnet" | ||||
|     macOS = "$env:HOME/.dotnet" | ||||
|     Windows = "$env:ProgramFiles\dotnet", "$env:LocalAppData\Microsoft\dotnet" | ||||
| } | ||||
|  | ||||
| foreach ($srcPath in $dotnetPaths[$args[0]]) { | ||||
|     if (Test-Path $srcPath) { | ||||
|         Write-Host "Move $srcPath path" | ||||
|         $dstPath = Join-Path ([IO.Path]::GetTempPath()) ([IO.Path]::GetRandomFileName()) | ||||
|         Move-Item -Path $srcPath -Destination $dstPath | ||||
|     } | ||||
| } | ||||
| @ -32,6 +32,27 @@ describe('installer tests', () => { | ||||
|     } | ||||
|   }, 30000); | ||||
|  | ||||
|   it('Aquires multiple versions of dotnet', async () => { | ||||
|     const versions = ['2.2.207', '3.1.120']; | ||||
|  | ||||
|     for (const version of versions) { | ||||
|       await getDotnet(version); | ||||
|     } | ||||
|     expect(fs.existsSync(path.join(toolDir, 'sdk', '2.2.207'))).toBe(true); | ||||
|     expect(fs.existsSync(path.join(toolDir, 'sdk', '3.1.120'))).toBe(true); | ||||
|  | ||||
|     if (IS_WINDOWS) { | ||||
|       expect(fs.existsSync(path.join(toolDir, 'dotnet.exe'))).toBe(true); | ||||
|     } else { | ||||
|       expect(fs.existsSync(path.join(toolDir, 'dotnet'))).toBe(true); | ||||
|     } | ||||
|  | ||||
|     expect(process.env.DOTNET_ROOT).toBeDefined; | ||||
|     expect(process.env.PATH).toBeDefined; | ||||
|     expect(process.env.DOTNET_ROOT).toBe(toolDir); | ||||
|     expect(process.env.PATH?.startsWith(toolDir)).toBe(true); | ||||
|   }, 600000); | ||||
|  | ||||
|   it('Acquires version of dotnet if no matching version is installed', async () => { | ||||
|     await getDotnet('3.1.201'); | ||||
|     expect(fs.existsSync(path.join(toolDir, 'sdk', '3.1.201'))).toBe(true); | ||||
| @ -126,4 +147,5 @@ function normalizeFileContents(contents: string): string { | ||||
| async function getDotnet(version: string): Promise<void> { | ||||
|   const dotnetInstaller = new installer.DotnetCoreInstaller(version); | ||||
|   await dotnetInstaller.installDotnet(); | ||||
|   installer.DotnetCoreInstaller.addToPath(); | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|  | ||||
|   <PropertyGroup> | ||||
|     <TargetFrameworks>netcoreapp3.1;netcoreapp2.2</TargetFrameworks> | ||||
|     <TargetFrameworks>netcoreapp3.1;netcoreapp3.0;netcoreapp2.2</TargetFrameworks> | ||||
|     <RootNamespace>sample_csproj</RootNamespace> | ||||
|  | ||||
|     <IsPackable>false</IsPackable> | ||||
|  | ||||
| @ -7,6 +7,7 @@ const toolDir = path.join(__dirname, 'runner', 'tools2'); | ||||
| const tempDir = path.join(__dirname, 'runner', 'temp2'); | ||||
|  | ||||
| import * as setup from '../src/setup-dotnet'; | ||||
| import * as dotnetInstaller from '../src/installer'; | ||||
|  | ||||
| const IS_WINDOWS = process.platform === 'win32'; | ||||
|  | ||||
| @ -19,7 +20,7 @@ describe('setup-dotnet tests', () => { | ||||
|     await io.rmRF(tempDir); | ||||
|   }); | ||||
|  | ||||
|   afterAll(async () => { | ||||
|   afterEach(async () => { | ||||
|     try { | ||||
|       await io.rmRF(path.join(process.cwd(), 'global.json')); | ||||
|       await io.rmRF(toolDir); | ||||
| @ -44,4 +45,26 @@ describe('setup-dotnet tests', () => { | ||||
|       expect(fs.existsSync(path.join(toolDir, 'dotnet'))).toBe(true); | ||||
|     } | ||||
|   }, 400000); | ||||
|  | ||||
|   it('Acquires version of dotnet from global.json with rollForward option, install the latest patch', async () => { | ||||
|     const globalJsonPath = path.join(process.cwd(), 'global.json'); | ||||
|     const jsonContents = `{${os.EOL}"sdk": {${os.EOL}"version":"3.1.201",${os.EOL}"rollForward":"latestFeature"${os.EOL}}${os.EOL}}`; | ||||
|     if (!fs.existsSync(globalJsonPath)) { | ||||
|       fs.writeFileSync(globalJsonPath, jsonContents); | ||||
|     } | ||||
|  | ||||
|     const version = '3.1'; | ||||
|     const installer = new dotnetInstaller.DotnetCoreInstaller(version); | ||||
|     const patchVersion = await installer.resolveVersion( | ||||
|       new dotnetInstaller.DotNetVersionInfo(version) | ||||
|     ); | ||||
|     await setup.run(); | ||||
|  | ||||
|     expect(fs.existsSync(path.join(toolDir, 'sdk', patchVersion))).toBe(true); | ||||
|     if (IS_WINDOWS) { | ||||
|       expect(fs.existsSync(path.join(toolDir, 'dotnet.exe'))).toBe(true); | ||||
|     } else { | ||||
|       expect(fs.existsSync(path.join(toolDir, 'dotnet'))).toBe(true); | ||||
|     } | ||||
|   }, 400000); | ||||
| }); | ||||
|  | ||||
| @ -3,30 +3,38 @@ if (!$args[0]) | ||||
|   throw "Must supply dotnet version argument" | ||||
| } | ||||
|  | ||||
| if (-Not (Test-Path "../nuget.config")) | ||||
| { | ||||
|   throw "nuget file not generated correctly" | ||||
| } | ||||
|  | ||||
| $dotnet = Get-Command dotnet | Select-Object -First 1 | ForEach-Object { $_.Path } | ||||
| Write-Host "Found '$dotnet'" | ||||
|  | ||||
| $version = & $dotnet --version | Out-String | ForEach-Object { $_.Trim() } | ||||
| Write-Host "Version $version" | ||||
| if ($version -ne $args[0]) | ||||
| if($args.count -eq 1) | ||||
| { | ||||
|   Write-Host "PATH='$env:path'" | ||||
|   throw "Unexpected version" | ||||
|   $version = & $dotnet --version | Out-String | ForEach-Object { $_.Trim() } | ||||
|   Write-Host "Version $version" | ||||
|   if (-not ($version.StartsWith($args[0].ToString()))) | ||||
|   { | ||||
|     Write-Host "PATH='$env:PATH'" | ||||
|     throw "Unexpected version" | ||||
|   } | ||||
| } | ||||
|  | ||||
| if ($args[1]) | ||||
| { | ||||
|   # SDKs are listed on multiple lines with the path afterwards in square brackets | ||||
|   $version = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() } | ||||
|   Write-Host "Version $version" | ||||
|   if (-not ($version -contains $args[1])) | ||||
|   $versions = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() } | ||||
|   Write-Host "Installed versions: $versions" | ||||
|   $InstalledVersionCount = 0 | ||||
|   foreach($arg in $args){ | ||||
|     foreach ($version in $versions) | ||||
|     { | ||||
|       if ($version.StartsWith($arg.ToString()))  | ||||
|       { | ||||
|         $InstalledVersionCount++ | ||||
|       } | ||||
|     } | ||||
|    } | ||||
|   if ( $InstalledVersionCount -ne $args.Count) | ||||
|   { | ||||
|     Write-Host "PATH='$env:path'" | ||||
|     Write-Host "PATH='$env:PATH'" | ||||
|     throw "Unexpected version" | ||||
|   } | ||||
| } | ||||
| @ -49,6 +57,13 @@ if ($args[1]) | ||||
|     throw "Unexpected output" | ||||
|   } | ||||
| } | ||||
| if ($args[2]) | ||||
| { | ||||
|   if ($sample_output -notlike "*Test Run Successful.*Test Run Successful.*Test Run Successful.*") | ||||
|   { | ||||
|     throw "Unexpected output" | ||||
|   } | ||||
| } | ||||
| else | ||||
| { | ||||
|   if ($sample_output -notlike "*Test Run Successful.*") | ||||
|  | ||||
| @ -13,6 +13,8 @@ describe('version tests', () => { | ||||
|   ); | ||||
|  | ||||
|   each([ | ||||
|     ['3.x', '3.x'], | ||||
|     ['3.*', '3.*'], | ||||
|     ['3.1.x', '3.1'], | ||||
|     ['1.1.*', '1.1'], | ||||
|     ['2.0', '2.0'] | ||||
| @ -42,7 +44,6 @@ describe('version tests', () => { | ||||
|     '.2.3', | ||||
|     '.2.x', | ||||
|     '1', | ||||
|     '2.x', | ||||
|     '*.*.1', | ||||
|     '*.1', | ||||
|     '*.', | ||||
|  | ||||
| @ -1,18 +1,21 @@ | ||||
| name: 'Setup .NET Core SDK' | ||||
| description: 'Set up a specific version of the .NET Core CLI in the PATH and set up authentication to a private NuGet repository' | ||||
| description: 'Used to build and publish .NET source. Set up a specific version of the .NET and authentication to private NuGet repository' | ||||
| author: 'GitHub' | ||||
| branding: | ||||
|   icon: play | ||||
|   color: green | ||||
| inputs: | ||||
|   dotnet-version: | ||||
|     description: 'SDK version to use. Examples: 2.2.104, 3.1, 3.1.x' | ||||
|     description: 'Optional SDK version(s) to use. If not provided, will install global.json version when available. Examples: 2.2.104, 3.1, 3.1.x' | ||||
|   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' | ||||
|   owner: | ||||
|     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' | ||||
|   config-file: | ||||
|     description: 'Optional NuGet.config location, if your NuGet.config isn''t located in the root of the repo.' | ||||
|   include-prerelease: | ||||
|     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.' | ||||
|     required: False | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   main: 'dist/index.js' | ||||
|  | ||||
							
								
								
									
										1448
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1448
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -22,3 +22,13 @@ If you would like to contribute there are a few things to consider: | ||||
| ## Writing tests | ||||
|  | ||||
| With any contribution please take time to consider how this can be tested to maintain high quality. Current tests can be found in the folder __tests__ for examples. | ||||
|  | ||||
| ## Creating new version | ||||
|  | ||||
| Details on versioning can be found here: https://github.com/actions/toolkit/blob/main/docs/action-versioning.md | ||||
| Create a new release using the UI. Version format should be `v1.x.x`. Creating a new major version requires reaction from users and should be done only with breaking changes. | ||||
| Once the new release is created, the v1 tag needs to be updated as well. | ||||
| ``` | ||||
| git tag -fa v1 -m "Update v1 tag" | ||||
| git push origin v1 --force | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										2516
									
								
								externals/install-dotnet.ps1
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2516
									
								
								externals/install-dotnet.ps1
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1379
									
								
								externals/install-dotnet.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1379
									
								
								externals/install-dotnet.sh
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3965
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3965
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
								
							| @ -30,7 +30,7 @@ | ||||
|   "author": "GitHub", | ||||
|   "license": "MIT", | ||||
|   "dependencies": { | ||||
|     "@actions/core": "^1.2.6", | ||||
|     "@actions/core": "^1.6.0", | ||||
|     "@actions/exec": "^1.0.4", | ||||
|     "@actions/github": "^1.1.0", | ||||
|     "@actions/http-client": "^1.0.8", | ||||
| @ -40,15 +40,15 @@ | ||||
|     "xmlbuilder": "^13.0.2" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@types/jest": "^25.2.3", | ||||
|     "@types/jest": "^27.0.2", | ||||
|     "@types/node": "^12.12.62", | ||||
|     "@types/semver": "^6.2.2", | ||||
|     "@zeit/ncc": "^0.21.1", | ||||
|     "husky": "^4.3.0", | ||||
|     "jest": "^26.4.2", | ||||
|     "jest-circus": "^26.4.2", | ||||
|     "husky": "^7.0.2", | ||||
|     "jest": "^27.2.5", | ||||
|     "jest-circus": "^27.2.5", | ||||
|     "prettier": "^1.19.1", | ||||
|     "ts-jest": "^26.4.0", | ||||
|     "ts-jest": "^27.0.5", | ||||
|     "typescript": "^3.9.7", | ||||
|     "wget-improved": "^3.2.1" | ||||
|   }, | ||||
|  | ||||
| @ -13,7 +13,9 @@ export function configAuthentication( | ||||
| ) { | ||||
|   const existingNuGetConfig: string = path.resolve( | ||||
|     processRoot, | ||||
|     existingFileLocation == '' ? 'nuget.config' : existingFileLocation | ||||
|     existingFileLocation === '' | ||||
|       ? getExistingNugetConfig(processRoot) | ||||
|       : existingFileLocation | ||||
|   ); | ||||
|  | ||||
|   const tempNuGetConfig: string = path.resolve( | ||||
| @ -25,6 +27,21 @@ export function configAuthentication( | ||||
|   writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig); | ||||
| } | ||||
|  | ||||
| function isValidKey(key: string): boolean { | ||||
|   return /^[\w\-\.]+$/i.test(key); | ||||
| } | ||||
|  | ||||
| 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( | ||||
|   feedUrl: string, | ||||
|   existingFileLocation: string, | ||||
| @ -109,9 +126,9 @@ function writeFeedToFile( | ||||
|   xml = xml.ele('packageSourceCredentials'); | ||||
|  | ||||
|   sourceKeys.forEach(key => { | ||||
|     if (key.indexOf(' ') > -1) { | ||||
|     if (!isValidKey(key)) { | ||||
|       throw new Error( | ||||
|         "This action currently can't handle source names with spaces. Remove the space from your repo's NuGet.config and try again." | ||||
|         "Source name can contain letters, numbers, and '-', '_', '.' symbols only. Please, fix source name in NuGet.config and try again." | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -29,8 +29,7 @@ export class DotNetVersionInfo { | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     //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(); | ||||
|  | ||||
| @ -38,8 +37,10 @@ export class DotNetVersionInfo { | ||||
|       this.throwInvalidVersionFormat(); | ||||
|     } | ||||
|  | ||||
|     let major = this.getVersionNumberOrThrow(parts[0]); | ||||
|     let minor = this.getVersionNumberOrThrow(parts[1]); | ||||
|     const major = this.getVersionNumberOrThrow(parts[0]); | ||||
|     const minor = ['x', '*'].includes(parts[1]) | ||||
|       ? parts[1] | ||||
|       : this.getVersionNumberOrThrow(parts[1]); | ||||
|  | ||||
|     this.fullversion = major + '.' + minor; | ||||
|   } | ||||
| @ -60,7 +61,9 @@ export class DotNetVersionInfo { | ||||
|   } | ||||
|  | ||||
|   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.*' | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @ -76,8 +79,9 @@ export class DotNetVersionInfo { | ||||
| } | ||||
|  | ||||
| export class DotnetCoreInstaller { | ||||
|   constructor(version: string) { | ||||
|   constructor(version: string, includePrerelease: boolean = false) { | ||||
|     this.version = version; | ||||
|     this.includePrerelease = includePrerelease; | ||||
|   } | ||||
|  | ||||
|   public async installDotnet() { | ||||
| @ -161,6 +165,12 @@ export class DotnetCoreInstaller { | ||||
|       }); | ||||
|     } | ||||
|  | ||||
|     if (resultCode != 0) { | ||||
|       throw new Error(`Failed to install dotnet ${resultCode}. ${output}`); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   static addToPath() { | ||||
|     if (process.env['DOTNET_INSTALL_DIR']) { | ||||
|       core.addPath(process.env['DOTNET_INSTALL_DIR']); | ||||
|       core.exportVariable('DOTNET_ROOT', process.env['DOTNET_INSTALL_DIR']); | ||||
| @ -185,10 +195,6 @@ export class DotnetCoreInstaller { | ||||
|     } | ||||
|  | ||||
|     console.log(process.env['PATH']); | ||||
|  | ||||
|     if (resultCode != 0) { | ||||
|       throw `Failed to install dotnet ${resultCode}. ${output}`; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // versionInfo - versionInfo of the SDK/Runtime | ||||
| @ -212,13 +218,15 @@ export class DotnetCoreInstaller { | ||||
|     let releasesInfo: any[] = releasesResult['releases']; | ||||
|     releasesInfo = releasesInfo.filter((releaseInfo: any) => { | ||||
|       return ( | ||||
|         semver.satisfies( | ||||
|           releaseInfo['sdk']['version'], | ||||
|           versionInfo.version() | ||||
|         ) || | ||||
|         semver.satisfies(releaseInfo['sdk']['version'], versionInfo.version(), { | ||||
|           includePrerelease: this.includePrerelease | ||||
|         }) || | ||||
|         semver.satisfies( | ||||
|           releaseInfo['sdk']['version-display'], | ||||
|           versionInfo.version() | ||||
|           versionInfo.version(), | ||||
|           { | ||||
|             includePrerelease: this.includePrerelease | ||||
|           } | ||||
|         ) | ||||
|       ); | ||||
|     }); | ||||
| @ -227,16 +235,22 @@ export class DotnetCoreInstaller { | ||||
|     let latestSdk: string = releasesResult['latest-sdk']; | ||||
|  | ||||
|     releasesInfo = releasesInfo.filter((releaseInfo: any) => | ||||
|       semver.lte(releaseInfo['sdk']['version'], latestSdk) | ||||
|       semver.lte(releaseInfo['sdk']['version'], latestSdk, { | ||||
|         includePrerelease: this.includePrerelease | ||||
|       }) | ||||
|     ); | ||||
|  | ||||
|     // Sort for latest version | ||||
|     releasesInfo = releasesInfo.sort((a, b) => | ||||
|       semver.rcompare(a['sdk']['version'], b['sdk']['version']) | ||||
|       semver.rcompare(a['sdk']['version'], b['sdk']['version'], { | ||||
|         includePrerelease: this.includePrerelease | ||||
|       }) | ||||
|     ); | ||||
|  | ||||
|     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]; | ||||
| @ -264,16 +278,26 @@ export class DotnetCoreInstaller { | ||||
|     }); | ||||
|  | ||||
|     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']; | ||||
|     const releaseInfo = releasesInfo[0]; | ||||
|     if (releaseInfo['support-phase'] === 'eol') { | ||||
|       core.warning( | ||||
|         `${releaseInfo['product']} ${releaseInfo['channel-version']} is no longer supported and will not receive security updates in the future. Please refer to https://aka.ms/dotnet-core-support for more information about the .NET support policy.` | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     return releaseInfo['releases.json']; | ||||
|   } | ||||
|  | ||||
|   private version: string; | ||||
|   private includePrerelease: boolean; | ||||
| } | ||||
|  | ||||
| const DotNetCoreIndexUrl: string = | ||||
|   'https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json'; | ||||
|   'https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json'; | ||||
|  | ||||
| @ -13,24 +13,29 @@ export async function run() { | ||||
|     // If a valid version still can't be identified, nothing will be installed. | ||||
|     // Proxy, auth, (etc) are still set up, even if no version is identified | ||||
|     // | ||||
|     let version = core.getInput('dotnet-version'); | ||||
|     if (!version) { | ||||
|     let versions = core.getMultilineInput('dotnet-version'); | ||||
|     if (!versions.length) { | ||||
|       // Try to fall back to global.json | ||||
|       core.debug('No version found, trying to find version from global.json'); | ||||
|       const globalJsonPath = path.join(process.cwd(), 'global.json'); | ||||
|       if (fs.existsSync(globalJsonPath)) { | ||||
|         const globalJson = JSON.parse( | ||||
|           fs.readFileSync(globalJsonPath, {encoding: 'utf8'}) | ||||
|         ); | ||||
|         if (globalJson.sdk && globalJson.sdk.version) { | ||||
|           version = globalJson.sdk.version; | ||||
|         } | ||||
|         versions.push(getVersionFromGlobalJson(globalJsonPath)); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     if (version) { | ||||
|       const dotnetInstaller = new installer.DotnetCoreInstaller(version); | ||||
|       await dotnetInstaller.installDotnet(); | ||||
|     if (versions.length) { | ||||
|       const includePrerelease: boolean = | ||||
|         (core.getInput('include-prerelease') || 'false').toLowerCase() === | ||||
|         'true'; | ||||
|       let dotnetInstaller!: installer.DotnetCoreInstaller; | ||||
|       for (const version of new Set<string>(versions)) { | ||||
|         dotnetInstaller = new installer.DotnetCoreInstaller( | ||||
|           version, | ||||
|           includePrerelease | ||||
|         ); | ||||
|         await dotnetInstaller.installDotnet(); | ||||
|       } | ||||
|       installer.DotnetCoreInstaller.addToPath(); | ||||
|     } | ||||
|  | ||||
|     const sourceUrl: string = core.getInput('source-url'); | ||||
| @ -46,4 +51,21 @@ export async function run() { | ||||
|   } | ||||
| } | ||||
|  | ||||
| function getVersionFromGlobalJson(globalJsonPath: string): string { | ||||
|   let version: string = ''; | ||||
|   const globalJson = JSON.parse( | ||||
|     // .trim() is necessary to strip BOM https://github.com/nodejs/node/issues/20649 | ||||
|     fs.readFileSync(globalJsonPath, {encoding: 'utf8'}).trim() | ||||
|   ); | ||||
|   if (globalJson.sdk && globalJson.sdk.version) { | ||||
|     version = globalJson.sdk.version; | ||||
|     const rollForward = globalJson.sdk.rollForward; | ||||
|     if (rollForward && rollForward === 'latestFeature') { | ||||
|       const [major, minor] = version.split('.'); | ||||
|       version = `${major}.${minor}`; | ||||
|     } | ||||
|   } | ||||
|   return version; | ||||
| } | ||||
|  | ||||
| run(); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	