[[PageOutline]] = Procedures and policies for releases of QtWebKit = Releases of QtWebKit are cut from WebKit's trunk. Some time before the release a new branch is created and hosted in a Git repository. After the release it becomes a maintenance branch. == Release branches == === QtWebKit 2.2 === * [wiki:QtWebKitRelease22 QtWebKit 2.2 Release Page] * Tracker bug for candidate fixes (maintenance): [https://bugs.webkit.org/show_bug.cgi?id=59935 Bug 59935] === QtWebKit 2.1 === * [wiki:QtWebKitRelease21 QtWebKit 2.1 Release Page] * Tracker bug for candidate fixes (maintenance): [https://bugs.webkit.org/show_bug.cgi?id=59935 Bug 59935] === QtWebKit 2.0 === * [http://trac.webkit.org/wiki/QtWebKitTableOfFeatures20 Internal Release Notes] * Tracker bug for candidate fixes (maintenance): [https://bugs.webkit.org/show_bug.cgi?id=35784 Bug 35784] == Release branch creation == * Release branches are hosted at http://gitorious.org/+qtwebkit-developers/webkit/qtwebkit; * They're created from the {{{master}}} branch at http://gitorious.org/webkit, which is kept in sync with the upstream SVN repository; * Up to Qt-4.8, packages for integration into Qt are created from the release branch. See [wiki:"QtWebKitPackaging" QtWebKitPackaging] for details and instructions for producing such packages. == Getting changes into a release branch == If you'd like to include a patch in the release branch, please consider only fixes for: * Security related problems * Data corruption * Crashes * Broken build * Regression from the previous release * Documentation changes * Crucial usability issue (after discussion in the mailing list) There are two ways to integrate changes into a release branch: * The commit is landed in trunk and then cherry-picked into the release branch. * Time constraints prevent us from landing the patch and we have to include a change before landing it (exceptional patch, see below). Exceptional patches must satisfy the following criteria before they are included in the release: * An entry with the attached patch is filed in bugs.webkit.org (using http://webkit.org/new-qtwebkit-bug); * The patch has a ChangeLog entry; * The changes are public and live on a gitorious branch, rebased with the targeted release; * They should have a layout test included whenever possible; * At least one WebKit reviewer signs off on the patch and no other reviewer objects; * The bug is marked to block the tracker bug for patches pending trunk inclusion: https://bugs.webkit.org/show_bug.cgi?id=32653; * Any exception has to be first discussed in the public mailing list; After the release we have to make a concentrated effort in reducing the number of exceptional patches, by reviewing the changes in the bugs that the tracker bug ([https://bugs.webkit.org/show_bug.cgi?id=32653 32653]) depends on. == Procedures for cherry-picking and weekly releasing == The process for cherry-picking changes from trunk to a stable branch is semi-automated. To keep things working as expected, some care must be taken when commiting changes there. Below are the basic steps and the commands involved: * Clone the [http://gitorious.org/webkit/ qtwebkit git/svn mirror] and keep it up to date; * Downloand and setup [http://gitorious.org/qtwebkit/tools qtwebkit/tools] (change PATH and PYTHONPATH as necessary); * Check [wiki:UsingGitWithWebKit] for valuable tips and tricks; * Set your username and password in git-config (see instructions in the link above); * From the branch where you want to cherry-pick a change ({{{git new-workdir}}} is your friend), run {{{cherry-pick-into-release-branch.py}}} (see {{{--help}}}). This script will parse bugzilla, ask for cherry-picks, add comments and remove bugs from their trackers; * If there's a conflict, the script will abort. In that case: * Solve the conflict ({{{git status, git rm, git add}}}, patch the files manually, etc -- your choice); * Commit the changes, '''keeping the original changelog from the original git commit;''' * Run the script again, it'll detect the new commit and continue as expected. * '''Before letting the script add a comment to bugzilla, '''make sure the build is not broken and run some basic tests (run QtTestBrowser, the API tests -- your choice), so that if there's something broken, you can fix it and {{{git commit --amend}}} the changes before a reference is added to bugzilla. * Avoid adding extra commits in the branch, always prefer cherry-picks to keep cross references with what's in trunk. * If the patch is a backport, you're free to add your own changelog, but make sure there are at least two lines there: one with the bug title and one with the full bug URL; * In case of doubts, follow the example of what's already there (see {{{git log}}}). To create release notes reports (similiar to the ones posted weekly in the [http://www.google.com.br/search?q=qtwebkit+developer+journal QtWebKit Developer Journal]), run the {{{create-release-notes.py}}} (see {{{--help}}}). Usually it looks like this: {{{ $ create-release-notes.py --commits --email 'foo@bar.com;bar@foo.com' }}} Don't forget to tag the repository (and {{{git push --tags}}}) before making an announcement. == Release Criterias == These are the simplified release criteria. Q&A criterias and product requirements are not listed here. === Technology Previews (TPs) === A TP release is basically to invite the community to try out new features and provide some initial feedback. It has no major quality guarantees and the decision about when to release it heavily depends on the feeling from the development team. * All buildbots should be green; * The development team should be relatively confident that basic features work on the reference platform; * The code builds and pass through a basic [http://en.wikipedia.org/wiki/Smoke_testing smoke test] on all Tier 1 platforms; === Betas === A beta release means the software is stabilizing but has known bugs we plan to fix before the release. There may be multiple betas during the development process. * We have buildbots running on all Tier 1 platforms and they're green; * The Q&A team has tested the code for regressions against the latest stable release using the same testcases (and bugs have been opened if necessary); * Q&A Team is actively testing the release on Tier 1 platforms and the weekly ratio between critical bugs fixed and critical bugs reported is bigger than 1; * The code builds and pass through a basic [http://en.wikipedia.org/wiki/Smoke_testing smoke test] on all Tier 2 platforms; === Release Candidate (RC) === A RC release is made when we believe the code is ready to ship. * There has been at least one beta release; * All buildbots are green; * There are no critical bugs blocking the release; * Reports from Q&A indicate we're in better shape than the previous official version; * We're confident that the software is ready; Once the first RC is out, no more "nice-to-have" fixes will be accepted and thus the meta bug is closed; === Final Release === The final release is the last RC but with final versioning. * At least one week has passed since the last RC release and no critical bugs have been reported; === Minor Update (maintenance) === * Minor versions are released to fix security issues and may include critical bug-fixes; == Supported Platforms == '''Reference Platform :''' * Linux Desktop '''Tier 1 :''' * Apple Mac OS X 10.6 (Cocoa) * Microsoft Windows XP SP3 32-bit * Microsoft Windows 7 32 bits * Symbian (Symbian{{{^}}}3) '''Tier 2 :''' * Microsoft Windows Vista 32 bits * Apple Mac OS X 10.5 (Cocoa) * Meego 1.x See QtWebKitPlatformSupport for the meaning of Tier 1, 2 and Reference Platform. == Release Management Tools == The scripts used to semi-automate the release management work (cherry-pick, bugzilla interaction, reports, release-notes, etc) can be found in the [http://gitorious.org/qtwebkit/tools qtwebkit/tools git repository].