diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml
index fd6e85b..9963bbc 100644
--- a/.github/workflows/e2e-tests.yml
+++ b/.github/workflows/e2e-tests.yml
@@ -33,7 +33,7 @@ jobs:
3.0.x
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 2.2.402, 3.1.404, 3.0
+ run: __tests__/verify-dotnet.ps1 -Patterns "^2.2.402$", "^3.1.404$", "^3.0"
test-setup-full-version:
runs-on: ${{ matrix.operating-system }}
@@ -62,7 +62,7 @@ jobs:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201, 2.2.402 -CheckNugetConfig
+ run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$", "^2.2.402$" -CheckNugetConfig
test-setup-without-patch-version:
runs-on: ${{ matrix.operating-system }}
@@ -87,7 +87,7 @@ jobs:
dotnet-version: '2.2'
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1, 2.2
+ run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2"
test-setup-prerelease-version:
runs-on: ${{ matrix.operating-system }}
@@ -107,7 +107,7 @@ jobs:
dotnet-version: '3.1.100-preview1-014459'
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1.100-preview1-014459
+ run: __tests__/verify-dotnet.ps1 -Patterns "3.1.100-preview1-014459"
test-setup-latest-patch-version:
runs-on: ${{ matrix.operating-system }}
@@ -131,7 +131,7 @@ jobs:
dotnet-version: 2.2.X
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 2.2, 3.1
+ run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1"
test-setup-with-wildcard:
runs-on: ${{ matrix.operating-system }}
@@ -155,7 +155,7 @@ jobs:
dotnet-version: 2.2.*
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1, 2.2
+ run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2"
test-setup-global-json-specified-and-version:
runs-on: ${{ matrix.operating-system }}
@@ -181,7 +181,7 @@ jobs:
global-json-file: ./subdirectory/global.json
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 2.2.207, 3.1
+ run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1"
test-setup-with-dotnet-quality:
runs-on: ${{ matrix.operating-system }}
@@ -203,7 +203,7 @@ jobs:
dotnet-quality: 'preview'
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 7.0 -ContainedPattern "preview"
+ run: __tests__/verify-dotnet.ps1 -Patterns "^7\.0\.\d+-"
test-dotnet-version-output-during-single-version-installation:
runs-on: ${{ matrix.operating-system }}
@@ -262,7 +262,7 @@ jobs:
test-proxy:
runs-on: ubuntu-latest
container:
- image: mcr.microsoft.com/dotnet/core/runtime-deps:3.0-bionic
+ image: ubuntu:latest
options: --dns 127.0.0.1
services:
squid-proxy:
@@ -275,22 +275,29 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- - name: Clear tool cache
- run: rm -rf "/usr/share/dotnet"
- - name: Install curl
+ - name: Install Powershell
run: |
- apt update
- apt -y install curl
- - name: Setup dotnet 3.1.201
+ apt-get update
+ apt-get install -y wget apt-transport-https software-properties-common
+ wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
+ dpkg -i packages-microsoft-prod.deb
+ rm packages-microsoft-prod.deb
+ apt-get update
+ apt-get install -y powershell
+ - name: Clear toolcache
+ shell: pwsh
+ run: __tests__/clear-toolcache.ps1 ${{ runner.os }}
+ - name: Setup dotnet 6.0
uses: ./
with:
- dotnet-version: 3.1.201
+ dotnet-version: 6.0
source-url: https://api.nuget.org/v3/index.json
env:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201 -CheckNugetConfig
+ run: |
+ __tests__/verify-dotnet.ps1 -Patterns "^6.0" -CheckNugetConfig
test-bypass-proxy:
runs-on: ubuntu-latest
@@ -300,8 +307,9 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- - name: Clear tool cache
- run: rm -rf "/usr/share/dotnet"
+ - name: Clear toolcache
+ shell: pwsh
+ run: __tests__/clear-toolcache.ps1 ${{ runner.os }}
- name: Setup dotnet 3.1.201
uses: ./
with:
@@ -311,4 +319,4 @@ jobs:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
- run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201 -CheckNugetConfig
+ run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$" -CheckNugetConfig
diff --git a/.github/workflows/test-dotnet.yml b/.github/workflows/test-dotnet.yml
index 0b37d28..760167b 100644
--- a/.github/workflows/test-dotnet.yml
+++ b/.github/workflows/test-dotnet.yml
@@ -18,7 +18,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
- dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0']
+ dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0', '6.0', '7.0']
steps:
- name: Checkout
uses: actions/checkout@v3
@@ -29,9 +29,7 @@ jobs:
uses: ./
with:
dotnet-version: ${{ matrix.dotnet-version }}
- - name: Check installed version
+ - name: Verify installed version
shell: pwsh
run: |
- $version = & dotnet --version
- Write-Host "Installed version: $version"
- if (-not $version.StartsWith("${{ matrix.dotnet-version }}")) { throw "Unexpected version" }
+ __tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.dotnet-version }}"
diff --git a/.gitignore b/.gitignore
index b339e2c..1cb082a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,8 +3,8 @@ global.json
lib/
node_modules/
__tests__/runner/*
-__tests__/sample-csproj/bin/
-__tests__/sample-csproj/obj/
+__tests__/e2e-test-csproj/bin/
+__tests__/e2e-test-csproj/obj/
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
# Logs
diff --git a/__tests__/e2e-test-csproj/Test.cs b/__tests__/e2e-test-csproj/Test.cs
index 533bdb8..ba9573a 100644
--- a/__tests__/e2e-test-csproj/Test.cs
+++ b/__tests__/e2e-test-csproj/Test.cs
@@ -1,4 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
namespace test_csproj
{
@@ -7,8 +8,11 @@ namespace test_csproj
{
[TestMethod]
public void TestMethod()
- {
- Assert.AreEqual((1 + 1), 2);
+ {
+ Console.WriteLine("TestMethod");
+ int calculatedResult = 1000 / 25;
+ int expectedResult = 40;
+ Assert.AreEqual(calculatedResult, expectedResult);
}
}
}
diff --git a/__tests__/e2e-test-csproj/test.csproj b/__tests__/e2e-test-csproj/test.csproj
index 370186a..769269f 100644
--- a/__tests__/e2e-test-csproj/test.csproj
+++ b/__tests__/e2e-test-csproj/test.csproj
@@ -2,11 +2,11 @@
$(TEST_TARGET_FRAMEWORK)
-
false
+
diff --git a/__tests__/verify-dotnet.ps1 b/__tests__/verify-dotnet.ps1
index 53befbb..496fec2 100755
--- a/__tests__/verify-dotnet.ps1
+++ b/__tests__/verify-dotnet.ps1
@@ -1,57 +1,68 @@
+<#
+ .DESCRIPTION
+ Verifies that installed on the machine .NET SDK versions match the input patterns.
+ Optionally checks that the nuget.config file is generated correctly.
+
+ .PARAMETER Patterns
+ Specifies the regular expression patterns that should be matched with the installed
+ on the machine .NET SDK versions. The number of patterns should be equal to the number
+ of installed .NET versions.
+
+ .PARAMETER CheckNugetConfig
+ Switches the check for the existence of the nuget.config file.
+
+ .EXAMPLE
+ PS> .\verify-dotnet.ps1 -Paterns "^3.1.200$", "^6.0" -CheckNugetConfig
+#>
+
param(
[ValidateNotNullOrEmpty()]
+ [Parameter(Mandatory=$true)]
[string[]]$Patterns,
- [ValidateNotNullOrEmpty()]
- [string]$ContainedPattern,
[switch]$CheckNugetConfig
)
-if ($CheckNugetConfig.IsPresent) {
- if (!(Test-Path "../nuget.config"))
- {
- throw "The nuget.config file is not generated correctly."
- }
+$PatternsList = [System.Collections.ArrayList]($Patterns)
+
+if ($CheckNugetConfig.IsPresent -and !(Test-Path "../nuget.config")) {
+ throw "The nuget.config file is not generated correctly."
}
-if (!$Patterns.Count)
-{
- throw "At least 1 dotnet-version pattern should be supplied to script."
-}
+$PatternsCount = $PatternsList.Count
-Write-Host "Those patterns were supplied to the script: $($Patterns -join ', ')."
+Write-Host "Those patterns were supplied to the script: $($PatternsList -join ', ')."
$dotnet = Get-Command dotnet | Select-Object -First 1 | ForEach-Object { $_.Path }
Write-Host "Found: '$dotnet'"
# SDKs are listed on multiple lines with the path afterwards in square brackets
-$versions = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() }
-Write-Host "Installed versions: $($versions -join ', ')."
-$InstalledVersionCount = 0
-foreach($pattern in $Patterns)
+$Versions = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() }
+Write-Host "Found installed versions: $($Versions -join ', ')."
+$InstalledVersionCount = $Versions.Count
+
+foreach($version in $Versions)
{
- foreach ($version in $versions)
+ foreach($pattern in $PatternsList)
{
- if ($ContainedPattern)
- {
- if ($version.StartsWith($pattern.ToString()) -and $version.Contains($ContainedPattern))
- {
- $InstalledVersionCount++
- }
- }
- elseif ($version.StartsWith($pattern.ToString()))
- {
- $InstalledVersionCount++
- }
+ if ($version -match $pattern)
+ {
+ $PatternsList.Remove($pattern)
+ $InstalledVersionCount--
+ break
+ }
}
}
-if ( $InstalledVersionCount -ne $Patterns.Count)
+
+if ( $InstalledVersionCount -ne 0)
{
- throw "An unexpected version of Dotnet is found on the machine, please check the script's dotnet-version patterns."
+ throw "An unexpected version of Dotnet is found on the machine, please check the correctness of the -Patterns input."
}
Write-Host "Changing directory to the ./__tests__/e2e-test-csproj"
-Set-Location ./__tests__/e2e-test-csproj
+$workingDir = Get-Location
+$testProjectDir = "./__tests__/e2e-test-csproj"
+Set-Location $testProjectDir
-$targetFrameworkVersionMapping = @{
+$targetFrameworkVersionMap = @{
"1.0" = "netcoreapp1.0";
"1.1" = "netcoreapp1.1";
"2.0" = "netcoreapp2.0";
@@ -64,14 +75,17 @@ $targetFrameworkVersionMapping = @{
"7.0" = "net7.0";
}
-foreach ($version in $versions)
+foreach ($version in $Versions)
{
+ # Creating temporary global.json file inside e2e-test-csproj dir and setting exact version of .NET inside allows to override default behavior of .NET and run build and tests on that exact version.
Write-Host "Creating temporary global.json file for $version .NET version."
& $dotnet new globaljson --sdk-version $version --force
- Write-Host "The global.json file for the version $version is created. Currently used .NET version is: $(& $dotnet --version)"
+ Write-Host "The global.json file for the version $version is created. Currently used .NET version is: $(& $dotnet --version)."
+
+ # Environment variable TEST_TARGET_FRAMEWORK is used inside the test.csproj file to target required framework version
$version -match "^(?\d+\.\d+)"
- Write-Host "Setting the TEST_TARGET_FRAMEWORK environment variable to $($targetFrameworkVersionMapping[$Matches.key])"
- [Environment]::SetEnvironmentVariable('TEST_TARGET_FRAMEWORK', $($targetFrameworkVersionMapping[$Matches.key]))
+ Write-Host "Setting the TEST_TARGET_FRAMEWORK environment variable to $($targetFrameworkVersionMap[$Matches.key])"
+ [Environment]::SetEnvironmentVariable('TEST_TARGET_FRAMEWORK', $($targetFrameworkVersionMap[$Matches.key]))
Write-Host "Building test C# project with $version .NET version."
& $dotnet build --no-cache
@@ -89,8 +103,8 @@ foreach ($version in $versions)
Write-Host "Tests are completed successfully!"
- Write-Host "Removing temprary global.json file."
+ Write-Host "Removing temporary global.json file."
Remove-Item ./global.json
}
-Set-Location ../..
\ No newline at end of file
+Set-Location $workingDir
\ No newline at end of file
diff --git a/__tests__/verify-dotnet.sh b/__tests__/verify-dotnet.sh
deleted file mode 100755
index 098d076..0000000
--- a/__tests__/verify-dotnet.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-if [ -z "$1" ]; then
- echo "Must supply dotnet version argument"
- exit 1
-fi
-
-if [ ! -f "../nuget.config" ]; then
- echo "nuget file not generated correctly"
- exit 1
-fi
-
-dotnet_version="$(dotnet --version)"
-echo "Found dotnet version '$dotnet_version'"
-if [ -z "$(echo $dotnet_version | grep $1)" ]; then
- echo "Unexpected version"
- exit 1
-fi
-
-if [ -n "$2" ]; then
- dotnet_version="$(dotnet --list-sdks)"
- echo "Found dotnet version '$dotnet_version'"
- if [ -z "$(echo $dotnet_version | grep $2)" ]; then
- echo "Unexpected version"
- exit 1
- fi
-fi
-
-echo "Building sample csproj"
-dotnet build __tests__/sample-csproj/ --no-cache || exit 1
-
-echo "Testing compiled app"
-sample_output=$(dotnet test __tests__/sample-csproj/ --no-build)
-echo "Sample output: $sample_output"
-# For Side-by-Side installs we want to run the tests twice, for a single install the tests will run once
-if [ -n "$2" ]; then
- if [ -z "$(echo $sample_output | grep "Test Run Successful.*Test Run Successful.")" ]; then
- echo "Unexpected output"
- exit 1
- fi
-else
- if [ -z "$(echo $sample_output | grep "Test Run Successful.")" ]; then
- echo "Unexpected output"
- exit 1
- fi
-fi
\ No newline at end of file