diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index aeb98a89233..92e87e03594 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,25 +1,7 @@ name: Builds, tests & co on: - pull_request: - paths: - - 'src/**' - - '!src/tools/**' - - 'src_ext/**' - - 'dune' - - 'dune-project' - - '*.opam' - - 'Makefile*' - - 'configure*' - - '.github/scripts/**' - - '.github/workflows/main.yml' - - 'tests/**' - - '!tests/bench/**' - - 'shell/' push: - branches: - - 'master' - - '2.**' env: OPAMBSVERSION: 2.1.0 @@ -78,26 +60,6 @@ jobs: if: steps.archives.outputs.cache-hit != 'true' run: bash -exu .github/scripts/main/archives-cache.sh - Cygwin: - runs-on: windows-2019 - needs: Analyse - steps: - - name: Cygwin64 Cache - id: cygwin64 - uses: actions/cache@v4 - with: - path: D:\Cache\cygwin\x86_64-pc-cygwin - key: cygwin64-${{ needs.Analyse.outputs.cygwin }} - lookup-only: true - enableCrossOsArchive: true - - name: Checkout tree - if: steps.cygwin64.outputs.cache-hit != 'true' - uses: actions/checkout@v4 - - name: Create Cygwin64 cache - if: steps.cygwin64.outputs.cache-hit != 'true' - shell: cmd - run: .github\scripts\cygwin.cmd x86_64-pc-cygwin D:\Cache\cygwin create - #### # Build #### @@ -136,264 +98,6 @@ jobs: - name: Test (basic) run: bash -exu .github/scripts/main/test.sh - Build-Windows: - runs-on: windows-2019 - needs: [ Analyse, Cygwin ] - strategy: - matrix: - host: [ x86_64-pc-cygwin, i686-w64-mingw32, x86_64-w64-mingw32, i686-pc-windows, x86_64-pc-windows ] - build: [ x86_64-pc-cygwin ] - ocamlv: [ 4.14.1 ] - fail-fast: false - defaults: - run: - shell: D:\cygwin\bin\bash.exe {0} - steps: - - name: Configure LF checkout for Cygwin - if: endsWith(matrix.host, '-pc-cygwin') - shell: cmd - run: | - git config --system core.autocrlf false - git config --system core.eol lf - - name: Checkout tree - uses: actions/checkout@v4 - - name: Cygwin64 Cache - id: cygwin64 - if: matrix.build == 'x86_64-pc-cygwin' - uses: actions/cache@v4 - with: - path: D:\Cache\cygwin\x86_64-pc-cygwin - key: cygwin64-${{ needs.Analyse.outputs.cygwin }} - enableCrossOsArchive: true - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: D:\Cache\ocaml-local.tar - key: ${{ runner.os }}-${{ matrix.host }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - enableCrossOsArchive: true - - name: Unpack Cygwin - shell: cmd - run: .github\scripts\cygwin.cmd ${{ matrix.build }} D:\Cache\cygwin ${{ matrix.host }} - - name: Unpack OCaml ${{ matrix.ocamlv }} - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} ${{ matrix.host }} - - name: Build - run: bash -exu .github/scripts/main/main.sh ${{ matrix.host }} - - name: Test "static" binaries on Windows - if: endsWith(matrix.host, '-pc-cygwin') == false - run: ldd ./opam.exe | test "$(grep -v -F /cygdrive/c/Windows/)" = '' - - name: Upload opam binaries for Windows - if: endsWith(matrix.host, '-pc-windows') - uses: actions/upload-artifact@v4 - with: - name: opam-exe-${{ matrix.host }}-${{ matrix.ocamlv }}-${{ matrix.build }} - path: | - D:\Local\bin\opam.exe - D:\Local\bin\opam-installer.exe - D:\Local\bin\opam-putenv.exe - - name: Test (basic - Cygwin) - if: endsWith(matrix.host, '-pc-cygwin') - run: bash -exu .github/scripts/main/test.sh - - name: Test (basic - native Windows) - env: - OPAMROOT: D:\a\opam\opam\.opam - if: endsWith(matrix.host, '-pc-cygwin') == false - shell: cmd - run: | - set Path=D:\Cache\ocaml-local\bin;%Path% - if "${{ matrix.host }}" equ "x86_64-pc-windows" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" - if "${{ matrix.host }}" equ "i686-pc-windows" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat" - opam init --yes --bare default git+file://D:/opam-repository#${{ env.OPAM_TEST_REPO_SHA }} --no-git-location || exit /b 1 - opam switch --yes create default ocaml-system || exit /b 1 - opam env || exit /b 1 - opam install --yes lwt || exit /b 1 - opam list || exit /b 1 - opam config report || exit /b 1 - - name: Test (reftests) - run: bash -exu .github/scripts/main/reftests.sh ${{ matrix.host }} - - Build-macOS: - runs-on: macos-latest - needs: Analyse - strategy: - matrix: - ocamlv: [ 4.14.1 ] - fail-fast: true - steps: - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: Build - run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin - - name: Test (basic) - run: bash -exu .github/scripts/main/test.sh - -#### -# Opam tests -#### - Test-Linux: - runs-on: ubuntu-latest - needs: [ Analyse, Build-Linux ] - strategy: - matrix: - ocamlv: [ 4.14.1 ] - fail-fast: false - env: - OPAM_TEST: 1 - steps: - - name: Checkout tree - uses: actions/checkout@v4 - - name: Install bubblewrap - run: sudo apt install bubblewrap - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: opam bootstrap Cache - id: opam-bootstrap - uses: actions/cache@v4 - with: - path: | - ${{ env.OPAMBSROOT }}/** - ~/.cache/opam-local/bin/** - key: opam-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }} - - name: Create opam bootstrap cache - if: steps.opam-bootstrap.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/opam-bs-cache.sh - - name: opam-rt Cache - id: opam-rt - uses: actions/cache@v4 - with: - path: ~/.cache/opam-rt/** - key: ${{ runner.os }}-opam-rt-${{ matrix.ocamlv }} - - name: Build (and test) - run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu - - name: Test (opam-rt) - run: bash -exu .github/scripts/main/opam-rt.sh - - Test-macOS: - runs-on: macos-latest - needs: Analyse - strategy: - matrix: - ocamlv: [ 4.14.1 ] - fail-fast: false - env: - OPAM_TEST: 1 - steps: - - name: Install gnu coreutils - run: brew install coreutils gpatch - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: opam bootstrap Cache - id: opam-bootstrap - uses: actions/cache@v4 - with: - path: | - ${{ env.OPAMBSROOT }}/** - ~/.cache/opam-local/bin/** - key: opam-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }} - - name: Create opam bootstrap cache - if: steps.opam-bootstrap.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/opam-bs-cache.sh - - name: opam-rt Cache - id: opam-rt - uses: actions/cache@v4 - with: - path: ~/.cache/opam-rt/** - key: ${{ runner.os }}-opam-rt-${{ matrix.ocamlv }} - - name: Build (and test) - run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin - - name: Test (opam-rt) - run: bash -exu .github/scripts/main/opam-rt.sh - -#### -# Opam cold -#### - Cold-Linux: - runs-on: ubuntu-latest - needs: [ Analyse, Build-Linux ] - env: - OPAM_COLD: 1 - steps: - - name: Install bubblewrap - run: sudo apt install bubblewrap - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: Cold - run: | - make compiler - bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu - - name: Test (basic) - run: bash -exu .github/scripts/main/test.sh - #### # Compile doc #### @@ -447,211 +151,3 @@ jobs: BASE_REF_SHA: ${{ github.event.pull_request.base.sha }} PR_REF_SHA: ${{ github.event.pull_request.head.sha }} run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu - -#### -# Compile solver backends -#### - Solvers-Linux: - runs-on: ubuntu-latest - needs: [ Analyse, Build-Linux ] - strategy: - matrix: - solver: [ z3, 0install ] - ocamlv: [ 4.14.1 ] - fail-fast: false - env: - SOLVER: ${{ matrix.solver }} - OPAMBSROOT: ~/.cache/opam.${{ matrix.solver }}.cached - steps: - - name: Install bubblewrap - run: sudo apt install bubblewrap - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: opam bootstrap Cache - id: opam-bootstrap - uses: actions/cache@v4 - with: - path: | - ${{ env.OPAMBSROOT }}/** - ~/.cache/opam-local/bin/** - key: opam-${{ matrix.solver }}-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }} - - name: Create opam bootstrap cache - if: steps.opam-bootstrap.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/opam-bs-cache.sh - - name: Compile - run: bash -exu .github/scripts/main/solvers.sh - - Solvers-macOS: - runs-on: macos-latest - needs: [ Analyse, Build-macOS ] - strategy: - matrix: - solver: [ z3, 0install ] - ocamlv: [ 4.14.1 ] - fail-fast: false - env: - SOLVER: ${{ matrix.solver }} - OPAMBSROOT: ~/.cache/opam.${{ matrix.solver }}.cached - steps: - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: opam bootstrap Cache - id: opam-bootstrap - uses: actions/cache@v4 - with: - path: | - ${{ env.OPAMBSROOT }}/** - ~/.cache/opam-local/bin/** - key: opam-${{ matrix.solver }}-${{ runner.os }}-${{ env.OPAMBSVERSION }}-${{ matrix.ocamlv }}-${{ env.OPAM_REPO_SHA }}-${{ needs.Analyse.outputs.opam-bs-cache }} - - name: Create opam bootstrap cache - if: steps.opam-bootstrap.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/opam-bs-cache.sh - - name: Compile - run: bash -exu .github/scripts/main/solvers.sh - -#### -# Upgrade from 1.2 to current -#### - Upgrade-Linux: - runs-on: ubuntu-latest - needs: [ Analyse, Build-Linux ] - strategy: - matrix: - ocamlv: [ 4.14.1 ] - fail-fast: false - steps: - - name: Install bubblewrap - run: sudo apt install bubblewrap - - name: Checkout tree - uses: actions/checkout@v4 - - name: opam 1.2 root Cache - uses: actions/cache@v4 - with: - path: ${{ env.OPAM12CACHE }} - key: ${{ runner.os }}-opam1.2-root - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: Build - env: - OPAM_UPGRADE: 1 - run: bash -exu .github/scripts/main/main.sh x86_64-pc-linux-gnu - - name: Test (upgrade) - run: bash -exu .github/scripts/main/upgrade.sh - - Upgrade-macOS: - runs-on: macos-latest - needs: [ Analyse, Build-macOS ] - strategy: - matrix: - ocamlv: [ 4.14.1 ] - fail-fast: false - steps: - - name: Checkout tree - uses: actions/checkout@v4 - - name: opam 1.2 root Cache - uses: actions/cache@v4 - with: - path: ${{ env.OPAM12CACHE }} - key: ${{ runner.os }}-opam1.2-root - - name: OCaml ${{ matrix.ocamlv }} Cache - id: ocaml-cache - uses: actions/cache@v4 - with: - path: ~/.cache/ocaml-local/** - key: ${{ runner.os }}-ocaml-${{ matrix.ocamlv }}-${{ needs.Analyse.outputs.ocaml-cache }} - - name: Create OCaml ${{ matrix.ocamlv }} cache - if: steps.ocaml-cache.outputs.cache-hit != 'true' - run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }} - - name: Build - env: - OPAM_UPGRADE: 1 - run: bash -exu .github/scripts/main/main.sh x86_64-apple-darwin - - name: Test (upgrade) - run: bash -exu .github/scripts/main/upgrade.sh - -#### -# Around opam tests -#### - Hygiene: - runs-on: ubuntu-22.04 - needs: Analyse - steps: - - name: Install system's dune and ocaml packages - run: sudo apt install dune ocaml - - name: Checkout tree - uses: actions/checkout@v4 - - name: src_ext/archives and opam-repository Cache - id: archives - uses: actions/cache@v4 - with: - path: | - src_ext/archives - ~/opam-repository - key: ${{ needs.Analyse.outputs.archives }} - enableCrossOsArchive: true - - name: Get changed files - id: files - uses: Ana06/get-changed-files@v2.2.0 - - name: Changed files list - run: | - for changed_file in ${{ steps.files.outputs.modified }}; do - echo "M ${changed_file}." - done - for changed_file in ${{ steps.files.outputs.removed }}; do - echo "D ${changed_file}." - done - for changed_file in ${{ steps.files.outputs.added }}; do - echo "A ${changed_file}." - done - for changed_file in ${{ steps.files.outputs.renamed }}; do - echo "AD ${changed_file}." - done - - name: Hygiene - env: - BASE_REF_SHA: ${{ github.event.pull_request.base.sha }} - PR_REF_SHA: ${{ github.event.pull_request.head.sha }} - if: contains(steps.files.outputs.modified, 'configure.ac') || contains(steps.files.outputs.all, 'src_ext') || contains(steps.files.outputs.all, '.github/workflows') - run: bash -exu .github/scripts/main/hygiene.sh