diff --git a/.github/workflows/ci+cd.yml b/.github/workflows/ci+cd.yml
index ab259f37..28d84c82 100644
--- a/.github/workflows/ci+cd.yml
+++ b/.github/workflows/ci+cd.yml
@@ -26,8 +26,13 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
+ framework: [net461, net6.0, net8.0]
+ exclude:
+ # dotnet on Linux cannot build net461 without additional, unnecessary, work
+ - os: ubuntu-latest
+ framework: net461
concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}
+ group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-${{ matrix.framework }}
cancel-in-progress: true
steps:
@@ -53,44 +58,60 @@ jobs:
run: sudo apt-get install python2
if: matrix.os == 'ubuntu-latest'
- # Unfortunately we need two test steps because we need different filters.
- # We could conditionally set an environment variable, but unfortunately
- # the syntax to access that is different on Windows vs Linux.
- - name: Test on Linux
- run: dotnet test --no-build -c Release --filter TestCategory!=RequiresUI -- NUnit.TestOutputXml=TestResults
- if: matrix.os == 'ubuntu-latest'
+ - name: Test Chorus
+ run: dotnet test src/Chorus.Tests/Chorus.Tests.csproj -f ${{ matrix.framework }} --no-build -c Release --filter TestCategory!=SkipOnBuildServer -- NUnit.TestOutputXml=TestResults
+ if: matrix.framework == 'net461'
+
+ - name: Test Chorus Hub
+ run: dotnet test src/ChorusHubTests/ChorusHubTests.csproj -f ${{ matrix.framework }} --no-build -c Release --filter TestCategory!=SkipOnBuildServer -- NUnit.TestOutputXml=TestResults
+ if: matrix.framework == 'net461'
+
+ - name: Test ChorusMerge
+ run: dotnet test src/ChorusMerge.Tests/ChorusMerge.Tests.csproj -f ${{ matrix.framework }} --no-build -c Release --filter TestCategory!=SkipOnBuildServer -- NUnit.TestOutputXml=TestResults
- - name: Test on Windows
- run: dotnet test --no-build -c Release --filter TestCategory!=SkipOnBuildServer -- NUnit.TestOutputXml=TestResults
- if: matrix.os == 'windows-latest'
+ - name: Test LibChorus
+ run: dotnet test src/LibChorusTests/LibChorus.Tests.csproj -f ${{ matrix.framework }} --no-build -c Release --filter TestCategory!=SkipOnBuildServer -- NUnit.TestOutputXml=TestResults
+ # TODO: Give each test result its own name based on OS and framework and change the test-results.yml workflow accordingly, so that they don't overwrite each other
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v4
with:
- name: Test Results (${{matrix.os}})
+ name: Test Results (${{ matrix.framework }} on ${{matrix.os}})
path: "**/TestResults/*.xml"
+ build-installers:
+ name: "Build Windows installers"
+ runs-on: windows-latest
+ needs: build-and-test
+ steps:
+ - name: Checkout
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
+ with:
+ fetch-depth: 0 # fetch full history for GitVersion
+
+ - name: Restore
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build --no-restore -c Release
+
- name: Checkout Chorus Help # required for Chorus Merge Module
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v3.0.2
with:
repository: sillsdev/chorushelp
path: DistFiles/Help
- if: matrix.os == 'windows-latest'
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@34cfbaee7f672c76950673338facd8a73f637506 # v1.1.3
- if: matrix.os == 'windows-latest'
# ChorusMergeModule.msm is used by FieldWorks, FLExBridge, and possibly WeSay installers (as of 2022.12).
# CMM must be built after tests have been run, since the fixutf8.pyc files are generated only when the .py files are run.
- name: Build Merge Module
run: msbuild src/Installer/ChorusMergeModule.wixproj
- if: matrix.os == 'windows-latest'
- name: Pack Merge Module
run: msbuild src/Installer/ChorusMergeModule.wixproj -t:pack
- if: matrix.os == 'windows-latest'
- name: Upload Merge Module
uses: actions/upload-artifact@v4
@@ -99,14 +120,12 @@ jobs:
path: |
output/Release/*.msm
output/*.nupkg
- if: matrix.os == 'windows-latest'
- name: Build Chorus Hub Installer
run: |
msbuild src/Installer/ChorusHub.wixproj /t:Restore
msbuild src/Installer/ChorusHub.wixproj /t:StampLicenseYear
msbuild src/Installer/ChorusHub.wixproj /t:Build
- if: matrix.os == 'windows-latest'
- name: Upload Chorus Hub Installer
uses: actions/upload-artifact@v4
@@ -114,7 +133,6 @@ jobs:
name: chorus-hub-installer
path: |
output/Release/*.msi
- if: matrix.os == 'windows-latest'
- name: Pack
run: dotnet pack --no-restore --no-build -c Release
@@ -126,12 +144,11 @@ jobs:
path: |
output/*.nupkg
output/*.snupkg
- if: matrix.os == 'ubuntu-latest'
publish-nuget:
name: "Publish NuGet package"
runs-on: ubuntu-latest
- needs: build-and-test
+ needs: build-installers
if: github.event_name == 'push'
steps:
- name: Download Artifacts
diff --git a/src/Chorus.Tests/Chorus.Tests.csproj b/src/Chorus.Tests/Chorus.Tests.csproj
index 835c0f3f..eb7391b3 100644
--- a/src/Chorus.Tests/Chorus.Tests.csproj
+++ b/src/Chorus.Tests/Chorus.Tests.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/ChorusHubTests/ChorusHubTests.csproj b/src/ChorusHubTests/ChorusHubTests.csproj
index fd08abfe..657938e5 100644
--- a/src/ChorusHubTests/ChorusHubTests.csproj
+++ b/src/ChorusHubTests/ChorusHubTests.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/ChorusMerge.Tests/ChorusMerge.Tests.csproj b/src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
index 05545f26..392edefa 100644
--- a/src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
+++ b/src/ChorusMerge.Tests/ChorusMerge.Tests.csproj
@@ -4,6 +4,7 @@
ChorusMerge.Tests
ChorusMerge.Tests
Unit tests for LibChorus.dll
+ net461;net6.0;net8.0
true
false
@@ -14,7 +15,7 @@
-
+
diff --git a/src/LibChorusTests/LibChorus.Tests.csproj b/src/LibChorusTests/LibChorus.Tests.csproj
index 1654a1ba..523dab49 100644
--- a/src/LibChorusTests/LibChorus.Tests.csproj
+++ b/src/LibChorusTests/LibChorus.Tests.csproj
@@ -15,7 +15,7 @@
-
+