Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Make sure it builds fine and all tests passes on Jenkins.
  2. Create the release branch and publish it.
    New version should only be the version number, should not include the release candidate tag and should not include the software (ex for OpenDNSSEC 1.3.4 it would be just 1.3.4).

    Code Block
    languagebash
    # For OpenDNSSEC
    
    # Make sure we have the latest updates
    git fetch --all -p
    # Delete local branches are check out them again
    git branch -D <MAJOR VERSION>/master
    git branch -D <MAJOR VERSION>/develop
    git checkout <MAJOR VERSION>/master
    git checkout <MAJOR VERSION>/develop
    # Make the release branch
    git flow release start -r <MAJOR VERSION> <NEW VERSION>
    # Publish release branch
    git flow release publish <NEW VERSION>
    
    
    # For others
    
    # Make sure we have the latest updates
    git fetch --all -p
    # Delete local branches are check out them again
    git checkout develop
    git branch -D master
    git checkout master
    git branch -D develop
    git checkout develop
    # Make the release branch
    git flow release start <NEW VERSION>
    # Publish release branch
    git flow release publish <NEW VERSION>
  3. Update version and NEWS with the <NEW VERSION> and the release candidate tag (rc<release candidate number>).

    Code Block
    languagebash
    # Update version for OpenDNSSEC
    vi version.m4
    # Update version for SoftHSM
    vi configure.ac
    
    vi NEWS
    vi ...
    git commit -a -m "Update version and NEWS for release <NEW VERSION>rc<release candidate number>"
    git push
  4. Check out the release on release management host:

    Code Block
    languagebash
    git clone https://github.com/opendnssec/<SOFTWARE>.git
    cd <SOFTWARE>
    git checkout master
    git checkout develop
    git flow init -d
    git flow release track <NEW VERSION>
    
  5. Run prepdist.sh to make a tar-ball:

    Code Block
    languagebash
    # You can cut&paste this:
    source prepdist.sh &&
    make dist &&
    echo "OK" || { echo "FAILED"; cd ..; }
  6. Extract the tar-ball and make a full build, make sure that the tar-ball and the directory is correctly named.
    If "make check" does not exist, skip it and make the steps manually.

    Code Block
    languagebash
    tar zxvf <SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz
    cd <SOFTWARE>-<NEW VERSION>rc<release candidate number>
    
    # You can cut&paste this:
    source ../../prepdist.sh &&
    make &&
    make check &&
    make install &&
    rm -rf /tmp/*-release &&
    echo "OK" || { echo "FAILED"; cd ..; }
  7. Retrieve the release candidate tar-ball from the Ubuntu server and put it in distribution repository under source/testing.
  8. Sign and checksum the tar-ball using the script sign-distfile.sh (available from the non-public OpenDNSSEC repository).

    Code Block
    languagebash
    cd <corporation repository>/development/pgp
    sh sign-distfile.sh <distribution repository>/source/testing/<SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz
  9. Verify the signature, first add the public key if you already haven't.

    Code Block
    languagebash
    cd <corporation repository>/development/pgp
    gpg --import opendnssec-pubring.gpg

    Now verify the signed release.

    Code Block
    languagebash
    cd <distribution repository>/source/testing
    gpg --verify <SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz.sig <SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz
  10. Commit all distribution files (tar-ball, detached signature and checksum files) to the distribution repository.

    Code Block
    languagebash
    cd <distribution repository>/source/testing
    svn add <SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz*
    svn ci -m "<SOFTWARE> <NEW VERSION>rc<release candidate number>" <SOFTWARE>-<NEW VERSION>rc<release candidate number>.tar.gz*
  11. Tag the release candidate.

    Code Block
    git tag -m "Tagging <SOFTWARE> <NEW VERSION>rc<release candidate number> release" <NEW VERSION>rc<release candidate number>
    git push --tags
  12. Announce the release candidate, this is often done by the project leader but might be done by yourself if needed.
    Wait for the release to exit the release candidate period.
    If no blocking issues are found continue this process.
  13. Update version and NEWS with the <NEW VERSION> (without the release candidate number).

    Code Block
    languagebash
    # Update version for OpenDNSSEC
    vi version.m4
    # Update version for SoftHSM
    vi configure.ac
    
    vi NEWS
    vi ...
    git commit -a -m "Update version and NEWS for release <NEW VERSION>"
    git push
  14. Update the source on the release management host (or you can check out everything again as step 4):

    Code Block
    languagebash
    git pull
  15. Run prepdist.sh to make a tar-ball:

    Code Block
    languagebash
    # You can cut&paste this:
    source prepdist.sh &&
    make dist &&
    echo "OK" || { echo "FAILED"; cd ..; }
  16. Extract the tar-ball and make a full build, make sure that the tar-ball and the directory is correctly named.
    If "make check" does not exist, skip it and make the steps manually.

    Code Block
    languagebash
    tar zxvf <SOFTWARE>-<NEW VERSION>.tar.gz
    cd <SOFTWARE>-<NEW VERSION>
    
    # You can cut&paste this:
    source ../../prepdist.sh &&
    make &&
    make check &&
    make install &&
    rm -rf /tmp/*-release &&
    echo "OK" || { echo "FAILED"; cd ..; }
  17. Retrieve the release tar-ball from the Ubuntu server and put it in distribution repository under source.
  18. Sign and checksum the tar-ball using the script sign-distfile.sh (available from the non-public OpenDNSSEC repository).

    Code Block
    languagebash
    cd <corporation repository>/development/pgp
    sh sign-distfile.sh <distribution repository>/source/<SOFTWARE>-<NEW VERSION>.tar.gz
  19. Verify the signature, first add the public key if you already haven't.

    Code Block
    languagebash
    cd <corporation repository>/development/pgp
    gpg --import opendnssec-pubring.gpg

    Now verify the signed release.

    Code Block
    languagebash
    cd <distribution repository>/source
    gpg --verify <SOFTWARE>-<NEW VERSION>.tar.gz.sig <SOFTWARE>-<NEW VERSION>.tar.gz
  20. Commit all distribution files (tar-ball, detached signature and checksum files) to the distribution repository.

    Code Block
    languagebash
    cd <distribution repository>/source
    svn add <SOFTWARE>-<NEW VERSION>.tar.gz*
    svn ci -m "<SOFTWARE> <NEW VERSION>" <SOFTWARE>-<NEW VERSION>.tar.gz*
  21. Close the release and remove the release branch.

    Code Block
    # For OpenDNSSEC
    git checkout <MAJOR VERSION>/master
    git pull
    git checkout <MAJOR VERSION>/develop
    git pull
    git checkout release/<NEW VERSION>
    git flow release finish -r <MAJOR VERSION> -m "Tagging <SOFTWARE> <NEW VERSION> release" <NEW VERSION>
    # For others
    git flow release finish -m "Tagging <SOFTWARE> <NEW VERSION> release" <NEW VERSION>
    
    git push
    git push --tags
    git push origin :release/<NEW VERSION>

...