Following picture demonstrates release stages sequence.
Release phases dates are discussed, as release manager during the first discussion. Release Manager should be PMC Member.
Moving scope freeze and code freeze dates maybe not the best option since a lot of contributors synchronize their efforts to make feature completed by particular moment.
Once release manager found, he/she can setup environment.
0.1. Write access to Apache Ignite GIT & SVN repository (commiter role) - https://gitbox.apache.org/repos/asf?p=ignite.git
0.2. Access to Team City Release tasks - https://ci.ignite.apache.org/project.html?projectId=ApacheIgniteReleaseJava8 If you don't have necessary rights ask for assigning on dev. list.
0.3.Your GPG key available in https://apache.org/dist/ignite/KEYS - Steps to add:
Difference between this and the following phase: it is not possible to move in-progress tickets to a next release because branches not diverged.
New branch creation moment is not formal, and it can happen just before or simultaneously with scope freeze. The important thing is announcing this moment and reminding contributors to cherry-pick commits to release branch.
Removing issues from the scope based on estimated dates of completion, importance to release and on community discussion. Private discussion between contributors is possible, but it is recommended to discuss features in public to allow all community members to share their arguments and concerns.
The first step to be done to enter scope finalization phase it to create a branch in Ignite code base (origin). This moment be precisely the same with the start of P1.1
1.2.1. Create release branch, e.g ignite-2.8, push it to the ASF repository
1.2.2. Run TC tests (on the appropriate branch), use https://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_RunAllNightly
1.2.3. Estimate state of TC, check failures history (if any).
1.2.4. Create scheduled build triggers for daily Run All (Nightly) run. Usually, triggers are set up using Apache Ignite TeamCity Bot (triggering of builds there depends on agent availability). Use an intellectual trigger to trigger release branch adaptively, or ask on the dev. list to add.
End of this phase is scope freeze.
This phase is some time to complete implementation of features from the initial scope. In parallel with implementation, some less essential fixes and features are moved to the next release.
End of rampdown is code freeze. Code freeze is based on dates, but the actual time of freeze is determined by announcing.
There only blockers are accepted. Usually it should be approval of release manager to each commit.
Note blockers here is not only a critical bug, but an issue in the product which makes product unstable or non-functioning, performance drop has proven by a benchmark, a security issue, or a regression of existing features.
After the community agrees that the codebase is ready for a release, release manager should send the release for a vote.
The email subject should be "[VOTE] Apache Ignite <version> <rc>", e.g. "[VOTE] Apache Ignite 1.5.0.final RC3". Here is the sample email.
Dear Community, We have uploaded release candidate to https://dist.apache.org/repos/dist/dev/ignite/2.7.5-rc3/ The following staging can be used for a dependent project for testing: https://repository.apache.org/content/repositories/orgapacheignite-1438/ This is very important release containing initial versions of Ignite.NET and Ignite C++ and many other important features. Tag name is 1.5.0.final-rc3 1.5.0 changes: * Ignite.NET: Initial Release. * Ignite C++: Initial Release. * Massive performance improvements for cache operations and SQL. * Added new binary cache object marshalling implementation. * Added IgniteSemaphore data structure. * Added MQTT Streamer. * Added Twitter Streamer. * Added Ignite Sink (integration with Apache Flume). * Fixed optimistic serializable transactions: implemented "deadlock-free" locking algorithm. * Fixed failover for continuous queries. * Fixed compilation and runtime errors under OpenJDK and IBM JDK. * Fixed Integer.size limitation for cache. * Fixed and improved cache types configuration. * Fixed cache rebalancing. * Many stability and fault-tolerance fixes. * Added example to demonstrate the usage of EntryProcessor. Complete list of closed issues: https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20fixVersion%20%3D%201.5%20AND%20status%20%3D%20closed DEVNOTES https://git-wip-us.apache.org/repos/asf?p=ignite.git;a=blob_plain;f=DEVNOTES.txt;hb=refs/tags/1.5.0.final-rc3 RELEASENOTES https://git-wip-us.apache.org/repos/asf?p=ignite.git;a=blob_plain;f=RELEASE_NOTES.txt;hb=refs/tags/1.5.0.final-rc3 The vote is formal, see voting guidelines https://www.apache.org/foundation/voting.html +1 - to accept Apache Ignite 1.5.0.final-rc3 0 - don't care either way -1 - DO NOT accept Apache Ignite 1.5.0.final-rc3 (explain why) This vote will be open for 72 hours till May 23, 14:00 UTC. https://www.timeanddate.com/countdown/to?year=2019&month=5&day=23&hour=14&min=0&sec=0&p0=utc-1
Check that all JIRA issues for the specific version are Closed (example JQL: `project = IGNITE AND fixVersion <= 1.7 AND status != closed`).
curl "https://issues.apache.org/jira/rest/api/2/search?jql=project=ignite%20AND%20status%20!=%20closed%20AND%20fixVersion<=1.7&fields=summary" | grep '"total":0,"issues":\[\]'
Check that sha1 & md5 checksum is correct.
sha1sum -c *.sha1 md5sum -c *.md5
Check that signature is correct.
gpg --verify-files *.asc
Check licenses from the source code.
mvn clean validate -DskipTests=true -P check-licenses
Build the binary releases from the source code.
mvn clean package -DskipTests -Dignite.edition=hadoop mvn clean package -DskipTests
Build Ignite.NET binaries and NuGet packages
cd modules\platforms\dotnet build -skipJava
After vote passes someone from PMC should do the following:
Upload documentation to https://svn.apache.org/repos/asf/ignite/site/trunk/releases/<version>
svn import apache-ignite-fabric-<version>-bin/docs https://svn.apache.org/repos/asf/ignite/site/trunk/releases/<version> -m "new Release (<version>)"
Move release to https://dist.apache.org/repos/dist/release/ignite/<version>
svn mv https://dist.apache.org/repos/dist/dev/ignite/<version><rc> https://dist.apache.org/repos/dist/release/ignite/<version> -m "Release <version>"
Create Release tag from RC tag
git tag -a <version> -m "<version>" git push origin <version>
Send an email with subject "[RESULT] [VOTE] Apache Ignite <version> Release (<rc>)", for example "[RESULT] [VOTE] Apache Ignite 1.4.0 Release (RC1)" and body similar to:
Hello! Apache Ignite 1.4.0 release (RC1) has been accepted. 9 "+1" votes received. Here are the votes received: - Denis Magda (binding) - Anton Vinogradov (binding) - Alexey Kuznetsov (binding) - Sergi Vladykin (binding) - Gianfranco Murador (binding) - Vladimir Ozerov (binding) - Raul Kripalani (binding) - Konstantin Boudnik (binding) - Chandresh Pancholi Here is the link to vote thread - http://apache-ignite-developers.2346864.n4.nabble.com/VOTE-Apache-Ignite-1-4-0-Release-RC1-tp3474.html Ignite 1.4.0 successfuly released to https://dist.apache.org/repos/dist/release/ignite/1.4.0/ Thanks!
Whenever consensus cannot be reached, standard Apache Voting Process will be used to reach a solution.
After successful vote following actions should be done: