8f10353f0c
CI / lint (push) Has been cancelled
CI / js-syntax (push) Successful in 10m24s
CI / deps-audit (push) Has been cancelled
CI / test (push) Failing after 24m55s
CI / sast-bandit (push) Failing after 11m13s
CI / trivy (push) Failing after 9m32s
Docker Publish / build-and-push (push) Failing after 34m3s
129 lines
5.6 KiB
YAML
129 lines
5.6 KiB
YAML
name: macOS Release
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
permissions: {}
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-and-upload:
|
|
# Runner must be darwin/arm64 with Rosetta 2, Xcode CLT, Homebrew, rustup, and zstd.
|
|
runs-on: [self-hosted, macOS, ARM64]
|
|
timeout-minutes: 120
|
|
permissions:
|
|
contents: write
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
steps:
|
|
- name: clean workspace
|
|
run: rm -rf .build dist
|
|
|
|
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
|
|
- name: write version files
|
|
env:
|
|
# github.ref_name (evaluated by Actions) instead of $GITHUB_REF_NAME,
|
|
# which is only injected by runner >= 2.290 — empty on older
|
|
# self-hosted runners.
|
|
REF_NAME: ${{ github.ref_name }}
|
|
run: |
|
|
if [ -z "${REF_NAME:-}" ]; then
|
|
echo "REF_NAME is not set" >&2
|
|
exit 1
|
|
fi
|
|
VERSION="${REF_NAME#v}"
|
|
printf '{ "version": "%s" }\n' "$VERSION" > static/version.json
|
|
sed -i '' "s/^version = \".*\"/version = \"$VERSION\"/" desktop/src-tauri/Cargo.toml
|
|
sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" desktop/src-tauri/tauri.conf.json
|
|
sed -i '' "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml
|
|
sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" desktop/package.json
|
|
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
|
|
echo "Wrote version $VERSION to all version files"
|
|
|
|
- name: build macOS arm64
|
|
env:
|
|
SSL_CERT_FILE: /etc/ssl/cert.pem
|
|
REQUESTS_CA_BUNDLE: /etc/ssl/cert.pem
|
|
run: |
|
|
command -v zstd
|
|
command -v uv >/dev/null 2>&1 || brew install uv
|
|
uv python install cpython-3.12-macos-aarch64-none
|
|
ARM64_PYTHON="$(uv python find cpython-3.12-macos-aarch64-none)"
|
|
scripts/macos/make-iconset.sh
|
|
ARCH=arm64 VERSION="$VERSION" PYTHON_BIN="$ARM64_PYTHON" scripts/macos/make-runtime-pack.sh
|
|
ARCH=arm64 VERSION="$VERSION" scripts/macos/make-app.sh
|
|
ARCH=arm64 VERSION="$VERSION" scripts/macos/make-dmg.sh
|
|
|
|
- name: build macOS x64
|
|
env:
|
|
SSL_CERT_FILE: /etc/ssl/cert.pem
|
|
REQUESTS_CA_BUNDLE: /etc/ssl/cert.pem
|
|
run: |
|
|
command -v zstd
|
|
if ! arch -x86_64 /usr/bin/true >/dev/null 2>&1; then
|
|
echo "ERROR: Rosetta 2 is required to build the x64 runtime on this agent." >&2
|
|
exit 1
|
|
fi
|
|
rustup default stable
|
|
rustup target add x86_64-apple-darwin
|
|
command -v uv >/dev/null 2>&1 || brew install uv
|
|
uv python install cpython-3.12-macos-x86_64-none
|
|
X64_PYTHON="$(uv python find cpython-3.12-macos-x86_64-none)"
|
|
ARCH=x64 VERSION="$VERSION" PYTHON_BIN="$X64_PYTHON" scripts/macos/make-runtime-pack.sh
|
|
ARCH=x64 VERSION="$VERSION" scripts/macos/make-app.sh
|
|
ARCH=x64 VERSION="$VERSION" scripts/macos/make-dmg.sh
|
|
|
|
- name: inspect artifacts
|
|
run: |
|
|
test -f .build/macos-dist/StemDeck-macOS-arm64.dmg
|
|
test -f .build/StemDeck-runtime-macOS-arm64.tar.zst
|
|
test -f .build/macos-dist/SHA256SUMS-macOS-arm64.txt
|
|
test -f .build/macos-dist/StemDeck-macOS-x64.dmg
|
|
test -f .build/StemDeck-runtime-macOS-x64.tar.zst
|
|
test -f .build/macos-dist/SHA256SUMS-macOS-x64.txt
|
|
cat .build/macos-dist/SHA256SUMS-macOS-arm64.txt
|
|
cat .build/macos-dist/SHA256SUMS-macOS-x64.txt
|
|
du -sh .build/macos-dist/StemDeck-macOS-arm64.dmg .build/StemDeck-runtime-macOS-arm64.tar.zst
|
|
du -sh .build/macos-dist/StemDeck-macOS-x64.dmg .build/StemDeck-runtime-macOS-x64.tar.zst
|
|
if find desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/StemDeck.app \
|
|
\( -iname '*python*' -o -iname '*torch*' -o -iname '*ffmpeg*' -o -iname '*ffprobe*' \) |
|
|
grep -q .; then
|
|
echo "arm64 StemDeck.app contains runtime binaries that should stay outside the DMG." >&2
|
|
exit 1
|
|
fi
|
|
if find desktop/src-tauri/target/x86_64-apple-darwin/release/bundle/macos/StemDeck.app \
|
|
\( -iname '*python*' -o -iname '*torch*' -o -iname '*ffmpeg*' -o -iname '*ffprobe*' \) |
|
|
grep -q .; then
|
|
echo "x64 StemDeck.app contains runtime binaries that should stay outside the DMG." >&2
|
|
exit 1
|
|
fi
|
|
for arch in arm64 x64; do
|
|
mountpoint="$(mktemp -d /tmp/stemdeck-dmg.XXXXXX)"
|
|
hdiutil attach ".build/macos-dist/StemDeck-macOS-$arch.dmg" -readonly -nobrowse -mountpoint "$mountpoint"
|
|
trap 'hdiutil detach "$mountpoint" >/dev/null 2>&1 || true; rmdir "$mountpoint" >/dev/null 2>&1 || true' EXIT
|
|
test -d "$mountpoint/StemDeck.app"
|
|
test -L "$mountpoint/Applications"
|
|
test -f "$mountpoint/README-macOS.txt"
|
|
test -f "$mountpoint/THIRD_PARTY_NOTICES.txt"
|
|
hdiutil detach "$mountpoint"
|
|
rmdir "$mountpoint"
|
|
trap - EXIT
|
|
done
|
|
|
|
- name: upload artifacts
|
|
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
|
|
with:
|
|
files: |
|
|
.build/macos-dist/StemDeck-macOS-arm64.dmg
|
|
.build/StemDeck-runtime-macOS-arm64.tar.zst
|
|
.build/macos-dist/SHA256SUMS-macOS-arm64.txt
|
|
.build/macos-dist/StemDeck-macOS-x64.dmg
|
|
.build/StemDeck-runtime-macOS-x64.tar.zst
|
|
.build/macos-dist/SHA256SUMS-macOS-x64.txt
|