name: Build macOS release archives
on:
workflow_call:
inputs:
version:
required: true
type: string
ref:
description: "Exact release commit to check out and package."
required: true
type: string
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
macos:
name: macOS package on ${{ matrix.arch }}
timeout-minutes: 35
strategy:
fail-fast: false
matrix:
include:
- arch: aarch64
os: macos-15
target: aarch64-apple-darwin
file-arch: arm64
- arch: x86_64
os: macos-15-intel
target: x86_64-apple-darwin
file-arch: x86_64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
ref: ${{ inputs.ref }}
persist-credentials: false
- name: Check candidate identity
env:
VERSION: ${{ inputs.version }}
run: scripts/release/check-version.sh manifest "$VERSION"
- uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: Build, run, and package the native target
env:
VERSION: ${{ inputs.version }}
TARGET: ${{ matrix.target }}
run: |
cargo build --release --locked --verbose --target "$TARGET"
binary="target/${TARGET}/release/kinjo"
"$binary" --version | grep -F "$VERSION"
file "$binary" | grep -F "${{ matrix.file-arch }}"
name="kinjo-${VERSION}-${TARGET}"
mkdir -p "$name/commands"
cp "$binary" "$name/"
cp README.md LICENSE "$name/"
cp actions/*.toml "$name/commands/"
timestamp="$(TZ=UTC git show -s --format=%cd --date=format-local:%Y%m%d%H%M.%S HEAD)"
find "$name" -exec touch -h -t "$timestamp" {} +
COPYFILE_DISABLE=1 tar -cf "${name}.tar" "$name"
gzip -n "${name}.tar"
tar -tzf "${name}.tar.gz" > archive-contents.txt
grep -Fx "${name}/kinjo" archive-contents.txt
grep -Fx "${name}/README.md" archive-contents.txt
grep -Fx "${name}/LICENSE" archive-contents.txt
grep -Eq "^${name}/commands/[^/]+\.toml$" archive-contents.txt
mkdir smoke
tar -xzf "${name}.tar.gz" -C smoke
test -x "smoke/${name}/kinjo"
"smoke/${name}/kinjo" --version | grep -F "$VERSION"
- name: Upload staged macOS archive
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with:
name: release-macos-${{ matrix.arch }}-${{ inputs.version }}
path: kinjo-${{ inputs.version }}-${{ matrix.target }}.tar.gz
if-no-files-found: error
retention-days: 7