name: QPDF Build env: QTEST_COLOR: 1 on: push: branches: - main - build - build/* paths-ignore: - 'ChangeLog' - 'README*' - 'TODO*' pull_request: schedule: # Building regularly with cron makes it safe for us to use # *-latest with runs-on. If a new version of tools or agents comes # out, we'll find out fast if our builds break on it because we # have reliable testing. - cron: '12 4 * * 5' jobs: Prebuild: # Run steps that are needed by the Windows build but are easier to # build on Linux. Also create the documentation distribution. runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 'Run pre-build steps' run: build-scripts/prebuild ${{ secrets.GITHUB_TOKEN }} - name: 'Upload documentation for later build steps' uses: actions/upload-artifact@v4 with: name: doc path: doc.zip - name: 'Upload external libs' uses: actions/upload-artifact@v4 with: name: external-libs path: external-libs-dist - name: 'Upload doc distribution' uses: actions/upload-artifact@v4 with: name: distribution-prebuild path: distribution Linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 'Generate, build, and test' run: build-scripts/build-linux - name: Upload distribution uses: actions/upload-artifact@v4 with: name: distribution-linux path: distribution Windows: runs-on: windows-latest needs: Prebuild strategy: fail-fast: false max-parallel: 4 matrix: tool: [msvc, mingw] wordsize: [64, 32] steps: - name: 'Disable git autocrlf' shell: bash run: git config --global core.autocrlf input - uses: actions/checkout@v4 - name: 'Download documentation' uses: actions/download-artifact@v4 with: name: doc path: . - name: 'Download external libs' uses: actions/download-artifact@v4 with: name: external-libs path: . - name: 'Build, test, generate binary distributions' shell: cmd run: build-scripts/build-windows.bat ${{ matrix.wordsize }} ${{ matrix.tool }} - name: 'Upload binary distributions' uses: actions/upload-artifact@v4 with: name: distribution-windows-${{ matrix.wordsize }}-${{ matrix.tool }} path: distribution macOS: runs-on: macos-latest needs: Prebuild steps: - uses: actions/checkout@v4 - name: 'Mac build and test' run: build-scripts/build-mac AppImage: runs-on: ubuntu-latest needs: Prebuild steps: - uses: actions/checkout@v4 - name: 'Build AppImage' run: build-scripts/build-appimage - name: 'Upload AppImage' uses: actions/upload-artifact@v4 with: name: distribution-appimage path: distribution pikepdf: strategy: fail-fast: false max-parallel: 1 matrix: future: ['', 'future'] runs-on: ubuntu-latest needs: Prebuild steps: - uses: actions/checkout@v4 - name: 'pikepdf' run: build-scripts/test-pikepdf ${{ matrix.future }} Sanitizers: runs-on: ubuntu-latest needs: Prebuild steps: - uses: actions/checkout@v4 - name: 'Sanitizer Tests' run: build-scripts/test-sanitizers CodeCov: runs-on: ubuntu-latest needs: Prebuild steps: - uses: actions/checkout@v4 - name: 'Code Coverage' run: build-scripts/test-coverage - id: set_branch run: | if [ "${{ github.event_name }}" = "push" ]; then echo "override_branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT else echo "override_branch=" >> $GITHUB_OUTPUT fi - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} override_branch: ${{ steps.set_branch.outputs.override_branch }} QuickJobs: runs-on: ubuntu-latest needs: Prebuild strategy: fail-fast: false max-parallel: 3 matrix: script: - build-fuzzer - pkg-test - build-linux32 - test-alt-zlib - test-unsigned-char - test-c++-next steps: - uses: actions/checkout@v4 - name: ${{ matrix.script }} run: build-scripts/${{ matrix.script }} MergeArtifacts: runs-on: ubuntu-latest needs: - Prebuild - Linux - Windows - AppImage steps: - name: Merge Artifacts uses: actions/upload-artifact/merge@v4 with: name: distribution pattern: distribution-*