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 @@ - +