name: Build, Test And Create Nuget Package permissions: {} on: push: branches: [ main ] workflow_dispatch: jobs: main: name: ${{ matrix.runtime.name }} runs-on: ${{ matrix.runtime.runs-on }} container: ${{ matrix.runtime.container }} timeout-minutes: 20 strategy: fail-fast: false matrix: runtime: - name: win-x64 runs-on: windows-latest-xlarge # - name: win-x86 # runs-on: windows-latest-xlarge - name: linux-x64 runs-on: ubuntu-latest-xlarge container: ubuntu:24.04 - name: linux-arm64 runs-on: ubuntu-latest-xlarge-arm64 container: ubuntu:24.04 - name: linux-musl-x64 runs-on: ubuntu-latest-xlarge container: alpine:3.20 - name: osx-x64 runs-on: macos-latest-large - name: osx-arm64 runs-on: macos-latest-xlarge steps: - name: Checkout sources uses: actions/checkout@v4 - name: Install Build Tools (Linux) if: matrix.runtime.name == 'linux-x64' || matrix.runtime.name == 'linux-arm64' shell: sh run: | apt update --yes apt upgrade --yes # required by actions/setup-dotnet apt install bash wget --yes # required by conformance testing tools: veraPDF and mustang apt install unzip default-jre --yes java -version - name: Install Build Tools (Alpine) if: matrix.runtime.name == 'linux-musl-x64' shell: sh run: | apk update apk upgrade # required by actions/setup-dotnet apk add bash wget # required by dotnet build command apk add libstdc++ libgcc - name: Setup dotnet uses: actions/setup-dotnet@v5 with: dotnet-version: '10.0.x' - name: Install veraPDF - PDF conformance testing tool if: matrix.runtime.name == 'linux-x64' run: | mkdir -p ~/verapdf cd ~/verapdf wget -q https://software.verapdf.org/rel/verapdf-installer.zip unzip -q verapdf-installer.zip rm verapdf-installer.zip mv verapdf* verapdf cd verapdf printf "1\n\nO\n1\nY\nY\nN\n1\nY\n\n" | ./verapdf-install alias verapdf='/root/verapdf/verapdf' verapdf --version - name: Install mustang - ZUGFeRD conformance testing tool if: matrix.runtime.name == 'linux-x64' run: | mkdir -p /root/mustang cd /root/mustang wget https://repo1.maven.org/maven2/org/mustangproject/Mustang-CLI/2.20.0/Mustang-CLI-2.20.0.jar -O mustang-cli.jar alias mustang='java -jar /root/mustang/mustang-cli.jar' mustang --help - name: Build and test solution shell: bash working-directory: ./Source env: VERAPDF_EXECUTABLE_PATH: '/root/verapdf/verapdf' MUSTANG_EXECUTABLE_PATH: '/root/mustang/mustang-cli.jar' DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1 run: | dotnet build --configuration Release --property WarningLevel=0 dotnet test QuestPDF.UnitTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 dotnet test QuestPDF.LayoutTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 dotnet test QuestPDF.VisualTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 dotnet test QuestPDF.DocumentationExamples --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 dotnet test QuestPDF.ReportSample --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 dotnet test QuestPDF.ZUGFeRD --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 if [ "${{ matrix.runtime.name }}" == "linux-x64" ]; then dotnet test QuestPDF.ConformanceTests --configuration Release --runtime ${{ matrix.runtime.name }} --framework net10.0 fi dotnet build QuestPDF/QuestPDF.csproj --configuration Release --property WarningLevel=0 --property BUILD_PACKAGE=true TEST_EXECUTION_PATH='QuestPDF.ReportSample/bin/Release/net10.0/${{ matrix.runtime.name }}' mkdir -p testOutput/${{ matrix.runtime.name }} cp -r $TEST_EXECUTION_PATH/report.pdf testOutput/${{ matrix.runtime.name }} - name: Upload test results uses: actions/upload-artifact@v4 with: name: questpdf-test-results-${{ matrix.runtime.name }} path: | **/*.pdf - name: Upload nuget artifacts uses: actions/upload-artifact@v4 if: ${{ matrix.runtime.name == 'win-x64' }} with: name: questpdf-nuget-package path: | **/*.nupkg **/*.snupkg !.nuget merge: runs-on: ubuntu-latest needs: main steps: - name: Merge Artifacts uses: actions/upload-artifact/merge@v4 with: name: questpdf-test-results pattern: questpdf-test-results-* delete-merged: true