mirror of
https://github.com/karust/openserp.git
synced 2026-08-05 16:53:54 +08:00
101 lines
3.6 KiB
YAML
101 lines
3.6 KiB
YAML
name: Release
|
|
|
|
# Publishes binary archives to the GitHub release for a version tag.
|
|
# Docker images are published separately by docker.yml on the same tag.
|
|
|
|
on:
|
|
push:
|
|
tags: ["v*.*.*"]
|
|
# Manual re-run (e.g. after a workflow fix) — must be dispatched from a tag ref.
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
binaries:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Guard non-tag dispatch
|
|
if: github.event_name == 'workflow_dispatch' && !startsWith(github.ref, 'refs/tags/v')
|
|
run: |
|
|
echo "::error::Manual runs must be dispatched from a v*.*.* tag ref (use the 'Run workflow' ref selector)."
|
|
exit 1
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
# Full history + tags, needed to diff against the previous release tag
|
|
fetch-depth: 0
|
|
|
|
- name: Check tag matches cmd/root.go version
|
|
run: |
|
|
TAG_VERSION="${GITHUB_REF_NAME#v}"
|
|
CODE_VERSION=$(sed -nE 's/^[[:space:]]*version[[:space:]]*=[[:space:]]*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/p' cmd/root.go)
|
|
echo "tag=v${TAG_VERSION} code=${CODE_VERSION}"
|
|
if [ "$TAG_VERSION" != "$CODE_VERSION" ]; then
|
|
echo "::error::Git tag v${TAG_VERSION} does not match version \"${CODE_VERSION}\" in cmd/root.go. Bump cmd/root.go before tagging."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: "1.24"
|
|
cache: true
|
|
|
|
- name: Run unit tests
|
|
run: go test -count=1 ./...
|
|
|
|
- name: Build release binaries
|
|
run: |
|
|
VERSION="${GITHUB_REF_NAME#v}"
|
|
mkdir -p dist
|
|
for GOOS in darwin linux windows; do
|
|
for GOARCH in amd64 386 arm64; do
|
|
if [ "$GOOS" = "darwin" ] && [ "$GOARCH" = "386" ]; then
|
|
continue
|
|
fi
|
|
BIN="openserp"
|
|
if [ "$GOOS" = "windows" ]; then
|
|
BIN="openserp.exe"
|
|
fi
|
|
rm -f "$BIN"
|
|
echo "Building ${GOOS}/${GOARCH}..."
|
|
CGO_ENABLED=0 GOOS="$GOOS" GOARCH="$GOARCH" \
|
|
go build -trimpath -ldflags="-s -w" -o "$BIN" .
|
|
tar --create --gzip --file="dist/openserp-${GOOS}-${GOARCH}-${VERSION}.tgz" "$BIN"
|
|
rm -f "$BIN"
|
|
done
|
|
done
|
|
ls -lh dist/
|
|
|
|
# Most changes land directly on main without PRs, and GitHub's
|
|
# auto-generated notes only list merged PRs — so build the changelog
|
|
# from commit subjects since the previous tag. Auto-notes stay enabled
|
|
# below for the compare link and occasional contributor PR credits.
|
|
- name: Generate commit changelog
|
|
run: |
|
|
PREV_TAG=$(git describe --tags --abbrev=0 "${GITHUB_REF_NAME}^" 2>/dev/null || true)
|
|
{
|
|
echo "## Changes"
|
|
echo ""
|
|
if [ -n "$PREV_TAG" ]; then
|
|
echo "Commits since ${PREV_TAG}:"
|
|
echo ""
|
|
git log --no-merges --pretty='- %s' "${PREV_TAG}..${GITHUB_REF_NAME}"
|
|
else
|
|
git log --no-merges --pretty='- %s' "${GITHUB_REF_NAME}"
|
|
fi
|
|
} > release_notes.md
|
|
cat release_notes.md
|
|
|
|
# Creates the release if it doesn't exist, or attaches the archives to
|
|
# an existing one (e.g. a release drafted manually in the GitHub UI).
|
|
- name: Create GitHub release and upload binaries
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: dist/*.tgz
|
|
body_path: release_notes.md
|
|
generate_release_notes: true
|