name: Build Squirrel on: [ push, pull_request ] jobs: build: strategy: matrix: os: [macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Print dotnet version run: dotnet --info - 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' }} - 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: mv update updatemac if: ${{ matrix.os == 'macos-latest' }} - name: Test .NET run: dotnet test -c Release -l "console;verbosity=detailed" - name: Upload Rust Artifacts uses: actions/upload-artifact@v4 with: name: rust path: | src/Rust/target/release/updatemac src/Rust/target/release/*.exe - name: Upload Coverage uses: actions/upload-artifact@v4 with: name: coverage path: test/coverage*.xml package: runs-on: ubuntu-latest needs: [build] steps: - 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: Install .NET 6 uses: actions/setup-dotnet@v4 with: dotnet-version: 6.0.x - name: Install .NET 8 uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Print dotnet version run: dotnet --info - name: Download Rust Artifacts uses: actions/download-artifact@v4 with: name: rust path: src/Rust/target/release - name: Download Coverage Artifacts uses: actions/download-artifact@v4 with: name: coverage path: ./coverage - 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: Upload Coverage to Codecov uses: codecov/codecov-action@v3 env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} with: directory: ./coverage fail_ci_if_error: true - 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