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.
During stabilization phase 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.
Once all changes are applied it is possible to prepare release candidate.
4.0.1. Collect Release Notes (this step is manual now). Check all completed tickets from the release page. Ticket may or may not have release notes, and this depends on if it is reasonable to mention change for users.
4.0.2. Optionally you may ask for review of resulting release notes on the list.
4.0.3. Update RELEASE_NOTES.txt and commit Release Notes changes into master and a release branch.
4.1.1. Update version in the master branch (execute script from Ignite project root directory):
./scripts/update-versions.sh 2.7.5
and commit changes. Source code will be published into SVN, so version update is required before RC building.
4.2.1. Run [RELEASES] Apache Ignite / Main [1] Release Build for ignite-x.y or for ignite-x.y.z. branch. You will need to enter version number (value if x.y.0 or x.y.z), and specify release candidate number. For testing purposes it is recommended to use rc0. You may several times re-build same rc- number.
4.2.2.Download and unzip release archive. It can be found at "Artifacts" tab on build page. Example:
Run vote scripts to prepare RC before voting. You may skip steps 4.3.1 & step 4.3.2 in case you want to run some testing of release. In case release build it made for testing purposes, go to step 3 in this section.
Run script vote_1[git]create_rc_tag.sh Example of script output:
Please, check corresponding git tag is created and is available in ASF repository: https://gitbox.apache.org/repos/asf?p=ignite.git;a=tags
Note: If you've already uploaded staging, you should remove it from nexus - https://repository.apache.org/#stagingRepositories
Run script ./vote_2\[mvn\]\[pgp\]deploy_to_staging.sh Example of script output:
Go to Nexus UI https://repository.apache.org/#stagingRepositories, login using Apache credentials and close repository. Close is a heavy background process, which makes repository visible for others. Provide some comment for closing repository, e.g. `Repository for Apache Ignite 2.7.5 - RC2`. After some time check if repository was closed successfully.
? Probably this build step was migrated to TC and automated ?
Note: Following script is locale specific. You should execute it on the en locale
Run script ./vote_3_step_1\[packages\]build.sh . Example of output:
Run script vote_3_step_2[pgp]sign_artifacts.sh . Example of script output
Please check results at ./svn/vote. Optionally you may also check hash/sign using https://www.apache.org/info/verification.html
Run scrupt vote_3_step_3[svn]deploy_artifacts.sh Example of output:
Check binaries and sources are available in the SVN: https://dist.apache.org/repos/dist/dev/ignite/
Compare with previous release.
There are TC task to generate report with difference comparing current release with previous.
https://ci.ignite.apache.org/viewType.html?buildTypeId=ApacheIgniteReleaseJava8_IgniteRelease72CheckFileConsistency
You should run it and do sanity check for a changed files.
To start the build you need to specify current (staging) version and released version of Apache Ignite. See "Artifacts" tab to get task results. Example:
? Probably this should be done using https://ci.ignite.apache.org/viewType.html?buildTypeId=ApacheIgniteReleaseJava8_PrepareVote3BuildNuGetPackages
For build number requested in this build step configuration, you should take build number (Teamcity identification of builds) from release candidate preparation Run Configuration from step 4.2.1.
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] Release Apache Ignite <version> <rc>", e.g. "[VOTE] Release Apache Ignite 2.7.5 RC4".
Vote email should include reference that vote is formal and votes meaning for +1,0,-1.
Here is the sample email:
Examples of Voting threads Vote on 2.7.5; Vote on 2.7.0
Optionally you can create a separate discussion for questions related to RC: Discussion on 2.7.5
All community members are encouraged to verify release. PMC members have a binding vote, but each vote matters.
Following list are steps, which can be done by each member, see also https://www.apache.org/info/verification.html
It is not complete list, community members can test any module or feature of the product.
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
See also Incubator Release Checklist for more checks.
In case there is -1 vote present (it is not a veto, even if it was casted by PMC), release manager has ultimate rigth to cancel vote immediately to fix related issues.
Usually +1 means that community member agrees that current release is better with previous.
Usually with +1 member shares which checks were done.
Vote should be open for at least 72hours. In case insufficient votes are available vote can be kept open as long as it needed without additional announce. But in this case release manager has option to close the vote as unsuccessfull in case time is out.
Whenever consensus cannot be reached, standard Apache Voting Process will be used to reach a solution.
Send an email with subject "[RESULT] <vote subject>" ("[RESULT] [VOTE] Release Apache Ignite <version> (<rc>)") and provide vote results: if it passes or not, provide voting details.
For example, "[RESULT] [VOTE] Release Apache Ignite 2.7.5 (RC1)" and body similar to 2.7.5 vote result, 2.7.0 vote result . See also other example:
In case vote is unsuccessful or closed by release manager, prepare new release candidate with fixes starting from step 4.2
In case vote was sucessfull, run release* scripts from release candidate local home from step 4.2.1.
Run release_1[svn]move_binaries.sh Example of output
Result should be available at https://dist.apache.org/repos/dist/release/ignite/
Please check results at:
* binaries: https://apache.org/dist/ignite/{version}
There can be some sync lag with moving files and availability at https://apache.org/dist/ignite/
During running script you will be asked for bintray credentials to upload. Ask Infra to provide
Run script release_2[bintray]upload_packages.sh, example of output
Run Script release_3[svn]deploy_docs_to_site.sh
This script will unzip and upload file by file to SVN related to Apache Ignite site. This may take several minutes to complete. You may need to enter Apache credentials for committing changes. Example of execution:
Check results availability at https://svn.apache.org/repos/asf/ignite/site/trunk/releases
Run script release_4[git]create_release_tag.sh Example of output
Please check results at https://gitbox.apache.org/repos/asf?p=ignite.git;a=tags
Release maven staging (https://maven.apache.org/developers/release/maven-project-release-procedure.html).
Go to Nexus UI https://repository.apache.org/#stagingRepositories, login using Apache credentials and release repository for accepted release candidate. You can release it by pressing the Release button (provided that you have successfully closed the staging repository).
This will move the components into the release repository of OSSRH where it will be synced to the Central Repository (see also https://central.sonatype.org/pages/releasing-the-deployment.html#close-and-drop-or-release-your-staging-repository)
The sync into Maven Central central staging from repository.apache.org occurs every 4 hours. There is a separate hourly schedule that runs which pushes from staging to the other central machines, and then updates the indexes.
You can access artifacts using service repository:
Once repository is synced you can see result in
http://repo2.maven.org/maven2/org/apache/ignite/
https://mvnrepository.com/artifact/org.apache.ignite/ignite-core
6.3.2. Update version in the master branch (execute script and commit changes): ./scripts/update-versions.sh 2.9.0
Post-release steps
After successful vote following actions should be done:
Update https://svn.apache.org/repos/asf/ignite/site/trunk/download.html (add new release to tables and mark them as latest, if necessary)
There are several unresoved issues / open questions:
1. Can committer be release manager and upload artifacts provided that PMC will upload committer's key
2. Steps to be done for prepare Nuget packages
3. Steps to be done for prepare RPM/DEB packages - step 4.3.3.1