Apache Camel Quarkus release process

The process is mutatis mutandis the same as for the main Apache Camel repository - see the Release guide page of the Camel documentation.

Here, just a sketch of the repeating part, after you have performed the initial setup following the Camel Release guide.

Pre release tasks

  • Check for an updated release of the Quarkus Qpid JMS Extension that aligns with the Quarkus version that Camel Quarkus is using. If one is available, update the quarkus-qpid-jms.version property in the project root pom.xml.

  • Close the GitHub release milestone and assign any remaining issues that aren’t covered by the release to the next milestone

Create a release branch

$ export VERSION=... # the version you are releasing, e.g. 0.1.0
$ export NEXT_VERSION=... # the next development iteration, e.g. 0.1.1-SNAPSHOT
$ git fetch upstream # upstream is git@github.com:apache/camel-quarkus.git
$ git checkout main # main is the branch from which you want to release
$ git reset --hard upstream/main # make sure you are in sync with upstream
$ git checkout -b release/$VERSION

release:prepare and release:perform

With Camel Quarkus, adding -Prelease to release:prepare and release:perform is not necessary, because all necessary profiles are set in the configuration of the maven-release-plugin.

The Maven command to release is as follows:

$ mvn clean release:clean release:prepare -DreleaseVersion=$VERSION -DdevelopmentVersion=$NEXT_VERSION -B release:perform

In case release:prepare is successful but an issue occurs during release:perform, it could be worth trying to resume from the failing artifact. For instance, would an issue occurs while performing the release of camel-quarkus-openapi-java, first of all you need to identify which directory release:perform used for the release process, usually it is <root_of_the_project>/target/checkout:

$ cd target/checkout

then a resume attempt could be triggered as below:

$ mvn -DskipTests -Denforcer.skip -Dquarkus.build.skip -Dformatter.skip -Dimpsort.skip deploy -Papache-release -rf :camel-quarkus-openapi-java

Next version in Camel Quarkus main branch

If there are no substantial commits in the release branch, which need to get merged/cherry-picked to main, you can perform this step right after creating the release branch. Otherwise, e.g. if there is a Camel upgrade in the release branch which is not available on Maven Central yet, it is better to perform this step after the new Camel release is available on the Central and after all relevant commits were merged/cherry-picked to main.

While in the release branch we set the $NEXT_VERSION to the next micro SNAPSHOT (e.g. when releasing 0.1.0, $NEXT_VERSION would be 0.1.1-SNAPSHOT), in main, we typically set the next version to the next minor SNAPSHOT (the next minor SNAPSHOT of 0.1.0 is 0.2.0-SNAPSHOT).

$ NEXT_RELEASE=... # e.g. 0.2.0
$ NEXT_SNAPSHOT="${NEXT_RELEASE}-SNAPSHOT"
$ git checkout "main"
$ git reset upstream/main
$ mvn release:update-versions -DautoVersionSubmodules=true -DdevelopmentVersion=$NEXT_SNAPSHOT -B
$ sed -i "s|<camel.quarkus.jvmSince>[^<]*</camel.quarkus.jvmSince>|<camel.quarkus.jvmSince>$NEXT_RELEASE</camel.quarkus.jvmSince>|" tooling/create-extension-templates/runtime-pom.xml
$ sed -i "s|<camel.quarkus.nativeSince>[^<]*</camel.quarkus.nativeSince>|<camel.quarkus.nativeSince>$NEXT_RELEASE</camel.quarkus.nativeSince>|" tooling/create-extension-templates/runtime-pom.xml
$ (cd extensions/qute && mvn clean install -Dquickly) # to regen the Qute Camel component metadata
$ git add -A
$ git commit -m "Next is $NEXT_RELEASE"
# Send a pull request

Update the Apache Camel Quarkus distribution subversion repository

Once the staging repository has been released, the Apache Camel Quarkus distribution subversion repository should be updated as sketched below.

If you are doing this for the first time you need to checkout the Apache Camel Quarkus distribution subversion repository:

$ svn checkout 'https://dist.apache.org/repos/dist/release/camel' camel-releases-dist

In case you have performed the above step during some release in the past, you need to update your working copy:

$ cd camel-releases-dist
$ svn update .

Make sure your public key is present in the KEYS file. Add it, if it is not there yet using gpg command:

$ export EMAIL= # the e-mail address in your key
$ gpg -k $EMAIL >> KEYS
$ gpg --armor --export $EMAIL >> KEYS

Assemble the Apache Camel Quarkus distribution:

$ mkdir -p "camel-quarkus/$VERSION"
$ cd "camel-quarkus/$VERSION"
$ export URL='https://repository.apache.org/content/repositories/releases/org/apache/camel/quarkus/camel-quarkus'
$ wget -O "apache-camel-quarkus-$VERSION-src.zip" "$URL/$VERSION/camel-quarkus-$VERSION-src.zip"
$ wget -O "apache-camel-quarkus-$VERSION-src.zip.asc" "$URL/$VERSION/camel-quarkus-$VERSION-src.zip.asc"
$ sha512sum "apache-camel-quarkus-$VERSION-src.zip" > "apache-camel-quarkus-$VERSION-src.zip.sha512"

Ensure that only the latest release from each maintained branches is present. Typically, when releasing e.g. 1.4.0, you may need to delete e.g. 1.3.0:

$ cd .. && ls
$ rm -fr 1.3.0

Review the changes:

$ svn diff

Commit the changes:

$ cd camel-releases-dist
$ svn add --force .
$ svn commit -m "Apache Camel Quarkus $VERSION released artifacts"

Further steps

In addition to the above, the following is needed: