mirror of
https://github.com/Twigpine/zero.git
synced 2026-11-11 23:40:28 -10:00
* ci(release): build all 5 platforms (add Intel macOS + Linux arm64 runners) zero-release package builds + smoke-tests natively, so each target needs its own runner. The matrix had only ubuntu-latest/macos-latest/windows-latest (linux-x64, macos-arm64, windows-x64) — so install.sh/install.ps1 404 for Intel Macs (macos-x64) and Linux arm64. Adds macos-13 (Intel) and ubuntu-24.04-arm so the release covers all platforms the installers resolve. * ci(release): use macos-15-intel for the Intel macOS leg macos-13 was retired (June 2026) so the matrix leg would never schedule. macos-15-intel is the current GitHub-hosted Intel x64 runner (supported through Aug 2027). Addresses CodeRabbit review on #321.
95 lines
3.8 KiB
YAML
95 lines
3.8 KiB
YAML
name: Release Artifacts
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: Git ref to package. Defaults to the workflow branch.
|
|
required: false
|
|
type: string
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
package:
|
|
name: Package (${{ matrix.os }})
|
|
runs-on: ${{ matrix.os }}
|
|
permissions:
|
|
contents: write # create/upload the GitHub Release on a tag push
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# `zero-release package` builds + smoke-tests natively (host==target), so each
|
|
# target platform needs its own native runner. These five cover the platforms
|
|
# install.sh / install.ps1 / the npm wrapper resolve.
|
|
os:
|
|
- ubuntu-latest # linux-x64
|
|
- ubuntu-24.04-arm # linux-arm64
|
|
- macos-latest # macos-arm64 (Apple Silicon)
|
|
- macos-15-intel # macos-x64 (Intel)
|
|
- windows-latest # windows-x64
|
|
|
|
steps:
|
|
- name: Checkout
|
|
if: ${{ github.event_name != 'workflow_dispatch' || inputs.ref == '' }}
|
|
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
|
|
- name: Checkout requested ref
|
|
if: ${{ github.event_name == 'workflow_dispatch' && inputs.ref != '' }}
|
|
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
with:
|
|
ref: ${{ inputs.ref }}
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
|
|
- name: Test
|
|
run: go test ./...
|
|
|
|
# zero-release names assets zero-v<package.json version>-… while the release
|
|
# is published under the pushed git tag. If they disagree, install.sh/install.ps1
|
|
# and the npm postinstall all build a download URL that 404s. Fail fast so a
|
|
# forgotten version bump can never publish mis-versioned, un-installable assets.
|
|
- name: Check tag matches package.json version
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }}
|
|
shell: bash
|
|
run: |
|
|
pkg_version="$(node -p "require('./package.json').version")"
|
|
if [ "v$pkg_version" != "$GITHUB_REF_NAME" ]; then
|
|
echo "::error::tag $GITHUB_REF_NAME does not match package.json version v$pkg_version — bump package.json before tagging so the release assets and the npm package agree." >&2
|
|
exit 1
|
|
fi
|
|
echo "tag $GITHUB_REF_NAME matches package.json version v$pkg_version."
|
|
|
|
- name: Package release artifact
|
|
run: go run ./cmd/zero-release package
|
|
|
|
- name: Verify release checksums
|
|
run: go run ./cmd/zero-release verify
|
|
|
|
- name: Upload package
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
with:
|
|
name: zero-${{ runner.os }}-${{ runner.arch }}
|
|
path: dist/release/*
|
|
if-no-files-found: error
|
|
|
|
# On a `v*` tag push, publish the packaged archive + .sha256 as GitHub Release
|
|
# assets so the documented `scripts/install.sh` / `install.ps1` path (which reads
|
|
# /releases/latest) works. Uses the preinstalled `gh` (no new action dependency);
|
|
# each matrix OS creates the release if absent (best-effort) then uploads its own
|
|
# assets with --clobber. NOTE: maintainers must push the tag — this never tags.
|
|
- name: Publish to GitHub Release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }}
|
|
shell: bash
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
tag="${GITHUB_REF_NAME}"
|
|
gh release create "$tag" --repo "$GITHUB_REPOSITORY" --title "$tag" --generate-notes 2>/dev/null || true
|
|
gh release upload "$tag" dist/release/* --repo "$GITHUB_REPOSITORY" --clobber
|