You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 60 Next »

Introduction

Following picture demonstrates release stages sequence.

Ignite Release Process


P0. Initializing

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.

Prerequisites for release manager

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:

Following setup is performed only once.  Check README.txt from https://github.com/apache/ignite-release/tree/master/scripts This readme file contains some additional requirement and setup steps.


0.3.1. If you don’t have your Apache key set up, please see https://www.apache.org/dev/openpgp.html#home on how to generate a new key.

Steps to be followed:

  • Setup gpg home (optional) and configuration file (gpg.conf) according to the page.
  • Check version and settings using `gpg --version` (version >1.4.1, SHA512 is recommended).
  • Generate new key pair `gpg --gen-key` Parameters: RSA/4096/never expires/use your name and apache email/comment: `CODE SIGNING KEY`. Let's suppose generated key name is 612654F7.
  • Check preferences using `gpg --edit-key 612654F7` and sub-command `showpref`

0.3.2. Export key to Apache SVN. See section 'Create/Import your pgp secret key' in Readme.txt in https://github.com/apache/ignite-release/tree/master/scripts

  • Make sure you have SVN client. You can install TortoiseSVN for convenience (don’t forget to select command line tools for having svn executable). Alternatively, you can install SVN package from https://subversion.apache.org/packages.html

Steps to be followed:

gpg --list-sigs 612654F7 >> KEYS
gpg --armor --export 612654F7 >> KEYS


0.3.3. Export the key to a Public Key Server

To publish key follow instructions from https://www.apache.org/dev/openpgp.html#publish-in-web-space

You may use

gpg --send-key 612654F7

alternatively, you

- can export key to an .asc file (gpg --armor --export 6F6F6F6F > key.asc)

- and submit the key file content manually to a public key server.

For example, at MIT server you can just paste asc file content to a text field and submit: to http://pgp.mit.edu/ or to http://keyserver.ubuntu.com/

P1. Scope development and implementation

P1.1 Implementation and Scope Discussion

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.

P1.2 Implementation and Scope Finalization

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.  

P2. Rampdown

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.

P3. Stabilization

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.

P4. Vote preparation (building release candidate)

Once all changes are applied it is possible to prepare release candidate.

4.0. Prepare Release Notes

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. Update release branch versions

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. Prepare RC on Teamcity

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:

~/download:[]$ unzip release-2.7.0-rc0.zip

4.3. Sign and deploy RC using vote preparation scripts

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.

4.3.1. Run script to create VCS tag in git 

Run script vote_1[git]create_rc_tag.sh  Example of script output:

$ ./vote_1\[git\]create_rc_tag.sh 
Preparing vote 2.7.0-rc0
Removing obsolete tag...
2.7.0
-rc0
Deleted tag '2.7.0-rc0' (was b2119988f0)
Username for 'https://git-wip-us.apache.org': <your apache username here>
Password for 'https://nizhikov@git-wip-us.apache.org': <your apache password here>
To https://git-wip-us.apache.org/repos/asf/ignite
 - [deleted]               2.7.0-rc0
On branch master
Your branch is ahead of 'my/master' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
Creating new tag...
Username for 'https://gitbox.apache.org': <your apache username here>
Password for 'https://nizhikov@gitbox.apache.org':   <your apache password here>
Counting objects: 1, done.
Writing objects: 100% (1/1), 166 bytes | 166.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://gitbox.apache.org/repos/asf/ignite
 * [new tag]               2.7.0-rc0 -> 2.7.0-rc0
 
======================================================
RC tag should be created.
Please check results at 
https://gitbox.apache.org/repos/asf?p=ignite.git

Please, check corresponding git tag is created and is available in ASF repository: https://gitbox.apache.org/repos/asf?p=ignite.git;a=tags

4.3.2. Create & close (publish) staging repository

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:

$ ./vote_2\[mvn\]\[pgp\]deploy_to_staging.sh 
Preparing vote 2.7.0-rc0
Uploading ./org/apache/ignite/ignite-spark (1 of 53).
Uploading ./org/apache/ignite/ignite-clients (2 of 53).

...
Uploading ./org/apache/ignite/ignite-mqtt (53 of 53).
Uploaded
 
======================================================
Maven staging should be created
Please check results at
https://repository.apache.org/#stagingRepositories
Don't forget to close staging with proper comment


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.

4.3.3.1. Build DEB/RPM packages

? 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: 

$ ./vote_3_step_1\[packages\]build.sh 
...

dpkg-deb: building package 'apache-ignite' in '../apache-ignite_2.7.0-1_all.deb'.
copied '/tmp/tmp.rEePHrMMWU/apache-ignite_2.7.0-1_all.deb' -> '/home/dragon/download/release/packaging/apache-ignite_2.7.0-1_all.deb'
удалён '/tmp/tmp.rEePHrMMWU/apache-ignite_2.7.0-1_all.deb'
Removing temporary work directories: /tmp/tmp.rEePHrMMWU 

=== Run time: 0h:00m:36s ===

packaging/apache-ignite-2.7.0-1.noarch.rpm:
Processing packaging/apache-ignite_2.7.0-1_all.deb...
gpg: все значения, переданные в '--default-key', игнорируются
Signed deb packaging/apache-ignite_2.7.0-1_all.deb
mkdir: создан каталог 'packaging/pkg'
renamed 'packaging/apache-ignite-2.7.0-1.noarch.rpm' -> 'packaging/pkg/apache-ignite-2.7.0-1.noarch.rpm'
renamed 'packaging/apache-ignite_2.7.0-1_all.deb' -> 'packaging/pkg/apache-ignite_2.7.0-1_all.deb'

4.3.3.2. Sign artfacts

Run script vote_3_step_2[pgp]sign_artifacts.sh . Example of script output

$ ./vote_3_step_2\[pgp\]sign_artifacts.sh 
# Starting GPG Agent #
Signing ./svn/vote/apache-ignite-fabric-2.7.0-bin.zip
Signing ./svn/vote/apache-ignite-2.7.0-src.zip
Signing ./svn/vote/apache-ignite-hadoop-2.7.0-bin.zip
Signed OK.
 
===============================================
Artifacts should be signed
Please check results at ./svn/vote
Each file should have corresponding *.asc file

NOTE: Package files are not signed because they
are meant to be stored in Bintray


Please check results at ./svn/vote. Optionally you may also check hash/sign using https://www.apache.org/info/verification.html

4.3.3.3. Deploy artfacts to SVN

Run scrupt vote_3_step_3[svn]deploy_artifacts.sh Example of output:

$ ./vote_3_step_3\[svn\]deploy_artifacts.sh 
RC 2.7.0-rc0
Adding (binary)  svn/vote/apache-ignite-2.7.0-src.zip
Adding           svn/vote/apache-ignite-2.7.0-src.zip.asc
Adding           svn/vote/apache-ignite-2.7.0-src.zip.sha512
Adding (binary)   svn/vote/apache-ignite-fabric-2.7.0-bin.zip
Adding           svn/vote/apache-ignite-fabric-2.7.0-bin.zip.asc
Adding           svn/vote/apache-ignite-fabric-2.7.0-bin.zip.sha512
Adding (binary)   svn/vote/apache-ignite-hadoop-2.7.0-bin.zip
Adding           svn/vote/apache-ignite-hadoop-2.7.0-bin.zip.asc
Adding           svn/vote/apache-ignite-hadoop-2.7.0-bin.zip.sha512
Committing transaction...
Committed revision 29664.
Adding (binary)  packaging/pkg/apache-ignite-2.7.0-1.noarch.rpm
...

Check binaries and sources are available in the SVN: https://dist.apache.org/repos/dist/dev/ignite/ 

4.4. Verify Release changes using TeamCity

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:

For 2.7 release "apache-ignite-hadoop" removed and some new dependencies introduced for a benchmarks.

4.5 Prepare NuGet staging

? 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.

4.6  Sending Release For Vote

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:

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

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

P5. Voting on Release and Release Verification

All community members are encouraged to verify release. PMC members have a binding vote, but each vote matters.

5.1 Checks

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 that version is correct.
  • 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
  • Do some trivial checks, e.g. start local topology, run several examples from binaries gained at previous step. Unpacked binaries can be found at sources/target/release-package

See also Incubator Release Checklist for more checks.

5.2 Voting process

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.

P6. Release

6.1. Closing Vote

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:

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!

In case vote is unsuccessful or closed by release manager, prepare new release candidate with fixes starting from step 4.2

6.2. Run Release scripts

In case vote was sucessfull, run release* scripts from RC home

6.2.1. Move binaries

Run release_1[svn]move_binaries.sh Example of output

$ ./release_1\[svn\]move_binaries.sh

# Releasing 2.7.5-rc4 :: Binaries #
Committing transaction...
Committed revision 34469.

=========================================================
Artifacts should be moved to Apache Ignite's release site
Please check results at:
 * binaries: https://apache.org/dist/ignite/2.7.5

Manual alternative of this script is 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>"

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/ 

6.2.2. Upload packages to bintray

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

$ ./release_2\[bintray\]upload_packages.sh
# Releasing 2.7.5-rc4 :: Packages #
Please, enter credentials for accessing Bintray RPM repository
Username:


6.2.3. Deploy docs to site

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:

$ ./release_3\[svn\]deploy_docs_to_site.sh
# Releasing 2.7.5-rc4 :: Packages #
/// list of files///
Uploading to svn ...
Authentication realm: <https://svn.apache.org:443> ASF Committers
Password for 'dpavlov': ....
/// list of files///
Documentation should be uploaded to site repository
Please check results at
https://svn.apache.org/repos/asf/ignite/site/trunk/releases

This step can be done manually 

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>)" 



https://svn.apache.org/repos/asf/ignite/site/trunk/releases

Update https://svn.apache.org/repos/asf/ignite/site/trunk/download.html (add new release to tables and mark them as latest, if necessary)

6.2.4. Create Release tag from RC tag

Run script release_4[git]create_release_tag.sh Example of output

$ . 

This step can be done manually :

Create Release tag from RC tag

git tag -a <version> -m "<version>"
git push origin <version>


Post-release steps

After successful vote following actions should be done:

  1. Update version in the master branch (execute script and commit changes): ./scripts/update-versions.sh 2.9.0
  2. Release all the documentation (Java, .NET, C++, etc.) on apacheignite.readme.io. Make sure to update a documentation's version to a version of the release.
  3. Update the latest doc reference on ignite.apache.org:
    1. Update the new version number on the .htaccess file: RewriteRule ^releases/latest/(.*)$ /releases/1.9.0/$1 [L]
    2. Add the following tag to all .html files: <link rel="canonicalhref="https://ignite.apache.org/releases/latest/LANGUAGE-DIR/FILENAME.html" />
    3. Use the script that automates the update or contact Mauricio Stekl (mauricio@gridgain.com) who can assist with this step.
  4. Update Ignite version in this file - https://ignite.apache.org/latest
  5. Mark JIRA version as released.
  6. Update https://ignite.apache.org with new download links, make sure to use [preferred]/[distdir] and [disturl]/[distdir]: https://svn.apache.org/repos/asf/ignite/site/trunk
  7. Prepare the cloud images and update links to them here https://ignite.apache.org/download.cgi#docker. In addition, update the links to the images on the following documentation pages whenever is needed:
    1. http://apacheignite.gridgain.org/docs/docker-deployment
    2. https://apacheignite.readme.io/docs/aws-deployment
    3. https://apacheignite.readme.io/docs/google-compute-deployment
  8. Update Web Console docker image: https://hub.docker.com/r/apacheignite/web-console-standalone/tags/
  9. Delete previous releases from https://dist.apache.org/repos/dist/release/ignite/..., replace their download URLs by https://archive.apache.org/dist/ignite/...
  10. Release maven staging (https://maven.apache.org/developers/release/maven-project-release-procedure.html).
  11. Upload .NET NuGet packages to nuget.org. Credentials can be found in https://svn.apache.org/repos/private/pmc/ignite/credentials/nuget.org (PMC only).
  12. Make sure that the artifacts were synced up to http://repo2.maven.org/maven2/org/apache/ignite/ and Maven Central. Refer to the recently happened issue ( Unable to render Jira issues macro, execution error. )
  13. Announce the release by sending a single message to announce@apache.org and Ignite's user/dev lists. Refer to the examples below:
    1. http://apache-ignite-developers.2346864.n4.nabble.com/ANNOUNCE-Apache-Ignite-2-1-0-Released-td20145.html
  14. Announce security vulnerabilities that were fixed in the release following the ASF process https://www.apache.org/security/committers.html. Check with security@ignite.apache.org if there are any vulnerabilities. 

Notice

This page was merged from several sources contributed by Nikolay Izhikov, Anton Vinogradov ,Denis Magda , Dmitry Pavlov , Pavel Tupitsyn, Vladimir Ozerov, Alexey Kuznetsov, Yakov Zhdanov

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 



  • No labels