Skip to content

Release Creation

DaGeRe edited this page Sep 6, 2024 · 1 revision

Prerequisites

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

  • Determine version number for the new release.
  • Have the Eclipse API scan utility present in your Eclipse IDE
    • Available in gitlab@build.se.informatik.uni-kiel.de:kieker/utility.git
    • Import project de.cau.cs.se.kieker.record.analyser
    • Build the project
    • Start an Eclipse instance with the analyser
    • 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.

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

2. Initialize release branch

  • Fetch everything from the remote repository: git fetch
  • Checkout stable: git checkout stable
  • Ensure that the stable branch is up to date: git rebase origin/stable
  • Create a branch for the release: git checkout -b $VERSION-RC
  • Set the final release version number
    • In the gradle.properties file: kiekerVersion = $VERSION
    • In bin/dev/assemble-tools.sh
  • Manually modify the following files: CITATION.cff, codemeta.json
  • Update the copyright year tags in the source files by
    • Adjusting the year in the updateLicenseHeaderYear task
    • ./gradlew updateLicenseHeaderYear
  • Modify the HISTORY file
  • Execute a build to update version strings etc.: ./gradlew clean distribute -x check -x test
  • Commit the changes
  • Push the branch: git push -u origin $VERSION

Quality Assurance and Release Process

1. Test the source release

Extract source release archive to a tmp directory

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,).
Test Eclipse import as Gradle project (only complete project; not needed/working for every example)
Test build:

./gradlew clean build -x check -x test distribute

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

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,).
Test [tools](https://kieker-monitoring.readthedocs.io/en/latest/kieker-tools/Kieker-Tools.html) --- Linux & Windows
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)
Execute the other examples

3. Download all release files

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
Copy HISTORY to root dir as README unzip kieker-1.11-binaries.zip && cp kieker-*/HISTORY README && rm -rf kieker-1.11/
Compute MD5 sums for all files
    Linux: md5sum * > md5sums.txt
    Mac md5 * > md5sums.txt
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.
    /
        kieker-<version>_binaries.zip|tar.gz
        kieker-<version>_sources.zip|tar.gz
        kieker-userguide.pdf (e.g., extracted from zip)
        README (copy of HISTORY)
    /javadoc/
        kieker-<version>-javadoc.jar
    Check MD5 sums! (takes a while to become available on SF)
    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:

[Development > Release Creation > image2022-3-18_22-32-55.png]

4.3 Web site (API)

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

Update web site (Sometimes easiest to search/replace in a separate editor):
    http://kieker-monitoring.net/download/
    http://kieker-monitoring.net/download/nightly/
    http://kieker-monitoring.net/release-notes/ (copy contents from GitHub releases page because the formatting is correctly transferred)
    Upload user guide to  http://eprints.uni-kiel.de/16537/ and move to top position in list (arrows)
    http://kieker-monitoring.net/documentation/
    Jira
        Close Release
        Create version(s) and date(s) for new release(s)
    Update Kieker calendar (if new release dates added)
    http://kieker-monitoring.net/documentation/quickstart-guide/ (+ Eclipse version)
Create post on Twittter
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/

Send mail to users and develops list (template above)

Send release to SPEC RG release manager for publication at  http://research.spec.org/tools.html

Post Release

Create a tag for 1.13 (for instance, with gitg)
Create a branch from the release branch to merge the changes back to master
(1.13)*$ git checkout -b 1.13-back-to-master
Update version number in the gradle.properties file (remember to include -SNAPSHOT!)
Execute $ ./gradlew clean build -x check -x test to update version strings
Update version number in the Eclipse settings (@since tag) .settings/org.eclipse.jdt.ui.prefs
Commit the changes and push
$ git commit -am "merging release branch back to master"
$ git push origin 1.13-back-to-master
Create a pull request on GitHub to the master branch
Wait for the checks of the pull request to be successful
Delete local and remote branch 1.9

   git branch -d 1.9
   git push origin --delete 1.9

Push tag git push origin 1.9
Update version numbers on http://kieker-monitoring.net/download/nightly/
Update version number in https://build.se.informatik.uni-kiel.de/jenkins/job/kieker-nightly-benchmark/configure
Run Eclipse function to scan record API and generate test classes
    The tool is available in [gitlab@build.se.informatik.uni-kiel.de](mailto:gitlab@build.se.informatik.uni-kiel.de):kieker/utility.git
    import [de.cau.cs.se](http://de.cau.cs.se/).kieker.record.analyser
Run tests
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)