0) In case you're on Windows, please install WSL
    See https://msdn.microsoft.com/en-us/commandline/wsl/install_guide for details
    Perform all operations in bash console! (type "bash" at windows console)

1) Software required to perform release:
    - Maven 3.x
    - Java 8.x
    - Svn command line client
    - Git command line client
        Don't forget to configure username and email
            git config --global user.name "John Doe"
            git config --global user.email johndoe@apache.org
    - GPG (already installed at most of *Nix)

    In case you're on Windows, please make sure all listed software installed under WSL.
    Type "bash" in Windows console and check each one. Use following commands to check:
        java -version
        git --version
        svn --version
        mvn -version
        gpg --version
    and use 'apt install ...' to install anything missing

2) Configuration required to perform release:
    - Create/Import your pgp secret key.
        In case you have no pgp key, please follow instructions from https://www.apache.org/dev/openpgp.html#generate-key

        Don't forget to add your public pgp key here to https://dist.apache.org/repos/dist/release/ignite/KEYS
        https://dist.apache.org is a svn repository and can be updated using your apache credentials.

        Append you key using commands:

        gpg --list-sigs <keyname> >> KEYS
        gpg --armor --export <keyname> >> KEYS

    - Configure maven settings.xml (usually in /usr/share/maven/conf/ on Ubuntu):

        Add following and fill <username>, <password> and <gpg.*>

        <servers>
           <server>
               <id>apache.releases.https</id>
               <username>*</username> <!-- your apache username -->
               <password>*</password> <!-- your apache password -->
           </server>
        </servers>

        <profiles>
           <profile>
               <id>gpg</id>
               <properties>
                   <gpg.keyname>*</gpg.keyname> <!-- pgp keyname, eg. E38286D5 -->
                   <gpg.passphrase>*</gpg.passphrase> <!-- pgp passphrase -->
                   <gpg.useagent>false</gpg.useagent>
               </properties>
           </profile>
        </profiles>

3) Perform Vote steps and start Vote.
    Run all vote*.sh scripts
    Scripts are independent of each other and can be run in parallel, except *X_step_Y*.sh

    NOTE: some scripts may require sudo permissions, so you will be asked for sudo password

3.1) Perform Release Verification and send Release For Vote
    See https://cwiki.apache.org/confluence/display/IGNITE/Release+Process for details

4) Once Vote accepted, perform Release steps.
    Run all release*.sh scripts
    Scripts are independent of each other and can be run in parallel, except *X_step_Y*.sh

4.1) Close Vote
    See https://cwiki.apache.org/confluence/display/IGNITE/Release+Process for details
    Don't forget about Post-release steps

See also
- https://cwiki.apache.org/confluence/display/IGNITE/Release+manager+Notes
for more information.
