= Checklist of things to do for a release The release steps are described on this page. For more information on the roadmap and schedule leading up to a release, see the RoadMap page. == Version identification The //major.minor.micro// semantic versioning scheme is followed, with guidance from PEP:0440. However, since the //major// version is rarely incremented, we generally refer to a 1.x release a //major// release and a 1.x.y release a //minor// release. In the event that a critical defect is discovered after a release is made, the //micro// version number should be incremented and a new //minor// release created. In the event that a packaging or distribution error results in the need to generate a new package name, a [PEP:0440#post-releases post-release] identifier should be added, starting with `post1`. The post-release identifier is added by editing `tag_build` in [browser:/trunk/setup.cfg setup.cfg]. For example, a filename cannot be reused when uploading to PyPI [https://mail.python.org/pipermail/distutils-sig/2015-January/025683.html more than once], so a post-release is necessary in the event of a packaging or uploading error. == Preparing a minor release 1.x.y === 2 weeks before Announce a string freeze on Trac-dev, so that the translators can catch up with the latest changes. Update the TracDev/ReleaseTesting page, ask for testers. === 1 week before Prepare the rc1 packages according to the procedure described below in [#Releasesteps Release steps], test and upload them. Testing period. Only critical or no risk fixes. == Preparing a major release 1.x === 1 month before Announce a beta1 / string freeze on Trac-dev. === 2 weeks before Prepare the rc1 packages. Testing period. Only critical or no risk fixes. == Release steps === Check the t.e.o wiki * Update the TracChangeLog page. * Verify TracInstall and TracUpgrade. * For major releases: * Check TracDev/ReleaseNotes, go through the tickets which have an empty //Release Notes// field and say a word there. * Check TracDev/ApiChanges. === Check the source ==== Wiki related files * Verify that TracStandalone#Reference matches current `tracd --help`. * Verify that [source:trunk/trac/wiki/default-pages trac/wiki/default-pages] matches the list of pages in TracProject/DefaultWikiPages. * [TracProject/DefaultWikiPages#sync Sync] the wiki. * Update [source:trunk/RELEASE.rst RELEASE.rst] from wiki TracChangeLog (File is named `RELEASE` for Trac < 1.2). * Sync [source:trunk/INSTALL.rst INSTALL.rst] from wiki TracInstall using [browser:/trunk/contrib/wiki2rst.py contrib/wiki2rst.py] (File is named `INSTALL` for Trac < 1.2). {{{#!sh $ ./contrib/wiki2rst.py TracInstall > INSTALL.rst }}} * Sync [source:trunk/UPGRADE.rst UPGRADE.rst] from wiki TracUpgrade using [browser:/trunk/contrib/wiki2rst.py contrib/wiki2rst.py] (File is named `UPGRADE` for Trac < 1.2). {{{#!sh $ ./contrib/wiki2rst.py TracUpgrade > UPGRADE.rst }}} ==== Other repository files * Remove extraneous whitespace in Python source files using [pypi:reindent]. * Import the translations from Transifex [wiki:TracL10N/Transifex#group3 that have no committers]. * Check the [source:trunk/THANKS THANKS] and [source:trunk/AUTHORS AUTHORS] files. * Check version number in [source:trunk/setup.py setup.py], [source:trunk/trac/wiki/default-pages/WikiStart trac/wiki/default-pages/WikiStart], and [source:trunk/trac/__init__.py trac/__init__.py]. * Check that the jQuery and jQuery UI version numbers mentioned in the help match the actual ones, see for example r11041. * Update copyright year on [browser:/trunk/trac/templates/about.html@13686:46#L23 about] page and [source:trunk/COPYING COPYING] file. * Check whether there are any eligible changesets that have not been merged into the branch. * Comment out `tag_build` setting in [source:trunk/setup.cfg setup.cfg]. === Prepare packages ==== Prerequisites * Use Python **2.7.9** or later on Windows. * **Babel** must be installed in the environment used to build the packages on Windows. * [https://pythonhosted.org/setuptools/history.html#id52 setuptools >= 0.8] should be used to ensure PEP-0440 compliant version identifiers. * If svn >= 1.7 is used for the checkout then [pypi:setuptools_subversion setuptools_subversion] must be installed. ==== Create dist packages * Check out trunk (or the release branch) to a '''clean''' sandbox. * Build source archives and wheel on Unix: {{{#!sh $ python setup.py sdist --formats=gztar,zip $ python setup.py bdist_wheel }}} to get the files in `.tar.gz` and `zip` archives, with the proper LF line endings. * Build Windows exe installers on x86 and x64 platforms: {{{#!dos > python.exe setup.py bdist_wininst }}} ==== Verify installation on target platforms * Install on a clean system. ''Remove any old Trac installation before testing.'' * Smoke test: - create an environment with `trac-admin`, test it with `tracd` - upgrade an environment created with the previous release' `trac-admin`, test it with `tracd` ==== Upload packages * //[https://packaging.python.org/en/latest/distributing.html#uploading-your-project-to-pypi Upload] the packages to [pypi:Trac PyPi] using Twine (*)//. * Upload to https://ftp.edgewall.org/pub/trac. === Finalize the release * Test `easy_install Trac`. * Tag/copy version in subversion. * Update TracDownload. * Close release coordination ticket, eg #9077. (*) * Mark the finished milestones as //completed// (with the //completed date// preferably being the date that the releases were announced), and change their descriptions from //next// maintenance/development release to //latest// maintenance/development release. * The next set of milestones should have their descriptions changed to //next// maintenance/development release. * The previous set of milestones should have their descriptions changed to remove the ''latest maintenance/development release'' message. * Attach copy of translations statistics chart of Transifex to the milestones. * Add [/admin/ticket/versions Version] entries for the new releases. (*) === Announce the release * Post to the following channels: * [gforum:trac-users], [gforum:trac-dev] (all releases) * [gforum:trac-announce], [https://twitter.com/TracProject #TracProject], [gforum:comp.lang.python.announce python-announce] (`python-announce-list@python.org`) * Update the //version// displayed in the #trac IRC //channel entry message// (*) {{{ /msg ChanServ topic #trac "The topic is: https://trac.edgewall.org/ | https://trac-hacks.org/ | Latest version - ." }}} * Update the [wikipedia:trac Wikipedia] page, and in particular the version numbers. === Prepare for development * Uncomment `tag_build` setting in [source:trunk/setup.cfg setup.cfg]. * Update version number in [source:trunk/setup.py setup.py], [source:trunk/trac/wiki/default-pages/WikiStart trac/wiki/default-pages/WikiStart], and [source:trunk/trac/__init__.py trac/__init__.py]. * Create a release coordination ticket with keyword [kwquery:release]. * Update the [ReleaseTesting#Currenttargetreleases Current target releases]. //(*) not for beta or rc releases// ---- See also: ReleaseTesting, RoadMap, TracDev