From f993131b11ad3fd4ec59140a94c8d974f41d53e3 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:31:09 +0100 Subject: [PATCH 01/23] feat: agents release workflow --- .github/workflows/rust-release.yml | 139 +++++++++++++++++++++++++++++ rust/main/cliff.toml | 50 +++++++++++ rust/main/release-plz.toml | 32 +++++++ 3 files changed, 221 insertions(+) create mode 100644 .github/workflows/rust-release.yml create mode 100644 rust/main/cliff.toml create mode 100644 rust/main/release-plz.toml diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml new file mode 100644 index 00000000000..bca4dc35331 --- /dev/null +++ b/.github/workflows/rust-release.yml @@ -0,0 +1,139 @@ +name: Rust Agent Release + +on: + push: + branches: + - main + paths: + - 'rust/main/**' + - '.github/workflows/rust-release.yml' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +permissions: + contents: write + pull-requests: write + +env: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: full + +jobs: + release-pr: + name: Update Release PR + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry/index + key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: cargo-registry- + + - name: Install release-plz + run: cargo install release-plz --locked + + - name: Run release-plz + id: release-plz + working-directory: ./rust/main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + # Run release-plz to create/update the release PR + release-plz release-pr \ + --git-token "$GITHUB_TOKEN" \ + --backend github \ + --repo-url "${{ github.repository }}" + + - name: Summary + if: always() + run: | + echo "Release PR workflow completed" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "If a release PR was created, it will appear in the Pull Requests tab." >> $GITHUB_STEP_SUMMARY + echo "Once merged, the release will be published automatically." >> $GITHUB_STEP_SUMMARY + + release: + name: Publish Release + runs-on: ubuntu-latest + # Only run on main branch when a release PR is merged + if: | + github.event_name == 'push' && + github.ref == 'refs/heads/main' && + contains(github.event.head_commit.message, 'chore: release') + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry/index + key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: cargo-registry- + + - name: Install release-plz + run: cargo install release-plz --locked + + - name: Install git-cliff + run: cargo install git-cliff --locked + + - name: Publish Release + working-directory: ./rust/main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + # Get the version from the workspace Cargo.toml + VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') + echo "Detected version: $VERSION" + + # Get the previous tag + PREV_TAG=$(git describe --tags --abbrev=0 --match "agents-v*" 2>/dev/null || echo "") + echo "Previous tag: $PREV_TAG" + + # Generate changelog from previous tag to HEAD + if [ -z "$PREV_TAG" ]; then + CHANGELOG=$(git-cliff --config cliff.toml --unreleased --strip all) + else + CHANGELOG=$(git-cliff --config cliff.toml --latest --strip all) + fi + + # Create the tag + TAG_NAME="agents-v${VERSION}" + echo "Creating tag: $TAG_NAME" + git tag -a "$TAG_NAME" -m "Release $TAG_NAME" + git push origin "$TAG_NAME" + + # Create GitHub release with the changelog + gh release create "$TAG_NAME" \ + --title "Agents $VERSION" \ + --notes "$CHANGELOG" \ + --repo "${{ github.repository }}" + + echo "Release $TAG_NAME published successfully!" >> $GITHUB_STEP_SUMMARY + + - name: Trigger artifact build + run: | + echo "The agent-release-artifacts workflow will be triggered automatically by the release event." >> $GITHUB_STEP_SUMMARY diff --git a/rust/main/cliff.toml b/rust/main/cliff.toml new file mode 100644 index 00000000000..cee4ff7fa1d --- /dev/null +++ b/rust/main/cliff.toml @@ -0,0 +1,50 @@ +# git-cliff configuration for Hyperlane Rust agents +# Documentation: https://git-cliff.org/docs/configuration + +[changelog] +# changelog header +header = """ +## What's Changed\n +""" +# template for the changelog body +# https://keats.github.io/tera/docs/#introduction +body = """ +{% for commit in commits %} + * {{ commit.message | split(pat="\n") | first | trim }} (#{{ commit.id | truncate(length=7, end="") }})\ +{% endfor %} +""" +# template for the changelog footer +footer = """ + +""" +# remove the leading and trailing whitespace from the templates +trim = true + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = false +# process each line of a commit as an individual commit +split_commits = false +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "^perf", group = "Performance" }, + { message = "^chore", group = "Miscellaneous" }, + { message = "^refactor", group = "Refactor" }, + { message = "^doc", skip = true }, + { message = "^test", skip = true }, + { message = "^style", skip = true }, +] +# protect breaking changes from being skipped due to matching a skipping commit_parser +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = true +# regex for matching git tags +tag_pattern = "agents-v[0-9]+\\.[0-9]+\\.[0-9]+$" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "newest" diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml new file mode 100644 index 00000000000..52543ecb0a0 --- /dev/null +++ b/rust/main/release-plz.toml @@ -0,0 +1,32 @@ +# release-plz configuration for Hyperlane Rust agents +# Documentation: https://release-plz.ieni.dev/docs/config + +[workspace] +# Use conventional commits to determine version bumps +changelog_update = true +# Generate changelog using git-cliff +changelog_config = "cliff.toml" +# Use agents-v prefix for tags +git_tag_name = "agents-v{{ version }}" +# Don't publish to crates.io - we only do GitHub releases +publish = false +# Release all packages in the workspace together with the same version +release = true + +# Changelog generation for the entire workspace +[changelog] +# Disable individual package changelogs, we want one unified changelog +commit_parsers = [ + { message = "^feat", group = "Features" }, + { message = "^fix", group = "Bug Fixes" }, + { message = "^perf", group = "Performance" }, + { message = "^chore", group = "Miscellaneous" }, + { message = "^refactor", group = "Refactor" }, + { message = "^doc", skip = true }, + { message = "^test", skip = true }, + { message = "^style", skip = true }, +] +# Only include commits that touch the rust/main directory +filter_commits = [ + { path = "rust/main/.*" } +] From 8857652af8c12ae10f898f1c0002d49f25052bae Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:31:18 +0100 Subject: [PATCH 02/23] track breaking changes in commits --- rust/main/Cargo.toml | 2 +- rust/main/cliff.toml | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rust/main/Cargo.toml b/rust/main/Cargo.toml index de91ee4b27d..01a283c3c08 100644 --- a/rust/main/Cargo.toml +++ b/rust/main/Cargo.toml @@ -32,7 +32,7 @@ edition = "2021" homepage = "https://hyperlane.xyz" license-file = "../LICENSE.md" publish = false -version = "0.1.0" +version = "1.5.0" [workspace.dependencies] Inflector = "0.11.4" diff --git a/rust/main/cliff.toml b/rust/main/cliff.toml index cee4ff7fa1d..79d00d248e1 100644 --- a/rust/main/cliff.toml +++ b/rust/main/cliff.toml @@ -9,9 +9,12 @@ header = """ # template for the changelog body # https://keats.github.io/tera/docs/#introduction body = """ -{% for commit in commits %} - * {{ commit.message | split(pat="\n") | first | trim }} (#{{ commit.id | truncate(length=7, end="") }})\ -{% endfor %} +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in commits %} + * {% if commit.breaking %}**BREAKING**: {% endif %}{{ commit.message | split(pat="\n") | first | trim }} (#{{ commit.id | truncate(length=7, end="") }})\ + {% endfor %} +{% endfor %}\n """ # template for the changelog footer footer = """ @@ -39,7 +42,7 @@ commit_parsers = [ { message = "^style", skip = true }, ] # protect breaking changes from being skipped due to matching a skipping commit_parser -protect_breaking_commits = false +protect_breaking_commits = true # filter out the commits that are not matched by commit parsers filter_commits = true # regex for matching git tags From 5d979f4416c13cdb0d3eeae96afb00a04a79419c Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:37:47 +0100 Subject: [PATCH 03/23] prelease workflow --- .github/workflows/rust-release.yml | 99 ++++++++++++++++++++++++++++++ rust/main/release-plz.toml | 5 ++ 2 files changed, 104 insertions(+) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index bca4dc35331..07b5392a81b 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -8,6 +8,17 @@ on: - 'rust/main/**' - '.github/workflows/rust-release.yml' workflow_dispatch: + inputs: + prerelease: + description: 'Create a pre-release instead of a stable release' + required: false + type: boolean + default: false + prerelease_suffix: + description: 'Custom prerelease suffix (e.g., "beta.1", "rc.1", "alpha.2"). Leave empty to auto-generate.' + required: false + type: string + default: '' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -25,6 +36,8 @@ jobs: release-pr: name: Update Release PR runs-on: ubuntu-latest + # Skip automated PR creation for manual prereleases + if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && !inputs.prerelease) steps: - name: Checkout repository uses: actions/checkout@v4 @@ -67,6 +80,92 @@ jobs: echo "If a release PR was created, it will appear in the Pull Requests tab." >> $GITHUB_STEP_SUMMARY echo "Once merged, the release will be published automatically." >> $GITHUB_STEP_SUMMARY + beta-release: + name: Create Pre-release + runs-on: ubuntu-latest + # Only run for manual prereleases + if: github.event_name == 'workflow_dispatch' && inputs.prerelease + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry/index + key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} + restore-keys: cargo-registry- + + - name: Install git-cliff + run: cargo install git-cliff --locked + + - name: Create Pre-release + working-directory: ./rust/main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + # Get the current version from workspace Cargo.toml + BASE_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') + echo "Base version: $BASE_VERSION" + + # Determine prerelease suffix + if [ -n "${{ inputs.prerelease_suffix }}" ]; then + PRERELEASE_SUFFIX="${{ inputs.prerelease_suffix }}" + else + # Auto-generate beta version based on existing beta tags + LAST_BETA=$(git tag -l "agents-v${BASE_VERSION}-beta.*" | sort -V | tail -1) + if [ -z "$LAST_BETA" ]; then + PRERELEASE_SUFFIX="beta.1" + else + BETA_NUM=$(echo "$LAST_BETA" | sed 's/.*beta\.\([0-9]*\)/\1/') + NEXT_NUM=$((BETA_NUM + 1)) + PRERELEASE_SUFFIX="beta.${NEXT_NUM}" + fi + fi + + VERSION="${BASE_VERSION}-${PRERELEASE_SUFFIX}" + TAG_NAME="agents-v${VERSION}" + echo "Creating pre-release: $TAG_NAME" + + # Get the previous tag (either last prerelease or last stable) + PREV_TAG=$(git describe --tags --abbrev=0 --match "agents-v*" 2>/dev/null || echo "") + echo "Previous tag: $PREV_TAG" + + # Generate changelog from previous tag to HEAD + if [ -z "$PREV_TAG" ]; then + CHANGELOG=$(git-cliff --config cliff.toml --unreleased --strip all) + else + CHANGELOG=$(git-cliff --config cliff.toml --latest --strip all) + fi + + # Add prerelease warning to changelog + PRERELEASE_CHANGELOG="⚠️ **This is a pre-release version for testing purposes.** + +$CHANGELOG" + + # Create the tag + git tag -a "$TAG_NAME" -m "Pre-release $TAG_NAME" + git push origin "$TAG_NAME" + + # Create GitHub release with prerelease flag + gh release create "$TAG_NAME" \ + --title "Agents $VERSION (Pre-release)" \ + --notes "$PRERELEASE_CHANGELOG" \ + --prerelease \ + --repo "${{ github.repository }}" + + echo "Pre-release $TAG_NAME published successfully!" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "This is a pre-release and will be marked as such on GitHub." >> $GITHUB_STEP_SUMMARY + release: name: Publish Release runs-on: ubuntu-latest diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml index 52543ecb0a0..2cf28d9c199 100644 --- a/rust/main/release-plz.toml +++ b/rust/main/release-plz.toml @@ -12,6 +12,11 @@ git_tag_name = "agents-v{{ version }}" publish = false # Release all packages in the workspace together with the same version release = true +# Update Cargo.toml versions in release PR +pr_draft = false +pr_labels = ["release"] +# Automatically determine next version from conventional commits +semver_check = false # Changelog generation for the entire workspace [changelog] From 7b883434f0e4505b992598975c57b1faf5787c4f Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:42:39 +0100 Subject: [PATCH 04/23] tidy up --- .github/workflows/rust-release.yml | 186 +++++++++-------------------- 1 file changed, 55 insertions(+), 131 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 07b5392a81b..105e98d0d66 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -35,43 +35,31 @@ env: jobs: release-pr: name: Update Release PR - runs-on: ubuntu-latest - # Skip automated PR creation for manual prereleases + runs-on: depot-ubuntu-latest if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && !inputs.prerelease) steps: - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Cache Cargo registry - uses: actions/cache@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: actions/cache@v4 with: path: ~/.cargo/registry/index key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} restore-keys: cargo-registry- - - name: Install release-plz run: cargo install release-plz --locked - - name: Run release-plz - id: release-plz working-directory: ./rust/main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - - # Run release-plz to create/update the release PR release-plz release-pr \ --git-token "$GITHUB_TOKEN" \ --backend github \ --repo-url "${{ github.repository }}" - - name: Summary if: always() run: | @@ -80,159 +68,95 @@ jobs: echo "If a release PR was created, it will appear in the Pull Requests tab." >> $GITHUB_STEP_SUMMARY echo "Once merged, the release will be published automatically." >> $GITHUB_STEP_SUMMARY - beta-release: - name: Create Pre-release - runs-on: ubuntu-latest - # Only run for manual prereleases - if: github.event_name == 'workflow_dispatch' && inputs.prerelease + publish: + name: Publish Release + runs-on: depot-ubuntu-latest + if: | + (github.event_name == 'push' && + github.ref == 'refs/heads/main' && + contains(github.event.head_commit.message, 'chore: release')) || + (github.event_name == 'workflow_dispatch' && inputs.prerelease) steps: - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Cache Cargo registry - uses: actions/cache@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: actions/cache@v4 with: path: ~/.cargo/registry/index key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} restore-keys: cargo-registry- - - name: Install git-cliff run: cargo install git-cliff --locked - - - name: Create Pre-release + - name: Determine version and create release working-directory: ./rust/main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + IS_PRERELEASE: ${{ github.event_name == 'workflow_dispatch' && inputs.prerelease }} + PRERELEASE_SUFFIX: ${{ inputs.prerelease_suffix }} run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - # Get the current version from workspace Cargo.toml + # Get base version from Cargo.toml BASE_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') - echo "Base version: $BASE_VERSION" - # Determine prerelease suffix - if [ -n "${{ inputs.prerelease_suffix }}" ]; then - PRERELEASE_SUFFIX="${{ inputs.prerelease_suffix }}" - else - # Auto-generate beta version based on existing beta tags - LAST_BETA=$(git tag -l "agents-v${BASE_VERSION}-beta.*" | sort -V | tail -1) - if [ -z "$LAST_BETA" ]; then - PRERELEASE_SUFFIX="beta.1" + # Determine final version based on release type + if [ "$IS_PRERELEASE" = "true" ]; then + # Pre-release: append suffix + if [ -n "$PRERELEASE_SUFFIX" ]; then + SUFFIX="$PRERELEASE_SUFFIX" else - BETA_NUM=$(echo "$LAST_BETA" | sed 's/.*beta\.\([0-9]*\)/\1/') - NEXT_NUM=$((BETA_NUM + 1)) - PRERELEASE_SUFFIX="beta.${NEXT_NUM}" + # Auto-generate beta.N + LAST_BETA=$(git tag -l "agents-v${BASE_VERSION}-beta.*" | sort -V | tail -1) + if [ -z "$LAST_BETA" ]; then + SUFFIX="beta.1" + else + BETA_NUM=$(echo "$LAST_BETA" | sed 's/.*beta\.\([0-9]*\)/\1/') + SUFFIX="beta.$((BETA_NUM + 1))" + fi fi + VERSION="${BASE_VERSION}-${SUFFIX}" + TITLE="Agents $VERSION (Pre-release)" + PRERELEASE_FLAG="--prerelease" + RELEASE_TYPE="Pre-release" + else + # Stable release + VERSION="$BASE_VERSION" + TITLE="Agents $VERSION" + PRERELEASE_FLAG="" + RELEASE_TYPE="Release" fi - VERSION="${BASE_VERSION}-${PRERELEASE_SUFFIX}" TAG_NAME="agents-v${VERSION}" - echo "Creating pre-release: $TAG_NAME" + echo "Creating $RELEASE_TYPE: $TAG_NAME" - # Get the previous tag (either last prerelease or last stable) + # Generate changelog PREV_TAG=$(git describe --tags --abbrev=0 --match "agents-v*" 2>/dev/null || echo "") - echo "Previous tag: $PREV_TAG" - - # Generate changelog from previous tag to HEAD if [ -z "$PREV_TAG" ]; then CHANGELOG=$(git-cliff --config cliff.toml --unreleased --strip all) else CHANGELOG=$(git-cliff --config cliff.toml --latest --strip all) fi - # Add prerelease warning to changelog - PRERELEASE_CHANGELOG="⚠️ **This is a pre-release version for testing purposes.** + # Add warning for pre-releases + if [ "$IS_PRERELEASE" = "true" ]; then + CHANGELOG="⚠️ **This is a pre-release version for testing purposes.** $CHANGELOG" - - # Create the tag - git tag -a "$TAG_NAME" -m "Pre-release $TAG_NAME" - git push origin "$TAG_NAME" - - # Create GitHub release with prerelease flag - gh release create "$TAG_NAME" \ - --title "Agents $VERSION (Pre-release)" \ - --notes "$PRERELEASE_CHANGELOG" \ - --prerelease \ - --repo "${{ github.repository }}" - - echo "Pre-release $TAG_NAME published successfully!" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "This is a pre-release and will be marked as such on GitHub." >> $GITHUB_STEP_SUMMARY - - release: - name: Publish Release - runs-on: ubuntu-latest - # Only run on main branch when a release PR is merged - if: | - github.event_name == 'push' && - github.ref == 'refs/heads/main' && - contains(github.event.head_commit.message, 'chore: release') - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Rust - uses: dtolnay/rust-toolchain@stable - - - name: Cache Cargo registry - uses: actions/cache@v4 - with: - path: ~/.cargo/registry/index - key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} - restore-keys: cargo-registry- - - - name: Install release-plz - run: cargo install release-plz --locked - - - name: Install git-cliff - run: cargo install git-cliff --locked - - - name: Publish Release - working-directory: ./rust/main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - - # Get the version from the workspace Cargo.toml - VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') - echo "Detected version: $VERSION" - - # Get the previous tag - PREV_TAG=$(git describe --tags --abbrev=0 --match "agents-v*" 2>/dev/null || echo "") - echo "Previous tag: $PREV_TAG" - - # Generate changelog from previous tag to HEAD - if [ -z "$PREV_TAG" ]; then - CHANGELOG=$(git-cliff --config cliff.toml --unreleased --strip all) - else - CHANGELOG=$(git-cliff --config cliff.toml --latest --strip all) fi - # Create the tag - TAG_NAME="agents-v${VERSION}" - echo "Creating tag: $TAG_NAME" - git tag -a "$TAG_NAME" -m "Release $TAG_NAME" + # Create tag and GitHub release + git tag -a "$TAG_NAME" -m "$RELEASE_TYPE $TAG_NAME" git push origin "$TAG_NAME" - # Create GitHub release with the changelog gh release create "$TAG_NAME" \ - --title "Agents $VERSION" \ + --title "$TITLE" \ --notes "$CHANGELOG" \ + $PRERELEASE_FLAG \ --repo "${{ github.repository }}" - echo "Release $TAG_NAME published successfully!" >> $GITHUB_STEP_SUMMARY - - - name: Trigger artifact build - run: | - echo "The agent-release-artifacts workflow will be triggered automatically by the release event." >> $GITHUB_STEP_SUMMARY + echo "$RELEASE_TYPE $TAG_NAME published successfully!" >> $GITHUB_STEP_SUMMARY + [ "$IS_PRERELEASE" = "true" ] && echo "This is marked as a pre-release on GitHub." >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Binary artifacts will be built automatically by the agent-release-artifacts workflow." >> $GITHUB_STEP_SUMMARY From 4d335616c454f3d5bc9ea87febc46b9ae6f1fef8 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:47:34 +0100 Subject: [PATCH 05/23] propagate gh/release tags to agent docker image --- .github/workflows/rust-docker.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/rust-docker.yml b/.github/workflows/rust-docker.yml index 24d3f3b3009..730c978abdb 100644 --- a/.github/workflows/rust-docker.yml +++ b/.github/workflows/rust-docker.yml @@ -61,6 +61,9 @@ jobs: tags: | type=ref,event=branch type=ref,event=pr + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} type=raw,value=${{ steps.taggen.outputs.TAG_SHA }}-${{ steps.taggen.outputs.TAG_DATE }} - name: Set up Depot CLI uses: depot/setup-action@v1 From 094cd5c6935e63d7a987dff52f70310c6a948f00 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:53:02 +0100 Subject: [PATCH 06/23] fix yaml bork --- .github/workflows/rust-release.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 105e98d0d66..9e5dd20087c 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -141,9 +141,7 @@ jobs: # Add warning for pre-releases if [ "$IS_PRERELEASE" = "true" ]; then - CHANGELOG="⚠️ **This is a pre-release version for testing purposes.** - -$CHANGELOG" + CHANGELOG="⚠️ **This is a pre-release version.**"$'\n\n'"${CHANGELOG}" fi # Create tag and GitHub release From 5d87e1738f759117c7a5596e8ac96bbb9c80b0ba Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:55:50 +0100 Subject: [PATCH 07/23] add pb/rust-release just for testing --- .github/workflows/rust-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 9e5dd20087c..522cdf5ea0b 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - pb/rust-release # for testing paths: - 'rust/main/**' - '.github/workflows/rust-release.yml' From cfa48de4214145d71eccf5dbb18e4bed9be9033f Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:10:32 +0100 Subject: [PATCH 08/23] fixes --- .github/workflows/rust-release.yml | 41 ++++++++++++++++++++++++++++-- rust/main/release-plz.toml | 18 ------------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 522cdf5ea0b..d3eae3ac65d 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -74,22 +74,59 @@ jobs: runs-on: depot-ubuntu-latest if: | (github.event_name == 'push' && - github.ref == 'refs/heads/main' && - contains(github.event.head_commit.message, 'chore: release')) || + github.ref == 'refs/heads/main') || (github.event_name == 'workflow_dispatch' && inputs.prerelease) steps: - uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Check if should release + id: check_version + working-directory: ./rust/main + run: | + # For manual prereleases, always release + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "Manual prerelease triggered, will release" + echo "should_release=true" >> $GITHUB_OUTPUT + exit 0 + fi + + # For push events, check if version changed + # Get current version from Cargo.toml + CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') + echo "Current Cargo.toml version: $CURRENT_VERSION" + + # Get latest agents-v* tag + LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) + + if [ -z "$LATEST_TAG" ]; then + echo "No previous release tag found, will create first release" + echo "should_release=true" >> $GITHUB_OUTPUT + else + LATEST_VERSION=$(echo "$LATEST_TAG" | sed 's/agents-v//') + echo "Latest released version: $LATEST_VERSION" + + if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then + echo "Version has changed, proceeding with release" + echo "should_release=true" >> $GITHUB_OUTPUT + else + echo "Version unchanged, skipping release" + echo "should_release=false" >> $GITHUB_OUTPUT + fi + fi - uses: dtolnay/rust-toolchain@stable + if: steps.check_version.outputs.should_release == true - uses: actions/cache@v4 + if: steps.check_version.outputs.should_release == true with: path: ~/.cargo/registry/index key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} restore-keys: cargo-registry- - name: Install git-cliff + if: steps.check_version.outputs.should_release == true run: cargo install git-cliff --locked - name: Determine version and create release + if: steps.check_version.outputs.should_release == true working-directory: ./rust/main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml index 2cf28d9c199..6fa64f47da4 100644 --- a/rust/main/release-plz.toml +++ b/rust/main/release-plz.toml @@ -17,21 +17,3 @@ pr_draft = false pr_labels = ["release"] # Automatically determine next version from conventional commits semver_check = false - -# Changelog generation for the entire workspace -[changelog] -# Disable individual package changelogs, we want one unified changelog -commit_parsers = [ - { message = "^feat", group = "Features" }, - { message = "^fix", group = "Bug Fixes" }, - { message = "^perf", group = "Performance" }, - { message = "^chore", group = "Miscellaneous" }, - { message = "^refactor", group = "Refactor" }, - { message = "^doc", skip = true }, - { message = "^test", skip = true }, - { message = "^style", skip = true }, -] -# Only include commits that touch the rust/main directory -filter_commits = [ - { path = "rust/main/.*" } -] From eb04891128b9be67b329446da59c798ee478ac4d Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:17:41 +0100 Subject: [PATCH 09/23] use release-plz action directly for release prep Signed-off-by: pbio <10051819+paulbalaji@users.noreply.github.com> --- .github/workflows/rust-release.yml | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index d3eae3ac65d..17744dce1cf 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -42,25 +42,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: dtolnay/rust-toolchain@stable - - uses: actions/cache@v4 - with: - path: ~/.cargo/registry/index - key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} - restore-keys: cargo-registry- - - name: Install release-plz - run: cargo install release-plz --locked - name: Run release-plz - working-directory: ./rust/main + uses: release-plz/action@v0.5 + with: + command: release-pr + manifest_path: rust/main/Cargo.toml + config: rust/main/release-plz.toml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - release-plz release-pr \ - --git-token "$GITHUB_TOKEN" \ - --backend github \ - --repo-url "${{ github.repository }}" - name: Summary if: always() run: | From a1269fdd391233ec8541537443076a41001091fd Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:26:21 +0100 Subject: [PATCH 10/23] run release-pls from rust/main --- .github/workflows/rust-release.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 17744dce1cf..191bcd248e8 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -42,14 +42,18 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Run release-plz - uses: release-plz/action@v0.5 + - name: Install release-plz + uses: taiki-e/install-action@v2 with: - command: release-pr - manifest_path: rust/main/Cargo.toml - config: rust/main/release-plz.toml + tool: release-plz + - name: Run release-plz + working-directory: ./rust/main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + release-plz release-pr --git-token "$GITHUB_TOKEN" - name: Summary if: always() run: | From f08045367405e62433691eae8610d4d4a876ac5f Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:36:36 +0100 Subject: [PATCH 11/23] configure release-plz to ignore specific paths --- rust/main/release-plz.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml index 6fa64f47da4..d2b67c4bf9c 100644 --- a/rust/main/release-plz.toml +++ b/rust/main/release-plz.toml @@ -17,3 +17,8 @@ pr_draft = false pr_labels = ["release"] # Automatically determine next version from conventional commits semver_check = false +# Ignore generated test files and keys that may be present in CI +git_allow_list = [ + "!**/chains/hyperlane-starknet/src/contracts/mod.rs", + "!**/sealevel/environments/local-e2e/**/keys/*.json" +] From 1ddfc697d51c525d52dd502935031dddbb88bedd Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:36:51 +0100 Subject: [PATCH 12/23] add persistent changelog.md in rust/main --- .github/workflows/rust-release.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 191bcd248e8..bd95cf3170d 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -189,3 +189,21 @@ jobs: [ "$IS_PRERELEASE" = "true" ] && echo "This is marked as a pre-release on GitHub." >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Binary artifacts will be built automatically by the agent-release-artifacts workflow." >> $GITHUB_STEP_SUMMARY + - name: Update CHANGELOG.md + if: steps.check_version.outputs.should_release == true + working-directory: ./rust/main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Generate full changelog from all tags + git-cliff --config cliff.toml --tag-pattern "agents-v*" -o CHANGELOG.md + + # Commit and push the updated changelog + git add CHANGELOG.md + if git diff --staged --quiet; then + echo "No changes to CHANGELOG.md" + else + git commit -m "chore: update CHANGELOG.md for $(git describe --tags --abbrev=0)" + git push origin main + echo "CHANGELOG.md updated and pushed to main" >> $GITHUB_STEP_SUMMARY + fi From 064f71f335016af45fb646298f1ddac9129fa68a Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:45:03 +0100 Subject: [PATCH 13/23] perma-changelog --- .github/workflows/rust-release.yml | 42 +++++++++--------------------- rust/main/release-plz.toml | 5 ---- 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index bd95cf3170d..bbca0b8616f 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -42,10 +42,10 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install release-plz + - name: Install release tools uses: taiki-e/install-action@v2 with: - tool: release-plz + tool: release-plz, git-cliff - name: Run release-plz working-directory: ./rust/main env: @@ -53,6 +53,14 @@ jobs: run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" + + # Generate updated CHANGELOG.md before running release-plz + git-cliff --config cliff.toml --tag-pattern "agents-v*" -o CHANGELOG.md + + # Stage CHANGELOG.md so release-plz includes it in the release PR + git add CHANGELOG.md + + # Run release-plz to create/update the release PR release-plz release-pr --git-token "$GITHUB_TOKEN" - name: Summary if: always() @@ -107,17 +115,11 @@ jobs: echo "should_release=false" >> $GITHUB_OUTPUT fi fi - - uses: dtolnay/rust-toolchain@stable - if: steps.check_version.outputs.should_release == true - - uses: actions/cache@v4 - if: steps.check_version.outputs.should_release == true - with: - path: ~/.cargo/registry/index - key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} - restore-keys: cargo-registry- - name: Install git-cliff if: steps.check_version.outputs.should_release == true - run: cargo install git-cliff --locked + uses: taiki-e/install-action@v2 + with: + tool: git-cliff - name: Determine version and create release if: steps.check_version.outputs.should_release == true working-directory: ./rust/main @@ -189,21 +191,3 @@ jobs: [ "$IS_PRERELEASE" = "true" ] && echo "This is marked as a pre-release on GitHub." >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Binary artifacts will be built automatically by the agent-release-artifacts workflow." >> $GITHUB_STEP_SUMMARY - - name: Update CHANGELOG.md - if: steps.check_version.outputs.should_release == true - working-directory: ./rust/main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - # Generate full changelog from all tags - git-cliff --config cliff.toml --tag-pattern "agents-v*" -o CHANGELOG.md - - # Commit and push the updated changelog - git add CHANGELOG.md - if git diff --staged --quiet; then - echo "No changes to CHANGELOG.md" - else - git commit -m "chore: update CHANGELOG.md for $(git describe --tags --abbrev=0)" - git push origin main - echo "CHANGELOG.md updated and pushed to main" >> $GITHUB_STEP_SUMMARY - fi diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml index d2b67c4bf9c..6fa64f47da4 100644 --- a/rust/main/release-plz.toml +++ b/rust/main/release-plz.toml @@ -17,8 +17,3 @@ pr_draft = false pr_labels = ["release"] # Automatically determine next version from conventional commits semver_check = false -# Ignore generated test files and keys that may be present in CI -git_allow_list = [ - "!**/chains/hyperlane-starknet/src/contracts/mod.rs", - "!**/sealevel/environments/local-e2e/**/keys/*.json" -] From 65aa6094f27cd6cf0410f011cb54d6cd8c63d761 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 13:47:12 +0100 Subject: [PATCH 14/23] revert cargo.toml back to 0.1.0 --- rust/main/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/main/Cargo.toml b/rust/main/Cargo.toml index 01a283c3c08..de91ee4b27d 100644 --- a/rust/main/Cargo.toml +++ b/rust/main/Cargo.toml @@ -32,7 +32,7 @@ edition = "2021" homepage = "https://hyperlane.xyz" license-file = "../LICENSE.md" publish = false -version = "1.5.0" +version = "0.1.0" [workspace.dependencies] Inflector = "0.11.4" From 9ebb24a795c26d2c0ec0f808115265dc4b5ca55c Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:07:48 +0100 Subject: [PATCH 15/23] fix tomls --- rust/main/chains/hyperlane-radix/Cargo.toml | 8 ++++++-- rust/main/chains/hyperlane-sealevel/Cargo.toml | 8 ++++++-- rust/main/hyperlane-metric/Cargo.toml | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rust/main/chains/hyperlane-radix/Cargo.toml b/rust/main/chains/hyperlane-radix/Cargo.toml index 0d29e563c76..c105b44b40d 100644 --- a/rust/main/chains/hyperlane-radix/Cargo.toml +++ b/rust/main/chains/hyperlane-radix/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "hyperlane-radix" -version = "0.1.0" -edition = "2021" +documentation.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +publish.workspace = true +version.workspace = true [dependencies] async-trait = { workspace = true } diff --git a/rust/main/chains/hyperlane-sealevel/Cargo.toml b/rust/main/chains/hyperlane-sealevel/Cargo.toml index c4a84ba9508..3fe94ba2b40 100644 --- a/rust/main/chains/hyperlane-sealevel/Cargo.toml +++ b/rust/main/chains/hyperlane-sealevel/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "hyperlane-sealevel" -version = "0.1.0" -edition = "2021" +documentation.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +publish.workspace = true +version.workspace = true [dependencies] anyhow.workspace = true diff --git a/rust/main/hyperlane-metric/Cargo.toml b/rust/main/hyperlane-metric/Cargo.toml index 48c8f964071..c6ac11f5889 100644 --- a/rust/main/hyperlane-metric/Cargo.toml +++ b/rust/main/hyperlane-metric/Cargo.toml @@ -15,4 +15,4 @@ maplit.workspace = true prometheus.workspace = true serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } -url.workspace = true \ No newline at end of file +url.workspace = true From d557a778f0b06d1b48867b8447a12939df24e813 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:10:51 +0100 Subject: [PATCH 16/23] allow dirty --- rust/main/release-plz.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml index 6fa64f47da4..1cb0783b915 100644 --- a/rust/main/release-plz.toml +++ b/rust/main/release-plz.toml @@ -17,3 +17,5 @@ pr_draft = false pr_labels = ["release"] # Automatically determine next version from conventional commits semver_check = false +# Allow running with uncommitted changes (e.g., generated test files in CI) +allow_dirty = true From e6419665cc80a15af882526e3a3684744457d564 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:14:05 +0100 Subject: [PATCH 17/23] commit changelog before running release-pr --- .github/workflows/rust-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index bbca0b8616f..d7553392be3 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -59,6 +59,7 @@ jobs: # Stage CHANGELOG.md so release-plz includes it in the release PR git add CHANGELOG.md + git commit -m "update changelog" # Run release-plz to create/update the release PR release-plz release-pr --git-token "$GITHUB_TOKEN" From e3338effbabee15ad8729453e5929958ff6766ec Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:19:03 +0100 Subject: [PATCH 18/23] give release-pr all the changelog/commiting funtime --- .github/workflows/rust-release.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index d7553392be3..50beb35b4fa 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -54,14 +54,8 @@ jobs: git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - # Generate updated CHANGELOG.md before running release-plz - git-cliff --config cliff.toml --tag-pattern "agents-v*" -o CHANGELOG.md - - # Stage CHANGELOG.md so release-plz includes it in the release PR - git add CHANGELOG.md - git commit -m "update changelog" - # Run release-plz to create/update the release PR + # It will automatically generate changelog and update Cargo.toml versions release-plz release-pr --git-token "$GITHUB_TOKEN" - name: Summary if: always() From e95e99ed22dbb779380d2eb2a87aedeed9df6225 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:33:21 +0100 Subject: [PATCH 19/23] update cargo.toml to 1.5.0 again --- rust/main/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/main/Cargo.toml b/rust/main/Cargo.toml index de91ee4b27d..01a283c3c08 100644 --- a/rust/main/Cargo.toml +++ b/rust/main/Cargo.toml @@ -32,7 +32,7 @@ edition = "2021" homepage = "https://hyperlane.xyz" license-file = "../LICENSE.md" publish = false -version = "0.1.0" +version = "1.5.0" [workspace.dependencies] Inflector = "0.11.4" From 0140e88672720fbeec57779015e938fa04b1cdcf Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:35:36 +0100 Subject: [PATCH 20/23] add check-release-status --- .github/workflows/rust-release.yml | 121 +++++++++++++++++++---------- 1 file changed, 78 insertions(+), 43 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 50beb35b4fa..760f6c37785 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -34,10 +34,78 @@ env: RUST_BACKTRACE: full jobs: + check-release-status: + name: Check Release Status + runs-on: depot-ubuntu-latest + outputs: + has_changes: ${{ steps.check_changes.outputs.has_changes }} + should_release: ${{ steps.check_version.outputs.should_release }} + current_version: ${{ steps.check_version.outputs.current_version }} + latest_version: ${{ steps.check_version.outputs.latest_version }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Check if there are changes since last release + id: check_changes + working-directory: ./rust/main + run: | + # Get latest agents-v* tag + LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) + + if [ -z "$LATEST_TAG" ]; then + echo "No previous release found" + echo "has_changes=true" >> $GITHUB_OUTPUT + else + # Check if there are commits to rust/main since last release + COMMITS_SINCE=$(git log "$LATEST_TAG"..HEAD --oneline -- . | wc -l) + echo "Commits since $LATEST_TAG: $COMMITS_SINCE" + + if [ "$COMMITS_SINCE" -gt 0 ]; then + echo "Found $COMMITS_SINCE commit(s) since last release" + echo "has_changes=true" >> $GITHUB_OUTPUT + else + echo "No commits since last release" + echo "has_changes=false" >> $GITHUB_OUTPUT + fi + fi + - name: Check if version changed (for publish decision) + id: check_version + working-directory: ./rust/main + run: | + # Get current version from Cargo.toml + CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') + echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + echo "Current Cargo.toml version: $CURRENT_VERSION" + + # Get latest agents-v* tag + LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) + + if [ -z "$LATEST_TAG" ]; then + echo "latest_version=" >> $GITHUB_OUTPUT + echo "No previous release tag found, will create first release" + echo "should_release=true" >> $GITHUB_OUTPUT + else + LATEST_VERSION=$(echo "$LATEST_TAG" | sed 's/agents-v//') + echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT + echo "Latest released version: $LATEST_VERSION" + + if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then + echo "Version has changed ($LATEST_VERSION -> $CURRENT_VERSION)" + echo "should_release=true" >> $GITHUB_OUTPUT + else + echo "Version unchanged" + echo "should_release=false" >> $GITHUB_OUTPUT + fi + fi + release-pr: name: Update Release PR runs-on: depot-ubuntu-latest - if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && !inputs.prerelease) + needs: check-release-status + if: | + (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && !inputs.prerelease)) && + needs.check-release-status.outputs.has_changes == 'true' steps: - uses: actions/checkout@v4 with: @@ -68,67 +136,34 @@ jobs: publish: name: Publish Release runs-on: depot-ubuntu-latest + needs: [check-release-status, release-pr] + # Allow release-pr to be skipped (for prereleases) if: | - (github.event_name == 'push' && - github.ref == 'refs/heads/main') || - (github.event_name == 'workflow_dispatch' && inputs.prerelease) + always() && + !failure() && + !cancelled() && + github.ref == 'refs/heads/main' && + ((github.event_name == 'workflow_dispatch' && inputs.prerelease) || + (github.event_name == 'push' && needs.check-release-status.outputs.should_release == 'true')) steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Check if should release - id: check_version - working-directory: ./rust/main - run: | - # For manual prereleases, always release - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - echo "Manual prerelease triggered, will release" - echo "should_release=true" >> $GITHUB_OUTPUT - exit 0 - fi - - # For push events, check if version changed - # Get current version from Cargo.toml - CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') - echo "Current Cargo.toml version: $CURRENT_VERSION" - - # Get latest agents-v* tag - LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) - - if [ -z "$LATEST_TAG" ]; then - echo "No previous release tag found, will create first release" - echo "should_release=true" >> $GITHUB_OUTPUT - else - LATEST_VERSION=$(echo "$LATEST_TAG" | sed 's/agents-v//') - echo "Latest released version: $LATEST_VERSION" - - if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then - echo "Version has changed, proceeding with release" - echo "should_release=true" >> $GITHUB_OUTPUT - else - echo "Version unchanged, skipping release" - echo "should_release=false" >> $GITHUB_OUTPUT - fi - fi - name: Install git-cliff - if: steps.check_version.outputs.should_release == true uses: taiki-e/install-action@v2 with: tool: git-cliff - name: Determine version and create release - if: steps.check_version.outputs.should_release == true working-directory: ./rust/main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} IS_PRERELEASE: ${{ github.event_name == 'workflow_dispatch' && inputs.prerelease }} PRERELEASE_SUFFIX: ${{ inputs.prerelease_suffix }} + BASE_VERSION: ${{ needs.check-release-status.outputs.current_version }} run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - # Get base version from Cargo.toml - BASE_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') - # Determine final version based on release type if [ "$IS_PRERELEASE" = "true" ]; then # Pre-release: append suffix From 55a3df2905054266ade3c3a406ddeb2bb228f8ee Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:38:00 +0100 Subject: [PATCH 21/23] publish is independent from release-pr --- .github/workflows/rust-release.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 760f6c37785..f246e5a847b 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -136,12 +136,8 @@ jobs: publish: name: Publish Release runs-on: depot-ubuntu-latest - needs: [check-release-status, release-pr] - # Allow release-pr to be skipped (for prereleases) + needs: check-release-status if: | - always() && - !failure() && - !cancelled() && github.ref == 'refs/heads/main' && ((github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'push' && needs.check-release-status.outputs.should_release == 'true')) From 25298365db70e98921d9a8fdbfb27ef5cdb978e5 Mon Sep 17 00:00:00 2001 From: pbio <10051819+paulbalaji@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:05:38 +0100 Subject: [PATCH 22/23] do it ourselves --- .github/workflows/rust-release.yml | 203 +++++++++++++++++++++++++++-- 1 file changed, 195 insertions(+), 8 deletions(-) diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index f246e5a847b..11bfe582e6d 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -110,27 +110,214 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install release tools + - name: Install git-cliff uses: taiki-e/install-action@v2 with: - tool: release-plz, git-cliff - - name: Run release-plz + tool: git-cliff + - name: Determine next version from conventional commits + id: next_version + working-directory: ./rust/main + env: + CURRENT_VERSION: ${{ needs.check-release-status.outputs.current_version }} + run: | + # Get commits since last release + LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) + + if [ -z "$LATEST_TAG" ]; then + COMMITS=$(git log --oneline --no-merges -- .) + else + COMMITS=$(git log "${LATEST_TAG}..HEAD" --oneline --no-merges -- .) + fi + + # Parse current version + IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" + + # Analyze commits for conventional commit types + HAS_BREAKING=false + HAS_FEAT=false + HAS_FIX=false + + while IFS= read -r commit; do + if echo "$commit" | grep -qE "^[a-f0-9]+ [a-z]+(\(.+\))?!:"; then + HAS_BREAKING=true + elif echo "$commit" | grep -qE "^[a-f0-9]+ feat(\(.+\))?:"; then + HAS_FEAT=true + elif echo "$commit" | grep -qE "^[a-f0-9]+ fix(\(.+\))?:"; then + HAS_FIX=true + fi + + # Check commit body for BREAKING CHANGE + COMMIT_HASH=$(echo "$commit" | cut -d' ' -f1) + if git show -s --format=%B "$COMMIT_HASH" | grep -q "BREAKING CHANGE:"; then + HAS_BREAKING=true + fi + done <<< "$COMMITS" + + # Determine version bump + if [ "$HAS_BREAKING" = true ]; then + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + BUMP_TYPE="major" + elif [ "$HAS_FEAT" = true ]; then + MINOR=$((MINOR + 1)) + PATCH=0 + BUMP_TYPE="minor" + elif [ "$HAS_FIX" = true ]; then + PATCH=$((PATCH + 1)) + BUMP_TYPE="patch" + else + # Default to patch for any other changes + PATCH=$((PATCH + 1)) + BUMP_TYPE="patch" + fi + + NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" + echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT + echo "bump_type=$BUMP_TYPE" >> $GITHUB_OUTPUT + echo "Next version: $NEW_VERSION ($BUMP_TYPE bump from $CURRENT_VERSION)" + - name: Generate changelog + id: changelog + working-directory: ./rust/main + env: + NEW_VERSION: ${{ steps.next_version.outputs.new_version }} + run: | + # Generate changelog for commits since last release + LATEST_TAG=$(git tag -l "agents-v*" --sort=-version:refname | grep -E "^agents-v[0-9]+\.[0-9]+\.[0-9]+$" | head -1) + + if [ -z "$LATEST_TAG" ]; then + CHANGELOG=$(git-cliff --config cliff.toml --unreleased --strip all) + else + CHANGELOG=$(git-cliff --config cliff.toml "${LATEST_TAG}..HEAD" --strip all) + fi + + # Save changelog to file for PR body + echo "$CHANGELOG" > /tmp/changelog.md + + # Also output for GitHub Actions + { + echo 'changelog<> $GITHUB_OUTPUT + - name: Update Cargo.toml version + working-directory: ./rust/main + env: + NEW_VERSION: ${{ steps.next_version.outputs.new_version }} + run: | + # Update workspace version + sed -i.bak "s/^version = \".*\"/version = \"$NEW_VERSION\"/" Cargo.toml + rm Cargo.toml.bak + + echo "Updated Cargo.toml to version $NEW_VERSION" + git diff Cargo.toml + - name: Update CHANGELOG working-directory: ./rust/main + env: + NEW_VERSION: ${{ steps.next_version.outputs.new_version }} + run: | + # Prepend new version to CHANGELOG.md + if [ -f CHANGELOG.md ]; then + CURRENT_CHANGELOG=$(cat CHANGELOG.md) + else + CURRENT_CHANGELOG="" + fi + + cat > CHANGELOG.md </dev/null 2>&1; then + echo "Branch $BRANCH_NAME already exists, updating it" + git fetch origin "$BRANCH_NAME" + git checkout "$BRANCH_NAME" + git reset --hard origin/main + else + echo "Creating new branch $BRANCH_NAME" + git checkout -b "$BRANCH_NAME" + fi + + # Stage changes + git add rust/main/Cargo.toml rust/main/CHANGELOG.md + + # Commit if there are changes + if git diff --staged --quiet; then + echo "No changes to commit" + else + git commit -m "chore(release): prepare agents v${NEW_VERSION} + + This is a $BUMP_TYPE version bump for the Hyperlane agents. + + Changes will be released as agents-v${NEW_VERSION} after this PR is merged." + + git push -f origin "$BRANCH_NAME" + fi + + # Create or update PR + PR_BODY="## Release agents v${NEW_VERSION} + + This PR prepares the release of Hyperlane agents version **${NEW_VERSION}** (${BUMP_TYPE} bump). + + ### What's Changed + + ${CHANGELOG} + + --- + + Once this PR is merged, the [\`rust-release.yml\`](https://github.com/${{ github.repository }}/blob/main/.github/workflows/rust-release.yml) workflow will automatically: + - Create a GitHub release with tag \`agents-v${NEW_VERSION}\` + - Trigger the build of release binaries + + 🤖 This PR was automatically created by the release workflow." + + # Check if PR already exists + EXISTING_PR=$(gh pr list --head "$BRANCH_NAME" --json number --jq '.[0].number' 2>/dev/null || echo "") + + if [ -n "$EXISTING_PR" ]; then + echo "Updating existing PR #$EXISTING_PR" + gh pr edit "$EXISTING_PR" \ + --title "chore(release): agents v${NEW_VERSION}" \ + --body "$PR_BODY" + echo "Updated PR: $(gh pr view $EXISTING_PR --json url --jq .url)" + else + echo "Creating new PR" + gh pr create \ + --title "chore(release): agents v${NEW_VERSION}" \ + --body "$PR_BODY" \ + --base main \ + --head "$BRANCH_NAME" \ + --label "release" + PR_URL=$(gh pr list --head "$BRANCH_NAME" --json url --jq '.[0].url') + echo "Created PR: $PR_URL" + fi - name: Summary if: always() + env: + NEW_VERSION: ${{ steps.next_version.outputs.new_version }} run: | - echo "Release PR workflow completed" >> $GITHUB_STEP_SUMMARY + echo "### Release PR for agents v${NEW_VERSION}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "If a release PR was created, it will appear in the Pull Requests tab." >> $GITHUB_STEP_SUMMARY + echo "The release PR has been created/updated." >> $GITHUB_STEP_SUMMARY echo "Once merged, the release will be published automatically." >> $GITHUB_STEP_SUMMARY publish: From edd8d93ad56920093a1ae7d2e100e66aa094cccf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 13 Oct 2025 14:06:59 +0000 Subject: [PATCH 23/23] chore(release): prepare agents v1.6.0 This is a minor version bump for the Hyperlane agents. Changes will be released as agents-v1.6.0 after this PR is merged. --- rust/main/CHANGELOG.md | 209 +++++++++++++++++++++++++++++++++++++++++ rust/main/Cargo.toml | 34 +++---- 2 files changed, 226 insertions(+), 17 deletions(-) create mode 100644 rust/main/CHANGELOG.md diff --git a/rust/main/CHANGELOG.md b/rust/main/CHANGELOG.md new file mode 100644 index 00000000000..794fe88c9af --- /dev/null +++ b/rust/main/CHANGELOG.md @@ -0,0 +1,209 @@ +# Changelog + +## [1.6.0] - 2025-10-13 + + +### Features + +* agents release workflow (#f993131) +* radix provider metrics (#7032) (#4a3ac4c) +* mantra usdc (#7177) (#4f3c247) +* add metric for observed block height of checkpoints (#7146) (#283b2f0) +* check evm tx actually succeeded before determining its tx status (#7016) (#1a5a1d0) +* Make Lander the default transaction submitter for Sealevel (#7171) (#8c0fc76) +* deploy to sovachain, deprecate proofofplay (#7166) (#640703e) +* Lander SealevelAdapter is able to report reverted payloads (#7158) (#3d13493) +* Implement validator announcement for `hyperlane-sealevel` (#7098) (#d873040) +* oct 2 multisig batch (#7142) (#c868da2) +* integrate radix lander (#7117) (#e730c03) +* add support for submit, simulate and estimate for radix lander (#7107) (#e541606) +* sep 29 chain deploys (#7122) (#4e8ba57) +* add trailing bytes on retrying simulate transaction call for sealevel (#7102) (#d284385) +* radix e2e tests (#7060) (#d284fd6) +* gnet warp route (#7104) (#3ce06ce) +* add process_calldata and build_transactions for radix (#7087) (#64ba403) +* deprecate infinityvm, game7, alephzero (#7099) (#678c9ad) +* deploy to giwasepolia (#7081) (#01055c5) +* radix lander, add support for delivered_calldata and reverted_payloads (#7067) (#85a66df) +* radix lander, implement get_tx_hash_status (#7058) (#26bd52b) +* deploy to 0g, sova, mantra (#7066) (#5e402a0) +* add message_id to list messages endpoint (#7002) (#4b635b6) +* add tests to check relative block or seq works (#7029) (#07fd954) +* endpoint for reprocessing messages (#6981) (#01b03a1) +* track nonces of transactions in db (#7014) (#c6ee6f8) +* Scraper add logs for interchain payment PDA pubkey (#7018) (#60c841f) +* update liveness metric on each tx (#6990) (#0268a7d) +* sept 4 speedrun deploys (#6993) (#195fe1a) +* add /merkle_proofs endpoint to show proof (#6980) (#887d99d) +* update agent config with new zircuit config (#6977) (#61b34eb) +* add support for recipient for radix (#6961) (#712d3c7) +* deny unsafe arithmetic (#6927) (#93e9f3f) +* deploy on pulsechain (#6957) (#f896964) +* figure out sender for radix (#6941) (#e3a0233) +* radix deployment (#6951) (#16c221c) +* handle failed finalized transactions on sealevel (#6946) (#d9bab99) +* stokenet deployment (#6944) (#9f7d901) +* deploy to celosepolia, incentivtestnet (#6943) (#257928f) +* use core provider to get state_version (#6932) (#8c2624c) +* radix (#6895) (#f18c9b5) +* add chunk limit to mitosis (#6928) (#c265daa) +* add gas limit cap (#6879) (#43cbf09) +* deploy to mitosis (#6891) (#17ac86e) +* Cap gasPrice escalation (by Claude) (#6862) (#e22a090) +* include insertion_block_number for listing merkle tree insertions (#6785) (#7e75a84) +* migrate from tendermint to cometbft (#6834) (#7199ade) +* use safe arithmetic for gas estimation (#6844) (#aa22e54) +* Introduce minimum time between resubmissions for EVM (#6838) (#8fbfbaf) +* migrate oUSDT ownership to timelocks (#6771) (#eabd28f) +* add metrics for detecting if merkle root from validators different from relayer internal root (#6816) (#95a514a) +* fix offchain lookup not trying all urls (#6813) (#6f00ee0) +* build a bunch of structs as part of a origin chain (#6807) (#3869653) +* report chain metrics for unknown domains as well (#6801) (#1f3f2f8) +* reduce unwraps and panics (#6764) (#82fc897) +* ensure parity between KnownHyperlaneDomain and json config file (#6793) (#21aabd9) +* allow for relative configurable lowest block height (#6674) (#8df6ea1) +* Build dispatcher and its endpoint as part of a destination chain (#6773) (#e2691ec) +* skip waiting for svm tx confirmation; update relayer image (#6775) (#b746ad4) +* refactor SVM components to allow mocking (#6742) (#446e2e1) +* add celestia testnet (#6696) (#8ba228d) +* more robust SVM `tx_ready_for_resubmission` (#6737) (#ae45e81) +* add regex to matching list (#6654) (#80bf49e) +* subtensor usdc route extension (#6686) (#6dba296) +* add igp crud endpoints (#6573) (#7f2c0af) +* default to Lander for evm tx submission (#6695) (#5399f7e) +* add ism build count (#6697) (#cb8a31b) +* solx extension (#6699) (#b01195d) +* EVM `tx_ready_for_resubmission` impl; update block_time configs (#6680) (#2c2ebd0) +* change span to debug (#6663) (#6fad18e) +* Take into account processing time when sleeping in Inclusion Stage (#6666) (#258ebae) +* add unit tests to ensure correct ordering of validator signatures (#6527) (#a73b5eb) +* Deprioritize failed providers (#6613) (#5495f0f) +* deploy to XRPL EVM (#6650) (#5291797) +* remove redundant logs (#6569) (#af276f2) +* More tests covering historical incidents (#6624) (#9be9051) +* add galactica, remove kroma (#6622) (#30b7cd5) +* reduce unwrap() and expect() (#6631) (#d8afb82) +* es solana expansion (#6621) (#87401a0) +* Batching for Ethereum transactions (#6601) (#06efe3a) +* added fallback to starknet providers (#6537) (#db53db1) +* add unittests for relayer startup (#6432) (#73d7904) +* deploy to TAC (#6594) (#779df44) +* add batching support for starknet (#6359) (#b65062c) +* fix PendingMessage debug print (#6580) (#ff8ccfd) +* deploy solaxy core (#6574) (#d969163) +* evm gas limit metric (#6572) (#90217b9) +* validator overwrite and log any checkpoints that don't match its current in-memory version (#6500) (#82b4c2c) +* Builder stage popping several payloads at a time (#6557) (#b46f9a2) +* reduce logs (#6494) (#8185c87) +* redeploy on rome testnet (#6543) (#542e7b1) +* extend uBTC warp route (#6501) (#6f9b3ad) +* Nonce manager metrics (#6542) (#f3abbce) +* vm-specific metrics (#6541) (#950e235) +* more advanced nonce manager (#6504) (#7acd30d) +* jun 9 multisig batch (#6482) (#fe1d8ab) +* EVM escalator (#6484) (#9e40cf1) +* add app_context to operations_processed_count (#6395) (#33c203c) +* EVM adapter mocking setup (#6450) (#9284dd1) +* deploy core contracts and agents for paradex (#6465) (#589dd5c) +* deploy to botanix, katana (#6445) (#6e9f822) +* Override the lowest block height with value from settings (#6451) (#c7a7258) +* add endpoints to insert messages and merkle tree insertions (#6228) (#5b6c65d) +* fix crashes and set metrics instead when rpcs fail (#6278) (#c4f9fa8) +* Add configurable lowest block height to sequence-aware backward cursor (#6436) (#f5536c9) +* Naive NonceManager implementation with passing E2E (#6378) (#df8f11d) +* add timeout to AwsSigner (#6414) (#cedc8e1) +* starknet core deployment (#6413) (#c58dbb5) +* separate tx id indexing and cursor indexing into separate threads (#6350) (#3835483) +* add kubedns regex for offchain lookup ISM (#6372) (#a73ec6f) +* use legacy from secret value (#6379) (#9a39e29) +* pass starkKey address from GCP secrets (#6367) (#11b240a) + +### Bug Fixes + +* fix tomls (#9ebb24a) +* fixes (#cfa48de) +* Increase claimed storage size for Relayers to 32Gi (#7180) (#132bf04) +* change the commitment level for Sealevel check of reverted payloads (#7167) (#651af9b) +* Render Starknet address as hex instead of string (#7137) (#6d44a7b) +* failed_indexes for starknet batch submissions (#7135) (#63673a7) +* radix docker e2e command (#7118) (#283ac40) +* Define indexing configuration for Solaxy (#7088) (#31d0611) +* Add provider host to logging for EVM (#7068) (#a34bb46) +* add message id multisig ism to relayer (#7061) (#e39c408) +* update cosmos price data schema to fix price fetching (#7059) (#f96edea) +* Request more fee history percentiles if default one returned zeros (#7047) (#a62b4a4) +* only index successful tx (#6939) (#d2fc4a1) +* Add domain into log spans in Lander (#6911) (#eaa31a5) +* Resend message to Lander when payload made it into tx but tx was dropped (#6894) (#5d4f60e) +* reduce excessive eth_getTransactionReceipt queries in Lander (#6868) (#71e5185) +* Reduce index chuck to avoid errors (#6889) (#7533c07) +* Improve logging when we cannot batch payloads for a chain (#6881) (#28bb2c9) +* Stop resubmitting a message if there is a payload in Lander which is not dropped (#6880) (#7ddef63) +* Make block gas limit exceeds a non-retriable error (#6877) (#8355592) +* Add domain into spans in Scraper (#6846) (#c523bbb) +* Add logging to gas price escalation in Lander (#6860) (#9fb5797) +* Improve logging for cursor creation (#6836) (#77cf0e5) +* Add domain into span on creating signer (#6831) (#94f7dc6) +* Change Settings.chains to use HyperlaneDomain as key instead of String (#6769) (#2546c3c) +* Improve logging of failed to build error on CCIP Read ISM (#6757) (#859bceb) +* Bring back domain span so that we can filter by it in agents (#6740) (#3aeba1d) +* Measure init time correctly in Relayer (#6718) (#fcb9d47) +* HyperEVM block time set to 1 second (#6700) (#9176ef8) +* Don't drop transaction if we got nonce too low error (#6682) (#9e7f41f) +* lower sleep periods to improve latency (#6668) (#32654af) +* Report no items to process only after a loaded item or every 60 seconds (#6616) (#71a0e01) +* skip dry_run_verify for now (#6615) (#b0e74c3) +* add sanity range check for starknet indexer (#6464) (#a1d5b77) +* lander test timing flakes (#6581) (#d530c98) +* evm max fee per gas metric (#6563) (#70cc81b) +* skip simulation after submisison (#6524) (#afcf008) +* only escalate if gas price was set previously (#6545) (#e3519ce) +* Log failed requests (#6462) (#43e490c) +* native denom padding on paradex (#6526) (#420c950) +* escalation when error is immediately reported (#6506) (#cae5e0f) +* make starknet signer key optional (#6497) (#422a78c) +* Align reorg period of Hyperliquid mainnet and testnet (#6489) (#0100511) +* Use only domain in spans so that it is easier to search (#6469) (#8b18655) +* validator count fetching upon startup is retried (#6470) (#983f2c1) +* Reduce chunk size to avoid RPC errors (#6427) (#69a100c) +* Improve domain logging (#6391) (#ac1e524) +* Configure proper index chunk for moonbeam to fix issues with their RPC (#6392) (#b431cda) + +### Miscellaneous + +* use lander for radix (#7144) (#f81913d) +* Increase Relayer storage to 16Gi (#7138) (#2231bc3) +* update agent config (#7044) (#45f45ad) +* sept 2025 testnet pruning (#7011) (#ed93bea) +* deprecate alfajores (#6987) (#b10f1e8) +* deprecate legacy lumia mailbox (#6985) (#c27e3e2) +* update zircuit reorg period (#6952) (#0c25e14) +* bump toolchain from 1.81 to 1.86 (#6915) (#054dbd1) +* deprecate chains from infra (#6850) (#288b779) +* Celestia mainnet deploy configuration (#6810) (#ad62261) +* update celo metadata in agent config (#6761) (#539bb09) +* remove botanix tx overrides (#6751) (#077bc3e) +* rename `Processor` -> `DbLoader`, `SerialSubmitter` -> `MessageProcessor` (#6731) (#8f2b9a6) +* lower worker thread count (#6712) (#f67ebeb) +* catch switchChainAsync for starknet (#6716) (#112d99f) +* add new starknet SOL route to SVM relayer application verifier (#6670) (#08d6cf2) +* deprecate trumpchain, real, treasure (#6598) (#6d1f7ee) +* deprecate rome testnets (#6587) (#77ea9fd) +* new relayer image with less logging, ignore some neutron dest msgs (#6564) (#9b85866) +* update to latest registry version (#6522) (#d2e35d5) +* update to latest cainome & starknet versions (#6435) (#1ed65c2) +* update to latest registry version (#6381) (#f83e113) + +### Refactor + +* Move tests into a separate file to simplify code navigation (#7126) (#49a8a48) +* improve radix state queries (#7017) (#8f4faae) +* CosmWasm <> CosmosNative deduplication (#6012) (#dafa0b6) +* Add database and chain conf into destination chain init (#6817) (#cb7d42b) +* Add app operation verifier and ccip signers into destination chain init (#6814) (#76cdb1b) +* Refactor building mailboxes as part of destination chains (#6808) (#9de29fe) +* Move unit tests in relayer.rs into separate file (#6690) (#13552bb) +* Rename TransactionId, PayloadId and PendingInclusion (#6468) (#2c7f387) +* simplify module and type names (#6384) (#fd6e878) + + diff --git a/rust/main/Cargo.toml b/rust/main/Cargo.toml index 01a283c3c08..cd74bc1dd5e 100644 --- a/rust/main/Cargo.toml +++ b/rust/main/Cargo.toml @@ -32,7 +32,7 @@ edition = "2021" homepage = "https://hyperlane.xyz" license-file = "../LICENSE.md" publish = false -version = "1.5.0" +version = "1.6.0" [workspace.dependencies] Inflector = "0.11.4" @@ -271,79 +271,79 @@ tag = "2025-05-30" [patch.crates-io.curve25519-dalek] branch = "v3.2.2-relax-zeroize" git = "https://github.com/Eclipse-Laboratories-Inc/curve25519-dalek" -version = "3.2.2" +version = "1.6.0" [patch.crates-io.primitive-types] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/parity-common.git" -version = "=0.12.1" +version = "1.6.0" [patch.crates-io.rlp] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/parity-common.git" -version = "=0.5.2" +version = "1.6.0" [patch.crates-io.solana-account-decoder] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-clap-utils] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-cli-config] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-client] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-program] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-sdk] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-transaction-status] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.solana-zk-token-sdk] git = "https://github.com/hyperlane-xyz/solana.git" tag = "hyperlane-1.14.13-2025-05-21" -version = "=1.14.13" +version = "1.6.0" [patch.crates-io.spl-associated-token-account] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/solana-program-library.git" -version = "=1.1.2" +version = "1.6.0" [patch.crates-io.spl-noop] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/solana-program-library.git" -version = "=0.1.3" +version = "1.6.0" [patch.crates-io.spl-token] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/solana-program-library.git" -version = "=3.5.0" +version = "1.6.0" [patch.crates-io.spl-token-2022] branch = "hyperlane" git = "https://github.com/hyperlane-xyz/solana-program-library.git" -version = "=0.5.0" +version = "1.6.0" [patch.crates-io.spl-type-length-value] -version = "=0.1.0" +version = "1.6.0" git = "https://github.com/hyperlane-xyz/solana-program-library.git" branch = "hyperlane"