diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml new file mode 100644 index 0000000..aec48cc --- /dev/null +++ b/.github/workflows/pr-test.yml @@ -0,0 +1,92 @@ +name: Tests for all platforms + +on: + pull_request: + branches: + - main + - master + - develop + +jobs: + build-native: + name: Build Native Library (${{ matrix.os }} - ${{ matrix.arch }}) + runs-on: ${{ matrix.os }} + strategy: + matrix: + # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories + include: + - os: ubuntu-24.04 + arch: x64 + OUT_OS_NAME: linux + - os: ubuntu-24.04-arm + arch: arm64 + OUT_OS_NAME: linux + - os: macos-13 + arch: x64 + OUT_OS_NAME: darwin + - os: macos-15 + arch: arm64 + OUT_OS_NAME: darwin + - os: windows-2025 + arch: x64 + OUT_OS_NAME: windows + # - os: windows-11-arm + # arch: arm64 + # OUT_OS_NAME: windows + fail-fast: false + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + # Existing build steps remain unchanged + - name: Setup Julia + uses: julia-actions/setup-julia@v2 + with: + version: '1.11' + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + # Install cross toolchain for aarch64 on Ubuntu + - name: Install cross toolchain (aarch64) + if: ${{ startsWith(matrix.os, 'ubuntu-') && matrix.arch == 'aarch64' }} + run: | + sudo apt-get update + sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - name: Install dependencies + shell: bash + run: | + if [[ "$RUNNER_OS" == "Linux" ]]; then + sudo apt-get update + sudo apt-get install -y cmake swig gcc g++ + elif [[ "$RUNNER_OS" == "macOS" ]]; then + brew update + brew install cmake swig + elif [[ "$RUNNER_OS" == "Windows" ]]; then + choco install cmake swig + fi + + - name: Build native library + shell: bash + run: | + cd swig + cmake . + cmake --build . --config Release + cmake --install . --config Release + cd .. + echo "Library built at: $(pwd)/src/main/resources/native/${{ matrix.OUT_OS_NAME }}/${{ matrix.arch }}" + + - name: Local test of native library + shell: bash + run: | + if [[ "$RUNNER_OS" == "Windows" ]]; then + ./gradlew.bat test + else + ./gradlew test + fi + echo "Native library tests passed."