This page is the operator guide for cutting an icey release.
Use it when you are preparing a new version, tagging it, and updating the package-manager artifacts that depend on the published GitHub source archive.
A real icey release has two parts:
The manual part stays in:
The mechanical part is handled by the top-level release helpers:
make releasemake release-checkmake release-pinStart from a clean, reviewed main branch with the release notes already written.
make release VERSION=2.4.0
git commit -am "release: prepare 2.4.0"
git tag 2.4.0
git push origin main 2.4.0
make release-finalize VERSION=2.4.0
git commit -am "build: pin release archives for 2.4.0"
git push origin mainWhat those steps do:
make release syncs VERSION, package recipe versions, Debian source metadata, Conan release metadata, and the public FetchContent examples.make release-finalize pins the release archive hashes and then verifies that VERSION, package metadata, docs examples, and the matching CHANGELOG.md heading all line up.2.4.0After the tag is pushed, the GitHub tarball becomes immutable. That is when archive hashes should be pinned.
The combined post-tag helper is:
make release-finalize VERSION=2.4.0That runs:
make release-pin-conan VERSION=2.4.0make release-pin-vcpkg VERSION=2.4.0make release-pin-arch VERSION=2.4.0make release-pin-homebrew VERSION=2.4.0make release-pin-alpine VERSION=2.4.0make release-pin-macports VERSION=2.4.0make release-pin-spack VERSION=2.4.0make release-pin-conda VERSION=2.4.0make release-check VERSION=2.4.0Local Conan packaging is version-synced by make release, and make release-pin-conan pins the post-tag archive hash used by the recipe.
Use it to verify the shipped recipe still builds:
make package-conanCurrent scope:
packaging/conan/conanfile.pypackaging/conan/conandata.ymlpackaging/conan/test_packageCurrent non-scope:
The vcpkg port in this repo is an overlay/custom-registry seed, not an upstream microsoft/vcpkg port checkout.
Release sequence:
make release VERSION=2.4.0
git tag 2.4.0
git push origin main 2.4.0
make release-pin-vcpkg VERSION=2.4.0
make package-vcpkgWhat gets updated:
packaging/vcpkg/icey/vcpkg.json version is synced by make releasepackaging/vcpkg/icey/portfile.cmake archive ref and SHA512 are pinned by make release-pin-vcpkgThe Arch packaging in this repo is the AUR seed:
Release sequence:
make release VERSION=2.4.0
git tag 2.4.0
git push origin main 2.4.0
make release-pin-arch VERSION=2.4.0
make package-archWhat gets updated:
pkgver and pkgrel are synced by make releasemake releasemake release-pin-archFor a real AUR publish, copy the final PKGBUILD and .SRCINFO into the AUR repo after the hash is pinned and the local makepkg run passes.
The Homebrew packaging in this repo is a tap-local seed:
Release sequence:
make release VERSION=2.4.0
git tag 2.4.0
git push origin main 2.4.0
make release-pin-homebrew VERSION=2.4.0
brew install --formula ./packaging/homebrew/Formula/libdatachannel.rb
brew install --formula ./packaging/homebrew/Formula/icey.rbWhat gets updated:
version, source URL, and placeholder SHA are synced by make releasemake release-pin-homebrewThe icey formula depends on the tap-local libdatachannel formula because Homebrew core does not currently ship that dependency.
The Debian packaging in this repo is a source-package seed intended for Debian-style apt repositories and Launchpad PPAs:
Release sequence:
make release VERSION=2.4.0
make release-check VERSION=2.4.0
make package-debian-sourceFor a Launchpad target series, set the distribution explicitly:
DEBIAN_DISTRIBUTION=noble make package-debian-sourceWhat gets updated:
make releasemake package-debian-source stages a full source package under build/package/debian/CHANGELOG.md and ROADMAP.mdmake release VERSION=x.y.zmake release-finalize VERSION=x.y.zmake package-debian-source after the version sync