97 lines
3.0 KiB
YAML
97 lines
3.0 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "v*"
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Tag to (re)release (e.g. v0.1.0)"
|
|
required: true
|
|
type: string
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
goreleaser:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v6
|
|
with:
|
|
go-version-file: go.mod
|
|
cache: true
|
|
|
|
- name: Stash GoReleaser config
|
|
run: cp .goreleaser.yaml /tmp/.goreleaser.yaml
|
|
|
|
- name: Checkout release tag
|
|
if: ${{ github.event_name == 'workflow_dispatch' }}
|
|
env:
|
|
RELEASE_TAG: ${{ inputs.tag }}
|
|
run: git checkout "$RELEASE_TAG"
|
|
|
|
- name: Resolve release tag
|
|
id: release
|
|
env:
|
|
DISPATCH_TAG: ${{ inputs.tag }}
|
|
REF_NAME: ${{ github.ref_name }}
|
|
run: |
|
|
tag="${DISPATCH_TAG:-$REF_NAME}"
|
|
if [ -z "$tag" ]; then
|
|
echo "::error::could not resolve release tag"
|
|
exit 1
|
|
fi
|
|
echo "tag=$tag" >>"$GITHUB_OUTPUT"
|
|
echo "version=${tag#v}" >>"$GITHUB_OUTPUT"
|
|
|
|
- name: Verify Homebrew tap token
|
|
env:
|
|
HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }}
|
|
run: |
|
|
if [ -z "$HOMEBREW_TAP_GITHUB_TOKEN" ]; then
|
|
echo "::error::HOMEBREW_TAP_GITHUB_TOKEN is missing; cannot publish Homebrew formula"
|
|
exit 1
|
|
fi
|
|
code="$(curl -sS -o /dev/null -w '%{http_code}' \
|
|
-H "Authorization: Bearer $HOMEBREW_TAP_GITHUB_TOKEN" \
|
|
-H "Accept: application/vnd.github+json" \
|
|
https://api.github.com/repos/openclaw/homebrew-tap || true)"
|
|
if [ "$code" != "200" ]; then
|
|
echo "::error::HOMEBREW_TAP_GITHUB_TOKEN cannot access openclaw/homebrew-tap (HTTP $code)"
|
|
exit 1
|
|
fi
|
|
|
|
- name: GoReleaser
|
|
uses: goreleaser/goreleaser-action@v7
|
|
with:
|
|
distribution: goreleaser
|
|
version: "~> v2"
|
|
args: release --clean --config /tmp/.goreleaser.yaml
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
HOMEBREW_TAP_GITHUB_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }}
|
|
|
|
- name: Verify Homebrew formula
|
|
env:
|
|
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_GITHUB_TOKEN }}
|
|
RELEASE_VERSION: ${{ steps.release.outputs.version }}
|
|
run: |
|
|
formula="$(gh api repos/openclaw/homebrew-tap/contents/Formula/crabbox.rb --jq '.content' | base64 --decode)"
|
|
if ! grep -q "version \"$RELEASE_VERSION\"" <<<"$formula"; then
|
|
echo "::error::openclaw/homebrew-tap Formula/crabbox.rb was not updated to $RELEASE_VERSION"
|
|
exit 1
|
|
fi
|
|
if ! grep -q "releases/download/v$RELEASE_VERSION/" <<<"$formula"; then
|
|
echo "::error::openclaw/homebrew-tap Formula/crabbox.rb does not point at v$RELEASE_VERSION assets"
|
|
exit 1
|
|
fi
|