diff --git a/.github/workflows/bolts-CI.yml b/.github/workflows/bolts-CI.yml new file mode 100644 index 00000000..c9729f2d --- /dev/null +++ b/.github/workflows/bolts-CI.yml @@ -0,0 +1,43 @@ +name: Bolts CI +on: + pull_request: + push: + branches: + - main +jobs: + tests: + if: github.event.pull_request.draft == false + runs-on: [self-hosted, linux] + env: + # define Java options for both official sbt and sbt-extras + JAVA_OPTS: -Dsbt.io.implicit.relative.glob.conversion=allow -Xss512M -Xms1024M -Xmx12G -XX:MaxMetaspaceSize=2G -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=768M + JVM_OPTS: -Dsbt.io.implicit.relative.glob.conversion=allow -Xss512M -Xms1024M -Xmx12G -XX:MaxMetaspaceSize=2G -XX:+UseCodeCacheFlushing -XX:ReservedCodeCacheSize=768M + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Setup JDK + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + cache: sbt + - name: Install stainless and solvers + run: ./install_stainless_and_solvers.sh $GITHUB_WORKSPACE/.local/bin $GITHUB_WORKSPACE/.local + - name: Add stainless to PATH + run: echo "$GITHUB_WORKSPACE/.local/stainless/frontends/dotty/target/universal/stage/bin" >> $GITHUB_PATH + - name: Test stainless availability + run: stainless-dotty --version + - name: Add solvers to PATH + run: echo "$GITHUB_WORKSPACE/.local/bin" >> $GITHUB_PATH + - name: Test solvers availability + run: cvc5 --version && z3 --version && cvc4 --version + - name: Bolts Tests + run: ./run-tests.sh + fail_if_pull_request_is_draft: + if: github.event.pull_request.draft == true + runs-on: [self-hosted, linux] + steps: + - name: Fails in order to indicate that pull request needs to be marked as ready to review and tests workflows need to pass. + run: exit 1 \ No newline at end of file diff --git a/install_stainless_and_solvers.sh b/install_stainless_and_solvers.sh new file mode 100755 index 00000000..f9a0f861 --- /dev/null +++ b/install_stainless_and_solvers.sh @@ -0,0 +1,39 @@ +TEMP_DIR="temp" +SOLVERS_DIR="$1" +STAINLESS_DIR="$2" + +mkdir -p "$SOLVERS_DIR" +mkdir -p "$TEMP_DIR" +mkdir -p "$STAINLESS_DIR" + +# cvc5 +wget https://github.com/cvc5/cvc5/releases/download/cvc5-1.1.2/cvc5-Linux-static.zip -O "$TEMP_DIR/downloaded.zip" -q +unzip "$TEMP_DIR/downloaded.zip" -d "$TEMP_DIR" +CVC5_DIR=$(ls "$TEMP_DIR" | grep cvc5) +mv "$TEMP_DIR/$CVC5_DIR/bin/cvc5" "$SOLVERS_DIR/cvc5" +chmod +x "$SOLVERS_DIR/cvc5" +rm -rf "$TEMP_DIR" + +# CVC4 +wget https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-1.8-x86_64-linux-opt -O "$SOLVERS_DIR/cvc4" -q +chmod +x "$SOLVERS_DIR/cvc4" + +# z3 +mkdir -p "$TEMP_DIR" +wget https://github.com/Z3Prover/z3/releases/download/z3-4.13.0/z3-4.13.0-x64-glibc-2.35.zip -O "$TEMP_DIR/downloaded.zip" -q +unzip "$TEMP_DIR/downloaded.zip" -d "$TEMP_DIR" +Z3_DIR=$(ls "$TEMP_DIR" | grep z3) +mv "$TEMP_DIR/$Z3_DIR/bin/z3" "$SOLVERS_DIR/z3" +chmod +x "$SOLVERS_DIR/z3" +rm -rf "$TEMP_DIR" + +echo "************** Solvers Installed **************" + +# stainless +cd "$STAINLESS_DIR" +git clone --recurse-submodules https://github.com/epfl-lara/stainless +cd stainless +sbt universal:stage + +echo "************** Stainless Installed **************" +exit 0 \ No newline at end of file