Releasing a new version of NetSurf and libraries

firstly the libraries and tool sources should be created (only if they need an update)

Order to release components in (if they require releasing)

buildsystem is first and has an extra step

Then libraries using the core buildsystem

  • libnspsl
  • libnslog
  • libnsutils
  • libwapcaplet
  • libparserutils
  • libcss
  • libhubbub
  • libdom
  • libnsbmp
  • libnsgif
  • librosprite
  • libnsfb
  • libsvgtiny
  • nsgenbind
  • libutf8proc
  • libpencil
  • librufl

NetSurf itself is last

Release of the buildsystem

The buildsystem follows exactly the same process as below except there is an additional step

Because this is the buildsystem and provides the makefiles for all the other source builds you must go to the CI server and ensure the source-buildsystem job has successfully run and produced output in http://ci.netsurf-browser.org/builds/sources/

Release for projects using buildsystem

We perform all releases from git simply by pushing a release/>version number< tag

Before creating the tag you should do some basic checks

check the COMPONENT_VERSION in the root Makefile matches the version number you are releasing, if not change it and commit it so it does.

Any files that should not be put in the distribution archive must be placed in the .gitattributes file, as a minimum it should contain attributes for the .gitignore and gitattributes files e.g.

.gitignore export-ignore
.gitattributes export-ignore

in your clone do

git branch -vv

ensure the top commit looks right and is what you want to tag, for extra paranoia check the .git/config to ensure the origin is the correct server. You do not have to tag from master, for example if this is a maintenance release of an old edition and you are tagging from a branch etc. just ensure you are where you want the release to be.

Create the tag with

git tag -s -m 'Official Release' release/&gt;version number&lt;

Ensure the version number in the tag matches the component version.

Now run

make dist

if you get

Makefile:45: \*\*\* Component Version "1.0" and GIT tag version "1.1" do not match. Stop.

you did not get the tag and version numbers lined up, go back, remove your local tag with

git tag -d release/&lt;bad version&gt;

and try again

when you get a buildsystem-1.0.tar.gz (with appropriate version number) well done

Check the contents of the tar are what you intended to release and adjust if not (obviously you will need to remove your local tag and start over with fresh commits.

Next do a dry run push

git push -n --tags

ensure this shown the correct repo and the release tag something like

[gitano] Welcome to the NetSurf Gitano instance.
Counting objects: 1, done.
Writing objects: 100% (1/1), 800 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To ssh://nsgit@git.netsurf-browser.org/libutf8proc.git
 * [new tag]         release/1.3.1-3 -> release/1.3.1-3

If that verifies as correct

git push --tags
git push

and the release tag is pushed, too late now so be careful and check!

Releasing NetSurf

ensure you are at the commit from which you want to create the release

git branch -vv

Remember that if you are releasing X.Y then amiga calls that X.Y+1 so don't be confused and do update amiga stuff.

check the resources for the frontends you are releasing are up to date

  • credits file copyright years (at a minimum)
    • !NetSurf/Resources/en/credits.html,faf
    • !NetSurf/Resources/it/credits.html,faf
    • !NetSurf/Resources/nl/credits.html,faf
  • licence file copyright years (at a minimum)
    • !NetSurf/Resources/en/licence.html,faf
    • !NetSurf/Resources/it/licence.html,faf
    • !NetSurf/Resources/nl/licence.html,faf
  • frontends/amiga/pkg/netsurf.readme
  • frontends/amiga/pkg/netsurf_os3.readme
  • windows/res/installer.nsi

create a branch release/ and switch to it

git branch release/3.8
git checkout release/3.8

update desktop/version.c to something like

#include "testament.h"

const char * const netsurf_version = "3.8 (25th April 2016)";
const int netsurf_version_major = 3;
const int netsurf_version_minor = 8;

update frontends/amiga/version.c along the same lines

commit to the branch

git commit -m 'Update version files for release'

once you are sure everything is correct and committed push it to the repo

git push origin release/3.8

finally tag the branch for release

git tag -s -m 'Official Release' release/&lt;version number&gt;

Next do a dry run push

git push -n --tags

ensure this shown the correct repo and the release tag something like

[gitano] Welcome to the NetSurf Gitano instance.
To ssh://nsgit@git.netsurf-browser.org/netsurf.git
 * [new tag]         release/3.7 -> release/3.7

If that verifies as correct

git push --tags

and the release tag is pushed, too late now so be careful and check!

Next the branch must be merged back to master.

git checkout master
git merge -s ours heads/release/3.7

Then edit desktop/version.c and frontends/amiga/version.c ready for the next release cycle

git add desktop/version.c frontends/amiga/version.c
git commit -m 'Update version for next development cycle'

finally push master

git push origin master

Please do ensure you thoroughly check your work at each step as mistakes are hard to fix once pushed.

Releasing the all source

clone the all repo

git clone ssh://nsgit@git.netsurf-browser.org/netsurf-all.git

ensure ther submodules are initialised

git submodule init

output will be something like

Submodule 'buildsystem' (git://git.netsurf-browser.org/buildsystem.git) registered for path 'buildsystem'
Submodule 'libcss' (git://git.netsurf-browser.org/libcss.git) registered for path 'libcss'
Submodule 'libdom' (git://git.netsurf-browser.org/libdom.git) registered for path 'libdom'
Submodule 'libhubbub' (git://git.netsurf-browser.org/libhubbub.git) registered for path 'libhubbub'
Submodule 'libnsbmp' (git://git.netsurf-browser.org/libnsbmp.git) registered for path 'libnsbmp'
Submodule 'libnsfb' (git://git.netsurf-browser.org/libnsfb.git) registered for path 'libnsfb'
Submodule 'libnsgif' (git://git.netsurf-browser.org/libnsgif.git) registered for path 'libnsgif'
Submodule 'libnspsl' (http://git.netsurf-browser.org/libnspsl.git) registered for path 'libnspsl'
Submodule 'libnsutils' (http://git.netsurf-browser.org/libnsutils.git/) registered for path 'libnsutils'
Submodule 'libparserutils' (git://git.netsurf-browser.org/libparserutils.git) registered for path 'libparserutils'
Submodule 'libpencil' (git://git.netsurf-browser.org/libpencil.git) registered for path 'libpencil'
Submodule 'librosprite' (git://git.netsurf-browser.org/librosprite.git) registered for path 'librosprite'
Submodule 'librufl' (git://git.netsurf-browser.org/librufl.git) registered for path 'librufl'
Submodule 'libsvgtiny' (git://git.netsurf-browser.org/libsvgtiny.git) registered for path 'libsvgtiny'
Submodule 'libutf8proc' (http://git.netsurf-browser.org/libutf8proc.git/) registered for path 'libutf8proc'
Submodule 'libwapcaplet' (git://git.netsurf-browser.org/libwapcaplet.git) registered for path 'libwapcaplet'
Submodule 'netsurf' (git://git.netsurf-browser.org/netsurf.git) registered for path 'netsurf'
Submodule 'nsgenbind' (git://git.netsurf-browser.org/nsgenbind.git) registered for path 'nsgenbind'

ensure the submodules are updated

git submodule update

If a new submodule is required (e.g. new library) it must be added and then the .gitmodules file checked for correctnes. Once happy commit the changes. Note use the git uri for the submodules not http

git submodule add git://git.netsurf-browser.org/libnslog.git
vi .gitmodules
git commit -a -m 'Add libnslog submodule'

if adding a submodule the Makefile may require editing to build the library or utility

for each submodule listed above the correct revision must be set. A utility target is provided in the makefile

make checkout-release

This obtains the most recent release tag for each submodule and checks it out, equivalent to:

cd buildsystem
git checkout origin/HEAD
git checkout $(git describe --abbrev=0 --match="release/*" )
cd ..

once each submodule has been updated in the top level netsurf-all directory. The modified submodules should then be added ready for commit

git add buildsystem libcss libdom libhubbub libnsbmp libnsfb libnsgif libparserutils librosprite libsvgtiny libwapcaplet netsurf nsgenbind
git commit -m 'Update submodules for 3.7 release'

ensure the component version in the Makefile has been updated

finally tag the branch for release

git tag -s -m 'Official Release' release/<version number>

make the distribution tarball and check its contents

make dist

Next do a dry run push

git push -n --tags

ensure this shown the correct repo and the release tag something like

[gitano] Welcome to the NetSurf Gitano instance.
To ssh://nsgit@git.netsurf-browser.org/netsurf-all.git
 * [new tag]         release/3.7 -> release/3.7

If that verifies as correct

git push && git push --tags

and the release tag is pushed, too late now so be careful and check!

Bugtracker

The netsurf release version must be marked as released in mantis and the next development version added if its not already present