1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 >Releasing a New Version</TITLE
8 CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
10 TITLE="Privoxy Developer Manual"
11 HREF="index.html"><LINK
13 TITLE="Testing Guidelines"
14 HREF="testing.html"><LINK
16 TITLE="Update the Webserver"
17 HREF="webserver-update.html"><LINK
20 HREF="../p_doc.css"><META
21 HTTP-EQUIV="Content-Type"
23 charset=ISO-8859-1"></HEAD
34 SUMMARY="Header navigation table"
43 >Privoxy Developer Manual</TH
65 HREF="webserver-update.html"
80 >6. Releasing a New Version</A
83 > When we release versions of <SPAN
87 our work leaves our cozy secret lab and has to work in the cold
88 RealWorld[tm]. Once it is released, there is no way to call it
89 back, so it is very important that great care is taken to ensure
90 that everything runs fine, and not to introduce problems in the
94 > So when releasing a new version, please adhere exactly to the
95 procedure outlined in this chapter.
98 > The following programs are required to follow this process:
106 > (GNU's version of make), autoconf, git,
114 NAME="VERSIONNUMBERS"
115 >6.1. Version numbers</A
118 > First you need to determine which version number the release will have.
122 > version numbers consist of three numbers,
123 separated by dots, like in X.Y.Z (e.g. 3.0.0), where:
130 > X, the version major, is rarely ever changed. It is increased by one if
131 turning a development branch into stable substantially changes the functionality,
132 user interface or configuration syntax. Majors 1 and 2 were
136 >, and 3 is the first stable
146 Y, the version minor, represents the branch within the major version.
147 At any point in time, there are two branches being maintained:
148 The stable branch, with an even minor, say, 2N, in which no functionality is
149 being added and only bug-fixes are made, and 2N+1, the development branch, in
150 which the further development of <SPAN
155 This enables us to turn the code upside down and inside out, while at the same time
156 providing and maintaining a stable version.
157 The minor is reset to zero (and one) when the major is incremented. When a development
158 branch has matured to the point where it can be turned into stable, the old stable branch
159 2N is given up (i.e. no longer maintained), the former development branch 2N+1 becomes the
160 new stable branch 2N+2, and a new development branch 2N+3 is opened.
165 > Z, the point or sub version, represents a release of the software within a branch.
166 It is therefore incremented immediately after each software release.
168 The point version is reset to zero when the minor changes.
171 > Stable branches work a little differently, since there should be
172 little to no development happening in such branches. Remember,
173 only bugfixes, which presumably should have had some testing
174 before being committed. Stable branches will then have their
175 version reported as <TT
178 >, during that period
179 between releases when changes are being added. This is to denote
180 that this code is <SPAN
187 as the release nears, the version is bumped according: e.g.
190 >3.0.1 -> 0.0.0 -> 3.0.2</TT
196 > In summary, the main Git trunk is the development branch where new
197 features are being worked on for the next stable series. This should
198 almost always be where the most activity takes place. There is always at
199 least one stable branch from the trunk, e.g now it is
203 >, which is only used to release stable versions.
204 Once the initial *.0 release of the stable branch has been done, then as a
205 rule, only bugfixes that have had prior testing should be committed to
206 the stable branch. Once there are enough bugfixes to justify a new
207 release, the version of this branch is again incremented Example: 3.0.0
208 -> 3.0.1 -> 3.0.2, etc are all stable releases from within the stable
209 branch. 3.1.x is currently the main trunk, and where work on 3.2.x is
210 taking place. If any questions, please post to the devel list
217 > committing to a stable branch!
220 > Developers should remember too that if they commit a bugfix to the stable
221 branch, this will more than likely require a separate submission to the
222 main trunk, since these are separate development trees within Git. If you
223 are working on both, then this would require at least two separate check
224 outs (i.e main trunk, <SPAN
230 > the stable release branch,
243 >6.2. Before the Release</A
246 > The following <SPAN
250 >must be done by one of the
253 > prior to each new release.
260 > Make sure that everybody who has worked on the code in the last
261 couple of days has had a chance to yell <SPAN
265 they have pending changes/fixes in their pipelines. Announce the
266 freeze so that nobody will interfere with last minute changes.
271 > Update the code status (CODE_STATUS="xxx") in <TT
275 "alpha", "beta" or "stable".
280 > Rebuild configure and GNUMakefile to make sure the updated values are being used.
289 CLASS="PROGRAMLISTING"
290 > $ autoheader && autoconf # rebuild configure
291 $ ./configure # rebuild GNUmakefile</PRE
301 > to update the sgml documentation source files.
306 > If action file processing has changed and is not backward-compatible,
307 make sure the "for-privoxy-version=x.y.z" minimum version number in
310 >default.action.master</TT
320 CLASS="PROGRAMLISTING"
322 #############################################################################
323 #MASTER# COMMENT: The minimum Privoxy version:
324 for-privoxy-version=3.0.11</PRE
331 > Create the change log:
340 CLASS="PROGRAMLISTING"
343 $ git log [last release tag]..master > /tmp/log
344 # get the commit log since the last release
345 $ utils/makeChangeLog /tmp/log > /tmp/change.log
346 # reformat the commit log</PRE
355 changes and group the changes under general headings like:
364 CLASS="PROGRAMLISTING"
366 - Action file improvements:
367 - Filter file improvements:
368 - General improvements:
369 - Documentation improvements:
370 - Build system improvements:
372 - Privoxy-Log-Parser:
373 - Privoxy-Regression-Test:</PRE
378 > Add the contents of <TT
388 >doc/source/changelog.sgml</TT
398 CLASS="PROGRAMLISTING"
399 > $ utils/changelog2doc.pl /tmp/change.log >| doc/source/changelog.sgml</PRE
406 > All developers should look at the <TT
410 make sure noteworthy changes are referenced.
415 > Update the announcement at <TT
417 >doc/webserver/announce.txt</TT
423 > All documentation should be rebuilt:
431 CLASS="PROGRAMLISTING"
436 $ make config-file</PRE
441 Finished docs should be then be committed to Git (for those
442 without the ability to build these). Some docs may require
443 rather obscure processing tools. <TT
447 the man page (and the html version of the man page)
448 fall in this category. README, the man page, AUTHORS, and config
449 should all also be committed to Git for other packagers. The
450 formal docs should be uploaded to the webserver. See the section
452 HREF="webserver-update.html"
454 >"Updating the webserver"</A
456 in this manual for details.
465 >Commit all files that were changed in the above steps!</I
475 > is also used for context
476 sensitive help for the CGI editor. This is version sensitive, so that
477 the user will get appropriate help for his/her release. So with
478 each release a fresh version should be uploaded to the webserver
479 (this is in addition to the main <I
483 link from the main page since we need to keep manuals for various
484 versions available). The CGI pages will link to something like
487 >https://www.privoxy.org/$(VERSION)/user-manual/</TT
489 needs to be updated for each new release and is done with the
498 > Tag all files in Git with the version number with
503 >git tag -s v_X_Y_Z</B
506 Don't use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
511 > Push the tag to the remote with
516 >git push origin v_X_Y_Z</B
523 > On the webserver, copy the user manual to a new top-level directory
527 >. This ensures that help links from the CGI
528 pages, which have the version as a prefix, will go into the right version of the manual.
529 If this is a development branch release, also symlink <TT
554 >6.3. Building and Releasing the Packages</A
557 > Now the individual packages can be built and released. Note that for
558 GPL reasons the first package to be released is always the source tarball.
567 > types of packages, including the source tarball,
572 >you must make sure that you build from clean sources by exporting
573 the right version from Git into an empty directory</I
575 > (just press return when
576 asked for a password):
585 CLASS="PROGRAMLISTING"
586 > mkdir dist # delete or choose different name if it already exists
588 git clone https://www.privoxy.org/git/privoxy.git
590 git checkout v_X_Y_Z</PRE
601 > a single bit, including, but not limited to
602 version information after export from Git. This is to make sure that
603 all release packages, and with them, all future bug reports, are based
604 on exactly the same code.
625 > Every significant release of Privoxy has included at least one
626 package that either had incorrect versions of files, missing files,
627 or incidental leftovers from a previous build process that gave
628 unknown numbers of users headaches to try to figure out what was
629 wrong. PLEASE, make sure you are using pristene sources, and are
630 following the prescribed process!
637 > Please find additional instructions for the source tarball and the
638 individual platform dependent binary packages below. And details
639 on the Sourceforge release process below that.
646 NAME="PACK-GUIDELINES"
647 >6.3.1. Note on Privoxy Packaging</A
650 > Please keep these general guidelines in mind when putting together
651 your package. These apply to <SPAN
674 write access to: all <TT
678 logfiles, and the <TT
682 need to determine the best way to do this for your platform.
687 > Please include up to date documentation. At a bare minimum:
699 > (top-level directory)
716 > (top-level directory)
733 > (top-level directory)
750 > (top-level directory, Unix-like
768 > (doc/webserver/user-manual/)
785 > (doc/webserver/faq/)
793 > Also suggested: <TT
795 >Developer Manual</TT
797 (doc/webserver/developer-manual) and <TT
801 (top-level directory). <TT
804 > and the manuals are
808 > The documentation has been designed such that the manuals are linked
809 to each other from parallel directories, and should be packaged
812 >privoxy-index.html</TT
814 included and can serve as a focal point for docs and other links of
815 interest (and possibly renamed to <TT
819 This should be one level up from the manuals. There is a link also
820 on this page to an HTMLized version of the man page. To avoid 404 for
821 this, it is in Git as
824 >doc/webserver/man-page/privoxy-man-page.html</TT
826 and should be included along with the manuals. There is also a
827 css stylesheets that can be included for better presentation:
831 >. This should be in the same directory
834 >privoxy-index.html</TT
835 >, (i.e. one level up from
836 the manual directories).
848 are designed for local preferences. Make sure these do not get overwritten!
852 > should not be overwritten either. This
853 has especially important configuration data in it.
857 > should be left in tact as well.
862 > Other configuration files (<TT
868 >regression-tests.action</TT
873 >) should be installed as the new
874 defaults, but all previously installed configuration files should be
875 preserved as backups. This is just good manners :-) These files are
876 likely to change between releases and contain important new features
882 > Please check platform specific notes in this doc, if you haven't
886 > packaging before for other platform
887 specific issues. Conversely, please add any notes that you know
888 are important for your platform (or contact one of the doc
889 maintainers to do this if you can't).
894 > Packagers should do a <SPAN
898 package after building it. So any previous installs should be
899 removed first to ensure the integrity of the newly built package.
900 Then run the package for a while to make sure there are no
901 obvious problems, before uploading.
911 NAME="NEWRELEASE-TARBALL"
912 >6.3.2. Source Tarball</A
919 >make sure that you have freshly exported the right
920 version into an empty directory</I
922 >. (See "Building and releasing
923 packages" above). Then run from that directory:
932 CLASS="PROGRAMLISTING"
933 > autoheader && autoconf && ./configure</PRE
947 CLASS="PROGRAMLISTING"
948 > make tarball-dist</PRE
958 NAME="NEWRELEASE-WINDOWS"
962 > Note that the docbook generated files might need some hand editing,
963 so the Windows build makefile does not rebuild the docs.
970 >make sure that you have freshly exported the right
971 version into an empty directory</I
973 >. (See "Building and releasing
977 > Check that you have the current versions of the
979 HREF="https://sourceforge.net/projects/nsis/files/NSIS%203/"
984 HREF="https://ftp.pcre.org/pub/pcre/"
989 HREF="https://tls.mbed.org/download"
994 HREF="https://github.com/google/brotli/releases"
1007 >windows/GNUMakefile</TT
1009 points to the NSIS installer program. (See the
1011 HREF="../user-manual/installation.html#WINBUILD-CYGWIN"
1017 >Building from Source / Windows</I
1021 section of the User Manual for details.)
1024 > Then you can build the package. This is fully automated, and is
1027 >windows/GNUmakefile</TT
1029 All you need to do is:
1038 CLASS="PROGRAMLISTING"
1045 > Now you can manually rename <TT
1047 >privoxy_setup.exe</TT
1051 >privoxy_setup_X.Y.Z.exe</TT
1060 Create a .zip file of the newly renamed <TT
1064 GPG sign the installer and zip file,
1073 CLASS="PROGRAMLISTING"
1074 > gpg --armor --detach --sign <TT
1076 >privoxy_setup_X.Y.Z.exe</TT
1078 gpg --armor --detach --sign <TT
1080 >privoxy_X.Y.Z.zip</TT
1086 > and upload the files to SourceForge.
1089 > When releasing the package on SourceForge, use the release notes
1090 and Change Log from the source tarball package.
1098 NAME="NEWRELEASE-DEBIAN"
1102 > Using git-buildpackage we start with a clone of the last Debian version:
1111 CLASS="PROGRAMLISTING"
1112 > gbp clone https://salsa.debian.org/debian/privoxy.git
1118 > or if the repository is already there
1127 CLASS="PROGRAMLISTING"
1134 > Now import the newly released upstream tarball via debian/watch file:
1143 CLASS="PROGRAMLISTING"
1144 > gbp import-orig --uscan</PRE
1149 > Next update all Debian quilt patches to the new version:
1158 CLASS="PROGRAMLISTING"
1159 > while quilt push; do quilt refresh; done</PRE
1164 > If some patch is no longer required (because it is already merged
1165 upstream), it can be removed using
1174 CLASS="PROGRAMLISTING"
1175 > quilt delete XX_patchname.patch
1176 git rm debian/patches/XX_patchname.patch</PRE
1181 > If the patch needs modification, you can apply, edit and update it with
1190 CLASS="PROGRAMLISTING"
1192 quilt edit some_file
1207 CLASS="PROGRAMLISTING"
1208 > while quilt push; do quilt refresh; done</PRE
1213 > succeeds. Then you can
1222 CLASS="PROGRAMLISTING"
1228 > Now add a new entry to the debian/changelog representing the new
1238 CLASS="PROGRAMLISTING"
1239 > dch -v 3.0.34-1</PRE
1244 > and describe what you did before and don't forget to git commit all
1248 > Now you can build the package on the local machine using
1257 CLASS="PROGRAMLISTING"
1258 > gbp buildpackage -us -uc</PRE
1263 > You should check for warnings using
1272 CLASS="PROGRAMLISTING"
1273 > lintian -iI ../build-area/privoxy_3.0.34-1_amd64.changes</PRE
1278 > Maybe rebuild the package in different defined cowbuilder environments
1288 CLASS="PROGRAMLISTING"
1289 > sudo cowbuilder --build --basepath /var/cache/pbuilder/base.cow ../build-area/privoxy_3.0.34-1.dsc</PRE
1294 > And try to run autopackage testing suite on the result:
1303 CLASS="PROGRAMLISTING"
1304 > autopkgtest /var/cache/pbuilder/result/privoxy_3.0.34-1_amd64.changes -s -- schroot sid</PRE
1309 > Or just push the changes to salsa.debian.org, where a CI pipeline is
1310 defined for the package, that builds and tests it.
1313 > If everything is okay, run cowbuilder with i386 and amd64 environments
1314 for current Debian stable release and build
1315 privoxy_3.0.34-1_i386.deb and privoxy_3.0.34-1_amd64.deb.
1316 Then sign both files:
1325 CLASS="PROGRAMLISTING"
1326 > gpg --detach-sign --armor privoxy_3.0.34-1_i386.deb
1327 gpg --detach-sign --armor privoxy_3.0.34-1_amd64.deb</PRE
1332 > Create a README file containing the recent block from debian/changelog
1333 and upload the two packages, the two signatures and the README to a
1334 freshly created folder below
1335 https://sourceforge.net/projects/ijbswa/files/Debian/
1342 NAME="SNAPSHOT-DEBIAN"
1343 >6.3.4.1. Debian GIT Snapshot</A
1346 > For building just a git snapshot build the following workflow may be
1347 useful. First create a build environment, for this you may have to
1348 run the following commands:
1357 CLASS="PROGRAMLISTING"
1358 > sudo apt install build-essential devscripts
1359 sudo apt-get build-dep privoxy</PRE
1364 > After this enter the checked out privoxy git tree and check that all
1365 (new) build dependencies are met:
1374 CLASS="PROGRAMLISTING"
1375 > dpkg-checkbuilddeps</PRE
1380 > If something is missing, just add it using
1389 CLASS="PROGRAMLISTING"
1390 > sudo apt install foobar</PRE
1395 > Now you may update debian/changelog, especially the version number
1405 CLASS="PROGRAMLISTING"
1411 > and finally build the package:
1420 CLASS="PROGRAMLISTING"
1421 > debuild -us -uc -b</PRE
1426 > If everything went okay, you may find the resulting Debian package in
1427 the parent directory.
1430 > You may want to clean up the build tree using
1439 CLASS="PROGRAMLISTING"
1440 > debian/rules clean</PRE
1445 > And maybe repair some artefacts using one or both of the following
1455 CLASS="PROGRAMLISTING"
1468 NAME="NEWRELEASE-MACOSX"
1469 >6.3.5. macOS / OS X</A
1476 >make sure that you have freshly exported the right
1477 version into an empty directory</I
1479 >. (See "Building and releasing
1483 > The OSXPackageBuilder module generates OS X installer packages
1484 supporting all Macs running OS X 10.4 and above. Obtain it from Git as
1485 follows into a folder parallel to the exported privoxy source:
1494 CLASS="PROGRAMLISTING"
1495 > git clone ssh://git@git.privoxy.org:23/git/OSXPackageBuilder.git</PRE
1500 > The module contains complete instructions on its usage in the file
1503 >OS X Package Builder HOWTO.txt</TT
1507 > Once the package(s) have been generated, you can then upload them
1508 directly to the Files section of the Sourceforge project in the
1509 Macintosh (OS X) folder. Each new version release of Privoxy should
1510 have a new subfolder created in which to store its files. Please
1511 ensure that the folder contains a readme file that makes it clear
1512 which package is for which version of OS X.
1520 NAME="NEWRELEASE-FREEBSD"
1524 > Update the www/privoxy port and submit a diff upstream.
1525 For details see the <A
1526 HREF="https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/"
1528 >FreeBSD Porter's Handbook</A
1539 >6.4. Uploading and Releasing Your Package</A
1542 > After the package is ready, it is time to upload it
1543 and go through the release steps. The upload
1546 HREF="https://sourceforge.net/projects/ijbswa/upload/"
1553 > Now just follow the prompts. Be sure to add any appropriate Release
1554 notes. You should see your freshly uploaded packages in
1557 >"Step 2. Add Files To This Release"</SPAN
1559 appropriate box(es). Remember at each step to hit the
1562 >"Refresh/Submit"</SPAN
1563 > buttons! You should now see your
1564 file(s) listed in Step 3. Fill out the forms with the appropriate
1565 information for your platform, being sure to hit <SPAN
1569 for each file. If anyone is monitoring your platform, check the
1573 > box at the very bottom to notify them of
1574 the new package. This should do it!
1577 > If you have made errors, or need to make changes, you can go through
1578 essentially the same steps, but select <TT
1594 >6.5. After the Release</A
1597 > When all (or: most of the) packages have been uploaded and made available,
1598 send an email to the
1600 HREF="mailto:privoxy-announce@lists.privoxy.org"
1604 >, Subject: "Announcing Privoxy X.Y.Z $CODE_STATUS". Be sure to
1607 HREF="https://sourceforge.net/projects/ijbswa/files/"
1609 > download location</A
1610 >, the release notes and the Changelog. Also, post an
1611 updated News item on the project page Sourceforge, and update the Home
1612 page and docs linked from the Home page (see below). Other news sites
1613 and release oriented sites, such as Freshmeat, should also be notified.
1616 > Then update the source code for the next version to be released:
1623 > Increment the version number and change the code status to "UNRELEASED"
1632 > Rebuild configure (<SPAN
1636 >autoheader && autoconf</B
1639 and GNUMakefile (<SPAN
1654 >make dok-release</B
1656 > to update the sgml documentation source files.
1661 > Commit all your changes.
1672 SUMMARY="Footer navigation table"
1701 HREF="webserver-update.html"
1711 >Testing Guidelines</TD
1721 >Update the Webserver</TD