# Builds and publishes a release when a version tag (v0.2.0, v1.0.0-rc.1) # is pushed: # * a Gitea release with the CHANGELOG notes, the linux tarballs, the CLI # for Linux, macOS and Windows, the .debs and SHA256SUMS; # * the .debs (amd64, arm64) in the owner's Debian package registry: # distribution "stable", or "testing" for a pre-release (a version # with a hyphen), which Gitea also marks as a pre-release. # # Needs a repository secret RELEASE_TOKEN: an access token of a user who # can write to the repository, with the write:repository and write:package # scopes. docs/development.md ("Releasing") has the steps. name: release on: push: tags: ["v*"] jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: Check the tag against VERSION and CHANGELOG.md run: | version=$(cat VERSION) if [ "$GITHUB_REF_NAME" != "v$version" ]; then echo "::error::tag $GITHUB_REF_NAME does not match VERSION ($version)" exit 1 fi # The release notes (a pre-release may use its final version's # section or Unreleased; see scripts/gitea-release.sh). if ! scripts/gitea-release.sh notes > /dev/null; then echo "::error::no release notes for $version in CHANGELOG.md" exit 1 fi - name: Tools run: | missing= for t in jq dpkg-deb curl; do command -v $t >/dev/null || missing="$missing $t"; done if [ -n "$missing" ]; then sudo=; [ "$(id -u)" = 0 ] || sudo=sudo $sudo apt-get update -qq && $sudo apt-get install -y -qq jq dpkg curl fi - name: Test run: make test - name: Build env: # Checked against VERSION above; don't depend on the checkout # having the tag. RELEASE_TAG: ${{ github.ref_name }} run: | export DEB_MAINTAINER="$(git log -1 --format='%an <%ae>')" make dist make cli-dist make deb DEB_ARCH=amd64 make deb DEB_ARCH=arm64 - name: Publish env: GITEA_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: scripts/gitea-release.sh