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
- Clone down
fish-site
and follow the "Making a New Release" instructions.
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
intocoverity-scan-master
Fish - The friendly interactive shell