canmove, Confirmed users
2,056
edits
m (moved Labs/Jetpack/Release to Jetpack/Release Process: Jetpack is no longer a Labs project; its pages are moving out of the Labs/ hierarchy; and adding "Process" to the name to make the purpose of this page clearer.) |
(update to reflect current release process) |
||
Line 1: | Line 1: | ||
This document describes the | This document describes the process by which versions of the Add-on SDK are released. For information about the process by which versions of the SDK are developed, see [[Jetpack/Development Process]]. | ||
= Prepare = | = Prepare = | ||
{{note|many of this step's substeps can be done in parallel.}} | |||
== Clone Checklist == | == Clone Checklist == | ||
Copy this checklist to a new wiki page at | Copy this checklist to a new wiki page at Jetpack/SDK/(VERSION)/Release_Checklist (f.e. [[Jetpack/SDK/1.2/Release_Checklist]]), and choose people to fill the Release Manager (RM), Release Engineer (RE), Technical Lead (TL), and Documentation Lead (DL) ownership roles. Use the checklist to track the status of the release process. | ||
{| class="fullwidth-table" | {| class="fullwidth-table" | ||
Line 20: | Line 20: | ||
|- | |- | ||
| Clone Checklist | | Clone Checklist | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | Merge Master to Stabilization | ||
| | | RE | ||
| | | | ||
|- | |- | ||
| | | File Tracking Bug | ||
| | | RM | ||
| | | | ||
|- | |- | ||
Line 35: | Line 35: | ||
| | | | ||
|- | |- | ||
| | | Community | ||
| RM | |||
| | |||
| | | | ||
|- | |- | ||
| Product Planning | | Product Planning | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | PR | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | Spin Test Builds | ||
| | | RE | ||
| | | | ||
|- | |- | ||
| | | Stabilize Codebase | ||
| | | TL | ||
| | | | ||
|- | |- | ||
| | | Draft Release Announcement | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | Write Release Notes | ||
| DL | |||
| | | | ||
|- | |- | ||
| | | Choose Candidate | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | Push Docs | ||
| | | DL | ||
| | | | ||
|- | |- | ||
| | | Release | ||
| | | | ||
| | | | ||
|- | |- | ||
| | | Bless Candidate Build | ||
| | | RE | ||
| | | | ||
|- | |- | ||
| | | Update Latest Builds Redirect | ||
| | | RE | ||
| | | | ||
|- | |- | ||
| Update | | Update Latest Docs Redirect | ||
| | | DL | ||
| | | | ||
|- | |- | ||
| Publish Release Announcement | | Publish Release Announcement | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| | | Merge Stabilization to Release | ||
| | | RE | ||
| | | | ||
|- | |- | ||
| Notify | | Notify Community | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| Bask | | Bask | ||
| | | RM | ||
| | | | ||
|- | |- | ||
| Review | | Review | ||
| RM | |||
| | | | ||
|} | |} | ||
== Merge Master to Stabilization == | |||
Clone the canonical repository, and enter the clone's working directory: | |||
git clone git@github.com:mozilla/addon-sdk.git | |||
cd addon-sdk | |||
Merge the master (development) branch to the stabilization branch: | |||
git checkout stabilization | |||
git merge master | |||
Change the version identifier on the master branch for the next development cycle: | |||
git checkout master | |||
find . -type f -exec perl -pi -e 's/(CURRENT VERSION)/(NEXT VERSION)/g' {} \; | |||
Verify that the version identifiers were changed correctly. In particular, make sure the find/replace command didn't modify strings that aren't SDK version identifiers but look similar to them (f.e. a version identifier in the jQuery library). | |||
Commit the changes: | |||
git commit -a -m"update SDK version for next development cycle" | |||
Check out the stabilization branch: | |||
git checkout stabilization | |||
Change the Firefox minVersion/maxVersion compatibility identifiers on the stabilization branch per the [[Jetpack/Development Process]]. | |||
Commit the changes: | |||
git commit -a -m"update Firefox minVersion/maxVersion to anticipated current/next versions of Firefox" | |||
Push the changes to the canonical repository: | |||
git push origin master stabilization | |||
== File Tracking Bug == | |||
File a bug to track the release using [https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=dcm%40mozilla.com&bug_file_loc=https%3A%2F%2Fwiki.mozilla.org%2FJetpack%2FSDK%2FX.X%2FRelease_Checklist&bug_status=ASSIGNED&cc=myk%40mozilla.org&cc=dtownsend%40mozilla.com&comment=We%20should%20release%20Add-on%20SDK%20X.X.%0D%0A%0D%0AUse%20this%20bug%20to%20track%20release%20blockers%20and%20the%20release%20checklist%20%3Chttps%3A%2F%2Fwiki.mozilla.org%2FJetpack%2FSDK%2FX.X%2FRelease_Checklist%3E%20to%20track%20release%20tasks.%0D%0A&op_sys=All&product=Add-on%20SDK&rep_platform=All&short_desc=release%20Add-on%20SDK%20X.X this release tracking bug template]. | |||
== | == Notify Relevant Parties == | ||
=== Community === | |||
Notify project participants in the [http://groups.google.com/group/mozilla-labs-jetpack discussion forum]. Mention the tentative release date, and reference the tracking bug and release checklist. | |||
=== Product Planning === | |||
Notify product planners via their [[Firefox/Planning|weekly meeting]]. | |||
=== PR === | |||
Notify the Mozilla PR team (press@mozilla.com). | |||
(Myk: Do we still need to do this? PR sits in the product planning meetings.) | |||
== Spin Test Builds == | |||
To ensure the release meets our quality standards, spin test builds and distribute them to testers. Do this at least weekly during the stabilization period, spinning beta builds initially and release candidate builds ultimately. | |||
Clone the canonical repository, and enter the clone's working directory, and check out the stabilization branch: | |||
git clone git@github.com:mozilla/addon-sdk.git | git clone git@github.com:mozilla/addon-sdk.git | ||
cd addon-sdk | cd addon-sdk | ||
git checkout | git checkout stabilization | ||
Set JPTV (Jetpack Test Version) to the test version being built (f.e. 1.2b1): | |||
export JPTV=(TEST VERSION) | |||
If building a beta, set JPFV (Jetpack Final Version) to JPTV: | |||
export JPFV=${JPTV} | |||
Otherwise, when building a release candidate, set JPFV to the version being released (f.e. 1.2): | |||
export JPFV=(VERSION) | |||
Create a tarball and a ZIP archive: | |||
git | git archive --format=zip --output ~/addon-sdk-${JPTV}.zip --worktree-attributes --prefix addon-sdk-${JPFV}/ HEAD | ||
git archive --format=tar --output ~/addon-sdk-${JPTV}.tar --worktree-attributes --prefix addon-sdk-${JPFV}/ HEAD | |||
gzip ~/addon-sdk-${JPTV}.tar # makes addon-sdk-${JPTV}.tar.gz | |||
{{note|a beta expands to a directory whose name contains the test version (f.e. addon-sdk-1.2b1), but a candidate expands to a directory whose name contains the final version (f.e. addon-sdk-1.2), so we can bless a candidate simply by renaming its tarball/ZIP archive.}} | |||
Copy the tarball/ZIP archive to the distribution server: | |||
scp addon-sdk-${JPTV}.tar.gz addon-sdk-${JPTV}.zip stage.mozilla.org:/pub/mozilla.org/labs/jetpack/ | |||
Verify that the tarball/ZIP archive is ready for distribution by running integration checks on it: | |||
mkdir TEST_ZIP && cd TEST_ZIP && python ../bin/integration-scripts/integration-check --url https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-${JPTV}.zip | |||
cd .. | |||
mkdir TEST_TGZ && cd TEST_TGZ && python ../bin/integration-scripts/integration-check --url https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-${JPTV}.tar.gz | |||
cd .. | |||
{{note|you may need to set the --binary flag to the location of the binary of Firefox against which you want to test the build.}} | |||
Tag the repository with the test version: | |||
git tag ${JPTV} stabilization | |||
Push the stabilization branch and the tag to the canonical repository: | |||
git push origin stabilization ${JPTV} | |||
Notify testers about the build via a post to the discussion forum. Have them run automated and manual tests (including submitting generated XPIs to the [https://preview.addons.mozilla.org/ AMO test server]) and report any bugs they discover. | |||
== Stabilize Codebase == | |||
Land stabilizing changes on the master branch. | |||
{{note|because of conflicts due to incompatible SDK and Firefox minVersion/maxVersion changes between the stabilization and master branches, do not land stabilizing changes on the stabilization branch and merge that branch to master. In the future, we may resolve the conflicts and do this.}} | |||
Periodically generate a list of changes between the master and stabilization branches: | |||
git rev-list --left-right --boundary --pretty=oneline --cherry-pick master...stabilization | |||
Identify stabilizing changes landed on the master branch, and cherry-pick them to the stabilization branch: | |||
git cherry-pick -x (REVISION ID) | |||
== Draft Release Announcement == | == Draft Release Announcement == | ||
Draft a blog post for the [http://blog.mozilla.com/addons/ Add-ons Blog] | Draft a release announcement blog post for the [http://blog.mozilla.com/addons/ Add-ons Blog]. | ||
To draft the post, access the blog's Wordpress admin page and go to Posts > Add New. | To draft the post, access the blog's Wordpress admin page and go to Posts > Add New. Use previous release posts as a template for your new one. Make sure to include a '''<!-- more -->''' element to reduce the initial size of the post, and put the post into the '''developers''', '''jetpack''', '''general''', and '''releases''' categories. | ||
After drafting the post, share it with other folks who can help edit it, such as the project's marketing manager. | After drafting the post, share it with other folks who can help edit it, such as the project's marketing manager. | ||
Line 248: | Line 244: | ||
== Write Release Notes == | == Write Release Notes == | ||
Release notes live on the wiki at /Labs/Jetpack/SDK/Release_Notes/ | Release notes live on the wiki at /Labs/Jetpack/SDK/Release_Notes/(VERSION) (e.g. /Labs/Jetpack/SDK/Release_Notes/1.2). Create a page for the release notes, using the previous release's notes as a template, and include important information about the release in the notes. Mention the issues raised/addressed in each resolved bug that was fixed in the release and has been tagged with the relnote keyword. Also mention issues in each unresolved bug tagged with the relnote keyword. | ||
Reference the release notes from the [[Labs/Jetpack/SDK/Release_Notes|List of Release Notes]]. | |||
== Choose Candidate == | |||
Decide to ship a candidate as the final release. | |||
== Push Docs == | |||
After you have decided to ship a candidate as the final release, generate the docs for the release. | |||
Clone the canonical repository and enter | Clone the canonical repository, and enter the clone's working directory, check out the candidate tag, and activate the SDK: | ||
git clone git@github.com:mozilla/addon-sdk.git | git clone git@github.com:mozilla/addon-sdk.git | ||
cd addon-sdk | cd addon-sdk | ||
git checkout (CANDIDATE VERSION) | |||
source bin/activate | |||
Generate and expand the docs: | |||
cfx sdocs --baseurl="https://addons.mozilla.org/en-US/developers/docs/sdk/(VERSION)/" | |||
tar xzf addon-sdk-docs.tgz | |||
Clone the docs repository and delete everything it contains (wbamberg: this is evidently a bit mad, but it makes no sense to me to pretend that this is a new revision, since it's generated): | |||
git clone git@github.com:mozilla/addon-sdk-sdocs.git | |||
cd addon-sdk-sdocs | |||
rm -rf * | |||
Copy the docs to the docs repository, commit the changes, tag the revision as (CANDIDATE VERSION)-amo (f.e. 1.2rc1-amo), and push the changes to the docs repository: | |||
cp -r ../doc/* . | |||
git commit -a -m"add (CANDIDATE VERSION) docset" | |||
git tag (CANDIDATE VERSION) | |||
git push origin master (CANDIDATE VERSION) | |||
Ask IT to push the docs to production and update the "latest" redirect to point to the new docs via this [https://bugzilla.mozilla.org/enter_bug.cgi?bug_severity=normal&cc=wbamberg%40mozilla.com&comment=Please%20update%20the%20documentation%20for%20the%20Add-on%20SDK%20in%20conjunction%20with%20its%20X.X%20release.%0D%0A%0D%0AClone%20the%20docs%20from%20%3Cgit%3A%2F%2Fgithub.com%2Fmozilla%2Faddon-sdk-sdocs.git%3E%2C%20and%20check%20out%20the%20TAG%20tag%2C%20i.e.%3A%0D%0A%0D%0A%20%20git%20clone%20git%3A%2F%2Fgithub.com%2Fmozilla%2Faddon-sdk-sdocs.git%0D%0A%20%20cd%20addon-sdk-sdocs%0D%0A%20%20git%20checkout%20TAG%0D%0A%0D%0AThen%20push%20the%20docs%20to%20%3Chttps%3A%2F%2Faddons.mozilla.org%2Fen-US%2Fdevelopers%2Fdocs%2Fsdk%2FX.X%2F%3E.%0D%0A%0D%0ADo%20this%20at%20your%20earliest%20convenience.%20%20Then%2C%20on%20Tuesday%2C%20MONTH%20DAY%2C%20update%20the%20redirect%20at%20%3Chttps%3A%2F%2Faddons.mozilla.org%2Fen-US%2Fdevelopers%2Fdocs%2Fsdk%2Flatest%2F%3E%20to%20point%20to%20%3Chttps%3A%2F%2Faddons.mozilla.org%2Fen-US%2Fdevelopers%2Fdocs%2Fsdk%2FX.X%2F%3E.%0D%0A&component=Server%20Operations%3A%20Web%20Operations&op_sys=All&product=mozilla.org&rep_platform=All&short_desc=%5BAMO%5D%20update%20SDK%20docs%20for%20X.X%20release docs push bug template]. | |||
{{note|IT pushes the docs at their earliest convenience, so we can test them, but they update the ''latest'' docs redirect on the day of the release.}} | |||
(Myk: should there be separate bugs for the Push Docs and Update Latest Docs Redirect steps?) | |||
= Release = | = Release = | ||
Line 271: | Line 291: | ||
== Bless Candidate == | == Bless Candidate == | ||
Copy the | Copy the tarball/ZIP archive for the most recent release candidate to files whose names instead contain the final version: | ||
ssh stage.mozilla.org | ssh stage.mozilla.org | ||
cd /pub/mozilla.org/labs/jetpack/ | cd /pub/mozilla.org/labs/jetpack/ | ||
cp addon-sdk- | export JPTV=(CANDIDATE VERSION) | ||
cp addon-sdk- | export JPFV=(VERSION) | ||
cp addon-sdk-${JPTV}.zip addon-sdk-${JPFV}.zip | |||
cp addon-sdk-${JPTV}.tar.gz addon-sdk-${JPFV}.tar.gz | |||
== Update Latest Builds Redirect == | |||
Use a text editor like vi or emacs to update the /pub/mozilla.org/labs/jetpack/.htaccess file on ftp.mozilla.org to redirect the "latest" symlinks to the new release, making the content of the file look like this: | |||
Redirect 307 /pub/mozilla.org/labs/jetpack/addon-sdk-latest.zip https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk- | Redirect 307 /pub/mozilla.org/labs/jetpack/addon-sdk-latest.zip https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-(VERSION).zip | ||
Redirect 307 /pub/mozilla.org/labs/jetpack/addon-sdk-latest.tar.gz https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk- | Redirect 307 /pub/mozilla.org/labs/jetpack/addon-sdk-latest.tar.gz https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-(VERSION).tar.gz | ||
Redirect 307 /pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.zip https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk- | Redirect 307 /pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.zip https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-(VERSION).zip | ||
Redirect 307 /pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.tar.gz https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk- | Redirect 307 /pub/mozilla.org/labs/jetpack/jetpack-sdk-latest.tar.gz https://ftp.mozilla.org/pub/mozilla.org/labs/jetpack/addon-sdk-(VERSION).tar.gz | ||
Test the | Test the symlinks to ensure they correctly provide the new release. | ||
== Update | == Update Latest Docs Redirect == | ||
Update the latest docs redirect to point to the new version's docs. | |||
== Publish Release Announcement == | == Publish Release Announcement == | ||
Line 295: | Line 319: | ||
Access the Add-ons blog's Wordpress admin page and go to Posts. Publish the post you previously drafted. | Access the Add-ons blog's Wordpress admin page and go to Posts. Publish the post you previously drafted. | ||
{{note|changes to the blog can take several hours to show up on the site because of server-side caching. To check that the post has been published, add "? | {{note|changes to the blog can take several hours to show up on the site because of server-side caching. To check that the post has been published, add "?(SOME UNIQUE STRING)" to the end of the URL, which bypasses the cache.}} | ||
== Merge Stabilization to Release == | |||
Set JPFV to the version being released (f.e. 1.2): | |||
= | export JPFV=(VERSION) | ||
Clone the canonical repository and enter its working directory: | Clone the canonical repository and enter its working directory: | ||
Line 304: | Line 332: | ||
cd addon-sdk | cd addon-sdk | ||
Merge the stabilization branch to the release branch: | |||
git | git checkout release | ||
git merge remotes/origin/stabilization | |||
Tag the release branch (which should point to the commit from which you built the most recent release candidate) with the final version: | |||
git tag ${JPFV} | |||
Push the release branch and tag to the canonical repository: | |||
git push origin release | |||
git push origin ${JPFV} | |||
== Notify Community == | |||
Notify the discussion forum about the release. Include a link to the release tag: | |||
https://github.com/mozilla/addon-sdk/tree/(VERSION) | |||
= Bask = | = Bask = | ||
Bask in the glow of the latest and greatest release | Bask in the glow of the latest and greatest release! | ||
Physically or virtually high-five or fist-jab contributors. | |||
= Review = | = Review = | ||
Review the release process via a post-mortem, solicitation of feedback in the weekly meeting and discussion forum, and other methods as appropriate. Identify things that went well and we should continue to do, things that went badly that we should do differently next time, and parts of the process that have changed and for which this document needs to be updated. Make changes as appropriate. |