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@v2 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 XARCH=x64 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@v2 with: name: compiler path: /tmp/sources.tar.zstd retention-days: 1 # Full testsuite run, and other sanity checks normal: needs: build runs-on: ubuntu-latest steps: - name: Download Artifact uses: actions/download-artifact@v2 with: name: compiler - name: Unpack Artifact run: | tar --zstd -xf sources.tar.zstd rm -f sources.tar.zstd - name: Packages run: | sudo apt-get update -y && sudo apt-get install -y texlive-latex-extra texlive-fonts-recommended hevea sass - name: Run the testsuite run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh test - name: Build API Documentation run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh api-docs - name: Install run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh install - name: Build the manual run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh manual if: needs.build.outputs.manual_changed == 'true' - name: Other checks 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@v2 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 XARCH=x64 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: i386/ubuntu:18.04 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 XARCH=i386 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 # "extra" testsuite runs, reusing the previously built compiler tree. # debug: running the full testsuite with the # debug runtime and minor heap verification. # debug-s4086: select testsuite run with the debug runtime and a small # minor heap. extra: needs: build runs-on: ubuntu-latest strategy: matrix: id: - debug - debug-s4096 steps: - name: Download artifact uses: actions/download-artifact@v2 with: name: compiler - name: Unpack Artifact run: | tar --zstd -xf sources.tar.zstd rm -f sources.tar.zstd - 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