Skip to content

LRA Release Process

jmfinelli edited this page Aug 18, 2025 · 3 revisions

LRA release procedure

This page provides all instructions to release LRA from its main branch.

Intro

The LRA release procedure is semi-automated. It’s expected to be run "manually" on a local machine. Most steps are automatised by the shell script narayana-release-process.sh. LRA is always released from the main branch.

⚠️
To release LRA, access to Red Hat’s internal systems is needed (e.g. VPN connected, permissions for jboss nexus, etc.).

Release of LRA main branch

Prerequisites

The local environment where the release will take place has to satisfy several prerequisites.

  • There should not be any issue tracker in the JBTM project, related to LRA, with priority blocker

    • Use the following query to check this requisite

      project = JBTM AND priority = Blocker AND component = LRA AND resolution = Unresolved
    • In case there are blockers, discuss them with the team

  • Ensure LRA’s GitHub Actions run successfully without any issue

  • Ensure that JDK17 or higher (java -version) is used

  • Ensure $JAVA_HOME is set up (it is needed for the idlj generation)

  • Ensure that the user running the release script has permissions to push Narayana’s artifacts to https://repository.jboss.org/nexus

    • Maven’s settings.xml should have the credentials defined for jboss nexus

    • To do so, the server with id jboss-releases-repository should be defined in ~/.m2/settings.xml

      <settings>
        <servers>
          <server>
            <id>jboss-releases-repository</id>
            <username>[username for jboss nexus connection]</username> <! e.g. [email protected] -->
            <password>[token for jboss nexus connection]</password>
          </server>
        </servers>
      </settings>
    • username and token can be obtained through Nexus

  • Ensure that Maven’s settings.xml includes the following profile:

    <settings>
      <profiles>
        <profile>
          <id>release</id>
          <activation>
            <property>
              <name>release</name>
            </property>
          </activation>
          <properties>
            <gpg.useagent>true</gpg.useagent>
            <gpg.keyname>...replace with your key's ID...</gpg.keyname>
          </properties>
        </profile>
      </profiles>
    </settings>
  • Ensure that your .bashrc/.zshrc includes export GPG_TTY=$(tty)

    • Execute source ~/.bashrc in the terminal you will use to run the release script (source ~/.zshrc for MacOS)

  • Clone your fork of LRA and then add a remote reference to [email protected]:jbosstm/lra.git by executing git remote add upstream [email protected]:jbosstm/lra.git

    • When using an existing repository, run the following command:

      git fetch upstream; git reset --hard upstream/main
  • The narayana-release-process.sh script requires the existence of the directory ~/tmp (use mkdir -p $HOME/tmp before running the script)

    ⚠️
    Ensure you do not have or need ~/tmp before executing the release process as the release process uses that directory for its own purpose (remove ~/tmp before running the script)

Execute the release script

Go to the directory where the Narayana repository is and run the script:

# cd $PWD/narayana-release
./narayana-release-process.sh 1.0.2.Final 1.0.3.Final jbosstm
  • 1.0.2.Final is the release to be done (most likely the version declared in the pom.xml file without SNAPSHOT, e.g. 1.0.2.Final-SNAPSHOT)

  • The new version will be used to update all pom.xml files in the code base, e.g. 1.0.3.Final-SNAPSHOT

  • When the narayana-release-process.sh script executes, LRA artifacts are deployed to a private Nexus repository called narayana-staging

    • The community won’t be able to access the newly released version’s artifacts until they’ve been moved to the public Nexus repository, narayana.

    • It’s essential to run the validation job before deploying new artifacts to the Nexus public repository. This step ensures that the artifacts meet all Maven Central requirements

      • If the validation job passes all checks, the new artifacts can be deployed to the narayana repository

        • cd ~/tmp/lra/1.0.2.Final/lra/

        • mvn nxrm3:staging-move -Dnexus.staging.tag=lra-1.0.2.Final -DreleaseStaging

      • If the validation job didn’t pass all checks, the new artifacts can be deleted

        • cd ~/tmp/lra/1.0.2.Final/lra/

        • mvn nxrm3:staging-delete -Dnexus.staging.tag=lra-1.0.2.Final -DreleaseStaging

    • After the artifacts have been moved to the narayana repository, the validation job for that repository must be executed

      • The validation job is expected to succeed, as the validation for narayana-staging has already passed

      • If that’s the case, execute the following commands to complete the release

        • cd ~/tmp/lra/1.0.2.Final/lra/

        • git push origin main --tags

Post release actions

  • Create a new release version in the GitHub repository

    • Select the tag just created

    • The Release title should be the same version used for the tag just created (e.g. 1.0.2.Final)

    • It is possible to generate Release notes by selecting the previous tag and then let GitHub generate the text for you

    • Set as latest release should be selected, if applicable

  • Once the new LRA release has been created, create a new WildFly issue to update the version of LRA in WildFly

    • Past examples can be query:

      project = WFLY AND text~"Update to Narayana LRA" ORDER BY created DESC
    • Select the 'Fix Version/s' and Priority (if appropriate).

    • Add a description to Wildfly issue (e.g. WFLY-20690), for example the release link from GitHub

    • Link it as "blocks" to any open WFLY issues that are resolved/alleviated with the new LRA release

    • When Dependabot opens a PR to bump the LRA version, link the relevant WildFly issue tracker ticket to the PR

  • A PR for Quarkus is automatically opened by the dependabot (checking the PR is good)

  • Check that the artifacts that have been deployed to Maven central (it might take a day or two)

  • Email [email protected] modifying this text:

    subject:LRA <VERSION>.Final is released
    
    Hello,
    
    The Narayana team are proud to announce the release of version <VERSION>.Final of LRA!
    
    The maven artifacts for the release are available at maven central.
    
    << (Optional) Description of the main achievements of this release >>
    
    Release: https://github.com/jbosstm/lra/releases/tag/<VERSION>.Final
    Diff: https://github.com/jbosstm/lra/compare/<PREVIOUS_VERSION>.Final...<VERSION>.Final
    
    Happy coding,
    The Narayana team
    • NOTE: If you don’t immediately see the message in the archive, it is very likely that it needs to be approved

  • Send the same message to Narayana google group to inform the community that a new version of LRA was released

  • Announce that ‘LRA x.x.x.Final` is available on Zulip

  • Consider publishing a tweet at narayana_io like: "Narayana https://lists.jboss.org/archives/list/[email protected]/thread/6H4I5KPSPIW7LGGLPVS7K2D4D74Q74UH/ released - find out more at https://lists.jboss.org/archives/list/[email protected]/thread/6H4I5KPSPIW7LGGLPVS7K2D4D74Q74UH/ #narayanaio"

Clone this wiki locally