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 diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml new file mode 100644 index 00000000000..11bfe582e6d --- /dev/null +++ b/.github/workflows/rust-release.yml @@ -0,0 +1,406 @@ +name: Rust Agent Release + +on: + push: + branches: + - main + - pb/rust-release # for testing + paths: + - '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 }} + cancel-in-progress: false + +permissions: + contents: write + pull-requests: write + +env: + CARGO_TERM_COLOR: always + 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 + 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: + fetch-depth: 0 + - name: Install git-cliff + uses: taiki-e/install-action@v2 + with: + 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 for agents v${NEW_VERSION}" >> $GITHUB_STEP_SUMMARY + echo "" >> $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: + name: Publish Release + runs-on: depot-ubuntu-latest + needs: check-release-status + if: | + 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: Install git-cliff + uses: taiki-e/install-action@v2 + with: + tool: git-cliff + - 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 }} + 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" + + # 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 + # 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 + + TAG_NAME="agents-v${VERSION}" + echo "Creating $RELEASE_TYPE: $TAG_NAME" + + # Generate changelog + PREV_TAG=$(git describe --tags --abbrev=0 --match "agents-v*" 2>/dev/null || echo "") + 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 warning for pre-releases + if [ "$IS_PRERELEASE" = "true" ]; then + CHANGELOG="⚠️ **This is a pre-release version.**"$'\n\n'"${CHANGELOG}" + fi + + # Create tag and GitHub release + git tag -a "$TAG_NAME" -m "$RELEASE_TYPE $TAG_NAME" + git push origin "$TAG_NAME" + + gh release create "$TAG_NAME" \ + --title "$TITLE" \ + --notes "$CHANGELOG" \ + $PRERELEASE_FLAG \ + --repo "${{ github.repository }}" + + 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 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 de91ee4b27d..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 = "0.1.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" 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/cliff.toml b/rust/main/cliff.toml new file mode 100644 index 00000000000..79d00d248e1 --- /dev/null +++ b/rust/main/cliff.toml @@ -0,0 +1,53 @@ +# 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 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 = """ + +""" +# 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 = true +# 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/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 diff --git a/rust/main/release-plz.toml b/rust/main/release-plz.toml new file mode 100644 index 00000000000..1cb0783b915 --- /dev/null +++ b/rust/main/release-plz.toml @@ -0,0 +1,21 @@ +# 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 +# Update Cargo.toml versions in release PR +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