mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
moved benchmarks to nix
This commit is contained in:
parent
d77d8f251d
commit
54ad5d3416
20 changed files with 60 additions and 108 deletions
|
@ -1,4 +0,0 @@
|
||||||
AUTHORS
|
|
||||||
nix
|
|
||||||
.envrc
|
|
||||||
.gitignore
|
|
11
.github/workflows/benchmarks.yml
vendored
11
.github/workflows/benchmarks.yml
vendored
|
@ -23,25 +23,24 @@ jobs:
|
||||||
ref: "main"
|
ref: "main"
|
||||||
clean: "true"
|
clean: "true"
|
||||||
|
|
||||||
- name: Earthly version
|
- run: alias nix=/home/big-ci-user/.nix-profile/bin/nix
|
||||||
run: earthly --version
|
|
||||||
|
|
||||||
- name: on main; prepare a self-contained benchmark folder
|
- name: on main; prepare a self-contained benchmark folder
|
||||||
run: ./ci/safe-earthly.sh --build-arg BENCH_SUFFIX=main +prep-bench-folder
|
run: nix develop -c ./ci/benchmarks/prep_folder.sh main
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
clean: "false" # we want to keep the benchmark folder
|
clean: "false" # we want to keep the benchmark folder
|
||||||
|
|
||||||
- name: on current branch; prepare a self-contained benchmark folder
|
- name: on current branch; prepare a self-contained benchmark folder
|
||||||
run: ./ci/safe-earthly.sh +prep-bench-folder
|
run: nix develop -c ./ci/benchmarks/prep_folder.sh branch
|
||||||
|
|
||||||
- uses: actions-rs/toolchain@v1
|
- uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: build benchmark runner
|
- name: build benchmark runner
|
||||||
run: cd ci/bench-runner && cargo build --release && cd ../..
|
run: nix develop -c `cd ci/bench-runner && cargo build --release && cd ../..`
|
||||||
|
|
||||||
- name: run benchmarks with regression check
|
- name: run benchmarks with regression check
|
||||||
run: ./ci/bench-runner/target/release/bench-runner --check-executables-changed
|
run: nix develop -c ./ci/bench-runner/target/release/bench-runner --check-executables-changed
|
||||||
|
|
72
Earthfile
72
Earthfile
|
@ -1,72 +0,0 @@
|
||||||
FROM rust:1.61.0-slim-bullseye # make sure to update rust-toolchain.toml too so that everything uses the same rust version
|
|
||||||
WORKDIR /earthbuild
|
|
||||||
|
|
||||||
prep-debian:
|
|
||||||
RUN apt -y update
|
|
||||||
|
|
||||||
install-other-libs:
|
|
||||||
FROM +prep-debian
|
|
||||||
RUN apt -y install wget git
|
|
||||||
RUN apt -y install libxcb-shape0-dev libxcb-xfixes0-dev # for editor clipboard
|
|
||||||
RUN apt -y install libasound2-dev # for editor sounds
|
|
||||||
RUN apt -y install libunwind-dev pkg-config libx11-dev zlib1g-dev
|
|
||||||
RUN apt -y install unzip # for www/build.sh
|
|
||||||
|
|
||||||
install-zig-llvm-valgrind:
|
|
||||||
FROM +install-other-libs
|
|
||||||
# editor
|
|
||||||
RUN apt -y install libxkbcommon-dev
|
|
||||||
# zig
|
|
||||||
RUN wget -c https://ziglang.org/download/0.9.1/zig-linux-x86_64-0.9.1.tar.xz --no-check-certificate
|
|
||||||
RUN tar -xf zig-linux-x86_64-0.9.1.tar.xz
|
|
||||||
RUN ln -s /earthbuild/zig-linux-x86_64-0.9.1/zig /bin/zig
|
|
||||||
# zig builtins wasm tests
|
|
||||||
RUN apt -y install build-essential
|
|
||||||
RUN cargo install wasmer-cli --features "singlepass"
|
|
||||||
RUN cargo install bindgen
|
|
||||||
# llvm
|
|
||||||
RUN apt -y install lsb-release software-properties-common gnupg
|
|
||||||
RUN wget https://apt.llvm.org/llvm.sh
|
|
||||||
RUN chmod +x llvm.sh
|
|
||||||
RUN ./llvm.sh 13
|
|
||||||
RUN ln -s /usr/bin/clang-13 /usr/bin/clang
|
|
||||||
# use lld as linker
|
|
||||||
RUN ln -s /usr/bin/lld-13 /usr/bin/ld.lld
|
|
||||||
ENV RUSTFLAGS="-C link-arg=-fuse-ld=lld -C target-cpu=native"
|
|
||||||
# valgrind
|
|
||||||
RUN apt -y install valgrind
|
|
||||||
# wasm repl & tests
|
|
||||||
RUN rustup target add wasm32-unknown-unknown wasm32-wasi
|
|
||||||
RUN apt -y install libssl-dev
|
|
||||||
RUN OPENSSL_NO_VENDOR=1 cargo install wasm-pack
|
|
||||||
# criterion
|
|
||||||
RUN cargo install cargo-criterion
|
|
||||||
# sccache
|
|
||||||
RUN cargo install sccache
|
|
||||||
RUN sccache -V
|
|
||||||
ENV RUSTC_WRAPPER=/usr/local/cargo/bin/sccache
|
|
||||||
ENV SCCACHE_DIR=/earthbuild/sccache_dir
|
|
||||||
ENV CARGO_INCREMENTAL=0 # no need to recompile package when using new function
|
|
||||||
|
|
||||||
copy-dirs:
|
|
||||||
FROM +install-zig-llvm-valgrind
|
|
||||||
COPY --dir crates Cargo.toml Cargo.lock version.txt www ./
|
|
||||||
|
|
||||||
# compile everything needed for benchmarks and output a self-contained dir from which benchmarks can be run.
|
|
||||||
prep-bench-folder:
|
|
||||||
FROM +copy-dirs
|
|
||||||
# to make use of avx, avx2, sse2, sse4.2... instructions
|
|
||||||
ENV RUSTFLAGS="-C link-arg=-fuse-ld=lld -C target-cpu=native"
|
|
||||||
ARG BENCH_SUFFIX=branch
|
|
||||||
RUN cargo criterion -V
|
|
||||||
RUN --mount=type=cache,target=$SCCACHE_DIR cd crates/cli && cargo criterion --no-run
|
|
||||||
RUN mkdir -p bench-folder/crates/cli_testing_examples/benchmarks
|
|
||||||
RUN mkdir -p bench-folder/crates/compiler/builtins/bitcode/src
|
|
||||||
RUN mkdir -p bench-folder/target/release/deps
|
|
||||||
RUN cp crates/cli_testing_examples/benchmarks/*.roc bench-folder/crates/cli_testing_examples/benchmarks/
|
|
||||||
RUN cp -r crates/cli_testing_examples/benchmarks/platform bench-folder/crates/cli_testing_examples/benchmarks/
|
|
||||||
RUN cp crates/compiler/builtins/bitcode/src/str.zig bench-folder/crates/compiler/builtins/bitcode/src
|
|
||||||
RUN cp target/release/roc bench-folder/target/release
|
|
||||||
# copy the most recent time bench to bench-folder
|
|
||||||
RUN cp target/release/deps/`ls -t target/release/deps/ | grep time_bench | head -n 1` bench-folder/target/release/deps/time_bench
|
|
||||||
SAVE ARTIFACT bench-folder AS LOCAL bench-folder-$BENCH_SUFFIX
|
|
|
@ -51,8 +51,8 @@ fn main() {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
r#"I can't find bench-folder-main and bench-folder-branch from the current directory.
|
r#"I can't find bench-folder-main and bench-folder-branch from the current directory.
|
||||||
I should be executed from the repo root.
|
I should be executed from the repo root.
|
||||||
Use `./ci/safe-earthly.sh --build-arg BENCH_SUFFIX=main +prep-bench-folder` to generate bench-folder-main.
|
Use `./ci/benchmarks/prep_folder.sh main` to generate bench-folder-main.
|
||||||
Use `./ci/safe-earthly.sh +prep-bench-folder` to generate bench-folder-branch."#
|
Use `./ci/benchmarks/prep_folder.sh branch` to generate bench-folder-branch."#
|
||||||
);
|
);
|
||||||
|
|
||||||
process::exit(1)
|
process::exit(1)
|
26
ci/benchmarks/prep_folder.sh
Executable file
26
ci/benchmarks/prep_folder.sh
Executable file
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# compile everything needed for benchmarks and output a self-contained dir from which benchmarks can be run.
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
# to make use of avx, avx2, sse2, sse4.2... instructions
|
||||||
|
RUSTFLAGS="-C link-arg=-fuse-ld=lld -C target-cpu=native"
|
||||||
|
BENCH_SUFFIX=$1
|
||||||
|
|
||||||
|
cargo criterion -V
|
||||||
|
cd crates/cli && cargo criterion --no-run && cd ../..
|
||||||
|
mkdir -p bench-folder/crates/cli_testing_examples/benchmarks
|
||||||
|
mkdir -p bench-folder/crates/compiler/builtins/bitcode/src
|
||||||
|
mkdir -p bench-folder/target/release/deps
|
||||||
|
mkdir -p bench-folder/target/release/lib
|
||||||
|
cp "crates/cli_testing_examples/benchmarks/"*".roc" bench-folder/crates/cli_testing_examples/benchmarks/
|
||||||
|
cp -r crates/cli_testing_examples/benchmarks/platform bench-folder/crates/cli_testing_examples/benchmarks/
|
||||||
|
cp crates/compiler/builtins/bitcode/src/str.zig bench-folder/crates/compiler/builtins/bitcode/src
|
||||||
|
cp target/release/roc bench-folder/target/release
|
||||||
|
cp -r target/release/lib bench-folder/target/release
|
||||||
|
|
||||||
|
# copy the most recent time bench to bench-folder
|
||||||
|
cp target/release/deps/`ls -t target/release/deps/ | grep time_bench | head -n 1` bench-folder/target/release/deps/time_bench
|
||||||
|
mv bench-folder bench-folder-$BENCH_SUFFIX
|
|
@ -1,5 +1,8 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
mkdir -p $HOME/.cargo
|
mkdir -p $HOME/.cargo
|
||||||
echo -e "[build]\nrustflags = [\"-C\", \"link-arg=-fuse-ld=lld\", \"-C\", \"target-cpu=native\"]" > $HOME/.cargo/config
|
echo -e "[build]\nrustflags = [\"-C\", \"link-arg=-fuse-ld=lld\", \"-C\", \"target-cpu=native\"]" > $HOME/.cargo/config
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
# assumes roc_releases.json is present
|
# assumes roc_releases.json is present
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
LATEST_RELEASE_URL=`cat roc_releases.json | jq --arg arch $1 --arg today $(date +'%Y-%m-%d') '.[0] | .assets | map(.browser_download_url) | map(select(. | contains("\($arch)-\($today)"))) | .[0]'`
|
LATEST_RELEASE_URL=`cat roc_releases.json | jq --arg arch $1 --arg today $(date +'%Y-%m-%d') '.[0] | .assets | map(.browser_download_url) | map(select(. | contains("\($arch)-\($today)"))) | .[0]'`
|
||||||
|
|
||||||
if [[ "$LATEST_RELEASE_URL" == "null" ]]
|
if [[ "$LATEST_RELEASE_URL" == "null" ]]
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
cp target/release/roc ./roc # to be able to exclude "target" later in the tar command
|
cp target/release/roc ./roc # to be able to exclude "target" later in the tar command
|
||||||
cp -r target/release/lib ./lib
|
cp -r target/release/lib ./lib
|
||||||
tar -czvf $1 --exclude="target" --exclude="zig-cache" roc lib LICENSE LEGAL_DETAILS examples/helloWorld.roc examples/cli crates/roc_std
|
tar -czvf $1 --exclude="target" --exclude="zig-cache" roc lib LICENSE LEGAL_DETAILS examples/helloWorld.roc examples/cli crates/roc_std
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
LOG_FILE="earthly_log.txt"
|
|
||||||
touch $LOG_FILE
|
|
||||||
|
|
||||||
# first arg + everything after
|
|
||||||
ARGS=${@:1}
|
|
||||||
FULL_CMD="earthly --config ci/earthly-conf.yml $ARGS"
|
|
||||||
echo $FULL_CMD
|
|
||||||
script -efq $LOG_FILE -c "$FULL_CMD"
|
|
||||||
EXIT_CODE=$?
|
|
||||||
|
|
||||||
if grep -q "failed to mount" "$LOG_FILE"; then
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
echo "------<<<<<<!!!!!!>>>>>>------"
|
|
||||||
echo "DETECTED FAILURE TO MOUNT ERROR: running without cache"
|
|
||||||
echo "------<<<<<<!!!!!!>>>>>>------"
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
earthly --config ci/earthly-conf.yml --no-cache $ARGS
|
|
||||||
else
|
|
||||||
exit $EXIT_CODE
|
|
||||||
fi
|
|
|
@ -1,3 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
# version.txt is used by the CLI: roc --version
|
# version.txt is used by the CLI: roc --version
|
||||||
printf 'nightly pre-release, built from commit ' > version.txt && git log --pretty=format:'%h' -n 1 >> version.txt && printf ' on ' >> version.txt && date -u >> version.txt
|
printf 'nightly pre-release, built from commit ' > version.txt && git log --pretty=format:'%h' -n 1 >> version.txt && printf ' on ' >> version.txt && date -u >> version.txt
|
|
@ -1,3 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
crates/repl_wasm/build-www.sh `pwd`/roc_repl_wasm.tar.gz
|
crates/repl_wasm/build-www.sh `pwd`/roc_repl_wasm.tar.gz
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
zig build-exe benchmark/dec.zig -O ReleaseFast --main-pkg-path .
|
zig build-exe benchmark/dec.zig -O ReleaseFast --main-pkg-path .
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
set -eux
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
# Build the compiler for WebAssembly target
|
# Build the compiler for WebAssembly target
|
||||||
# We *could* write a build.rs to do this but we'd have nested cargo processes with different targets.
|
# We *could* write a build.rs to do this but we'd have nested cargo processes with different targets.
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
# Our website deployment script downloads that zipfile and copies the files into www/build/repl/
|
# Our website deployment script downloads that zipfile and copies the files into www/build/repl/
|
||||||
# We use this two-step process because Netlify times out if we try to build the Web REPL there.
|
# We use this two-step process because Netlify times out if we try to build the Web REPL there.
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
if ! which wasm-pack
|
if ! which wasm-pack
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
cargo run -- build
|
cargo run -- build
|
||||||
mkdir -p SwiftUIDemo.app/Contents/MacOS/
|
mkdir -p SwiftUIDemo.app/Contents/MacOS/
|
||||||
mv swiftui SwiftUIDemo.app/Contents/MacOS/SwiftUIDemo
|
mv swiftui SwiftUIDemo.app/Contents/MacOS/SwiftUIDemo
|
||||||
|
|
|
@ -105,6 +105,7 @@
|
||||||
debugir
|
debugir
|
||||||
rust
|
rust
|
||||||
rust-bindgen
|
rust-bindgen
|
||||||
|
cargo-criterion
|
||||||
]);
|
]);
|
||||||
in {
|
in {
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
# cd into the directory where this script lives.
|
# cd into the directory where this script lives.
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
# Runs on every Netlify build, to set up the Netlify server.
|
# Runs on every Netlify build, to set up the Netlify server.
|
||||||
|
|
||||||
|
# https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
rustup update
|
rustup update
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue