name: CI on: push: branches: [ main, develop ] pull_request: branches: [ main ] workflow_dispatch: env: DOTNET_VERSION: '9.0.x' DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true jobs: build-and-test: name: Build and Test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] fail-fast: false steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Test run: dotnet test --configuration Release --no-build --verbosity normal --logger trx --results-directory TestResults - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: test-results-${{ matrix.os }} path: TestResults code-coverage: name: Code Coverage runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --configuration Debug --no-restore - name: Test with coverage run: dotnet test --configuration Debug --no-build --collect:"XPlat Code Coverage" --results-directory ./coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: directory: ./coverage fail_ci_if_error: false verbose: true package: name: Create NuGet Package runs-on: ubuntu-latest needs: [build-and-test] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Pack run: dotnet pack IronJava.Core/IronJava.Core.csproj --configuration Release --no-build --output nupkgs - name: Upload NuGet package uses: actions/upload-artifact@v4 with: name: nuget-packages path: nupkgs/*.nupkg publish: name: Publish to NuGet runs-on: ubuntu-latest needs: [package] if: github.ref == 'refs/heads/main' && github.event_name == 'push' steps: - name: Download NuGet package uses: actions/download-artifact@v4 with: name: nuget-packages path: nupkgs - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Publish to NuGet run: | if [ -z "$NUGET_API_KEY" ]; then echo "Error: NUGET_API_KEY is not set" exit 1 fi for package in nupkgs/*.nupkg; do echo "Publishing $package" dotnet nuget push "$package" --api-key "$NUGET_API_KEY" --source "https://api.nuget.org/v3/index.json" --skip-duplicate done env: NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}