summaryrefslogtreecommitdiff
path: root/release_process.mdwn
blob: 9243a7c6c62d3200b151e3d5b1035c3ab113d1be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
[[!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 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

-   libwapcaplet
-   libparserutils
-   libcss
-   libhubbub
-   libdom
-   libnsbmp
-   libnsgif
-   librosprite
-   libnsfb
-   libsvgtiny
-   nsgenbind
-   libutf8proc
-   libnsutils
-   libnspsl
-   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/`<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.`  
`To `[`ssh://nsgit@git.netsurf-browser.org/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)  
` * [new tag]         release/1.0 -> release/1.0`

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

-   copyright years
-   amiga/pkg/netsurf.readme and amiga/pkg/netsurf\_os3.readme
-   windows/res/installer.nsi

create a branch release/<version number> and switch to it

`git branch release/3.1`  
`git checkout release/3.1`

update desktop/version.c to something like

`#include "testament.h"`  
  
`const char * const netsurf_version = "3.6 (25th April 2016)";`  
`const int netsurf_version_major = 3;`  
`const int netsurf_version_minor = 6;`

update amiga/version.c along the same lines

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

`git push origin release/3.1`

finally tag the branch for release

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

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/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)  
` * [new tag]         release/3.1 -> release/3.1`

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.1`

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

`git add desktop/version.c`  
`git commit -m 'update version info 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`](ssh://nsgit@git.netsurf-browser.org/netsurf-all.git)

ensure ther submodules are initialised

`git submodule init`

output will be something like

`Submodule 'buildsystem' () registered for path 'buildsystem'`  
`Submodule 'libcss' () registered for path 'libcss'`  
`Submodule 'libdom' () registered for path 'libdom'`  
`Submodule 'libhubbub' () registered for path 'libhubbub'`  
`Submodule 'libnsbmp' () registered for path 'libnsbmp'`  
`Submodule 'libnsfb' () registered for path 'libnsfb'`  
`Submodule 'libnsgif' () registered for path 'libnsgif'`  
`Submodule 'libparserutils' () registered for path 'libparserutils'`  
`Submodule 'libpencil' () registered for path 'libpencil'`  
`Submodule 'librosprite' () registered for path 'librosprite'`  
`Submodule 'librufl' () registered for path 'librufl'`  
`Submodule 'libsvgtiny' () registered for path 'libsvgtiny'`  
`Submodule 'libwapcaplet' () registered for path 'libwapcaplet'`  
`Submodule 'netsurf' () registered for path 'netsurf'`  
`Submodule 'nsgenbind' () registered for path 'nsgenbind'`

ensure the submodules are updated

`git submodule update`

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

`make release-checkout`

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 for 3.1 release'`

finally tag the branch for release

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

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/buildsystem.git`](ssh://nsgit@git.netsurf-browser.org/buildsystem.git)  
` * [new tag]         release/3.1 -> release/3.1`

If that verifies as correct

`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