Skip to content

[feature] Add extensible CI/CD pipeline with multi-OS support #7

[feature] Add extensible CI/CD pipeline with multi-OS support

[feature] Add extensible CI/CD pipeline with multi-OS support #7

name: Pipeline PR push
on:
pull_request:
env:
TEST_PROJECTS: |
tests/ByteSync.Client.IntegrationTests/ByteSync.Client.IntegrationTests.csproj
tests/ByteSync.Client.Tests/ByteSync.Client.Tests.csproj
tests/ByteSync.Common.Tests/ByteSync.Common.Tests.csproj
tests/ByteSync.Functions.IntegrationTests/ByteSync.Functions.IntegrationTests.csproj
tests/ByteSync.Functions.UnitTests/ByteSync.Functions.UnitTests.csproj
tests/ByteSync.ServerCommon.Tests/ByteSync.ServerCommon.Tests.csproj
test/ByteSync.TestsCommon/ByteSync.TestsCommon.csproj
jobs:
# === LINUX ===
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Create config file
shell: bash
run: echo '${{ secrets.CLIENT_LOCAL_SETTINGS_JSON }}' > src/ByteSync.Client/local.settings.json
- run: dotnet restore --locked-mode
- run: dotnet clean --verbosity quiet
- run: dotnet build --verbosity quiet /property:WarningLevel=0
test-linux:
needs: build-linux
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- run: dotnet restore --locked-mode
- name: Run Tests
run: |
for proj in $TEST_PROJECTS; do
dotnet test "$proj" --no-restore --no-build
done
shell: bash
- name: Upload Test Results
uses: actions/upload-artifact@v4
with:
name: PR-test-results-linux
path: ./TestResults/*.trx
- name: Show Failed Tests
if: failure()
run: echo "Some tests failed. Check uploaded artifacts for detailed logs."
# === macOS ===
build-mac:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Create config file
shell: bash
run: echo '${{ secrets.CLIENT_LOCAL_SETTINGS_JSON }}' > src/ByteSync.Client/local.settings.json
- run: dotnet restore --locked-mode
- run: dotnet clean --verbosity quiet
- run: dotnet build --verbosity quiet /property:WarningLevel=0
test-mac:
needs: build-mac
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- run: dotnet restore --locked-mode
- name: Run Tests
run: |
for proj in $TEST_PROJECTS; do
dotnet test "$proj" --no-restore --no-build
done
shell: bash
- name: Upload Test Results
uses: actions/upload-artifact@v4
with:
name: PR-test-results-mac
path: ./TestResults/*.trx
- name: Show Failed Tests
if: failure()
run: echo "Some tests failed. Check uploaded artifacts for detailed logs."
# === WINDOWS ===
build-win:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: C:\Users\runneradmin\.nuget\packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Create config file
shell: bash
run: echo '${{ secrets.CLIENT_LOCAL_SETTINGS_JSON }}' > src/ByteSync.Client/local.settings.json
- run: dotnet restore --locked-mode
- run: dotnet clean --verbosity quiet
- run: dotnet build --verbosity quiet /property:WarningLevel=0
test-win:
needs: build-win
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET 8 Environment
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- run: dotnet restore --locked-mode
- name: Run Tests
run: |
for proj in $TEST_PROJECTS; do
dotnet test "$proj" --no-restore --no-build
done
shell: bash
- name: Upload Test Results
uses: actions/upload-artifact@v4
with:
name: PR-test-results-win
path: ./TestResults/*.trx
- name: Show Failed Tests
if: failure()
run: echo "Some tests failed. Check uploaded artifacts for detailed logs."