name: build # Trigger on push, pull request, or via manual dispatch. on: push: pull_request: types: [opened, reopened, labeled, unlabeled, synchronize] workflow_dispatch: jobs: build: runs-on: ${{ matrix.os }} name: ${{ matrix.os }} (${{ matrix.preset }}) ${{ matrix.build_type }} timeout-minutes: 30 strategy: fail-fast: false matrix: # When adding another, also add to copybara's github_check_runs. os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] build_type: ['Release'] preset: ['make', 'windows'] exclude: - os: ubuntu-latest preset: windows - os: macos-latest preset: windows - os: windows-latest preset: make concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os }}-${{ matrix.preset }}-${{ matrix.build_type }} cancel-in-progress: true steps: - uses: actions/checkout@v4 # Set up ccache - name: ccache uses: hendrikmuhs/ccache-action@v1.2 - name: Configure CMake run: > cmake --preset ${{ matrix.preset }} -S ${{ github.workspace }} -B ${{ github.workspace }}/build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache - name: Build run: cmake --build ${{ github.workspace }}/build --preset ${{ matrix.preset }} --config ${{ matrix.build_type }} -j 4 - name: Archive production artifacts uses: actions/upload-artifact@v4 with: name: gemma-${{ matrix.os }}-${{ matrix.preset }}-${{ matrix.build_type }} path: | ${{ github.workspace }}/build/${{ matrix.build_type }}/gemma.exe ${{ github.workspace }}/build/${{ matrix.build_type }}/libgemma.lib ${{ github.workspace }}/build/gemma ${{ github.workspace }}/build/libgemma.a bazel: runs-on: ubuntu-latest steps: - name: Harden Runner uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 with: egress-policy: audit # cannot be block - runner does git checkout - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.0.0 - uses: bazelbuild/setup-bazelisk@b39c379c82683a5f25d34f0d062761f62693e0b2 # v3.0.0 - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 # v4.0.1 with: path: ~/.cache/bazel key: bazel-${{ runner.os }} - run: bazel build --cxxopt=-std=c++20 //:all