mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-10-17 05:21:15 +08:00
Migrate from AppVeyor to GitHub Actions (#1539)
* Migrate from AppVeyor to GitHub Actions * also run on pull_request * small formatting improvements * add on: workflow_dispatch this is needed to re-run jobs manually from the web UI * Publish NuGet package to GitHub Registry only on develop branch. * re-add empty appveyor.yml so it doesn't fail CI until AppVeyor integration is disabled * fix appveyor * typo
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
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
|
||||
with:
|
||||
dotnet-version: 8.0.x
|
||||
|
||||
- name: Build Unit Tests .NET
|
||||
run: dotnet build -f net8.0 test/Renci.SshNet.Tests/
|
||||
|
||||
- name: Build IntegrationTests .NET
|
||||
run: dotnet build -f net8.0 test/Renci.SshNet.IntegrationTests/
|
||||
|
||||
- name: Build IntegrationTests .NET Framework
|
||||
run: dotnet build -f net48 test/Renci.SshNet.IntegrationTests/
|
||||
|
||||
- name: Run Unit Tests .NET
|
||||
run: |
|
||||
dotnet test \
|
||||
-f net8.0 \
|
||||
--no-build \
|
||||
--logger "console;verbosity=normal" \
|
||||
--logger GitHubActions \
|
||||
-p:CollectCoverage=true \
|
||||
-p:CoverletOutputFormat=cobertura \
|
||||
-p:CoverletOutput=../../coverlet/linux_unit_test_net_8_coverage.xml \
|
||||
test/Renci.SshNet.Tests/
|
||||
|
||||
- name: Run Integration Tests .NET
|
||||
run: |
|
||||
dotnet test \
|
||||
-f net8.0 \
|
||||
--no-build \
|
||||
--logger "console;verbosity=normal" \
|
||||
--logger GitHubActions \
|
||||
-p:CollectCoverage=true \
|
||||
-p:CoverletOutputFormat=cobertura \
|
||||
-p:CoverletOutput=../../coverlet/linux_integration_test_net_8_coverage.xml \
|
||||
test/Renci.SshNet.IntegrationTests/
|
||||
|
||||
# Also run a subset of the integration tests targeting netfx using mono. This is a temporary measure to get
|
||||
# some coverage until a proper solution for running the .NET Framework integration tests in CI is found.
|
||||
# Running all the tests causes problems which are not worth solving in this rare configuration.
|
||||
# See https://github.com/sshnet/SSH.NET/pull/1462 and related links
|
||||
- name: Run Integration Tests Mono
|
||||
run: |
|
||||
sudo apt-get install ca-certificates gnupg
|
||||
sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
|
||||
echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install mono-devel
|
||||
dotnet test \
|
||||
-f net48 \
|
||||
--no-build \
|
||||
--logger "console;verbosity=normal" \
|
||||
--logger GitHubActions \
|
||||
-p:CollectCoverage=true \
|
||||
-p:CoverletOutputFormat=cobertura \
|
||||
-p:CoverletOutput=../../coverlet/linux_integration_test_net_48_coverage.xml \
|
||||
--filter "Name~Ecdh|Name~ECDsa|Name~Zlib|Name~Gcm" \
|
||||
test/Renci.SshNet.IntegrationTests/
|
||||
|
||||
- name: Archive Coverlet Results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Coverlet Results Linux
|
||||
path: coverlet
|
||||
|
||||
Windows:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # needed for Nerdbank.GitVersioning
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 9.0.x
|
||||
|
||||
- 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 net8.0 `
|
||||
--no-build `
|
||||
--logger "console;verbosity=normal" `
|
||||
--logger GitHubActions `
|
||||
-p:CollectCoverage=true `
|
||||
-p:CoverletOutputFormat=cobertura `
|
||||
-p:CoverletOutput=../../coverlet/windows_unit_test_net_8_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/
|
||||
|
||||
- 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 }}
|
||||
Reference in New Issue
Block a user