3rdparty CI: cross-compile macos-x86_64 on Apple Silicon #6
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build 3rdparty — libgit2 | |
| # Per-platform prebuilt static library for libgit2, published as release | |
| # assets attached to the `lib-libgit2-<version>` tag and consumed at | |
| # configure time by build-tools/picomesh/3rdparty-fetch.cmake (which | |
| # downloads the prebuilt tarball, falling back to a from-source build | |
| # only when the asset is missing). Version source of truth: | |
| # build-tools/3rdparty/libgit2/version. | |
| on: | |
| push: | |
| tags: | |
| - 'lib-libgit2-*' | |
| workflow_dispatch: {} | |
| permissions: | |
| contents: write | |
| jobs: | |
| resolve: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.read.outputs.version }} | |
| tag: ${{ steps.read.outputs.tag }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - id: read | |
| run: | | |
| set -euo pipefail | |
| V="$(tr -d '[:space:]' < build-tools/3rdparty/libgit2/version)" | |
| [ -n "$V" ] || { echo "version file is empty" >&2; exit 1; } | |
| if [[ "${{ github.event_name }}" == "push" ]]; then | |
| REF="${GITHUB_REF#refs/tags/}" | |
| EXPECT="lib-libgit2-$V" | |
| if [ "$REF" != "$EXPECT" ]; then | |
| echo "tag $REF does not match version file ($EXPECT)" >&2 | |
| exit 1 | |
| fi | |
| fi | |
| echo "version=$V" >> "$GITHUB_OUTPUT" | |
| echo "tag=lib-libgit2-$V" >> "$GITHUB_OUTPUT" | |
| build: | |
| needs: resolve | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # Each target builds on its native runner so the published tarball is a | |
| # real per-OS/per-arch artifact — the mesh fetches these instead of | |
| # building any 3rdparty lib from source on the deploy host. | |
| include: | |
| - { target: linux-x86_64, os: ubuntu-latest } | |
| - { target: linux-aarch64, os: ubuntu-latest } | |
| - { target: linux-riscv64, os: ubuntu-latest } | |
| - { target: macos-arm64, os: macos-14 } | |
| - { target: macos-x86_64, os: macos-14 } # cross-compile x86_64 on Apple Silicon (macos-13 is scarce) | |
| - { target: windows-x86_64, os: windows-latest } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: install linux deps | |
| if: runner.os == 'Linux' | |
| run: | | |
| set -euo pipefail | |
| sudo apt-get update -y | |
| pkgs="build-essential cmake ninja-build pkg-config curl tar xz-utils ca-certificates git" | |
| case "${{ matrix.target }}" in | |
| linux-aarch64) pkgs="$pkgs gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu" ;; | |
| linux-riscv64) pkgs="$pkgs gcc-riscv64-linux-gnu g++-riscv64-linux-gnu binutils-riscv64-linux-gnu" ;; | |
| esac | |
| sudo apt-get install -y --no-install-recommends $pkgs | |
| - name: install macos deps | |
| if: runner.os == 'macOS' | |
| run: brew install ninja # cmake, clang, perl, make ship with the runner | |
| - name: set up MSVC (windows) | |
| if: runner.os == 'Windows' | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x64 | |
| - name: install windows deps | |
| if: runner.os == 'Windows' | |
| run: choco install ninja -y --no-progress | |
| - name: build libgit2 for ${{ matrix.target }} | |
| shell: bash | |
| run: | | |
| mkdir -p out | |
| TARGET_PLATFORM="${{ matrix.target }}" \ | |
| OUTPUT_DIR="$PWD/out" \ | |
| CACHE_DIR="$PWD/.cache" \ | |
| WORK_DIR="$PWD/.work" \ | |
| bash build-tools/3rdparty/libgit2/_build.sh | |
| - uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ needs.resolve.outputs.tag }} | |
| files: out/libgit2-${{ matrix.target }}-*.tar.gz | |
| fail_on_unmatched_files: true |