Skip to content
David Adam edited this page Apr 30, 2024 · 31 revisions

Before the release

  • Write the release notes.
  • Branch the tree to the appropriate "Integration" branch.

Prep the source tree

  • Note the release date in the release notes and commit this change: git add CHANGELOG.rst; git commit -m "Release $VERSION"
  • Tag this commit: git tag -a -m "Release $VERSION" $VERSION -s (drop the -s to avoid GPG-signing the tag.
  • Push to upstream: git push --tags origin Integration_$VERSION

Create a clean checkout and build the tarball

mkdir ~/fish_built/release; cd ~/fish_built/release
git clone https://github.com/fish-shell/fish-shell/ -b $VERSION fish-$VERSION
cd fish-$VERSION; ./build_tools/make_tarball.sh

You should get the path to the tarball (something like ~/fish_built/fish-$VERSION.tar.xz and a SHA-256 sum.)

Sign the tarball:

gpg --sign --detach --armor fish-$VERSION.tar.xz

Build the Linux source packages.

# Copy `~/fish_built/fish-$VERSION.tar.xz` to the staging area 
cp ~/fish_built/fish-$VERSION.tar.xz ~/fish_built/release/
# Make the Debian staging area
mkdir -p ~/fish_built/release/dpkgs; and cd ~/fish_built/release/dpkgs; and ln -s ../fish-$VERSION.tar.xz fish_$VERSION.orig.tar.xz
# Unpack the tarball
tar xf fish_$VERSION.orig.tar.xz; and cd fish-$VERSION
# Make the vendor tarball
build_tools/make_vendor_tarball.sh
ln -s ~/fish_built/fish-$VERSION-vendor.tar.xz ../fish_$VERSION.orig-cargo-vendor.tar.xz
mkdir cargo-vendor
tar -C cargo-vendor -x -f ../fish_$VERSION.orig-cargo-vendor.tar.xz
# (uupdate is an alternative method if you have a previous version available).
# Copy in the Debian packaging information
cp -r ~/fish_built/release/fish-$VERSION/debian debian
cp -r ~/fish-build/debian/changelog debian/changelog
# Update the Debian changelog for the new version - interactive
dch --newversion "$VERSION-1" --distribution testing

The Debian changelog needs to be inspected.

# Build the package for Debian on OBS (use your GPG key ID)
debuild -S -k3E03B4E97C71CD1C0E94B287FCA50E480C273BBA -d
# Set up an array for the Ubuntu packages
set -g PPA_SERIES (python3 -c "
from launchpadlib.launchpad import Launchpad
launchpad = Launchpad.login_anonymously('fish shell build script', 'production', '~/.cache', version='devel')                  
ubu = launchpad.projects('ubuntu')
print('\n'.join(x['name'] for x in ubu.series.entries if x['supported'] == True and x['name'] not in ('trusty', 'xenial', 'bionic')))   
"
)
# Build the Ubuntu source packages
for series in $PPA_SERIES
    sed -i -e "s/$VERSION-1)/$VERSION-1~$series)/" -e "s/testing/$series/" debian/changelog
    debuild -S -sa -k3E03B4E97C71CD1C0E94B287FCA50E480C273BBA -d
    sed -i -e "s/$VERSION-1~$series)/$VERSION-1)/" -e "s/$series/testing/" debian/changelog
end

Upload the Ubuntu packages

  • cd ~/fish_built/release/dpkgs
  • for i in fish_$VERSION-1\~*.changes; dput fish-release-3 $i; end (or other appropriate PPA defined in ~/.dput.cf)

Prep the OBS repository

mkdir ~/fish_built/obs/; cd ~/fish_built/obs;
osc checkout shells:fish:release:3/fish; cd shells:fish:release:3/fish
rm *.tar.* *.dsc
ln -s ~/fish_built/release/dpkgs/fish_$VERSION.orig.tar.xz .
ln -s ~/fish_built/release/dpkgs/fish_$VERSION.orig-cargo-vendor.tar.xz .
ln -s ~/fish_built/release/dpkgs/fish_$VERSION-1.debian.tar.xz .
ln -s ~/fish_built/release/dpkgs/fish_$VERSION-1.dsc .
set RPMVERSION (echo $VERSION |sed -e 's/-/+/' -e 's/-/./g')
sed -e "s/@VERSION@/$VERSION/g" -e "s/@RPMVERSION@/$RPMVERSION/g" < ~/fish_built/release/fish-$VERSION/fish.spec.in > fish.spec

STOP HERE: check the fish.spec file

osc addremove; osc commit -m "New release: $VERSION"

Create the Mac packages

  • ./build_tools/make_pkg.sh
  • ./build_tools/mac_notarize.sh ~/fish_built/fish-$VERSION.pkg <AC_USER>
  • ./build_tools/mac_notarize.sh ~/fish_built/fish-$VERSION.app.zip <AC_USER>

The Mac packages consist of a Mac installer package .pkg and a double-clickable app. Anyone can build these, however both must be code-signed and notarized to launch successfully on users' machines. ridiculous_fish currently holds the code signing certs.

Upload to GitHub

  • Add the release notes, tarball, tarball signature and the Mac package/installer
  • For major/minor (X.X.0) releases, add the release notes for the betas (if any) as well. Consider adding the preceding release's notes for point releases.
  • Point people away from the GitHub generated tarballs with the following text:

Download links: To download the source code for fish, we suggest the file named "fish-$VERSION.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly. The SHA-256 sum of this file is . A GPG signature from <KEY NAME/ID> is available as "fish-$VERSION.tar.xz.asc".

Update the website

Send a release announcement

  • Email the fish-users mailing list. The build_tools/list_committers_since.fish script can be used to generate a list of new and returning committers, which helps to recognise the contribution they have made (an idea pinched from the Git release announcements).
  • Consider cc:ing the various distribution maintainers if you have their address to hand

After the release

There are a handful of maintenance things that can be done at almost any time, but right before the release is definitely the wrong time. Consider:

  • Running make lint-all
  • Merge master into coverity-scan-master