diff --git a/.github/workflows/coq-archlinux.yml b/.github/workflows/coq-archlinux.yml new file mode 100644 index 0000000000..0a3f3abc32 --- /dev/null +++ b/.github/workflows/coq-archlinux.yml @@ -0,0 +1,184 @@ +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 + container: archlinux + name: archlinux + + concurrency: + group: ${{ github.workflow }}-archlinux-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + + steps: + - name: Install system dependencies + run: | + pacman --noconfirm -Syu base-devel git make python3 which jq ghc ghc-static time diffutils coq ocaml-zarith --needed + - uses: actions/checkout@v4 + with: + submodules: recursive + - 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: Work around https://github.com/actions/checkout/issues/766 + run: git config --global --add safe.directory "*" + - 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 + container: archlinux + needs: build + steps: + - name: Install system dependencies + run: | + pacman --noconfirm -Syu git --needed + - 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 (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' }} diff --git a/etc/ci/describe-system-config.sh b/etc/ci/describe-system-config.sh index d295330569..bc93c92097 100755 --- a/etc/ci/describe-system-config.sh +++ b/etc/ci/describe-system-config.sh @@ -33,6 +33,7 @@ group cat /proc/cpuinfo group cat /proc/meminfo group apk info group dpkg -l +group pacman -Qs group ghc --version group ghc -v group gcc --version