Add Makefile to hyperfine benchmarks #5836
Workflow file for this run
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: Juvix Compiler CI | |
"on": | |
workflow_dispatch: | |
inputs: | |
ref: | |
description: the repository ref to build | |
required: true | |
default: main | |
hyperfine: | |
description: whether to run hyperfine benchmarks | |
required: false | |
default: false | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- ready_for_review | |
concurrency: | |
group: "${{ github.workflow }}-${{ github.head_ref || github.run_id }}" | |
cancel-in-progress: true | |
env: | |
SKIP: ormolu,format-juvix-files,typecheck-juvix-examples | |
VAMPIRREPO: anoma/vamp-ir | |
VAMPIRVERSION: v0.1.3 | |
jobs: | |
pre-commit: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.11" | |
- uses: pre-commit/[email protected] | |
ormolu: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: mrkkrp/ormolu-action@v11 | |
with: | |
version: 0.5.3.0 | |
extra-args: >- | |
--ghc-opt -XDerivingStrategies --ghc-opt -XImportQualifiedPost | |
--ghc-opt -XMultiParamTypeClasses --ghc-opt -XStandaloneDeriving | |
--ghc-opt -XTemplateHaskell --ghc-opt -XUnicodeSyntax | |
build-and-test-linux: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout our repository | |
uses: actions/checkout@v3 | |
with: | |
path: main | |
submodules: true | |
- name: Cache LLVM and Clang | |
id: cache-llvm | |
uses: actions/cache@v3 | |
with: | |
path: | | |
C:/Program Files/LLVM | |
./llvm | |
key: "${{ runner.os }}-llvm-13" | |
- name: Install LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: "13.0" | |
cached: "${{ steps.cache-llvm.outputs.cache-hit }}" | |
- name: Download and extract wasi-sysroot | |
run: > | |
curl | |
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-15/wasi-sysroot-15.0.tar.gz | |
-OL | |
tar xfv wasi-sysroot-15.0.tar.gz | |
- name: Set WASI_SYSROOT_PATH | |
run: | | |
echo "WASI_SYSROOT_PATH=$GITHUB_WORKSPACE/wasi-sysroot" >> $GITHUB_ENV | |
- name: Add ~/.local/bin to PATH | |
run: | | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
- name: Install the latest Wasmer version | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: wasmerio/wasmer | |
binaries-location: bin | |
chmod: 0755 | |
- name: Install libs | |
run: sudo apt install -y libncurses5 | |
- name: Install VampIR for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: ${{ env.VAMPIRREPO }} | |
platform: linux | |
tag: ${{ env.VAMPIRVERSION }} | |
chmod: 0755 | |
rename-to: vamp-ir | |
- name: Test VampIR | |
shell: bash | |
run: | | |
vamp-ir --version | |
- name: Make runtime | |
run: | | |
cd main | |
make runtime | |
# We use the options: | |
# - -fhide-source-paths | |
# - -fwrite-ide-info -hiedir=.hie | |
# in package.yaml. | |
# | |
# If a previously available .hie directory is missing then GHC will rebuild the whole project. | |
# with reason: HIE file is missing. So we need to cache it. | |
- name: Cache .hie | |
id: cache-hie | |
uses: actions/cache@v3 | |
with: | |
path: main/.hie | |
key: ${{ runner.os }}-stack-hie | |
- name: Stack setup | |
id: stack | |
uses: freckle/stack-action@v4 | |
with: | |
working-directory: main | |
test: false | |
- name: Install and test Juvix | |
id: test | |
if: ${{ success() }} | |
run: | | |
cd main | |
make install | |
- name: Upload Juvix binary as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: juvix-main-binary | |
path: | | |
$HOME/.local/bin/juvix | |
hyperfine-benchmarks: | |
runs-on: ubuntu-22.04 | |
needs: build-and-test-linux | |
steps: | |
- name: Checkout our repository | |
uses: actions/checkout@v3 | |
with: | |
path: main | |
submodules: true | |
- name: Download Juvix binary | |
uses: actions/download-artifact@v3 | |
with: | |
name: juvix-main-binary | |
- name: Test Juvix binary | |
run: | | |
juvix --version | |
# Install all the versions of Juvix we want to benchmark | |
- name: Install Juvix v0.4.3 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.4.3 | |
chmod: 0755 | |
rename-to: juvix-v0.4.3 | |
- name: Install Juvi v0.5.0 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.5.0 | |
chmod: 0755 | |
rename-to: juvix-v0.5.0 | |
- name: Install Juvix v0.5.1 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.5.1 | |
chmod: 0755 | |
rename-to: juvix-v0.5.1 | |
- name: Install Juvix v0.5.2 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.5.2 | |
chmod: 0755 | |
rename-to: juvix-v0.5.2 | |
- name: Install Juvix v0.5.3 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.5.3 | |
chmod: 0755 | |
rename-to: juvix-v0.5.3 | |
- name: Install Juvix v0.5.4 for testing | |
uses: jaxxstorm/[email protected] | |
with: | |
repo: anoma/juvix | |
platform: linux | |
tag: v0.5.4 | |
chmod: 0755 | |
rename-to: juvix-v0.5.4 | |
- name: Run Hyperfine benchmarks | |
run: | | |
make hyperfine-benchmarks | |
- name: Show Hyperfine benchmark results | |
run: | | |
cat main/bench/hyperfine/README.md | |
- name: Upload Hyperfine benchmark results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: hyperfine-benchmarks-results | |
path: | | |
main/bench/hyperfine/README.md | |
build-and-test-macos: | |
runs-on: macos-12 | |
steps: | |
- name: Checkout our repository | |
uses: actions/checkout@v3 | |
with: | |
path: main |