netatalk.io

Release Process


Process for preparing and publishing Netatalk releases. The intended audience for this document is Netatalk project maintainers.

Making a stable release

First, use an editor to edit ./meson.build and update the “version” line near the top. Then:

$ echo "3.2.0" > VERSION
$ git commit -a -m "Bump version to 3.2.0"

(We temporarily need to update the version number in two places, because of supporting both Meson and Autotools build systems.)

$ vi NEWS
$ git commit -a -m "Update NEWS"
$ meson setup build -Dwith-manual=true -Dwith-tests=true -Dwith-docbook-path=/path/to/docbook
$ meson compile -C build
$ git add man
$ git commit -a -m "Generate manpages from XML"

Read more about how to work with Documentation

$ cd build
$ meson dist
$ git tag netatalk-3-2-0
$ git push origin netatalk-3-2-0

Versioning Scheme

This project uses a custom variant of Semantic Versioning.

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes
  2. MINOR version when you add functionality, deprecate unused functionality, or introduce changes that require modification to configuration in existing deployment
  3. PATCH version when you make backward compatible bug fixes, or add minor functionality

Historically, this project has used alpha and beta suffices for early major and minor releases, but this is not a practice at the time of writing.

Docker

Build and publish netatalk Docker images.

Environment Preparation

  1. Install Docker Engine in your development environment.

  2. Create and enable a cross-compilation builder.

docker buildx create --name mybuilder --bootstrap --use
  1. Generate an auth token with your Docker Hub account (read/write/delete privileges).

  2. Log in with your Docker Hub user, and pass the auth token when prompted.

docker login -u yourusername
  1. Cross compile Docker images with docker buildx, and push to the Docker Hub container registry. We currently cross compile for 32bit/64bit x86, and 32bit/64bit ARM.

  2. Tag both “latest” as well as the current release version, e.g. “3.2.0”.

docker buildx build --push --platform=linux/386,linux/amd64,linux/arm/v6,linux/arm64 . -t netatalk/netatalk3:latest -t netatalk/netatalk3:3.2.0
  1. That’s it! Confirm that the new image is published in the right repository: https://hub.docker.com/u/netatalk

Webmin Module

If there are new or renamed config file options, or if some config file option has a new default, please update the webmin-module code, tag a new release, and create a release tarball.

Include a mention of the new webmin module release in the release notes for the new netatalk version.

Debian deb packaging

This section is written from the perspective of a Debian package maintainer, but can be leveraged to build your own deb package for personal use or unofficial distribution. Please note that this is just one of many ways to package software for Debian. When in doubt, refer to official Debian documentation rather than this section.

The modified Debian source code is managed in git in Debian Salsa. You can also get it with the apt source netatalk command (requires your release to have the package.)

Environment prep

First off, install all Debian packaging tools and configure the environment.

Then, read through the rest of the chapters in the linked manual before proceeding.

Leverage chroot environments to have a clean system for building and testing. Note that debuild will create deb packages for the specific OS version it is running on, so chroot enables you to control this.

If needed, set up cross-compilation to generate debs for architectures other than your actual machine.

Prepare the Debian Source

  1. Download the latest netatalk release tarball (should be non-bootstrapped)
  2. Rename the tarball to match the debuild naming scheme, typically something like “netatalk_3.2.0.orig.tar.xz”
  3. In the same dir as the tarball, clone the Debian Source from Salsa (see above)
  4. Fetch the upstream references (create a new remote for the upstream git repo if needed.)

New netatalk release (automated)

When working off the latest mainline release series (e.g. 3.x) you can use gbp to automate the process.

  1. If you don’t have a remote called “upstream”, create it first git remote add upstream https://github.com/Netatalk/netatalk.git
  2. Fetch the latest references from upstream, git fetch upstream
  3. Make sure the following branches have local checkouts: debian/latest upstream/latest pristine-tar
  4. Merge the latest release tag, gbp import-orig --upstream-vcs-tag=netatalk-x-y-z --uscan
  5. Indicate the latest version number when prompted, e.g. “3.2.0”

A successful run should look something like this:

gbp:info: Launching uscan...
Newest version of netatalk on remote site is 3.2.0, local version is 3.1.18
       (mangled local version is 3.1.18)
 => Newer package available from:
        => https://github.com/Netatalk/netatalk/archive/refs/tags/netatalk-3-2-0.tar.gz
uscan warn: No files matched excluded pattern as the last matching glob: etc/spotlight/sparql_parser.c
uscan warn: No files matched excluded pattern as the last matching glob: etc/spotlight/sparql_parser.h
uscan warn: No files matched excluded pattern as the last matching glob: etc/spotlight/spotlight_rawquery_lexer.c
uscan warn: No files matched excluded pattern as the last matching glob: include/atalk/tdb.h
uscan warn: No files matched excluded pattern as the last matching glob: libatalk/talloc/talloc.c
uscan warn: No files matched excluded pattern as the last matching glob: libatalk/tdb/*
Successfully repacked ../netatalk--3-2-0.tar.gz as ../netatalk_3.2.0.orig.tar.xz, deleting 1 files from itgbp:info: Using uscan downloaded tarball ../netatalk_3.2.0.orig.tar.xz
What is the upstream version? [3.2.0] 
gbp:info: Importing '../netatalk_3.2.0.orig.tar.xz' to branch 'upstream/latest' (filtering out ['*/.git*'])...
gbp:info: Source package is netatalk
gbp:info: Upstream version is 3.2.0
gbp:info: Replacing upstream source on 'debian/latest'
gbp:info: Successfully imported version 3.2.0 of ../netatalk_3.2.0.orig.tar.xz

New netatalk release (manual)

When working off older branches, i.e. 2.x, the following manual process can be used.

  1. Check out the upstream/old branch (or equivalent)
  2. Fetch references from the upstream remote
  3. Do a merge commit with the upstream release tag
  4. Resolve any conflicts (typically due to the Debian source removing certain files.)
  5. Tag upstream/x.y.z (make sure you follow the naming convention)
  6. Check out the `debian/old branch (or equivalent)
  7. Do a merge commit with upstream/x.y.z
  8. Resolve any conflicts
  9. From the root of the salsa source, run pristine-tar commit ../netatalk2_x.y.z.orig.tar.xz upstream/x.y.z to create a pristine tar commit in the “pristine-tar” branch

Local changes to the deb

  1. Run ./debian/copyright-check and commit any changes to “./debian/copyright_hints”
  2. Manually merge relevant updates from “copyright_hints” to “copyright”
  3. Make appropriate updates to any other files under “debian/”
  4. Remove any obsoleted patches under “debian/patches”
  5. Unfuzz patches that apply with fuzz, or not at all
  6. If needed, create new patches with dquilt and put them under “debian/patches”
  7. From the root of the Debian source, run dch -v x.y.z-n (with appropriate versioning numbers) to generate the changelog
  8. Write the changelog and commit
  9. From the root of the Debian source, run debuild
  10. If the build passes, check the lintian log
  11. If there are any lintian warnings or errors, fix them
  12. Test the created deb package in the parent directory by installing it with dpgk
  13. Tag the release git tag x.y.z-n
  14. Push all branches (upstream/latest debian/latest pristine-tar) and tags (upstream/x.y.z debian/x.y.z-n) to remote
  15. You did it!

This is a mirror of the Netatalk GitHub Wiki. Please visit the original page if you want to correct an error or contribute new contents.

Last updated 2024-07-20