diff --git a/.github/workflows/coq-macos.yml b/.github/workflows/coq-macos.yml index fc22cbcbb6e..01f89e239b9 100644 --- a/.github/workflows/coq-macos.yml +++ b/.github/workflows/coq-macos.yml @@ -14,10 +14,20 @@ on: jobs: build: - runs-on: macOS-11 + strategy: + fail-fast: false + matrix: + # macOS 11, 12, 13 are x86_64; macOS 14 is arm64 + include: + - os: { name: 'macOS 11', arch: 'x86_64', runs-on: 'macos-11'} # move to macOS-12 when 11 is removed + ocaml-compiler: '4.11.1' + - os: { name: 'macOS 14', arch: 'arm64' , runs-on: 'macos-14'} + ocaml-compiler: '4.14.2' + + runs-on: ${{ matrix.os.runs-on }} concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + group: ${{ github.workflow }}-${{ matrix.os.runs-on }}-${{ matrix.ocaml-compiler }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true env: @@ -28,7 +38,7 @@ jobs: OPAMYES: "true" OPAMCONFIRMLEVEL: "unsafe-yes" - name: macos + name: ${{ matrix.os.name }} (${{ matrix.os.arch }}) steps: - uses: actions/checkout@v4 @@ -37,7 +47,7 @@ jobs: - name: Set up OCaml uses: ocaml/setup-ocaml@v2 with: - ocaml-compiler: 4.11.1 + ocaml-compiler: ${{ matrix.ocaml-compiler }} - name: Install system dependencies run: brew install gnu-time gnu-sed coreutils @@ -60,22 +70,22 @@ jobs: - name: upload OCaml files uses: actions/upload-artifact@v3 with: - name: ExtractionOCaml + name: ExtractionOCaml-${{ matrix.os.arch }} path: src/ExtractionOCaml - name: upload js_of_ocaml files uses: actions/upload-artifact@v3 with: - name: ExtractionJsOfOCaml + name: ExtractionJsOfOCaml-${{ matrix.os.arch }} path: src/ExtractionJsOfOCaml - name: upload standalone files uses: actions/upload-artifact@v3 with: - name: standalone-macos + name: standalone-macos-${{ matrix.os.arch }} path: dist/fiat_crypto - name: upload standalone js files uses: actions/upload-artifact@v3 with: - name: standalone-html-macos + name: standalone-html-macos-${{ matrix.os.arch }} path: fiat-html - name: install run: opam exec -- etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_COQSCRIPTS_INCLUDE=1 install install-standalone-ocaml @@ -90,7 +100,7 @@ jobs: # - name: upload timing and .vo info # uses: actions/upload-artifact@v3 # with: -# name: build-outputs +# name: build-outputs-${{ matrix.os.arch }} # path: . # if: always () # - name: validate @@ -99,35 +109,64 @@ jobs: # make TIMED=1 validate COQCHKFLAGS="-o ${COQCHKEXTRAFLAGS}" # if: github.event_name != 'pull_request' - test-standalone: + combine-standalone: runs-on: macos-latest needs: build steps: - uses: actions/checkout@v4 - - name: Download standalone MacOS + - name: Download standalone MacOS x86_64 uses: actions/download-artifact@v3 + with: + name: standalone-macos-x86_64 + path: dist-x86_64/ + - name: Download standalone MacOS arm64 + uses: actions/download-artifact@v3 + with: + name: standalone-macos-arm64 + path: dist-arm64/ + - name: Create universal binary + run: | + mkdir -p dist + lipo -create -output dist/fiat_crypto dist-x86_64/fiat_crypto dist-arm64/fiat_crypto + - name: upload universal binary + uses: actions/upload-artifact@v3 with: name: standalone-macos + path: dist/fiat_crypto + + test-standalone: + strategy: + fail-fast: false + matrix: + arch: ['', '-x86_64', '-arm64'] + runs-on: macos-latest + needs: [build, combine-standalone] + steps: + - uses: actions/checkout@v4 + - name: Download standalone MacOS${{ matrix.arc }} + uses: actions/download-artifact@v3 + with: + name: standalone-macos${{ matrix.arc }} path: dist/ - name: List files run: find dist - run: chmod +x dist/fiat_crypto - name: Test files run: | - echo "::group::file fiat_crypto" + echo "::group::file fiat_crypto (${{ matrix.arch }})" file dist/fiat_crypto echo "::endgroup::" - echo "::group::otool -L fiat_crypto" + echo "::group::otool -L fiat_crypto (${{ matrix.arch }})" otool -L dist/fiat_crypto echo "::endgroup::" - echo "::group::lipo -info fiat_crypto" + echo "::group::lipo -info fiat_crypto (${{ matrix.arch }})" lipo -info dist/fiat_crypto echo "::endgroup::" etc/ci/test-run-fiat-crypto.sh dist/fiat_crypto publish-standalone: runs-on: ubuntu-latest - needs: build + needs: combine-standalone permissions: contents: write # IMPORTANT: mandatory for making GitHub Releases steps: @@ -147,6 +186,8 @@ jobs: arch="$(etc/ci/find-arch.sh dist/fiat_crypto)" tag="$(git describe --tags HEAD)" fname="Fiat-Cryptography_${tag}_macOS_${arch}" + printf '::warning::%s (%s)\n' "$fname" "$(file dist/fiat_crypto 2>&1)" + exit 1 echo "$fname" mv dist/fiat_crypto "dist/$fname" find dist