diff --git a/.github/workflows/coq-archlinux.yml b/.github/workflows/coq-archlinux.yml new file mode 100644 index 00000000000..095580ba0db --- /dev/null +++ b/.github/workflows/coq-archlinux.yml @@ -0,0 +1,192 @@ +name: CI (Coq, Arch Linux) + +on: + push: + branches: [ master ] + pull_request: + merge_group: + workflow_dispatch: + release: + types: [published] + schedule: + - cron: '0 0 1 * *' + +jobs: + build: + + runs-on: ubuntu-latest + name: archlinux + + concurrency: + group: ${{ github.workflow }}-archlinux-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: host build params + run: etc/ci/describe-system-config.sh + - name: Install Arch Linux + run: curl -L https://github.com/zaoqi/github-actions-archlinux/raw/master/install.sh | sh + - name: Install system dependencies + run: | + sudo pacman --noconfirm -Syu coq ocaml-findlib ocaml-zarith jq + - name: work around coq issue 15663 + run: | + ln -s /usr/lib/coq /usr/lib/ocaml/coq + ln -s /usr/lib/coq-core /usr/lib/ocaml/coq-core + ln -s /usr/lib/coqide-server /usr/lib/ocaml/coqide-server + - name: chroot build params + run: etc/ci/describe-system-config.sh + - name: make deps + run: etc/ci/github-actions-make.sh -j2 deps + - name: all-except-generated-and-js-of-ocaml + run: etc/ci/github-actions-make.sh -j2 all-except-generated-and-js-of-ocaml + - name: generated-files + run: etc/ci/github-actions-make.sh -j2 generated-files + - run: tar -czvf generated-files.tgz fiat-*/ + if: ${{ failure() }} + - name: upload generated files + uses: actions/upload-artifact@v4 + with: + name: generated-files-archlinux + path: generated-files.tgz + if: ${{ failure() }} + - name: install-standalone-unified-ocaml + run: etc/ci/github-actions-make.sh install-standalone-unified-ocaml BINDIR=dist + - name: standalone-js-of-ocaml + run: etc/ci/github-actions-make.sh -j2 standalone-js-of-ocaml + - name: install-standalone-js-of-ocaml + run: etc/ci/github-actions-make.sh install-standalone-js-of-ocaml + - name: upload standalone files + uses: actions/upload-artifact@v4 + with: + name: standalone-archlinux + path: dist/fiat_crypto + - name: upload standalone js files + uses: actions/upload-artifact@v4 + with: + name: standalone-html-archlinux + path: fiat-html + - name: upload OCaml files + uses: actions/upload-artifact@v4 + with: + name: ExtractionOCaml-archlinux + path: src/ExtractionOCaml + if: always () + - name: upload js_of_ocaml files + uses: actions/upload-artifact@v4 + with: + name: ExtractionJsOfOCaml-archlinux + path: src/ExtractionJsOfOCaml + if: always () + - name: standalone-haskell + run: etc/ci/github-actions-make.sh -j1 standalone-haskell GHCFLAGS='+RTS -M7G -RTS' + - name: upload Haskell files + uses: actions/upload-artifact@v4 + with: + name: ExtractionHaskell-archlinux + path: src/ExtractionHaskell + if: always () + - name: only-test-amd64-files-lite + run: etc/ci/github-actions-make.sh -j2 only-test-amd64-files-lite SLOWEST_FIRST=1 + - name: install + run: etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_COQSCRIPTS_INCLUDE=1 install install-standalone-ocaml + - name: install-without-bedrock2 + run: etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_BEDROCK2=1 install-without-bedrock2 install-standalone-ocaml + - name: install-dev + run: etc/ci/github-actions-make.sh EXTERNAL_REWRITER=1 EXTERNAL_COQPRIME=1 install install-standalone-ocaml + - name: display timing info + run: cat time-of-build-pretty.log + - name: display per-line timing info + run: etc/ci/github-actions-display-per-line-timing.sh + + test-standalone: + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v4 + - name: Download standalone archlinux + uses: actions/download-artifact@v4 + with: + name: standalone-archlinux + path: dist/ + - name: List files + run: find dist + - run: chmod +x dist/fiat_crypto + - name: Test files (host) + run: | + echo "::group::file fiat_crypto" + file dist/fiat_crypto + echo "::endgroup::" + echo "::group::ldd fiat_crypto" + ldd dist/fiat_crypto + echo "::endgroup::" + etc/ci/test-run-fiat-crypto.sh dist/fiat_crypto + - name: Install Arch Linux + run: curl -L https://github.com/zaoqi/github-actions-archlinux/raw/master/install.sh | sh + - name: Test files (container) + run: | + echo "::group::file fiat_crypto" + file dist/fiat_crypto + echo "::endgroup::" + echo "::group::ldd fiat_crypto" + ldd dist/fiat_crypto + echo "::endgroup::" + etc/ci/test-run-fiat-crypto.sh dist/fiat_crypto + + publish-standalone-dry-run: + runs-on: ubuntu-latest + needs: build +# permissions: +# contents: write # IMPORTANT: mandatory for making GitHub Releases + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for all tags and branches + tags: true # Fetch all tags as well, `fetch-depth: 0` might be sufficient depending on Git version + - name: Download standalone archlinux + uses: actions/download-artifact@v4 + with: + name: standalone-archlinux + path: dist/ + - name: List files + run: find dist + - name: Rename files + run: | + echo "::group::find arch" + arch="$(etc/ci/find-arch.sh dist/fiat_crypto "unknown")" + tag="$(git describe --tags HEAD)" + fname="Fiat-Cryptography_${tag}_Linux_archlinux_${arch}" + echo "$fname" + mv dist/fiat_crypto "dist/$fname" + find dist +# - name: Upload artifacts to GitHub Release +# env: +# GITHUB_TOKEN: ${{ github.token }} +# # Upload to GitHub Release using the `gh` CLI. +# # `dist/` contains the built packages +# run: >- +# gh release upload +# '${{ github.ref_name }}' dist/** +# --repo '${{ github.repository }}' +# if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name == 'release' }} + + archlinux-check-all: + runs-on: ubuntu-latest + needs: [build, test-standalone, publish-standalone-dry-run] + if: always() + steps: + - run: echo 'build passed' + if: ${{ needs.build.result == 'success' }} + - run: echo 'test-standalone passed' + if: ${{ needs.test-standalone.result == 'success' }} + - run: echo 'publish-standalone-dry-run passed' + if: ${{ needs.publish-standalone-dry-run.result == 'success' }} + - run: echo 'build failed' && false + if: ${{ needs.build.result != 'success' }} + - run: echo 'test-standalone failed' && false + if: ${{ needs.test-standalone.result != 'success' }} + - run: echo 'publish-standalone-dry-run failed' && false + if: ${{ needs.publish-standalone-dry-run.result != 'success' }}