Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@

# Release Guide

This document describes the manual release process for xrpl4j.

## Stable Releases

1. Checkout main and pull in latest changes from remote
```
git checkout main
git pull
```
2. Create a new release branch from main (e.g. `releases/v6.0` for major version release, `releases/v6.1` for minor version release)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sappenin
I kept this step because it's the convention that is currently being followed in xrpl4j release process. Since we are tagging the commits, we can skip creating the release branches and rely on git tags to know what should be the next version to release. WDYT?

If we decide to move away from release branches, then we won't be able to update the patch version in advance (as we do in step 9 currently). Would that cause any issue? Because currently in xrpl.js and xrpl-py we always update the version before doing any release.

Also, in xrpl.js and xrpl-py we push that latest released version to main branch, could we follow the same convention in xrpl4j?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thinking about it a bit more, let's keep the release branch pattern + versioning strategy for now - I haven't decided how we should track patches if we only tag.

```
git checkout -b releases/v6.1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at this more, I worry people will think v6.1 is normative. Maybe we should do something like v[major].[minor] and when we want to bump, say something like this:

Increment the version from v[major].[minor].[patch]-SNAPSHOT to v[major].[minor].[patch+1]-SNAPSHOT. For example, increment from v6.0.0-SNAPSHOT to v6.0.1-SNAPHSOT.

```

3. Set intended release version
```
mvn versions:set -DnewVersion=6.1.0
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
mvn versions:set -DnewVersion=6.1.0
mvn versions:set -DnewVersion=6.1.0-SNAPSHOT

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only SNAPSHOT should be committed into the repo. The non-SNAPSHOT versions are only interstitially existing on whatever machine deploys the artifacts.

```
4. Commit and push changes in `pom.xml` files created by step #3.
5. Verify Integration tests that executes on `Devnet` passes in GitHub actions. Integration tests that executes on
`Testnet` might fail as the amendment would generally not be available on `Testnet` yet.
6. Create a new tag for the release and push to remote
```
git tag v6.1.0
git push origin v6.1.0
```
7. Generate and deploy artifacts to [maven central repository](https://central.sonatype.com/) (This would prompt to sign the artifacts using private key)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we would execute the version bump, to deploy:

mvn versions:set -DnewVersion=6.1.0

```
mvn clean deploy -DskipTests -P release
```
8. Approve the release on [maven central repository](https://central.sonatype.com/)
9. Update the version to next patch version, commit and push to remote
```
mvn versions:set -DnewVersion=6.1.1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
mvn versions:set -DnewVersion=6.1.1
mvn versions:set -DnewVersion=6.1.1-SNAPSHOT

git commit -m "update version to 6.1.1"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
git commit -m "update version to 6.1.1"
git commit -m "update version to 6.1.1-SNAPSHOT"

git push
```
10. Generate release notes on GitHub using `v6.1.0` git tag.
11. Subsequent bug fixes if any are merged into `releases/v6.1` branch and released as patch version upgrades

## Release candidates

Steps remains same as stable release. We would follow Semantic Versioning and name the version something like `6.1.
0-rc.1`. In the event when the change we want to release as release candidate is not merged in the `main` branch, we
would release it from feature branch itself and tag the commit of feature branch.
Loading