Add CI shield for opam package to README (#1972) #4643
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI (Coq, Windows) | |
# Note that we must split up each command into a separate step for Windows, because otherwise we don't get error code | |
# See also https://github.com/avsm/setup-ocaml/issues/72 | |
on: | |
push: | |
branches: [ master , sp2019latest , v8.6 , v8.8 , v8.10 ] | |
pull_request: | |
merge_group: | |
workflow_dispatch: | |
release: | |
types: [published] | |
schedule: | |
- cron: '0 0 1 * *' | |
jobs: | |
build: | |
runs-on: windows-latest | |
name: windows | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
NJOBS: "2" | |
COQ_VERSION: "8.18.0" # minimal major version required for bedrock2 components | |
COQEXTRAFLAGS: "-async-proofs-j 1" | |
COQCHKEXTRAFLAGS: "" | |
OPAMYES: "true" | |
OPAMCONFIRMLEVEL: "unsafe-yes" | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.x | |
- name: Set up OCaml | |
uses: ocaml/setup-ocaml@v3 | |
with: | |
ocaml-compiler: 4.13.1 | |
- run: opam pin add ocamlfind 'git+https://github.com/ocaml/ocamlfind.git#master' | |
- run: opam pin add --kind=version coq ${{ env.COQ_VERSION }} | |
- run: opam install js_of_ocaml | |
- run: opam install conf-time conf-gcc | |
- name: Work around https://github.com/actions/checkout/issues/766 | |
run: opam exec -- bash -l -c 'git config --global --add safe.directory "*"' | |
- name: echo build params | |
run: .\etc\ci\describe-system-config-win.ps1 | |
- name: deps | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j${{ env.NJOBS }} CC=gcc deps | |
- name: standalone-ocaml | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j${{ env.NJOBS }} standalone-ocaml | |
- name: install-standalone-unified-ocaml | |
run: opam exec -- bash etc/ci/github-actions-make.sh install-standalone-unified-ocaml BINDIR=dist | |
- name: coq | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j1 coq | |
- name: all-except-generated-and-js-of-ocaml | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j1 all-except-generated-and-js-of-ocaml | |
- name: standalone-js-of-ocaml | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j1 standalone-js-of-ocaml | |
- name: install-standalone-js-of-ocaml | |
run: opam exec -- bash etc/ci/github-actions-make.sh install-standalone-js-of-ocaml | |
- name: c-files lite-generated-files | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j${{ env.NJOBS }} c-files lite-generated-files | |
- name: only-test-amd64-files-lite | |
run: opam exec -- bash etc/ci/github-actions-make.sh -j${{ env.NJOBS }} only-test-amd64-files-lite SLOWEST_FIRST=1 | |
- name: upload OCaml files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ExtractionOCaml | |
path: src/ExtractionOCaml | |
- name: upload js_of_ocaml files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ExtractionJsOfOCaml | |
path: src/ExtractionJsOfOCaml | |
- name: upload standalone files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: standalone-windows | |
path: dist/fiat_crypto.exe | |
- name: upload standalone js files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: standalone-html-windows | |
path: fiat-html | |
- name: install | |
run: opam exec -- bash etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_COQSCRIPTS_INCLUDE=1 install install-standalone-ocaml | |
- name: install-without-bedrock2 | |
run: opam exec -- bash etc/ci/github-actions-make.sh EXTERNAL_DEPENDENCIES=1 SKIP_BEDROCK2=1 install-without-bedrock2 install-standalone-ocaml | |
- name: install-dev | |
run: opam exec -- bash etc/ci/github-actions-make.sh EXTERNAL_REWRITER=1 EXTERNAL_COQPRIME=1 install install-standalone-ocaml | |
- name: display timing info | |
run: type time-of-build-pretty.log | |
shell: cmd | |
- name: display per-line timing info | |
run: etc/ci/github-actions-display-per-line-timing.sh | |
shell: bash | |
# - name: upload timing and .vo info | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: build-outputs | |
# path: . | |
# if: always () | |
# - name: validate | |
# run: | | |
# %CYGWIN_ROOT%\bin\bash.exe -l -c 'cd "%cd%"; opam exec -- make TIMED=1 validate COQCHKFLAGS="-o ${COQCHKEXTRAFLAGS}"' | |
# shell: cmd | |
# if: github.event_name != 'pull_request' | |
test-standalone: | |
runs-on: windows-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download standalone Windows | |
uses: actions/download-artifact@v4 | |
with: | |
name: standalone-windows | |
path: dist/ | |
- name: List files | |
run: Get-ChildItem dist -Name | |
- run: .\dist\fiat_crypto.exe -h | |
- run: .\dist\fiat_crypto.exe word-by-word-montgomery -h | |
- run: .\dist\fiat_crypto.exe unsaturated-solinas -h | |
- run: .\dist\fiat_crypto.exe saturated-solinas -h | |
- run: .\dist\fiat_crypto.exe base-conversion -h | |
- name: Set up MSVC Environment for dumpbin | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Check Executable Dependencies | |
run: | | |
Write-Host "::group::File Info - fiat_crypto" | |
Get-Item .\dist\fiat_crypto.exe | Format-List | |
dumpbin.exe /headers .\dist\fiat_crypto.exe | |
Write-Host "::endgroup::" | |
Write-Host "::group::DLL Dependencies - fiat_crypto" | |
dumpbin.exe /dependents .\dist\fiat_crypto.exe | |
Write-Host "::endgroup::" | |
publish-standalone: | |
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 Windows | |
uses: actions/download-artifact@v4 | |
with: | |
name: standalone-windows | |
path: dist/ | |
- name: List files | |
run: find dist | |
- name: Rename files | |
run: | | |
arch="$(etc/ci/find-arch.sh dist/fiat_crypto.exe "x86_64")" | |
tag="$(git describe --tags HEAD)" | |
fname="Fiat-Cryptography_${tag}_Windows_${arch}.exe" | |
echo "$fname" | |
mv dist/fiat_crypto.exe "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' }} | |
windows-check-all: | |
runs-on: ubuntu-latest | |
needs: [build, test-standalone, publish-standalone] | |
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 passed' | |
if: ${{ needs.publish-standalone.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 failed' && false | |
if: ${{ needs.publish-standalone.result != 'success' }} |