Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
bce28df
Add GitHub Actions CI for multi-platform support (Issue #384)
anaslari23 Jan 9, 2026
98e1cc1
Ignore local SSD tools and caches
anaslari23 Jan 9, 2026
407eb2f
Refactor CI into separate jobs for Ubuntu, macOS, and Windows (Mainta…
anaslari23 Jan 9, 2026
7f8b672
Refine CI: Revert to single job matrix, fix JDK setup, and improve na…
anaslari23 Jan 9, 2026
405d5ac
Refactor CI into OS-specific jobs for clarity and reliability (Mainta…
anaslari23 Jan 9, 2026
27431ec
Update ci.yml
kfriedberger Jan 10, 2026
6f009cb
Update ci.yml
kfriedberger Jan 10, 2026
7febb2c
Refine CI: Add Ivy caching, use Chocolatey for Windows Ant, and ensur…
anaslari23 Jan 10, 2026
9da4d9f
Fix macOS solver support matrix and native-loader tests
anaslari23 Jan 12, 2026
73b4e3f
Fix macOS solver support and eliminate CI warnings
anaslari23 Jan 12, 2026
ab1e17d
Enable CVC5 on macOS in SolverContextFactoryTest
anaslari23 Jan 12, 2026
c92ac65
Merge remote-tracking branch 'origin/master' into contribution/issue-…
kfriedberger Jan 24, 2026
79f404b
Github-CI: update the cache in all cases, not only for successful runs.
kfriedberger Jan 24, 2026
1c1d8cb
Github-CI: switch to faster/smaller test-set.
kfriedberger Jan 24, 2026
0a0dce3
Github-CI: print debug info on Linux
kfriedberger Jan 25, 2026
7a5d401
Github-CI: remove debug logging
kfriedberger Jan 25, 2026
ae6889c
Github-CI: try to fix MathSAT execution by preloading a required base…
kfriedberger Jan 25, 2026
64cc371
Github-CI: remove "lib/ivy.xml" from cache-key.
kfriedberger Jan 25, 2026
55752a4
Github-CI: update actions to latest versions.
kfriedberger Jan 25, 2026
7398b95
Tests: allow more combinations of architectures, and formatting.
kfriedberger Jan 25, 2026
a1903b1
revert unintended changes to gitignore-file.
kfriedberger Jan 25, 2026
add3577
Github-CI: rename matrix-field.
kfriedberger Jan 25, 2026
c36e54d
Github-CI: add JDK version 24 to matrix.
kfriedberger Jan 25, 2026
1ddd167
Github-CI: use x64 and arm64 runners.
kfriedberger Jan 25, 2026
c04307a
Github-CI: exclude some unsupported combinations of architecture and OS.
kfriedberger Jan 25, 2026
42abe44
Github-CI: fix library paths for ARM64.
kfriedberger Jan 25, 2026
555f6fc
Github-CI: fix typo
kfriedberger Jan 25, 2026
19a49b8
Github-CI: re-add caching based on dependency-file, and consider arch…
kfriedberger Jan 25, 2026
fcafc75
Github-CI: consider JDK version for caching.
kfriedberger Jan 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
230 changes: 230 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
# This file is part of JavaSMT,
# an API wrapper for a collection of SMT solvers:
# https://github.com/sosy-lab/java-smt
#
# SPDX-FileCopyrightText: 2026 Dirk Beyer <https://www.sosy-lab.org>
#
# SPDX-License-Identifier: Apache-2.0

name: CI

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]

jobs:
linux:
name: Linux (${{ matrix.arch }}, Java ${{ matrix.java-version }})
strategy:
fail-fast: false
matrix:
java-version: [11, 17, 21, 24]
arch: [x64, arm64]
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v5
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
architecture: ${{ matrix.arch }}

- name: Restore Cache with Ivy and Ant
uses: actions/cache/restore@v5
with:
path: |
~/.ivy2/cache
~/.ant/lib
key: linux-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}
restore-keys: |
linux-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-
linux-ivy-

- name: Install Ant
run: |
sudo apt-get update
sudo apt-get install -y ant

- name: Build dependencies
run: ant build-dependencies

- name: Build project
run: ant build

- name: Run tests
run: ant unit-tests-quick
env:
# MathSAT5 needs this to find the correct libstdc++ version, as Temurin JDKs ship a too-new version.
LD_PRELOAD: /usr/lib/${{ matrix.arch == 'arm64' && 'aarch64-linux-gnu' || 'x86_64-linux-gnu' }}/libstdc++.so.6

- name: Save Cache with Ivy and Ant
uses: actions/cache/save@v5
if: always() # also on error
with:
path: |
~/.ivy2/cache
~/.ant/lib
key: linux-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}

- name: Archive Test Results
uses: actions/upload-artifact@v6
if: always()
with:
name: junit-results-linux-${{ matrix.arch }}-java${{ matrix.java-version }}
path: |
junit/TEST-*.xml
JUnit.html
hs_err_pid*.log
replay_pid*.log

macos:
name: macOS (${{ matrix.arch }}, Java ${{ matrix.java-version }})
strategy:
fail-fast: false
matrix:
java-version: [11, 17, 21, 24]
arch: [x64, arm64]
runs-on: ${{ matrix.arch == 'arm64' && 'macos-latest' || 'macos-15-intel' }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v5
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
architecture: ${{ matrix.arch }}

- name: Restore Cache with Ivy and Ant
uses: actions/cache/restore@v5
with:
path: |
~/.ivy2/cache
~/.ant/lib
key: macos-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}
restore-keys: |
macos-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-
macos-ivy-

- name: Install Ant
run: brew install ant

- name: Build dependencies
run: ant build-dependencies

- name: Build project
run: ant build

- name: Prepare native libraries
run: |
ARCH_DIR="${{ matrix.arch == 'arm64' && 'arm64-macosx' || 'x86_64-macosx' }}"
SEARCH_PATH="lib/java/runtime-*/${{ matrix.arch == 'arm64' && 'arm64' || 'x64' }}"
mkdir -p "lib/native/$ARCH_DIR/"
find $SEARCH_PATH -name "*.dylib" -exec cp {} "lib/native/$ARCH_DIR/" \;

- name: Run tests
run: ant unit-tests-quick

- name: Save Cache with Ivy and Ant
uses: actions/cache/save@v5
if: always() # also on error
with:
path: |
~/.ivy2/cache
~/.ant/lib
key: macos-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}

- name: Archive Test Results
uses: actions/upload-artifact@v6
if: always()
with:
name: junit-results-macos-${{ matrix.arch }}-java${{ matrix.java-version }}
path: |
junit/TEST-*.xml
JUnit.html
hs_err_pid*.log
replay_pid*.log

windows:
name: Windows (${{ matrix.arch }}, Java ${{ matrix.java-version }})
strategy:
fail-fast: false
matrix:
include:
# GithubCI does not support Windows ARM64 runners with all JDKs, so we list them explicitly.
- { arch: x64, java-version: 11 }
- { arch: x64, java-version: 17 }
- { arch: x64, java-version: 21 }
- { arch: x64, java-version: 24 }
- { arch: arm64, java-version: 21 }
- { arch: arm64, java-version: 23 }
runs-on: ${{ matrix.arch == 'arm64' && 'windows-11-arm' || 'windows-latest' }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v5
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
architecture: ${{ matrix.arch }}

- name: Restore Cache with Ivy and Ant
uses: actions/cache/restore@v5
with:
path: |
C:\Users\runneradmin\.ivy2\cache
C:\Users\runneradmin\.ant\lib
key: windows-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}
restore-keys: |
windows-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-
windows-ivy-

- name: Install Ant
run: choco install ant -y

- name: Build dependencies
run: ant build-dependencies

- name: Build project
run: ant build

- name: Prepare native libraries
shell: pwsh
run: |
$archDir = if ("${{ matrix.arch }}" -eq "arm64") { "arm64-windows" } else { "x86_64-windows" }
$searchPath = "lib/java/runtime-*/" + $(if ("${{ matrix.arch }}" -eq "arm64") { "arm64" } else { "x64" })
Get-ChildItem -Path $searchPath -Filter "*.dll" -Recurse | Copy-Item -Destination "lib/native/$archDir/" -Force

- name: Run tests
run: ant unit-tests-quick

- name: Save Cache with Ivy and Ant
uses: actions/cache/save@v5
if: always() # also on error
with:
path: |
C:\Users\runneradmin\.ivy2\cache
C:\Users\runneradmin\.ant\lib
key: windows-${{ matrix.arch }}-java${{ matrix.java-version }}-ivy-${{ hashFiles('build.xml', 'lib/ivy.xml', 'build/build-ivy.xml') }}

- name: Archive Test Results
uses: actions/upload-artifact@v6
if: always()
with:
name: junit-results-windows-${{ matrix.arch }}-java${{ matrix.java-version }}
path: |
junit/TEST-*.xml
JUnit.html
hs_err_pid*.log
replay_pid*.log
3 changes: 1 addition & 2 deletions src/org/sosy_lab/java_smt/test/SolverContextFactoryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,7 @@ private boolean isSupportedOperatingSystemAndArchitecture() {
case YICES2:
return IS_LINUX && !IS_ARCH_ARM64;
case CVC5:
return (IS_LINUX && isSufficientVersionOfLibcxx("cvc5jni"))
|| (IS_WINDOWS && !IS_ARCH_ARM64);
return (IS_LINUX && isSufficientVersionOfLibcxx("cvc5jni")) || IS_WINDOWS || IS_MAC;
case OPENSMT:
return IS_LINUX && isSufficientVersionOfLibcxx("opensmtj");
case BITWUZLA:
Expand Down
Loading