name: Build on: push: branches: - '4.**' - '5.**' - 'trunk' pull_request: # Restrict the GITHUB_TOKEN permissions: {} # List of test directories for the debug-s4096 and linux-O0 jobs. # These directories are selected because of their tendencies to reach corner # cases in the runtime system. env: PARALLEL_TESTS: parallel callback gc-roots weak-ephe-final # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency # Concurrent workflows are grouped by the PR or branch that triggered them # (github.ref) and the name of the workflow (github.workflow). The # 'cancel-in-progress' option then make sure that only one workflow is running # at a time. This doesn't prevent new jobs from running, rather it cancels # already running jobs before scheduling new jobs. concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name == 'pull_request' || github.sha }} cancel-in-progress: true jobs: # This job will do the initial build of the compiler (on linux), with flambda on. # We then upload the compiler tree as a build artifact to enable re-use in # subsequent jobs. build: runs-on: 'ubuntu-latest' outputs: manual_changed: ${{ steps.manual.outputs.manual_changed }} steps: - name: Checkout uses: actions/checkout@v3 with: persist-credentials: false - name: Check for manual changes id: manual run: >- tools/ci/actions/check-manual-modified.sh '${{ github.ref }}' '${{ github.event_name }}' '${{ github.event.pull_request.base.ref }}' '${{ github.event.pull_request.base.sha }}' '${{ github.event.pull_request.head.ref }}' '${{ github.event.pull_request.head.sha }}' '${{ github.event.ref }}' '${{ github.event.before }}' '${{ github.event.ref }}' '${{ github.event.after }}' '${{ github.event.repository.full_name }}' - name: Configure tree run: | MAKE_ARG=-j CONFIG_ARG='--enable-flambda --enable-cmm-invariants --enable-dependency-generation --enable-native-toplevel' OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh configure - name: Build run: | MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build - name: Prepare Artifact run: tar --zstd -cf /tmp/sources.tar.zstd . - name: Upload Artifact uses: actions/upload-artifact@v3 with: name: compiler path: /tmp/sources.tar.zstd retention-days: 1 # Full testsuite run, and other sanity checks # "extra" testsuite runs, reusing the previously built compiler tree. # debug: running the full testsuite with the # debug runtime and minor heap verification. # debug-s4096: select testsuite run with the debug runtime and a small # minor heap. normal: name: ${{ matrix.name }} needs: build runs-on: ubuntu-latest strategy: matrix: include: - id: normal name: normal dependencies: texlive-latex-extra texlive-fonts-recommended hevea sass - id: debug name: extra (debug) - id: debug-s4096 name: extra (debug-s4096) steps: - name: Download Artifact uses: actions/download-artifact@v3 with: name: compiler - name: Unpack Artifact run: | tar --zstd -xf sources.tar.zstd rm -f sources.tar.zstd - name: Packages if: matrix.dependencies != '' run: | sudo apt-get update -y && sudo apt-get install -y ${{ matrix.dependencies }} - name: Run the testsuite if: matrix.id == 'normal' run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh test - name: Run the testsuite (debug runtime) if: matrix.id == 'debug' env: OCAMLRUNPARAM: v=0,V=1 USE_RUNTIME: d run: | bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test" - name: Run the testsuite (s=4096, debug runtime) if: matrix.id == 'debug-s4096' env: OCAMLRUNPARAM: s=4096,v=0 USE_RUNTIME: d run: | for dir in $PARALLEL_TESTS; do \ bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test_prefix $dir"; \ done - name: Build API Documentation if: matrix.id == 'normal' run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh api-docs - name: Install if: matrix.id == 'normal' run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh install - name: Build the manual if: matrix.id == 'normal' && needs.build.outputs.manual_changed == 'true' run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh manual - name: Other checks if: matrix.id == 'normal' run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh other-checks # MacOS build+testsuite run, and Linux O0 run. others: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: matrix: include: - name: linux-O0 os: ubuntu-latest config_arg: CFLAGS='-O0' - name: macos os: macos-latest steps: - name: Checkout uses: actions/checkout@v3 with: persist-credentials: false - name: OS Dependencies if: runner.os == 'MacOS' run: brew install parallel - name: configure tree run: | CONFIG_ARG='${{ matrix.config_arg }}' MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh configure - name: Build run: | MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build - name: Run the testsuite if: ${{ matrix.name != 'linux-O0' }} run: | bash -c 'SHOW_TIMINGS=1 tools/ci/actions/runner.sh test' - name: Run the testsuite (linux-O0) if: ${{ matrix.name == 'linux-O0' }} env: OCAMLRUNPARAM: v=0,V=1 USE_RUNTIME: d run: | for dir in $PARALLEL_TESTS; do \ bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test_prefix $dir"; \ done i386: runs-on: ubuntu-latest container: image: debian:12 options: --platform linux/i386 --user root steps: - name: OS Dependencies run: | apt-get update apt-get install -y git gcc make parallel - name: Checkout # See https://github.com/actions/checkout/issues/334 uses: actions/checkout@v1 - name: configure tree run: | MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh configure - name: Build run: | MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build - name: Run the testsuite run: | bash -xe tools/ci/actions/runner.sh test