name: Build on: [ push, pull_request ] env: VELOPACK_GITHUB_TEST_TOKEN: ${{ secrets.VELOPACK_GITHUB_TEST_TOKEN }} jobs: build: strategy: matrix: os: [macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Print dotnet version run: dotnet --info - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ matrix.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - uses: actions/cache@v3 with: path: ~/.nuget/packages key: ${{ runner.os }}-test-nuget-${{ hashFiles('**/packages.lock.json') }} restore-keys: | ${{ runner.os }}-test-nuget- - name: Install cargo-llvm-cov uses: taiki-e/install-action@cargo-llvm-cov - name: Install NBGV run: dotnet tool install -g nbgv if: ${{ matrix.os == 'macos-latest' }} continue-on-error: true - name: Install .Net Coverage run: dotnet tool install -g dotnet-coverage - name: Set Windows Feature shell: pwsh run: Add-Content -Path $env:GITHUB_ENV -Value "rust_features=--features windows" if: ${{ matrix.os == 'windows-latest' }} - name: Build Rust working-directory: src/Rust run: cargo build --release ${{ env.rust_features }} - name: Test Rust working-directory: src/Rust run: cargo llvm-cov ${{ env.rust_features }} --cobertura --output-path ../../test/coverage.rust.${{ matrix.os }}.xml - name: Rename OSX Binary working-directory: src/Rust/target/release run: cp update updatemac if: ${{ matrix.os == 'macos-latest' }} - name: Build .NET run: dotnet build -c Release - name: Test .NET Velopack.Tests run: dotnet test --no-build -c Release -l "console;verbosity=detailed" test/Velopack.Tests/Velopack.Tests.csproj - name: Test .NET Velopack.Packaging.Tests run: dotnet test --no-build -c Release -l "console;verbosity=detailed" test/Velopack.Packaging.Tests/Velopack.Packaging.Tests.csproj - name: Test .NET Velopack.CommandLine.Tests run: dotnet test --no-build -c Release -l "console;verbosity=detailed" test/Velopack.CommandLine.Tests/Velopack.CommandLine.Tests.csproj - name: Upload Rust Artifacts uses: actions/upload-artifact@v4 with: name: rust-${{ matrix.os }} path: | src/Rust/target/release/updatemac src/Rust/target/release/*.exe - name: Upload Coverage to Codecov uses: codecov/codecov-action@v3 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: directory: ./test fail_ci_if_error: true package: runs-on: ubuntu-latest needs: [build] steps: - name: Print dotnet version run: dotnet --info - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/cache@v3 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} restore-keys: | ${{ runner.os }}-nuget- - name: Download Rust Windows uses: actions/download-artifact@v4 with: name: rust-macos-latest path: src/Rust/target/release - name: Download Rust OSX uses: actions/download-artifact@v4 with: name: rust-windows-latest path: src/Rust/target/release - name: Build .NET run: dotnet build -c Release /p:PackRustAssets=true - name: Upload Package Artifacts uses: actions/upload-artifact@v4 with: name: packages path: build/Release/*.nupkg - name: Publish to GitHub Packages shell: pwsh run: dotnet nuget push build/Release/*.nupkg -k ${{ secrets.GITHUB_TOKEN }} -s https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json --skip-duplicate