From 383f29c994d0d5c121b28e79927d02c18ed8d3da Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 23 Sep 2025 19:09:45 -0700 Subject: [PATCH 01/26] add script to bump otel dependencies --- scripts/update_dependencies.py | 126 +++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 scripts/update_dependencies.py diff --git a/scripts/update_dependencies.py b/scripts/update_dependencies.py new file mode 100644 index 0000000000..bc3c4864bf --- /dev/null +++ b/scripts/update_dependencies.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python3 + +import requests +import re +import sys + +def get_latest_instrumentation_version(): + """Get the latest version of opentelemetry-java-instrumentation from GitHub releases.""" + try: + response = requests.get( + 'https://api.github.com/repos/open-telemetry/opentelemetry-java-instrumentation/releases/latest', + timeout=30 + ) + response.raise_for_status() + + release_data = response.json() + tag_name = release_data['tag_name'] + + version = tag_name.lstrip('v') + return version + + except requests.RequestException as request_error: + print(f"Warning: Could not get latest instrumentation version: {request_error}") + return None + +def get_latest_maven_version(group_id, artifact_id): + """Get the latest version of a Maven artifact from Maven Central.""" + try: + response = requests.get( + f'https://search.maven.org/solrsearch/select?q=g:{group_id}+AND+a:{artifact_id}&rows=1&wt=json', + timeout=30 + ) + response.raise_for_status() + + data = response.json() + docs = data.get('response', {}).get('docs', []) + + if docs: + return docs[0]['latestVersion'] + else: + print(f"Warning: No versions found for {group_id}:{artifact_id}") + return None + + except requests.RequestException as request_error: + print(f"Warning: Could not get latest version for {group_id}:{artifact_id}: {request_error}") + return None + +def update_gradle_file(file_path): + """Update OpenTelemetry versions in build.gradle.kts.""" + try: + with open(file_path, 'r', encoding='utf-8') as input_file: + content = input_file.read() + + original_content = content + updated = False + + latest_instrumentation_version = get_latest_instrumentation_version() + if latest_instrumentation_version: + # Update otelVersion + otel_version_pattern = r'val otelVersion = "[^"]*"' + otel_version_replacement = f'val otelVersion = "{latest_instrumentation_version}"' + if re.search(otel_version_pattern, content): + new_content = re.sub(otel_version_pattern, otel_version_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated otelVersion to {latest_instrumentation_version}") + + # Update otelSnapshotVersion (typically next minor version) + version_parts = latest_instrumentation_version.split('.') + if len(version_parts) >= 2: + next_minor = f"{version_parts[0]}.{int(version_parts[1]) + 1}.0" + otel_snapshot_pattern = r'val otelSnapshotVersion = "[^"]*"' + otel_snapshot_replacement = f'val otelSnapshotVersion = "{next_minor}"' + if re.search(otel_snapshot_pattern, content): + new_content = re.sub(otel_snapshot_pattern, otel_snapshot_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated otelSnapshotVersion to {next_minor}") + + # Update hardcoded OpenTelemetry versions in dependencyLists + opentelemetry_packages = [ + ('io.opentelemetry.contrib', 'opentelemetry-aws-xray'), + ('io.opentelemetry.contrib', 'opentelemetry-aws-resources'), + ('io.opentelemetry', 'opentelemetry-extension-aws'), + ('io.opentelemetry.proto', 'opentelemetry-proto'), + ] + + for group_id, artifact_id in opentelemetry_packages: + latest_version = get_latest_maven_version(group_id, artifact_id) + if latest_version: + # Pattern to match the dependency line + pattern = rf'"{re.escape(group_id)}:{re.escape(artifact_id)}:[^"]*"' + replacement = f'"{group_id}:{artifact_id}:{latest_version}"' + + if re.search(pattern, content): + new_content = re.sub(pattern, replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated {group_id}:{artifact_id} to {latest_version}") + + if updated: + with open(file_path, 'w', encoding='utf-8') as output_file: + output_file.write(content) + print("Dependencies updated successfully") + return True + else: + print("No OpenTelemetry dependencies needed updating") + return False + + except (OSError, IOError) as file_error: + print(f"Error updating dependencies: {file_error}") + sys.exit(1) + +def main(): + gradle_file_path = 'dependencyManagement/build.gradle.kts' + + updated = update_gradle_file(gradle_file_path) + + if not updated: + print("No updates were made") + +if __name__ == '__main__': + main() From c4395a7d45a15b9de1db5b5c5c12175813e8b9eb Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 23 Sep 2025 19:12:06 -0700 Subject: [PATCH 02/26] add nightly build workflow --- .github/workflows/nightly-build.yml | 70 +++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .github/workflows/nightly-build.yml diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml new file mode 100644 index 0000000000..f4677500e5 --- /dev/null +++ b/.github/workflows/nightly-build.yml @@ -0,0 +1,70 @@ +name: Nightly Upstream Snapshot Build + +on: + schedule: + - cron: "21 3 * * *" + workflow_dispatch: + +env: + BRANCH_NAME: nightly-dependency-updates + +jobs: + update-and-create-pr: + runs-on: ubuntu-latest + outputs: + has_changes: ${{ steps.check_changes.outputs.has_changes }} + + steps: + - name: Checkout repository + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #5.0.0 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Check if nightly branch already exists + run: | + if git ls-remote --exit-code --heads origin "$BRANCH_NAME"; then + echo "Branch $BRANCH_NAME already exists. Skipping run to avoid conflicts." + echo "Please merge or close the existing PR before the next nightly run." + exit 1 + fi + + - name: Configure git and create branch + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git checkout -b "$BRANCH_NAME" + + - name: Set up Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0 + with: + python-version: '3.11' + + - name: Install Python dependencies + run: pip install requests + + - name: Update dependencies + run: python3 scripts/update_dependencies.py + + - name: Check for changes and create PR + id: check_changes + run: | + if git diff --quiet; then + echo "No dependency updates needed" + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "Dependencies were updated" + echo "has_changes=true" >> $GITHUB_OUTPUT + + git add dependencyManagement/build.gradle.kts + git commit -m "chore: update OpenTelemetry dependencies to latest versions" + git push origin "$BRANCH_NAME" + + gh pr create \ + --title "Nightly dependency update: OpenTelemetry packages to latest versions" \ + --body "Automated update of OpenTelemetry dependencies to their latest available versions." \ + --base main \ + --head "$BRANCH_NAME" + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From e12d79c9cb645d1bc8cee60ca9e571dea2bfbd31 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 23 Sep 2025 19:13:06 -0700 Subject: [PATCH 03/26] update main build to run on nightly build branch --- .github/workflows/main-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 622cba16e3..6618a3b2f5 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -4,6 +4,7 @@ on: branches: - main - "release/v*" + - nightly-dependency-updates workflow_dispatch: # be able to run the workflow on demand env: AWS_DEFAULT_REGION: us-east-1 @@ -268,7 +269,7 @@ jobs: name: "Publish Main Build Status" needs: [ build, e2e-test, contract-tests, application-signals-lambda-layer-build, application-signals-e2e-test ] runs-on: ubuntu-latest - if: always() + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') steps: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 From a821678504e588da1057a1fcbeee442e5cef8997 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 18:41:09 -0700 Subject: [PATCH 04/26] update contrib dependencies together in script --- scripts/update_dependencies.py | 57 ++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/scripts/update_dependencies.py b/scripts/update_dependencies.py index bc3c4864bf..2d4f84b520 100644 --- a/scripts/update_dependencies.py +++ b/scripts/update_dependencies.py @@ -23,6 +23,37 @@ def get_latest_instrumentation_version(): print(f"Warning: Could not get latest instrumentation version: {request_error}") return None +def get_latest_contrib_version(): + """Get the latest version of opentelemetry-java-contrib from GitHub releases.""" + try: + response = requests.get( + 'https://api.github.com/repos/open-telemetry/opentelemetry-java-contrib/releases', + timeout=30 + ) + response.raise_for_status() + + releases = response.json() + + # Find the latest stable release + for release in releases: + if release.get('prerelease', False): + continue # Skip pre-releases + + tag_name = release['tag_name'] + # Contrib releases are typically tagged as "v1.32.0" + version_match = re.match(r'^v?(\d+\.\d+\.\d+)$', tag_name) + if version_match: + version = version_match.group(1) + print(f"Found contrib version: {version}") + return version + + print("Warning: No stable contrib releases found") + return None + + except requests.RequestException as request_error: + print(f"Warning: Could not get latest contrib version: {request_error}") + return None + def get_latest_maven_version(group_id, artifact_id): """Get the latest version of a Maven artifact from Maven Central.""" try: @@ -79,15 +110,35 @@ def update_gradle_file(file_path): updated = True print(f"Updated otelSnapshotVersion to {next_minor}") - # Update hardcoded OpenTelemetry versions in dependencyLists - opentelemetry_packages = [ + # Get latest contrib version from GitHub + latest_contrib_version = get_latest_contrib_version() + + # Update contrib packages that are released together + contrib_packages = [ ('io.opentelemetry.contrib', 'opentelemetry-aws-xray'), ('io.opentelemetry.contrib', 'opentelemetry-aws-resources'), + ] + + for group_id, artifact_id in contrib_packages: + if latest_contrib_version: + # Pattern to match the dependency line + pattern = rf'"{re.escape(group_id)}:{re.escape(artifact_id)}:[^"]*"' + replacement = f'"{group_id}:{artifact_id}:{latest_contrib_version}"' + + if re.search(pattern, content): + new_content = re.sub(pattern, replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated {group_id}:{artifact_id} to {latest_contrib_version}") + + # Update remaining packages using Maven Central + other_packages = [ ('io.opentelemetry', 'opentelemetry-extension-aws'), ('io.opentelemetry.proto', 'opentelemetry-proto'), ] - for group_id, artifact_id in opentelemetry_packages: + for group_id, artifact_id in other_packages: latest_version = get_latest_maven_version(group_id, artifact_id) if latest_version: # Pattern to match the dependency line From ea7f37204c35a4fae6c9a6a297d3af8b32b1a913 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 18:55:30 -0700 Subject: [PATCH 05/26] add logic to link releases with breaking changes --- .github/workflows/nightly-build.yml | 25 +++++- scripts/find_breaking_changes.py | 118 ++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 scripts/find_breaking_changes.py diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index f4677500e5..25d5909a82 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -41,7 +41,14 @@ jobs: python-version: '3.11' - name: Install Python dependencies - run: pip install requests + run: pip install requests packaging + + - name: Generate breaking changes summary + id: breaking_changes + run: | + echo "BREAKING_CHANGES<> $GITHUB_OUTPUT + python3 scripts/find_breaking_changes.py + echo "EOF" >> $GITHUB_OUTPUT - name: Update dependencies run: python3 scripts/update_dependencies.py @@ -60,11 +67,25 @@ jobs: git commit -m "chore: update OpenTelemetry dependencies to latest versions" git push origin "$BRANCH_NAME" + - name: Create or update PR + if: steps.check_changes.outputs.has_changes == 'true' + run: | + PR_BODY="Automated update of OpenTelemetry dependencies to their latest available versions. + + **Upstream releases with breaking changes:** + ${{ steps.breaking_changes.outputs.BREAKING_CHANGES }}" + + if gh pr view "$BRANCH_NAME" --json state --jq '.state' 2>/dev/null | grep -q "OPEN"; then + echo "Open PR already exists, updating description..." + gh pr edit "$BRANCH_NAME" --body "$PR_BODY" + else + echo "Creating new PR..." gh pr create \ --title "Nightly dependency update: OpenTelemetry packages to latest versions" \ - --body "Automated update of OpenTelemetry dependencies to their latest available versions." \ + --body "$PR_BODY" \ --base main \ --head "$BRANCH_NAME" fi + fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py new file mode 100644 index 0000000000..59e0cf4541 --- /dev/null +++ b/scripts/find_breaking_changes.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 + +import re +import requests +import sys +from packaging import version + + +def get_current_versions(): + """Get current versions from build.gradle.kts.""" + try: + with open("dependencyManagement/build.gradle.kts", "r", encoding="utf-8") as file: + content = file.read() + + # Extract otelVersion + otel_version_match = re.search(r'val otelVersion = "([^"]*)"', content) + current_instrumentation_version = otel_version_match.group(1) if otel_version_match else None + + return current_instrumentation_version + + except (OSError, IOError) as error: + print(f"Error reading current versions: {error}") + return None + + +def get_releases_with_breaking_changes(repo, current_version, new_version): + """Get releases between current and new version that mention breaking changes.""" + try: + response = requests.get(f"https://api.github.com/repos/open-telemetry/{repo}/releases", timeout=30) + response.raise_for_status() + releases = response.json() + + breaking_releases = [] + + for release in releases: + try: + tag_name = release["tag_name"] + release_version = tag_name.lstrip("v") + + # Check if this release is between current and new version + if ( + version.parse(current_version) + < version.parse(release_version) + <= version.parse(new_version) + ): + + # Check if release notes have breaking changes as headers + body = release.get("body", "") + breaking_header_pattern = r'^#+.*breaking changes' + if re.search(breaking_header_pattern, body, re.IGNORECASE | re.MULTILINE): + breaking_releases.append( + { + "version": release_version, + "name": release["name"], + "url": release["html_url"], + "body": release.get("body", ""), + } + ) + except (ValueError, KeyError): + # Skip releases with invalid version formats or missing data + continue + + return breaking_releases + + except requests.RequestException as request_error: + print(f"Warning: Could not get releases for {repo}: {request_error}") + return [] + + +def main(): + current_instrumentation_version = get_current_versions() + + if not current_instrumentation_version: + print("Could not determine current versions") + sys.exit(1) + + # Get new versions from the update script + sys.path.append('scripts') + from update_dependencies import get_latest_instrumentation_version, get_latest_contrib_version + + new_instrumentation_version = get_latest_instrumentation_version() + new_contrib_version = get_latest_contrib_version() + + if not new_instrumentation_version: + print("Could not determine new versions") + sys.exit(1) + + print("Checking for breaking changes:") + print(f"Instrumentation: {current_instrumentation_version} → {new_instrumentation_version}") + if new_contrib_version: + print(f"Contrib: → {new_contrib_version}") + + # Check instrumentation repo for breaking changes + instrumentation_breaking = get_releases_with_breaking_changes( + "opentelemetry-java-instrumentation", current_instrumentation_version, new_instrumentation_version + ) + + # Generate breaking changes summary + breaking_changes_summary = [] + + if instrumentation_breaking: + breaking_changes_summary.append("**Breaking changes found in opentelemetry-java-instrumentation:**") + for release in instrumentation_breaking: + breaking_changes_summary.append(f"- [{release['name']}]({release['url']})") + + # Always add contrib release link (no breaking changes detection needed) + if new_contrib_version: + breaking_changes_summary.append("**Check contrib releases:**") + breaking_changes_summary.append("- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)") + + if breaking_changes_summary: + print("\n" + "\n".join(breaking_changes_summary)) + else: + print("\nNo breaking changes detected") + + +if __name__ == "__main__": + main() From 8cf6aac7cc314f1302764ea6f0ef7761a074d219 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 18:57:52 -0700 Subject: [PATCH 06/26] Revert "update main build to run on nightly build branch" This reverts commit e12d79c9cb645d1bc8cee60ca9e571dea2bfbd31. --- .github/workflows/main-build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 6618a3b2f5..622cba16e3 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -4,7 +4,6 @@ on: branches: - main - "release/v*" - - nightly-dependency-updates workflow_dispatch: # be able to run the workflow on demand env: AWS_DEFAULT_REGION: us-east-1 @@ -269,7 +268,7 @@ jobs: name: "Publish Main Build Status" needs: [ build, e2e-test, contract-tests, application-signals-lambda-layer-build, application-signals-e2e-test ] runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/') + if: always() steps: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 From ed8294e32025a657df476142cd9d21e3873fd86d Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:03:26 -0700 Subject: [PATCH 07/26] fix branching logic and add metric --- .github/workflows/nightly-build.yml | 51 ++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 25d5909a82..cff54cd3d5 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -5,7 +5,13 @@ on: - cron: "21 3 * * *" workflow_dispatch: +permissions: + contents: write + pull-requests: write + id-token: write + env: + AWS_DEFAULT_REGION: us-east-1 BRANCH_NAME: nightly-dependency-updates jobs: @@ -21,19 +27,20 @@ jobs: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - - name: Check if nightly branch already exists - run: | - if git ls-remote --exit-code --heads origin "$BRANCH_NAME"; then - echo "Branch $BRANCH_NAME already exists. Skipping run to avoid conflicts." - echo "Please merge or close the existing PR before the next nightly run." - exit 1 - fi - - - name: Configure git and create branch + - name: Configure git run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - git checkout -b "$BRANCH_NAME" + + - name: Check out dependency update branch + run: | + if git ls-remote --exit-code --heads origin "$BRANCH_NAME"; then + echo "Branch $BRANCH_NAME already exists, checking out..." + git checkout "$BRANCH_NAME" + else + echo "Branch $BRANCH_NAME does not exist, creating new branch..." + git checkout -b "$BRANCH_NAME" + fi - name: Set up Python uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0 @@ -66,7 +73,8 @@ jobs: git add dependencyManagement/build.gradle.kts git commit -m "chore: update OpenTelemetry dependencies to latest versions" git push origin "$BRANCH_NAME" - + fi + - name: Create or update PR if: steps.check_changes.outputs.has_changes == 'true' run: | @@ -89,3 +97,24 @@ jobs: fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + publish-nightly-build-status: + name: "Publish Nightly Build Status" + needs: [update-and-create-pr] + runs-on: ubuntu-latest + if: always() + steps: + - name: Configure AWS Credentials for emitting metrics + uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 + with: + role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Publish nightly build status + run: | + # For now, just publish success since we don't have build validation yet + value="${{ needs.update-and-create-pr.result == 'success' && '0.0' || '1.0'}}" + aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ + --metric-name Failure \ + --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ + --value $value From edcdb158df651b758b6336e89f2cc4944ee3bbba Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:08:08 -0700 Subject: [PATCH 08/26] add main build call and update metric --- .github/workflows/main-build.yml | 15 +++++++++++++++ .github/workflows/nightly-build.yml | 26 +++++++++++++++++++------- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 622cba16e3..eba1156676 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -1,5 +1,15 @@ name: Java Agent Main Build on: + workflow_call: + inputs: + caller-workflow-name: + required: true + type: string + ref: + description: 'The branch, tag or SHA to checkout' + required: false + type: string + default: '' push: branches: - main @@ -24,6 +34,8 @@ jobs: runs-on: aws-otel-java-instrumentation_ubuntu-latest_32-core steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0 + with: + ref: ${{ inputs.ref || github.sha }} - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 #v5.0.0 with: java-version-file: .java-version @@ -58,6 +70,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0 with: fetch-depth: 0 + ref: ${{ inputs.ref || github.sha }} - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 #v5.0.0 with: java-version-file: .java-version @@ -193,6 +206,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0 with: fetch-depth: 0 + ref: ${{ inputs.ref || github.sha }} - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 #v5.0.0 with: java-version: 23 @@ -233,6 +247,7 @@ jobs: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0 with: fetch-depth: 0 + ref: ${{ inputs.ref || github.sha }} - uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 #v5.0.0 with: java-version-file: .java-version diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index cff54cd3d5..751152d322 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -98,9 +98,18 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build-and-test: + needs: update-and-create-pr + if: needs.update-and-create-pr.outputs.has_changes == 'true' + uses: ./.github/workflows/main-build.yml + secrets: inherit + with: + caller-workflow-name: nightly-build + ref: nightly-dependency-updates + publish-nightly-build-status: name: "Publish Nightly Build Status" - needs: [update-and-create-pr] + needs: [update-and-create-pr, build-and-test] runs-on: ubuntu-latest if: always() steps: @@ -112,9 +121,12 @@ jobs: - name: Publish nightly build status run: | - # For now, just publish success since we don't have build validation yet - value="${{ needs.update-and-create-pr.result == 'success' && '0.0' || '1.0'}}" - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ - --value $value + if [[ "${{ needs.build-and-test.result }}" == "skipped" ]]; then + echo "Build was skipped (no changes), not publishing metric" + else + value="${{ needs.build-and-test.result == 'success' && '0.0' || '1.0'}}" + aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ + --metric-name Failure \ + --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ + --value $value + fi From 3393cf74166e11dd0425a377df1425c1986f7fe7 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:08:38 -0700 Subject: [PATCH 09/26] add test trigger to workflow --- .github/workflows/nightly-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 751152d322..215aa5b8c4 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -4,6 +4,9 @@ on: schedule: - cron: "21 3 * * *" workflow_dispatch: + push: + branches: + - zhaez/nightly-build permissions: contents: write From 27155e291911beefa3983b680390005c0e08a307 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:10:26 -0700 Subject: [PATCH 10/26] fix bug and job title --- .github/workflows/nightly-build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 215aa5b8c4..cc2ab83806 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -63,7 +63,7 @@ jobs: - name: Update dependencies run: python3 scripts/update_dependencies.py - - name: Check for changes and create PR + - name: Check for changes and commit id: check_changes run: | if git diff --quiet; then @@ -97,7 +97,6 @@ jobs: --base main \ --head "$BRANCH_NAME" fi - fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 735e6af9d0e550a1499bb72d4ce376aff55df062 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:11:44 -0700 Subject: [PATCH 11/26] fix credential for metric publishing --- .github/workflows/nightly-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index cc2ab83806..6abd6d0d61 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -118,7 +118,7 @@ jobs: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 with: - role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }} + role-to-assume: ${{ secrets.METRICS_ROLE_ARN }} aws-region: ${{ env.AWS_DEFAULT_REGION }} - name: Publish nightly build status From f3abbd9533c31556e0d354a1fdd029a9e4725bf4 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Sun, 28 Sep 2025 19:40:57 -0700 Subject: [PATCH 12/26] fix logic to find breaking changes --- .github/workflows/nightly-build.yml | 7 ++----- scripts/find_breaking_changes.py | 29 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 6abd6d0d61..bea3ea5150 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -55,10 +55,7 @@ jobs: - name: Generate breaking changes summary id: breaking_changes - run: | - echo "BREAKING_CHANGES<> $GITHUB_OUTPUT - python3 scripts/find_breaking_changes.py - echo "EOF" >> $GITHUB_OUTPUT + run: python3 scripts/find_breaking_changes.py - name: Update dependencies run: python3 scripts/update_dependencies.py @@ -84,7 +81,7 @@ jobs: PR_BODY="Automated update of OpenTelemetry dependencies to their latest available versions. **Upstream releases with breaking changes:** - ${{ steps.breaking_changes.outputs.BREAKING_CHANGES }}" + ${{ steps.breaking_changes.outputs.breaking_changes_info }}" if gh pr view "$BRANCH_NAME" --json state --jq '.state' 2>/dev/null | grep -q "OPEN"; then echo "Open PR already exists, updating description..." diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py index 59e0cf4541..560686a73c 100644 --- a/scripts/find_breaking_changes.py +++ b/scripts/find_breaking_changes.py @@ -46,8 +46,8 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): # Check if release notes have breaking changes as headers body = release.get("body", "") - breaking_header_pattern = r'^#+.*breaking changes' - if re.search(breaking_header_pattern, body, re.IGNORECASE | re.MULTILINE): + breaking_header_pattern = r'^\s*#+.*Breaking changes' + if re.search(breaking_header_pattern, body, re.MULTILINE): breaking_releases.append( { "version": release_version, @@ -95,23 +95,24 @@ def main(): "opentelemetry-java-instrumentation", current_instrumentation_version, new_instrumentation_version ) - # Generate breaking changes summary - breaking_changes_summary = [] + # Output for GitHub Actions + breaking_info = "" if instrumentation_breaking: - breaking_changes_summary.append("**Breaking changes found in opentelemetry-java-instrumentation:**") + breaking_info += "**opentelemetry-java-instrumentation:**\n" for release in instrumentation_breaking: - breaking_changes_summary.append(f"- [{release['name']}]({release['url']})") + breaking_info += f"- [{release['name']}]({release['url']})\n" - # Always add contrib release link (no breaking changes detection needed) + # Add contrib release link only if we have a new contrib version if new_contrib_version: - breaking_changes_summary.append("**Check contrib releases:**") - breaking_changes_summary.append("- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)") - - if breaking_changes_summary: - print("\n" + "\n".join(breaking_changes_summary)) - else: - print("\nNo breaking changes detected") + breaking_info += "\n**Check contrib releases for potential breaking changes:**\n" + breaking_info += "- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)\n" + + # Set GitHub output + import os + if os.environ.get("GITHUB_OUTPUT"): + with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output_file: + output_file.write(f"breaking_changes_info< Date: Mon, 29 Sep 2025 12:45:16 -0700 Subject: [PATCH 13/26] update script comments --- scripts/find_breaking_changes.py | 3 --- scripts/update_dependencies.py | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py index 560686a73c..295696cbb6 100644 --- a/scripts/find_breaking_changes.py +++ b/scripts/find_breaking_changes.py @@ -57,7 +57,6 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): } ) except (ValueError, KeyError): - # Skip releases with invalid version formats or missing data continue return breaking_releases @@ -103,12 +102,10 @@ def main(): for release in instrumentation_breaking: breaking_info += f"- [{release['name']}]({release['url']})\n" - # Add contrib release link only if we have a new contrib version if new_contrib_version: breaking_info += "\n**Check contrib releases for potential breaking changes:**\n" breaking_info += "- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)\n" - # Set GitHub output import os if os.environ.get("GITHUB_OUTPUT"): with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output_file: diff --git a/scripts/update_dependencies.py b/scripts/update_dependencies.py index 2d4f84b520..1e4aa88b6f 100644 --- a/scripts/update_dependencies.py +++ b/scripts/update_dependencies.py @@ -37,10 +37,9 @@ def get_latest_contrib_version(): # Find the latest stable release for release in releases: if release.get('prerelease', False): - continue # Skip pre-releases + continue tag_name = release['tag_name'] - # Contrib releases are typically tagged as "v1.32.0" version_match = re.match(r'^v?(\d+\.\d+\.\d+)$', tag_name) if version_match: version = version_match.group(1) @@ -113,7 +112,6 @@ def update_gradle_file(file_path): # Get latest contrib version from GitHub latest_contrib_version = get_latest_contrib_version() - # Update contrib packages that are released together contrib_packages = [ ('io.opentelemetry.contrib', 'opentelemetry-aws-xray'), ('io.opentelemetry.contrib', 'opentelemetry-aws-resources'), From aefcbbb217485012d9a46e35e37bc722c1442569 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 4 Nov 2025 17:47:21 -0800 Subject: [PATCH 14/26] refactor workflow order --- .github/workflows/nightly-build.yml | 56 +++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index bea3ea5150..a1e4bbb61c 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -18,10 +18,11 @@ env: BRANCH_NAME: nightly-dependency-updates jobs: - update-and-create-pr: + update-dependencies: runs-on: ubuntu-latest outputs: has_changes: ${{ steps.check_changes.outputs.has_changes }} + breaking_changes_info: ${{ steps.breaking_changes.outputs.breaking_changes_info }} steps: - name: Checkout repository @@ -74,14 +75,38 @@ jobs: git commit -m "chore: update OpenTelemetry dependencies to latest versions" git push origin "$BRANCH_NAME" fi + + build-and-test: + needs: update-dependencies + if: needs.update-dependencies.outputs.has_changes == 'true' + uses: ./.github/workflows/main-build.yml + secrets: inherit + with: + caller-workflow-name: nightly-build + ref: nightly-dependency-updates + + create-pr: + needs: [update-dependencies, build-and-test] + if: always() && needs.update-dependencies.outputs.has_changes == 'true' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #5.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} - name: Create or update PR - if: steps.check_changes.outputs.has_changes == 'true' run: | + BUILD_STATUS="${{ needs.build-and-test.result }}" + BUILD_EMOJI="${{ needs.build-and-test.result == 'success' && '✅' || '❌' }}" + BUILD_LINK="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + PR_BODY="Automated update of OpenTelemetry dependencies to their latest available versions. + **Build Status:** ${BUILD_EMOJI} [${BUILD_STATUS}](${BUILD_LINK}) + **Upstream releases with breaking changes:** - ${{ steps.breaking_changes.outputs.breaking_changes_info }}" + ${{ needs.update-dependencies.outputs.breaking_changes_info }}" if gh pr view "$BRANCH_NAME" --json state --jq '.state' 2>/dev/null | grep -q "OPEN"; then echo "Open PR already exists, updating description..." @@ -97,18 +122,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-and-test: - needs: update-and-create-pr - if: needs.update-and-create-pr.outputs.has_changes == 'true' - uses: ./.github/workflows/main-build.yml - secrets: inherit - with: - caller-workflow-name: nightly-build - ref: nightly-dependency-updates - publish-nightly-build-status: name: "Publish Nightly Build Status" - needs: [update-and-create-pr, build-and-test] + needs: [update-dependencies, build-and-test, create-pr] runs-on: ubuntu-latest if: always() steps: @@ -121,11 +137,13 @@ jobs: - name: Publish nightly build status run: | if [[ "${{ needs.build-and-test.result }}" == "skipped" ]]; then - echo "Build was skipped (no changes), not publishing metric" + echo "Build was skipped (no changes)" + value="0.0" else - value="${{ needs.build-and-test.result == 'success' && '0.0' || '1.0'}}" - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ - --value $value + value="${{ (needs.build-and-test.result == 'success' && needs.create-pr.result == 'success') && '0.0' || '1.0'}}" fi + + aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ + --metric-name Failure \ + --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ + --value $value From 28730e008b61ae1f84c6049e8654d25df06ea1c3 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 18:27:43 -0800 Subject: [PATCH 15/26] update workflow details --- .github/workflows/nightly-build.yml | 12 +++++++++++- scripts/update_dependencies.py | 13 +++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index a1e4bbb61c..cc5c0413e4 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -1,4 +1,5 @@ name: Nightly Upstream Snapshot Build +description: This workflow checks for new upstream versions of OpenTelemetry dependencies, creates a PR to update them, and builds and tests the new changes. on: schedule: @@ -22,6 +23,8 @@ jobs: runs-on: ubuntu-latest outputs: has_changes: ${{ steps.check_changes.outputs.has_changes }} + otel_java_instrumentation_version: ${{ steps.update_deps.outputs.otel_java_instrumentation_version }} + otel_java_contrib_version: ${{ steps.update_deps.outputs.otel_java_contrib_version }} breaking_changes_info: ${{ steps.breaking_changes.outputs.breaking_changes_info }} steps: @@ -59,6 +62,7 @@ jobs: run: python3 scripts/find_breaking_changes.py - name: Update dependencies + id: update_deps run: python3 scripts/update_dependencies.py - name: Check for changes and commit @@ -101,11 +105,17 @@ jobs: BUILD_EMOJI="${{ needs.build-and-test.result == 'success' && '✅' || '❌' }}" BUILD_LINK="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" - PR_BODY="Automated update of OpenTelemetry dependencies to their latest available versions. + PR_BODY="Automated update of OpenTelemetry dependencies. **Build Status:** ${BUILD_EMOJI} [${BUILD_STATUS}](${BUILD_LINK}) + **Updated versions:** + - [OpenTelemetry Java Instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/tag/v${{ needs.update-dependencies.outputs.otel_java_instrumentation_version }}): ${{ needs.update-dependencies.outputs.otel_java_instrumentation_version }} + - [OpenTelemetry Java Contrib](https://github.com/open-telemetry/opentelemetry-java-contrib/releases/tag/v${{ needs.update-dependencies.outputs.otel_java_contrib_version }}): ${{ needs.update-dependencies.outputs.otel_java_contrib_version }} + **Upstream releases with breaking changes:** + Note: the mechanism to detect upstream breaking changes is not perfect. Be sure to check all new releases and understand if any additional changes need to be addressed. + ${{ needs.update-dependencies.outputs.breaking_changes_info }}" if gh pr view "$BRANCH_NAME" --json state --jq '.state' 2>/dev/null | grep -q "OPEN"; then diff --git a/scripts/update_dependencies.py b/scripts/update_dependencies.py index 1e4aa88b6f..d898665bad 100644 --- a/scripts/update_dependencies.py +++ b/scripts/update_dependencies.py @@ -164,6 +164,19 @@ def update_gradle_file(file_path): sys.exit(1) def main(): + # Get versions for GitHub outputs + latest_instrumentation_version = get_latest_instrumentation_version() + latest_contrib_version = get_latest_contrib_version() + + # Set GitHub outputs + import os + if os.environ.get('GITHUB_OUTPUT'): + with open(os.environ['GITHUB_OUTPUT'], 'a') as f: + if latest_instrumentation_version: + f.write(f"otel_java_instrumentation_version={latest_instrumentation_version}\n") + if latest_contrib_version: + f.write(f"otel_java_contrib_version={latest_contrib_version}\n") + gradle_file_path = 'dependencyManagement/build.gradle.kts' updated = update_gradle_file(gradle_file_path) From de3d22ac1ea753eea8845385b6ccd15cff0ff681 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 18:37:36 -0800 Subject: [PATCH 16/26] parity with python nightly build --- .github/workflows/nightly-build.yml | 74 ++++---- scripts/find_breaking_changes.py | 65 ++++--- scripts/get_upstream_versions.py | 69 ++++++++ scripts/update_dependencies.py | 256 +++++++++------------------- 4 files changed, 233 insertions(+), 231 deletions(-) create mode 100644 scripts/get_upstream_versions.py diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index cc5c0413e4..cfe6c41d43 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -5,26 +5,23 @@ on: schedule: - cron: "21 3 * * *" workflow_dispatch: - push: - branches: - - zhaez/nightly-build - -permissions: - contents: write - pull-requests: write - id-token: write env: AWS_DEFAULT_REGION: us-east-1 BRANCH_NAME: nightly-dependency-updates +permissions: + id-token: write + contents: write + pull-requests: write + jobs: update-dependencies: runs-on: ubuntu-latest outputs: has_changes: ${{ steps.check_changes.outputs.has_changes }} - otel_java_instrumentation_version: ${{ steps.update_deps.outputs.otel_java_instrumentation_version }} - otel_java_contrib_version: ${{ steps.update_deps.outputs.otel_java_contrib_version }} + otel_java_instrumentation_version: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }} + otel_java_contrib_version: ${{ steps.get_versions.outputs.otel_java_contrib_version }} breaking_changes_info: ${{ steps.breaking_changes.outputs.breaking_changes_info }} steps: @@ -34,10 +31,31 @@ jobs: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - - name: Configure git + - name: Set up Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0 + with: + python-version: '3.x' + + - name: Install build tools run: | - git config --local user.email "action@github.com" - git config --local user.name "GitHub Action" + python -m pip install --upgrade pip + pip install requests packaging + + - name: Get latest upstream versions + id: get_versions + run: python scripts/get_upstream_versions.py + + - name: Check for breaking changes + id: breaking_changes + env: + OTEL_JAVA_INSTRUMENTATION_VERSION: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }} + OTEL_JAVA_CONTRIB_VERSION: ${{ steps.get_versions.outputs.otel_java_contrib_version }} + run: python scripts/find_breaking_changes.py + + - name: Setup Git + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" - name: Check out dependency update branch run: | @@ -49,21 +67,11 @@ jobs: git checkout -b "$BRANCH_NAME" fi - - name: Set up Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0 - with: - python-version: '3.11' - - - name: Install Python dependencies - run: pip install requests packaging - - - name: Generate breaking changes summary - id: breaking_changes - run: python3 scripts/find_breaking_changes.py - - name: Update dependencies - id: update_deps - run: python3 scripts/update_dependencies.py + env: + OTEL_JAVA_INSTRUMENTATION_VERSION: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }} + OTEL_JAVA_CONTRIB_VERSION: ${{ steps.get_versions.outputs.otel_java_contrib_version }} + run: python scripts/update_dependencies.py - name: Check for changes and commit id: check_changes @@ -75,8 +83,8 @@ jobs: echo "Dependencies were updated" echo "has_changes=true" >> $GITHUB_OUTPUT - git add dependencyManagement/build.gradle.kts - git commit -m "chore: update OpenTelemetry dependencies to latest versions" + git add . + git commit -m "chore: update OpenTelemetry dependencies to ${{ steps.get_versions.outputs.otel_java_instrumentation_version }}/${{ steps.get_versions.outputs.otel_java_contrib_version }}" git push origin "$BRANCH_NAME" fi @@ -85,8 +93,10 @@ jobs: if: needs.update-dependencies.outputs.has_changes == 'true' uses: ./.github/workflows/main-build.yml secrets: inherit + permissions: + id-token: write + contents: read with: - caller-workflow-name: nightly-build ref: nightly-dependency-updates create-pr: @@ -124,7 +134,7 @@ jobs: else echo "Creating new PR..." gh pr create \ - --title "Nightly dependency update: OpenTelemetry packages to latest versions" \ + --title "Nightly dependency update: OpenTelemetry ${{ needs.update-dependencies.outputs.otel_java_instrumentation_version }}/${{ needs.update-dependencies.outputs.otel_java_contrib_version }}" \ --body "$PR_BODY" \ --base main \ --head "$BRANCH_NAME" @@ -141,7 +151,7 @@ jobs: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 with: - role-to-assume: ${{ secrets.METRICS_ROLE_ARN }} + role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }} aws-region: ${{ env.AWS_DEFAULT_REGION }} - name: Publish nightly build status diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py index 295696cbb6..bb7378d30b 100644 --- a/scripts/find_breaking_changes.py +++ b/scripts/find_breaking_changes.py @@ -1,26 +1,34 @@ #!/usr/bin/env python3 +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 +import os import re -import requests import sys + +import requests from packaging import version -def get_current_versions(): - """Get current versions from build.gradle.kts.""" +def get_current_version_from_gradle(): + """Extract current OpenTelemetry versions from build.gradle.kts.""" try: with open("dependencyManagement/build.gradle.kts", "r", encoding="utf-8") as file: content = file.read() - # Extract otelVersion + # Extract otelVersion (instrumentation version) otel_version_match = re.search(r'val otelVersion = "([^"]*)"', content) current_instrumentation_version = otel_version_match.group(1) if otel_version_match else None - return current_instrumentation_version + # Extract contrib version from dependency line + contrib_match = re.search(r'"io\.opentelemetry\.contrib:opentelemetry-aws-xray:([^"]*)",', content) + current_contrib_version = contrib_match.group(1) if contrib_match else None + + return current_instrumentation_version, current_contrib_version except (OSError, IOError) as error: print(f"Error reading current versions: {error}") - return None + return None, None def get_releases_with_breaking_changes(repo, current_version, new_version): @@ -44,10 +52,9 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): <= version.parse(new_version) ): - # Check if release notes have breaking changes as headers + # Check if release notes have breaking changes header or bold text body = release.get("body", "") - breaking_header_pattern = r'^\s*#+.*Breaking changes' - if re.search(breaking_header_pattern, body, re.MULTILINE): + if re.search(r"^(#+|\*\*)\s*breaking changes", body, re.MULTILINE | re.IGNORECASE): breaking_releases.append( { "version": release_version, @@ -56,7 +63,8 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): "body": release.get("body", ""), } ) - except (ValueError, KeyError): + except (ValueError, KeyError) as parse_error: + print(f"Warning: Skipping release {release.get('name', 'unknown')} due to error: {parse_error}") continue return breaking_releases @@ -67,32 +75,32 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): def main(): - current_instrumentation_version = get_current_versions() + new_instrumentation_version = os.environ.get("OTEL_JAVA_INSTRUMENTATION_VERSION") + new_contrib_version = os.environ.get("OTEL_JAVA_CONTRIB_VERSION") - if not current_instrumentation_version: - print("Could not determine current versions") + if not new_instrumentation_version or not new_contrib_version: + print("Error: OTEL_JAVA_INSTRUMENTATION_VERSION and OTEL_JAVA_CONTRIB_VERSION environment variables required") sys.exit(1) - # Get new versions from the update script - sys.path.append('scripts') - from update_dependencies import get_latest_instrumentation_version, get_latest_contrib_version - - new_instrumentation_version = get_latest_instrumentation_version() - new_contrib_version = get_latest_contrib_version() + current_instrumentation_version, current_contrib_version = get_current_version_from_gradle() - if not new_instrumentation_version: - print("Could not determine new versions") + if not current_instrumentation_version: + print("Could not determine current versions") sys.exit(1) print("Checking for breaking changes:") print(f"Instrumentation: {current_instrumentation_version} → {new_instrumentation_version}") - if new_contrib_version: - print(f"Contrib: → {new_contrib_version}") + print(f"Contrib: {current_contrib_version or 'unknown'} → {new_contrib_version}") - # Check instrumentation repo for breaking changes + # Check both repos for breaking changes instrumentation_breaking = get_releases_with_breaking_changes( "opentelemetry-java-instrumentation", current_instrumentation_version, new_instrumentation_version ) + contrib_breaking = [] + if current_contrib_version: + contrib_breaking = get_releases_with_breaking_changes( + "opentelemetry-java-contrib", current_contrib_version, new_contrib_version + ) # Output for GitHub Actions breaking_info = "" @@ -102,11 +110,12 @@ def main(): for release in instrumentation_breaking: breaking_info += f"- [{release['name']}]({release['url']})\n" - if new_contrib_version: - breaking_info += "\n**Check contrib releases for potential breaking changes:**\n" - breaking_info += "- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)\n" + if contrib_breaking: + breaking_info += "\n**opentelemetry-java-contrib:**\n" + for release in contrib_breaking: + breaking_info += f"- [{release['name']}]({release['url']})\n" - import os + # Set GitHub output if os.environ.get("GITHUB_OUTPUT"): with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output_file: output_file.write(f"breaking_changes_info<= 2: + next_minor = f"{version_parts[0]}.{int(version_parts[1]) + 1}.0" + otel_snapshot_pattern = r'val otelSnapshotVersion = "[^"]*"' + otel_snapshot_replacement = f'val otelSnapshotVersion = "{next_minor}"' + if re.search(otel_snapshot_pattern, content): + new_content = re.sub(otel_snapshot_pattern, otel_snapshot_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated otelSnapshotVersion to {next_minor}") + + # Update contrib dependencies + for dep in CONTRIB_DEPS: + pattern = rf'"{re.escape(dep)}:[^"]*"' + replacement = f'"{dep}:{otel_contrib_version}"' + if re.search(pattern, content): + new_content = re.sub(pattern, replacement, content) if new_content != content: content = new_content updated = True - print(f"Updated otelVersion to {latest_instrumentation_version}") - - # Update otelSnapshotVersion (typically next minor version) - version_parts = latest_instrumentation_version.split('.') - if len(version_parts) >= 2: - next_minor = f"{version_parts[0]}.{int(version_parts[1]) + 1}.0" - otel_snapshot_pattern = r'val otelSnapshotVersion = "[^"]*"' - otel_snapshot_replacement = f'val otelSnapshotVersion = "{next_minor}"' - if re.search(otel_snapshot_pattern, content): - new_content = re.sub(otel_snapshot_pattern, otel_snapshot_replacement, content) - if new_content != content: - content = new_content - updated = True - print(f"Updated otelSnapshotVersion to {next_minor}") - - # Get latest contrib version from GitHub - latest_contrib_version = get_latest_contrib_version() - - contrib_packages = [ - ('io.opentelemetry.contrib', 'opentelemetry-aws-xray'), - ('io.opentelemetry.contrib', 'opentelemetry-aws-resources'), - ] - - for group_id, artifact_id in contrib_packages: - if latest_contrib_version: - # Pattern to match the dependency line - pattern = rf'"{re.escape(group_id)}:{re.escape(artifact_id)}:[^"]*"' - replacement = f'"{group_id}:{artifact_id}:{latest_contrib_version}"' - - if re.search(pattern, content): - new_content = re.sub(pattern, replacement, content) - if new_content != content: - content = new_content - updated = True - print(f"Updated {group_id}:{artifact_id} to {latest_contrib_version}") - - # Update remaining packages using Maven Central - other_packages = [ - ('io.opentelemetry', 'opentelemetry-extension-aws'), - ('io.opentelemetry.proto', 'opentelemetry-proto'), - ] - - for group_id, artifact_id in other_packages: - latest_version = get_latest_maven_version(group_id, artifact_id) - if latest_version: - # Pattern to match the dependency line - pattern = rf'"{re.escape(group_id)}:{re.escape(artifact_id)}:[^"]*"' - replacement = f'"{group_id}:{artifact_id}:{latest_version}"' - - if re.search(pattern, content): - new_content = re.sub(pattern, replacement, content) - if new_content != content: - content = new_content - updated = True - print(f"Updated {group_id}:{artifact_id} to {latest_version}") - + print(f"Updated {dep} to {otel_contrib_version}") + if updated: - with open(file_path, 'w', encoding='utf-8') as output_file: + with open(file_path, "w", encoding="utf-8") as output_file: output_file.write(content) - print("Dependencies updated successfully") - return True - else: - print("No OpenTelemetry dependencies needed updating") - return False - + print(f"Updated {file_path}") + + return updated except (OSError, IOError) as file_error: - print(f"Error updating dependencies: {file_error}") - sys.exit(1) + print(f"Error updating {file_path}: {file_error}") + return False def main(): - # Get versions for GitHub outputs - latest_instrumentation_version = get_latest_instrumentation_version() - latest_contrib_version = get_latest_contrib_version() - - # Set GitHub outputs - import os - if os.environ.get('GITHUB_OUTPUT'): - with open(os.environ['GITHUB_OUTPUT'], 'a') as f: - if latest_instrumentation_version: - f.write(f"otel_java_instrumentation_version={latest_instrumentation_version}\n") - if latest_contrib_version: - f.write(f"otel_java_contrib_version={latest_contrib_version}\n") - - gradle_file_path = 'dependencyManagement/build.gradle.kts' - - updated = update_gradle_file(gradle_file_path) - - if not updated: - print("No updates were made") - -if __name__ == '__main__': + otel_instrumentation_version = os.environ.get("OTEL_JAVA_INSTRUMENTATION_VERSION") + otel_contrib_version = os.environ.get("OTEL_JAVA_CONTRIB_VERSION") + + if not otel_instrumentation_version or not otel_contrib_version: + print("Error: OTEL_JAVA_INSTRUMENTATION_VERSION and OTEL_JAVA_CONTRIB_VERSION environment variables required") + sys.exit(1) + + # Files to update + files_to_update = [ + "dependencyManagement/build.gradle.kts", + ] + + any_updated = False + for file_path in files_to_update: + if update_file_dependencies(file_path, otel_instrumentation_version, otel_contrib_version): + any_updated = True + + if any_updated: + print(f"Dependencies updated to Instrumentation {otel_instrumentation_version} / Contrib {otel_contrib_version}") + else: + print("No OpenTelemetry dependencies found to update") + +if __name__ == "__main__": main() From 65f7fdee4c9b0576c7f1dc39c624ca81cdccc5f9 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 18:38:14 -0800 Subject: [PATCH 17/26] add manual trigger --- .github/workflows/nightly-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index cfe6c41d43..d6b9822798 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -5,6 +5,9 @@ on: schedule: - cron: "21 3 * * *" workflow_dispatch: + push: + branches: + - zhaez/nightly-build env: AWS_DEFAULT_REGION: us-east-1 From 6f3154cc55c7c9b81ac1f7c8b37671b51c2a2923 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 18:40:46 -0800 Subject: [PATCH 18/26] add caller workflow --- .github/workflows/nightly-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index d6b9822798..d011d233b5 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -101,6 +101,7 @@ jobs: contents: read with: ref: nightly-dependency-updates + caller-workflow-name: 'nightly-build' create-pr: needs: [update-dependencies, build-and-test] From 842ff18b51c71831979953b2dcbab370fb7d62e3 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 18:58:47 -0800 Subject: [PATCH 19/26] fix main build --- .github/workflows/main-build.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index eba1156676..d4c4e19bdc 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -1,20 +1,17 @@ name: Java Agent Main Build on: + push: + branches: + - main + - "release/v*" + workflow_dispatch: # be able to run the workflow on demand workflow_call: inputs: - caller-workflow-name: - required: true - type: string ref: description: 'The branch, tag or SHA to checkout' required: false type: string default: '' - push: - branches: - - main - - "release/v*" - workflow_dispatch: # be able to run the workflow on demand env: AWS_DEFAULT_REGION: us-east-1 STAGING_ECR_REGISTRY: 611364707713.dkr.ecr.us-west-2.amazonaws.com @@ -283,7 +280,7 @@ jobs: name: "Publish Main Build Status" needs: [ build, e2e-test, contract-tests, application-signals-lambda-layer-build, application-signals-e2e-test ] runs-on: ubuntu-latest - if: always() + if: always() && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/v')) steps: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 From a31d4fde5cbb86c6e82697ccf2ea61a7912ed978 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 19:32:46 -0800 Subject: [PATCH 20/26] fix update_dependencies --- scripts/update_dependencies.py | 72 +++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/scripts/update_dependencies.py b/scripts/update_dependencies.py index c5244a3727..c717015aac 100644 --- a/scripts/update_dependencies.py +++ b/scripts/update_dependencies.py @@ -6,23 +6,6 @@ import re import sys -# Dependencies that use the instrumentation version -INSTRUMENTATION_DEPS = [ - "io.opentelemetry.javaagent:opentelemetry-javaagent", -] - -# Dependencies that use the contrib version -CONTRIB_DEPS = [ - "io.opentelemetry.contrib:opentelemetry-aws-xray", - "io.opentelemetry.contrib:opentelemetry-aws-resources", -] - -# Other OpenTelemetry dependencies with independent versioning -OTHER_OTEL_DEPS = [ - "io.opentelemetry:opentelemetry-extension-aws", - "io.opentelemetry.proto:opentelemetry-proto", -] - def update_file_dependencies(file_path, otel_instrumentation_version, otel_contrib_version): """Update all OpenTelemetry dependencies in a given file""" try: @@ -33,13 +16,14 @@ def update_file_dependencies(file_path, otel_instrumentation_version, otel_contr # Update otelVersion variable otel_version_pattern = r'val otelVersion = "[^"]*"' - otel_version_replacement = f'val otelVersion = "{otel_instrumentation_version}"' + otel_version_with_suffix = f"{otel_instrumentation_version}-adot1" + otel_version_replacement = f'val otelVersion = "{otel_version_with_suffix}"' if re.search(otel_version_pattern, content): new_content = re.sub(otel_version_pattern, otel_version_replacement, content) if new_content != content: content = new_content updated = True - print(f"Updated otelVersion to {otel_instrumentation_version}") + print(f"Updated otelVersion to {otel_version_with_suffix}") # Update otelSnapshotVersion (typically next minor version) version_parts = otel_instrumentation_version.split(".") @@ -54,16 +38,49 @@ def update_file_dependencies(file_path, otel_instrumentation_version, otel_contr updated = True print(f"Updated otelSnapshotVersion to {next_minor}") - # Update contrib dependencies - for dep in CONTRIB_DEPS: - pattern = rf'"{re.escape(dep)}:[^"]*"' - replacement = f'"{dep}:{otel_contrib_version}"' - if re.search(pattern, content): - new_content = re.sub(pattern, replacement, content) + # Update opentelemetry-aws-xray with -adot1 suffix + xray_pattern = r'"io\.opentelemetry\.contrib:opentelemetry-aws-xray:[^"]*"' + xray_version = f"{otel_contrib_version}-adot1" + xray_replacement = f'"io.opentelemetry.contrib:opentelemetry-aws-xray:{xray_version}"' + if re.search(xray_pattern, content): + new_content = re.sub(xray_pattern, xray_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated opentelemetry-aws-xray to {xray_version}") + + # Update opentelemetry-aws-resources with -alpha suffix + resources_pattern = r'"io\.opentelemetry\.contrib:opentelemetry-aws-resources:[^"]*"' + resources_version = f"{otel_contrib_version}-alpha" + resources_replacement = f'"io.opentelemetry.contrib:opentelemetry-aws-resources:{resources_version}"' + if re.search(resources_pattern, content): + new_content = re.sub(resources_pattern, resources_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated opentelemetry-aws-resources to {resources_version}") + + # Update .github/patches/versions file + if file_path == ".github/patches/versions": + # Update OTEL_JAVA_INSTRUMENTATION_VERSION + instrumentation_pattern = r'OTEL_JAVA_INSTRUMENTATION_VERSION=v[^\n]*' + instrumentation_replacement = f'OTEL_JAVA_INSTRUMENTATION_VERSION=v{otel_instrumentation_version}' + if re.search(instrumentation_pattern, content): + new_content = re.sub(instrumentation_pattern, instrumentation_replacement, content) + if new_content != content: + content = new_content + updated = True + print(f"Updated OTEL_JAVA_INSTRUMENTATION_VERSION to v{otel_instrumentation_version}") + + # Update OTEL_JAVA_CONTRIB_VERSION + contrib_pattern = r'OTEL_JAVA_CONTRIB_VERSION=v[^\n]*' + contrib_replacement = f'OTEL_JAVA_CONTRIB_VERSION=v{otel_contrib_version}' + if re.search(contrib_pattern, content): + new_content = re.sub(contrib_pattern, contrib_replacement, content) if new_content != content: content = new_content updated = True - print(f"Updated {dep} to {otel_contrib_version}") + print(f"Updated OTEL_JAVA_CONTRIB_VERSION to v{otel_contrib_version}") if updated: with open(file_path, "w", encoding="utf-8") as output_file: @@ -86,6 +103,7 @@ def main(): # Files to update files_to_update = [ "dependencyManagement/build.gradle.kts", + ".github/patches/versions", ] any_updated = False @@ -94,7 +112,7 @@ def main(): any_updated = True if any_updated: - print(f"Dependencies updated to Instrumentation {otel_instrumentation_version} / Contrib {otel_contrib_version}") + print(f"Dependencies updated to Instrumentation {otel_instrumentation_version}-adot1 / Contrib {otel_contrib_version} (with appropriate suffixes)") else: print("No OpenTelemetry dependencies found to update") From e5f1103333d53e08e41f03ef6477ce1c61ac1fb4 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 19:36:45 -0800 Subject: [PATCH 21/26] minor fix --- .github/workflows/nightly-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index d011d233b5..d6b9822798 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -101,7 +101,6 @@ jobs: contents: read with: ref: nightly-dependency-updates - caller-workflow-name: 'nightly-build' create-pr: needs: [update-dependencies, build-and-test] From 2673a37702bb5abbaf3e0cc1bb0a125ac4d2b58b Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 19:39:25 -0800 Subject: [PATCH 22/26] strip suffix from current veresion --- scripts/find_breaking_changes.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py index bb7378d30b..b8ddf61682 100644 --- a/scripts/find_breaking_changes.py +++ b/scripts/find_breaking_changes.py @@ -16,13 +16,17 @@ def get_current_version_from_gradle(): with open("dependencyManagement/build.gradle.kts", "r", encoding="utf-8") as file: content = file.read() - # Extract otelVersion (instrumentation version) + # Extract otelVersion (instrumentation version) and strip -adot1 suffix otel_version_match = re.search(r'val otelVersion = "([^"]*)"', content) current_instrumentation_version = otel_version_match.group(1) if otel_version_match else None + if current_instrumentation_version and current_instrumentation_version.endswith("-adot1"): + current_instrumentation_version = current_instrumentation_version[:-6] # Remove -adot1 - # Extract contrib version from dependency line + # Extract contrib version from dependency line and strip -adot1 suffix contrib_match = re.search(r'"io\.opentelemetry\.contrib:opentelemetry-aws-xray:([^"]*)",', content) current_contrib_version = contrib_match.group(1) if contrib_match else None + if current_contrib_version and current_contrib_version.endswith("-adot1"): + current_contrib_version = current_contrib_version[:-6] # Remove -adot1 return current_instrumentation_version, current_contrib_version From 69ac6e92994848b9c88cd2e8b536798fa315ea32 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Mon, 10 Nov 2025 19:54:17 -0800 Subject: [PATCH 23/26] update regex --- scripts/find_breaking_changes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/find_breaking_changes.py b/scripts/find_breaking_changes.py index b8ddf61682..3a8e9d49e2 100644 --- a/scripts/find_breaking_changes.py +++ b/scripts/find_breaking_changes.py @@ -58,7 +58,7 @@ def get_releases_with_breaking_changes(repo, current_version, new_version): # Check if release notes have breaking changes header or bold text body = release.get("body", "") - if re.search(r"^(#+|\*\*)\s*breaking changes", body, re.MULTILINE | re.IGNORECASE): + if re.search(r"^\s*(#+|\*\*).*breaking changes", body, re.MULTILINE | re.IGNORECASE): breaking_releases.append( { "version": release_version, From b4f6d7ec9b0c095e4462c206edd7f5ce5054c96e Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 11 Nov 2025 10:03:30 -0800 Subject: [PATCH 24/26] minor fixes --- .github/workflows/main-build.yml | 1 - scripts/get_upstream_versions.py | 4 ---- 2 files changed, 5 deletions(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index d4c4e19bdc..4da7bcd32c 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -11,7 +11,6 @@ on: description: 'The branch, tag or SHA to checkout' required: false type: string - default: '' env: AWS_DEFAULT_REGION: us-east-1 STAGING_ECR_REGISTRY: 611364707713.dkr.ecr.us-west-2.amazonaws.com diff --git a/scripts/get_upstream_versions.py b/scripts/get_upstream_versions.py index d167e27579..9e25505bad 100644 --- a/scripts/get_upstream_versions.py +++ b/scripts/get_upstream_versions.py @@ -41,10 +41,6 @@ def get_latest_otel_versions(): otel_java_contrib_version = version_match.group(1) break - if not otel_java_contrib_version: - print("Warning: No stable contrib releases found") - otel_java_contrib_version = "1.48.0" # fallback - return otel_java_instrumentation_version, otel_java_contrib_version except requests.RequestException as request_error: From 73df7fbb6a7d0c5c8a22c5759f35ea7bc184f354 Mon Sep 17 00:00:00 2001 From: Eric Zhang Date: Tue, 11 Nov 2025 10:09:52 -0800 Subject: [PATCH 25/26] fix credentials for metric --- .github/workflows/nightly-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index d6b9822798..27cc1833a4 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -154,7 +154,7 @@ jobs: - name: Configure AWS Credentials for emitting metrics uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 with: - role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }} + role-to-assume: ${{ secrets.METRICS_ROLE_ARN }} aws-region: ${{ env.AWS_DEFAULT_REGION }} - name: Publish nightly build status From 68dbc443f64df9e16730f0a87fcc81f24d3cfb79 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 11 Nov 2025 18:10:28 +0000 Subject: [PATCH 26/26] chore: update OpenTelemetry dependencies to 2.21.0/1.51.0 --- .github/patches/versions | 4 ++-- dependencyManagement/build.gradle.kts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/patches/versions b/.github/patches/versions index 36dfee165f..b728dc5ebb 100644 --- a/.github/patches/versions +++ b/.github/patches/versions @@ -1,2 +1,2 @@ -OTEL_JAVA_INSTRUMENTATION_VERSION=v2.20.1 -OTEL_JAVA_CONTRIB_VERSION=v1.48.0 \ No newline at end of file +OTEL_JAVA_INSTRUMENTATION_VERSION=v2.21.0 +OTEL_JAVA_CONTRIB_VERSION=v1.51.0 \ No newline at end of file diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 6ca4ff5591..96b51d8a72 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -27,8 +27,8 @@ data class DependencySet(val group: String, val version: String, val modules: Li val testSnapshots = rootProject.findProperty("testUpstreamSnapshots") == "true" // This is the version of the upstream instrumentation BOM -val otelVersion = "2.20.1-adot1" -val otelSnapshotVersion = "2.21.0" +val otelVersion = "2.21.0-adot1" +val otelSnapshotVersion = "2.22.0" val otelAlphaVersion = if (!testSnapshots) "$otelVersion-alpha" else "$otelSnapshotVersion-alpha-SNAPSHOT" val otelJavaAgentVersion = if (!testSnapshots) otelVersion else "$otelSnapshotVersion-SNAPSHOT" // All versions below are only used in testing and do not affect the released artifact. @@ -77,8 +77,8 @@ val dependencyLists = listOf( "commons-logging:commons-logging:1.2", "com.sparkjava:spark-core:2.9.4", "com.squareup.okhttp3:okhttp:4.12.0", - "io.opentelemetry.contrib:opentelemetry-aws-xray:1.48.0-adot1", - "io.opentelemetry.contrib:opentelemetry-aws-resources:1.48.0-alpha", + "io.opentelemetry.contrib:opentelemetry-aws-xray:1.51.0-adot1", + "io.opentelemetry.contrib:opentelemetry-aws-resources:1.51.0-alpha", "io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha", "io.opentelemetry.javaagent:opentelemetry-javaagent:$otelJavaAgentVersion", "io.opentelemetry:opentelemetry-extension-aws:1.20.1",