diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..a9241b8bdc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,94 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + cpp: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - name: 'Windows static (B&T)' + os: windows-latest + build_shared: OFF + unit_tests: ON + - name: 'Windows shared (B&T)' + os: windows-latest + build_shared: ON + unit_tests: ON + - name: 'Linux static (B)' + os: ubuntu-latest + build_shared: OFF + unit_tests: OFF + - name: 'Linux shared (B&T)' + os: ubuntu-latest + build_shared: ON + unit_tests: ON + - name: 'macOS static (Intel) (B&T)' + os: macos-13 + build_shared: OFF + unit_tests: ON + - name: 'macOS shared (Intel) (B&T)' + os: macos-13 + build_shared: ON + unit_tests: ON + - name: 'macOS static (ARM) (B&T)' + os: macos-latest + build_shared: OFF + unit_tests: ON + - name: 'macOS shared (ARM) (B&T)' + os: macos-latest + build_shared: ON + unit_tests: ON + env: + BUILDCACHE_ACCURACY: STRICT + BUILDCACHE_COMPRESS_FORMAT: ZSTD + BUILDCACHE_DEBUG: -1 + BUILDCACHE_LOG_FILE: "" + steps: + - name: Check out libCellML + uses: actions/checkout@v4 + - name: Install CMake and Ninja + uses: lukka/get-cmake@latest + - name: Install buildcache + uses: mikehardy/buildcache-action@v2 + with: + cache_key: ${{ matrix.os }}-${{ matrix.build_shared }} + - name: Configure MSVC (Windows only) + if: ${{ runner.os == 'Windows' }} + uses: ilammy/msvc-dev-cmd@v1 + - name: Install libxml2 (Windows only) + if: ${{ runner.os == 'Windows' }} + run: | + cd + curl -L -O https://github.com/cellml/gha/releases/download/gha/libxml2.zip + 7z x libxml2.zip -olibxml2 + setx /M PATH "C:\libxml2\bin;%PATH%" + - name: Install zlib (Windows only) + if: ${{ runner.os == 'Windows' }} + run: | + cd + curl -L -O https://github.com/cellml/gha/releases/download/gha/zlib.zip + 7z x zlib.zip -ozlib + setx /M PATH "C:\zlib\bin;%PATH%" + - name: Configure libCellML + run: | + mkdir build + cd build + cmake -G Ninja -DBINDINGS_PYTHON=OFF -DBUILD_SHARED=${{ matrix.build_shared }} -DCOVERAGE=OFF -DLLVM_COVERAGE=OFF -DMEMCHECK=OFF -DUNIT_TESTS=${{ matrix.unit_tests }} .. + - name: Build libCellML + run: | + cd build + ninja + - name: Unit testing + if: ${{ matrix.unit_tests == 'ON' }} + run: | + cd build + ninja test