Release Creation

Prerequisites

In the remaining document the version number is represented by $VERSION and the previous version with $PREVIOUS.

  1. Determine version number for the new release.
  2. Have the Eclipse API scan utility present in your Eclipse IDE
    1. Available in gitlab@build.se.informatik.uni-kiel.de:kieker/utility.git
    2. Import project de.cau.cs.se.kieker.record.analyser
    3. Build the project
    4. Start an Eclipse instance with the analyser
    5. Import the Kieker projects
      Note that you can also export the project and install it in your normal Eclipse installation.

Preparation

1. Prepare unit tests

Check if the generated unit tests are available for all records of previous release. This task is normally done at the end of a release and integrated into the master branch.

  1. If this is not the case
    1. Check out previous release branch $PREVIOUS
    2. Run Eclipse function to scan record API and generate test classes
    3. Run tests
    4. On errors determine cause and create tickets
    5. Commit and push changes, and merge them in the current master
    6. Switch to master HEAD
  2. Run tests
  3. If errors occur trigger tickets to fix those issues. Only on success proceed.

2. Initialize release branch

  1. Create a branch for the release:
     git checkout -b $VERSION-RC
    
  2. Set the final release version number in the gradle.properties file
  3. Manually modify the following files: CITATION.cff, codemeta.json
  4. Update the copyright year tags in the source files by
    1. Adjusting the year in the updateLicenseHeaderYear task
    2. ./gradlew updateLicenseHeaderYear
  5. Modify the HISTORY file
  6. Execute a build to update version strings etc.:

    ./gradlew clean distribute -x check -x test 
  7. Commit the changes
  8. Push the branch
     git push -u origin $VERSION
    

Quality Assurance and Release Process

  • Make sure that all stages for the branch passed and make sure that also all stages are executed (including the complete check scripts — usually only the case for pull requests)
  • After a successful build, download the release archives from 
    https://build.se.informatik.uni-kiel.de/jenkins/job/kieker-monitoring/job/kieker/job/$VERSION/

1. Test the source release

Extract source release archive to a tmp directory

  1. Manually inspect contents. Unfortunately, it's hard to give guidelines here. One goal is to look for contents (files, directories) that do not belong into the archive (e.g., tmp folders,).
  2. Test Eclipse import as Gradle project (only complete project; not needed/working for every example)
  3. Test build:
    ./gradlew clean build -x check -x test distribute
    
  1. Execute all JUnit tests from within Eclipse (this may reveal missing runtime dependencies in Eclipse (.classpath file))

2. Test the binary release

Extract binary release archive to a tmp directory

  1. Manually inspect contents. Unfortunately, it's hard to give guidelines here. One goal is to look for contents (files, directories) that do not belong into the archive (e.g., tmp folders,).
  2. Test tools --- Linux & Windows
  3. Execute user guide examples:
    • bookstore-application
      ./gradlew run
      
    • manual-instrumentation
      ./gradlew runMonitoring
      ./gradlew runAnalysis -Danalysis.directory=<DIR>
      
    • ch3-4--custom-components
      ./gradlew runMonitoringAndAnalysis
      
    • ch5--trace-monitoring-aspectj
      ./gradlew runExampleOperationExecution
      ./gradlew runExampleFlowEvents
      
    • appendix-JMS -- see instructions in user guide appendix
    • appendix-AMQP -- see instructions in user guide appendix
    • appendix-Sigar -- see instructions in user guide appendix
    • JavaEEServletContainerExample -- see instructions in user guide appendix
    • Demo (also included in JavaEEServletContainerExample)
  4. Execute the other examples

3. Download all release files

  1. Save the files downloaded from the Jenkins job. An all-in-one zip can be obtained from https://build.se.informatik.uni-kiel.de/jenkins/job/kieker-monitoring/job/kieker/job/<version>/lastSuccessfulBuild/artifact/*zip*/archive.zip
  2. Copy HISTORY to root dir as README unzip kieker-1.11-binaries.zip && cp kieker-*/HISTORY README && rm -rf kieker-1.11/
  3. Compute MD5 sums for all files
    1. Linux: md5sum * > md5sums.txt
    2. Mac md5 * > md5sums.txt
  4. Compare MD5 sums with the files on Jenkins!

4. Publish release files

4.1 Sourceforge [?deprecated?]

 https://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download#Createoreditarelease

  • Easiest way: Via scp (command line or ui like filezilla)
    scp file.zip SFUSER@frs.sourceforge.net:/home/frs/project/kieker
    
  • Alternatively: Uploads via the File browser.
    1. /
      1. kieker-<version>_binaries.zip|tar.gz
      2. kieker-<version>_sources.zip|tar.gz
      3. kieker-userguide.pdf (e.g., extracted from zip)
      4. README (copy of HISTORY)
    2. /javadoc/
      1. kieker-<version>-javadoc.jar
    3. Check MD5 sums! (takes a while to become available on SF)
    4. Set kieker-<version>_binaries.zip as default artifact for all platforms

4.2 GitHub

  • Create a release
  • Select to create a new tag and select the branch
  • Release name is "Kieker <version>"
  • Upload files:

4.3 Web site (API)

  1. Publish API (Javadoc) in https://github.com/kieker-monitoring/api

5. Upload to Maven repository

  • Prepare artifacts
    • Create kieker-<version>.pom, e.g., from local repo, e.g., ~/.m2/repository/net/kieker-monitoring/kieker/1.15/kieker-1.15.pom
    • Sign files with
      • for f in *; do gpg -u 8E97E26A -ab $f; done
    • Resulting set of files:
      • kieker-1.13-aspectj.jar kieker-1.13-emf.jar kieker-1.13.jar kieker-1.13-javadoc.jar kieker-1.13.pom kieker-1.13-sources.jar
        kieker-1.13-aspectj.jar.asc kieker-1.13-emf.jar.asc kieker-1.13.jar.asc kieker-1.13-javadoc.jar.asc kieker-1.13.pom.asc kieker-1.13-sources.jar.asc

  • Publish release in Staging Repository (see also  8a. Release It (Sonatype User Guide) )
    • Login to  https://oss.sonatype.org/index.html#stagingRepositories (with  Sonatype JIRA credentials)
    • Select Staging upload → Artifact(s) with POM
    • Upload the files from above including the .asc files (note that Sonatype does not ask for it here but will complain later in the staging repository)
    • Select Staging repositories and filter by netkieker and you should see the repository with status open (last time, it was closed already)
    • Inspect the files.
    • If everything's fine, trigger the "Release" operation. Note that this step is irreversible (i.e., a file once published at Maven Central cannot be replaced)!

6. Announce Release

  1. Update web site (Sometimes easiest to search/replace in a separate editor):
    1. http://kieker-monitoring.net/download/
    2. http://kieker-monitoring.net/download/nightly/
    3. http://kieker-monitoring.net/release-notes/ (copy contents from GitHub releases page because the formatting is correctly transferred)
    4. Upload user guide to  http://eprints.uni-kiel.de/16537/ and move to top position in list (arrows)
    5. http://kieker-monitoring.net/documentation/
    6. Jira
      1. Close Release
      2. Create version(s) and date(s) for new release(s)
    7. Update Kieker calendar (if new release dates added)
    8. http://kieker-monitoring.net/documentation/quickstart-guide/ (+ Eclipse version)
  2. Create post on Twittter
  3. Create news post on  Kieker web site. Template:
    Title: Kieker <VERSION> released
    Body:  
    On October 1, 2015, we released version 1.12 of our Kieker framework for application performance monitoring and dynamic software analysis. As usual, the release is available for download at http://kieker-monitoring.net/download/.
    
    PASTE HISTORY FILE
    
    For details and download see http://kieker-monitoring.net/
    
  4. Send mail to users and develops list (template above)
  1. Send release to SPEC RG release manager for publication at  http://research.spec.org/tools.html

Post Release

  1. Create a tag for 1.13 (for instance, with gitg)
  2. Create a branch from the release branch to merge the changes back to master
    (1.13)*$ git checkout -b 1.13-back-to-master
  3. Update version number in the gradle.properties file (remember to include -SNAPSHOT!)
  4. Execute $ ./gradlew clean build -x check -x test to update version strings
  5. Update version number in the Eclipse settings (@since tag) .settings/org.eclipse.jdt.ui.prefs
  6. Commit the changes and push
    $ git commit -am "merging release branch back to master"
    $ git push origin 1.13-back-to-master
  7. Create a pull request on GitHub to the master branch
  8. Wait for the checks of the pull request to be successful
  9. Delete local and remote branch 1.9
       git branch -d 1.9
       git push origin --delete 1.9
    
  10. Push tag git push origin 1.9
  11. Update version numbers on http://kieker-monitoring.net/download/nightly/
  12. Update version number in https://build.se.informatik.uni-kiel.de/jenkins/job/kieker-nightly-benchmark/configure
  13. Run Eclipse function to scan record API and generate test classes
    1. The tool is available in gitlab@build.se.informatik.uni-kiel.de:kieker/utility.git
    2. import de.cau.cs.se.kieker.record.analyser
  14. Run tests
  15. On errors determine cause and create tickets

9. Initial Actions for Next Version

  • Create ticket to remove artifacts marked with @deprecated (to be removed in X.YZ)