Skip to content

Commit 467725e

Browse files
Make CI MacOS compatible (#239)
- Adapts the solver install scripts to be MacOS compatible. - runs CI on Linux and MacOS on push
1 parent 33b5809 commit 467725e

File tree

4 files changed

+78
-71
lines changed

4 files changed

+78
-71
lines changed

.github/workflows/inox-CI.yml

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,19 @@ on:
88
jobs:
99
tests:
1010
if: github.event.pull_request.draft == false
11-
runs-on: [self-hosted, linux]
11+
name: ${{ matrix.runners.name }} / JDK ${{ matrix.java-version }}
12+
runs-on: ${{ matrix.runners.labels }}
1213
strategy:
1314
matrix:
15+
runners:
16+
- name: Linux
17+
os: Linux
18+
labels: ['self-hosted', 'linux']
19+
- name: macOS ARM64
20+
os: macOS
21+
labels: ['self-hosted', 'macOS', 'ARM64']
1422
java-version: [17, 21]
1523
env:
16-
# define Java options for both official sbt and sbt-extras
17-
JAVA_OPTS_TMP_DIR: ./tmp_java
18-
JAVA_OPTS: -Xss64M -Xms1024M -Xmx8G -Djava.io.tmpdir=$JAVA_OPTS_TMP_DIR
19-
JVM_OPTS: -Xss64M -Xms1024M -Xmx8G -Djava.io.tmpdir=$JAVA_OPTS_TMP_DIR
2024
# solver versions to test against
2125
INSTALL_SOLVERS: 1
2226
Z3_VER: 4.15.1
@@ -32,17 +36,30 @@ jobs:
3236
with:
3337
distribution: temurin
3438
java-version: ${{ matrix.java-version }}
35-
- name: Install and unpack sbt
39+
- name: Set Java and SBT options
40+
run: |
41+
# path for sbt to create a local folder and sockets
42+
# needs to be a bit shallower than the workspace
43+
# to avoid unix socket path length limits
44+
echo "XDG_RUNTIME_DIR=$(realpath ..)" >> $GITHUB_ENV
45+
# java options for sbt and sbt-extras
46+
JAVA_OPTS_TMP_DIR=./tmp_java
47+
JAVA_OPTS="-Xss64M -Xms1024M -Xmx8G -Djava.io.tmpdir=$JAVA_OPTS_TMP_DIR"
48+
JVM_OPTS="$JAVA_OPTS"
49+
echo "JAVA_OPTS_TMP_DIR=$JAVA_OPTS_TMP_DIR" >> $GITHUB_ENV
50+
echo "JAVA_OPTS=$JAVA_OPTS" >> $GITHUB_ENV
51+
echo "JVM_OPTS=$JVM_OPTS" >> $GITHUB_ENV
52+
- name: Install and set up sbt
3653
run: |
3754
./scripts/install_sbt.sh
38-
echo "PATH=./sbt/bin/:$PATH" >> "$GITHUB_ENV"
55+
echo "$(pwd)/sbt/bin/" >> $GITHUB_PATH
3956
- name: Prepare temp folder
4057
run: rm -rf $JAVA_OPTS_TMP_DIR && mkdir -p $JAVA_OPTS_TMP_DIR
4158
- name: Install solvers
4259
run: ./scripts/install_solvers.sh $GITHUB_WORKSPACE/.local/bin $Z3_VER $CVC4_VER $CVC5_VER
4360
- name: Add solvers to PATH
4461
run: echo "$GITHUB_WORKSPACE/.local/bin" >> $GITHUB_PATH
45-
- name: Test solvers availability
62+
- name: Test solver availability
4663
run: cvc5 --version && z3 --version && cvc4 --version
4764
- name: Run Tests
4865
run: sbt -Dtest-parallelism=10 -batch test

.github/workflows/inox-mac-CI.yml

Lines changed: 0 additions & 48 deletions
This file was deleted.

scripts/install_sbt.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
#!/usr/bin/env sh
22

3+
CURL='curl -L -s -C - -O'
4+
35
SBT_VER="$(grep 'sbt.version' project/build.properties | cut -d= -f2)"
46
if [ -z "$SBT_VER" ]; then
57
echo "sbt.version not found in project/build.properties"
68
exit 1
79
fi
8-
wget -c https://github.com/sbt/sbt/releases/download/v${SBT_VER}/sbt-${SBT_VER}.tgz -q
10+
$CURL https://github.com/sbt/sbt/releases/download/v${SBT_VER}/sbt-${SBT_VER}.tgz
911
tar xfz "sbt-${SBT_VER}.tgz"

scripts/install_solvers.sh

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ if [ "$INSTALL_SOLVERS" != "1" ]; then
55
exit 0
66
fi
77

8+
INFO_MSG="[INFO]"
9+
WARN_MSG="\033[33m[WARNING]\033[0m"
10+
ERROR_MSG="\033[1;31m[ERROR]\033[0m"
11+
12+
# curl command with default flags
13+
CURL='curl -L -s -C -'
14+
815
TEMP_DIR="$(pwd)/temp"
916
SOLVERS_DIR=${1:-"$(pwd)/solvers"}
1017

@@ -19,36 +26,65 @@ SHORT_ARCH=$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/;')
1926

2027
# libc linked against z3
2128
# (glibc for Linux, osx for macOS)
22-
LIBC_NAME=$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/osx/;s/linux/glibc/;')
29+
Z3_LIBC_NAME=$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/osx/;s/linux/glibc/;')
30+
31+
# os names as used by CVC5 builds
32+
CVC5_OS_NAME=$(uname -s | tr '[:upper:]' '[:lower:]' | sed 's/darwin/macOS/;s/linux/Linux/;')
2333

2434
mkdir -p "$SOLVERS_DIR"
2535
mkdir -p "$TEMP_DIR"
36+
37+
reset_temp_dir() {
38+
rm -rf "$TEMP_DIR"
39+
mkdir -p "$TEMP_DIR"
40+
}
41+
42+
echo "$INFO_MSG Installing Solvers to $SOLVERS_DIR"
43+
2644
# cvc5
27-
wget -c "https://github.com/cvc5/cvc5/releases/download/cvc5-${CVC5_VER}/cvc5-Linux-${ARCH}-static.zip" -O "$TEMP_DIR/cvc5.zip" -q
28-
unzip "$TEMP_DIR/cvc5.zip" -d "$TEMP_DIR"
45+
echo "$INFO_MSG Installing cvc5 (v${CVC5_VER})"
46+
47+
$CURL "https://github.com/cvc5/cvc5/releases/download/cvc5-${CVC5_VER}/cvc5-${CVC5_OS_NAME}-${ARCH}-static.zip" --output "$TEMP_DIR/cvc5.zip"
48+
unzip -q "$TEMP_DIR/cvc5.zip" -d "$TEMP_DIR"
2949
CVC5_DIR=$(find "$TEMP_DIR" -mindepth 1 -maxdepth 1 -type d -name "*cvc5*")
3050
mv "$CVC5_DIR/bin/cvc5" "$SOLVERS_DIR/cvc5"
3151
chmod +x "$SOLVERS_DIR/cvc5"
32-
rm -rf "$TEMP_DIR"
3352

34-
# # CVC4
35-
wget -c "https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-${CVC4_VER}-x86_64-linux-opt" -O "$SOLVERS_DIR/cvc4" -q
53+
reset_temp_dir
54+
55+
# CVC4
56+
echo "$INFO_MSG Installing CVC4 (v${CVC4_VER})"
57+
58+
if [ "$CVC5_OS_NAME" = "macOS" ]; then
59+
echo "$WARN_MSG CVC4 installation on macOS; defaulting to only build available (x86_64 v1.8)"
60+
$CURL "https://github.com/CVC4/CVC4-archived/releases/download/1.8/cvc4-1.8-macos-opt" --output "$SOLVERS_DIR/cvc4"
61+
elif [ "$CVC5_OS_NAME" = "Linux" ]; then
62+
$CURL "https://cvc4.cs.stanford.edu/downloads/builds/x86_64-linux-opt/cvc4-${CVC4_VER}-x86_64-linux-opt" --output "$SOLVERS_DIR/cvc4"
63+
else
64+
echo "$ERROR_MSG CVC4 installation not supported on unknown OS: $CVC5_OS_NAME"
65+
exit 1
66+
fi
3667
chmod +x "$SOLVERS_DIR/cvc4"
3768

69+
reset_temp_dir
70+
3871
# z3
39-
mkdir -p "$TEMP_DIR"
40-
Z3_FILE_PREFIX="z3-${Z3_VER}-${SHORT_ARCH}-${LIBC_NAME}"
72+
echo "$INFO_MSG Installing Z3 (v${Z3_VER})"
73+
74+
# z3 release file names contain libc versions in them, which makes them hard to
75+
# guess. Just get the correct one via the GitHub release API.
76+
Z3_FILE_PREFIX="z3-${Z3_VER}-${SHORT_ARCH}-${Z3_LIBC_NAME}" # followed by -<libcversion>.zip
4177
Z3_URL=$(
42-
curl -s "https://api.github.com/repos/Z3Prover/z3/releases/tags/z3-${Z3_VER}" | # get release info
43-
grep "browser_download_url.*${Z3_FILE_PREFIX}" | #| # find url for the correct build
78+
$CURL "https://api.github.com/repos/Z3Prover/z3/releases/tags/z3-${Z3_VER}" | # get release info
79+
grep "browser_download_url.*${Z3_FILE_PREFIX}" | # find url for the correct build
4480
sed 's/^.*: //;s/^"//;s/"$//' # strip non-url
4581
)
46-
wget -c "${Z3_URL}" -O "$TEMP_DIR/z3.zip" -q
47-
unzip "$TEMP_DIR/z3.zip" -d "$TEMP_DIR"
82+
$CURL "${Z3_URL}" --output "$TEMP_DIR/z3.zip"
83+
unzip -q "$TEMP_DIR/z3.zip" -d "$TEMP_DIR"
4884
Z3_DIR=$(find "$TEMP_DIR" -mindepth 1 -maxdepth 1 -type d -name "*z3*")
4985
mv "$Z3_DIR/bin/z3" "$SOLVERS_DIR/z3"
5086
chmod +x "$SOLVERS_DIR/z3"
5187
rm -rf "$TEMP_DIR"
5288

53-
echo "************** Solvers Installed **************"
54-
exit 0
89+
echo "$INFO_MSG Solvers Installed"
90+
exit 0

0 commit comments

Comments
 (0)