[[!meta title="Release Process"]]
[[!meta author="DanielSilverstone"]]
[[!meta date="2016-11-19T12:05:07Z"]]
[[!toc]]
Releasing a new version of NetSurf and libraries
================================================
firstly the libraries and tool sources must be created (only if they
need an update) and then the browser itself.
Process 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/>version number<
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/<bad version>
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!
Release the buildsystem
-----------------------
The buildsystem must be released first.
The buildsystem follows exactly the same process as releasing any
other component 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
Release libnspsl
----------------
The public suffix list library should be updated for each release
after the buildsystem..
Delete the public_suffix_list.dat file and run make, this will cause a
fresh copy to be downloaded and converted. You will need the correct
perl modules installed for this step.
Release libutf8proc
-------------------
May have to update to upstream unless upstream have added a pkg-config file
Other core buildsystem based libraries
--------------------------------------
libraries using the core buildsystem in order
- libwapcaplet
- libnslog
- libnsutils
- libparserutils
- libcss
- libhubbub
- libdom
- libnsbmp
- libnsgif
- librosprite
- libsvgtiny
- nsgenbind
- libnsfb
- libpencil
- librufl
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
- Fatmessages copyright year
resources/FatMessages
- credits file copyright years (at a minimum)
resources/en/credits.html
resources/it/credits.html
resources/nl/credits.html
- licence file copyright years (at a minimum)
resources/en/licence.html
resources/it/licence.html
resources/nl/licence.html
- amiga readme copyright files
frontends/amiga/pkg/netsurf.readme
frontends/amiga/pkg/netsurf\_os3.readme
- windows frontend installer
windows/res/installer.nsi
Ensure the ca-bundle is updated
https://curl.haxx.se/docs/caextract.html
create a branch releasing/ and switch to it
git branch releasing/3.8
git checkout releasing/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 tag the branch for release
git tag -s -m 'Official Release' release/
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
Next the branch must be merged back to master.
git checkout master
git merge -s ours heads/releasing/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'
Remove releasing branch
git branch -d releasing/3.8
Deleted branch releasing/3.8 (was 66fe825c8).
finally push master
git push origin master
If that verifies as correct
git push --tags
and the release tag is pushed, too late now so be careful and check!
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/
make the distribution tarball and check its contents
make dist
The git-archive-all module is needed for the dist step from
https://github.com/Kentzo/git-archive-all
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