Subnets served per interface, pools, reservations, options at three levels, leases in SQLite saved before the ACK, ping and decline conflict checks, validated changes with history and undo, users and tokens, an audit log, a Kea importer, a sandboxed systemd unit and Debian packages. Tested with real udhcpc and dhcpcd clients in Docker (scripts/e2e.sh). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
70 lines
2.3 KiB
YAML
70 lines
2.3 KiB
YAML
# 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
|