name: Build on: - push - pull_request - workflow_dispatch jobs: Linux: runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # needed for Nerdbank.GitVersioning - name: Setup .NET uses: actions/setup-dotnet@v4 - name: Build Unit Tests .NET run: dotnet build -f net9.0 test/Renci.SshNet.Tests/ - name: Build IntegrationTests .NET run: dotnet build -f net9.0 test/Renci.SshNet.IntegrationTests/ - name: Run Unit Tests .NET run: | dotnet test \ -f net9.0 \ --no-build \ --logger "console;verbosity=normal" \ --logger GitHubActions \ -p:CollectCoverage=true \ -p:CoverletOutputFormat=cobertura \ -p:CoverletOutput=../../coverlet/linux_unit_test_net_9_coverage.xml \ test/Renci.SshNet.Tests/ - name: Run Integration Tests .NET run: | dotnet test \ -f net9.0 \ --no-build \ --logger "console;verbosity=normal" \ --logger GitHubActions \ -p:CollectCoverage=true \ -p:CoverletOutputFormat=cobertura \ -p:CoverletOutput=../../coverlet/linux_integration_test_net_9_coverage.xml \ test/Renci.SshNet.IntegrationTests/ - name: Archive Coverlet Results uses: actions/upload-artifact@v4 with: name: Coverlet Results Linux path: coverlet Windows: runs-on: windows-2025 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # needed for Nerdbank.GitVersioning - name: Setup .NET uses: actions/setup-dotnet@v4 - name: Build Solution run: dotnet build Renci.SshNet.sln - name: Publish AOT Compatibility Test App run: dotnet publish -r win-x64 /warnaserror test/Renci.SshNet.AotCompatibilityTestApp/ - name: Create NuGet Package run: dotnet pack - name: Archive NuGet Package uses: actions/upload-artifact@v4 with: name: NuGet Package path: src/Renci.SshNet/bin/Release/*.*nupkg - name: Run Unit Tests .NET run: | dotnet test ` -f net9.0 ` --no-build ` --logger "console;verbosity=normal" ` --logger GitHubActions ` -p:CollectCoverage=true ` -p:CoverletOutputFormat=cobertura ` -p:CoverletOutput=../../coverlet/windows_unit_test_net_9_coverage.xml ` test/Renci.SshNet.Tests/ - name: Run Unit Tests .NET Framework run: | dotnet test ` -f net462 ` --no-build ` --logger "console;verbosity=normal" ` --logger GitHubActions ` -p:CollectCoverage=true ` -p:CoverletOutputFormat=cobertura ` -p:CoverletOutput=../../coverlet/windows_unit_test_net_4_6_2_coverage.xml ` test/Renci.SshNet.Tests/ Windows-Integration-Tests: name: Windows Integration Tests runs-on: windows-2025 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # needed for Nerdbank.GitVersioning - name: Setup .NET uses: actions/setup-dotnet@v4 - name: Setup WSL2 uses: Vampire/setup-wsl@f40fb59d850112c9a292b0218bca8271305b9127 # v5.0.0 with: distribution: Ubuntu-24.04 - name: Setup SSH Server shell: wsl-bash {0} run: | apt-get update && apt-get upgrade -y apt-get install -y podman podman build -t renci-ssh-tests-server-image -f test/Renci.SshNet.IntegrationTests/Dockerfile test/Renci.SshNet.IntegrationTests/ podman run --rm -h renci-ssh-tests-server -d -p 2222:22 renci-ssh-tests-server-image - name: Run Integration Tests .NET Framework run: dotnet test ` -f net48 ` --logger "console;verbosity=normal" ` --logger GitHubActions ` -p:CollectCoverage=true ` -p:CoverletOutputFormat=cobertura ` -p:CoverletOutput=..\..\coverlet\windows_integration_test_net_4_8_coverage.xml ` test\Renci.SshNet.IntegrationTests\ - name: Archive Coverlet Results uses: actions/upload-artifact@v4 with: name: Coverlet Results Windows path: coverlet Publish: runs-on: ubuntu-24.04 if: github.ref == 'refs/heads/develop' permissions: packages: write needs: - Windows - Linux steps: - name: Download NuGet Package uses: actions/download-artifact@v4 with: name: NuGet Package - name: Publish to GitHub NuGet Registry run: | dotnet nuget add source \ --username $GITHUB_ACTOR \ --password ${{ secrets.GITHUB_TOKEN }} \ --store-password-in-clear-text \ --name github \ "https://nuget.pkg.github.com/$GITHUB_REPOSITORY_OWNER/index.json" dotnet nuget push "*.nupkg" \ --source github \ --api-key ${{ secrets.GITHUB_TOKEN }}