Skip to content

Commit de3d22a

Browse files
committed
parity with python nightly build
1 parent 28730e0 commit de3d22a

File tree

4 files changed

+233
-231
lines changed

4 files changed

+233
-231
lines changed

.github/workflows/nightly-build.yml

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,23 @@ on:
55
schedule:
66
- cron: "21 3 * * *"
77
workflow_dispatch:
8-
push:
9-
branches:
10-
- zhaez/nightly-build
11-
12-
permissions:
13-
contents: write
14-
pull-requests: write
15-
id-token: write
168

179
env:
1810
AWS_DEFAULT_REGION: us-east-1
1911
BRANCH_NAME: nightly-dependency-updates
2012

13+
permissions:
14+
id-token: write
15+
contents: write
16+
pull-requests: write
17+
2118
jobs:
2219
update-dependencies:
2320
runs-on: ubuntu-latest
2421
outputs:
2522
has_changes: ${{ steps.check_changes.outputs.has_changes }}
26-
otel_java_instrumentation_version: ${{ steps.update_deps.outputs.otel_java_instrumentation_version }}
27-
otel_java_contrib_version: ${{ steps.update_deps.outputs.otel_java_contrib_version }}
23+
otel_java_instrumentation_version: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }}
24+
otel_java_contrib_version: ${{ steps.get_versions.outputs.otel_java_contrib_version }}
2825
breaking_changes_info: ${{ steps.breaking_changes.outputs.breaking_changes_info }}
2926

3027
steps:
@@ -34,10 +31,31 @@ jobs:
3431
fetch-depth: 0
3532
token: ${{ secrets.GITHUB_TOKEN }}
3633

37-
- name: Configure git
34+
- name: Set up Python
35+
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0
36+
with:
37+
python-version: '3.x'
38+
39+
- name: Install build tools
3840
run: |
39-
git config --local user.email "[email protected]"
40-
git config --local user.name "GitHub Action"
41+
python -m pip install --upgrade pip
42+
pip install requests packaging
43+
44+
- name: Get latest upstream versions
45+
id: get_versions
46+
run: python scripts/get_upstream_versions.py
47+
48+
- name: Check for breaking changes
49+
id: breaking_changes
50+
env:
51+
OTEL_JAVA_INSTRUMENTATION_VERSION: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }}
52+
OTEL_JAVA_CONTRIB_VERSION: ${{ steps.get_versions.outputs.otel_java_contrib_version }}
53+
run: python scripts/find_breaking_changes.py
54+
55+
- name: Setup Git
56+
run: |
57+
git config user.name "github-actions"
58+
git config user.email "[email protected]"
4159
4260
- name: Check out dependency update branch
4361
run: |
@@ -49,21 +67,11 @@ jobs:
4967
git checkout -b "$BRANCH_NAME"
5068
fi
5169
52-
- name: Set up Python
53-
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c #v6.0.0
54-
with:
55-
python-version: '3.11'
56-
57-
- name: Install Python dependencies
58-
run: pip install requests packaging
59-
60-
- name: Generate breaking changes summary
61-
id: breaking_changes
62-
run: python3 scripts/find_breaking_changes.py
63-
6470
- name: Update dependencies
65-
id: update_deps
66-
run: python3 scripts/update_dependencies.py
71+
env:
72+
OTEL_JAVA_INSTRUMENTATION_VERSION: ${{ steps.get_versions.outputs.otel_java_instrumentation_version }}
73+
OTEL_JAVA_CONTRIB_VERSION: ${{ steps.get_versions.outputs.otel_java_contrib_version }}
74+
run: python scripts/update_dependencies.py
6775

6876
- name: Check for changes and commit
6977
id: check_changes
@@ -75,8 +83,8 @@ jobs:
7583
echo "Dependencies were updated"
7684
echo "has_changes=true" >> $GITHUB_OUTPUT
7785
78-
git add dependencyManagement/build.gradle.kts
79-
git commit -m "chore: update OpenTelemetry dependencies to latest versions"
86+
git add .
87+
git commit -m "chore: update OpenTelemetry dependencies to ${{ steps.get_versions.outputs.otel_java_instrumentation_version }}/${{ steps.get_versions.outputs.otel_java_contrib_version }}"
8088
git push origin "$BRANCH_NAME"
8189
fi
8290
@@ -85,8 +93,10 @@ jobs:
8593
if: needs.update-dependencies.outputs.has_changes == 'true'
8694
uses: ./.github/workflows/main-build.yml
8795
secrets: inherit
96+
permissions:
97+
id-token: write
98+
contents: read
8899
with:
89-
caller-workflow-name: nightly-build
90100
ref: nightly-dependency-updates
91101

92102
create-pr:
@@ -124,7 +134,7 @@ jobs:
124134
else
125135
echo "Creating new PR..."
126136
gh pr create \
127-
--title "Nightly dependency update: OpenTelemetry packages to latest versions" \
137+
--title "Nightly dependency update: OpenTelemetry ${{ needs.update-dependencies.outputs.otel_java_instrumentation_version }}/${{ needs.update-dependencies.outputs.otel_java_contrib_version }}" \
128138
--body "$PR_BODY" \
129139
--base main \
130140
--head "$BRANCH_NAME"
@@ -141,7 +151,7 @@ jobs:
141151
- name: Configure AWS Credentials for emitting metrics
142152
uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0
143153
with:
144-
role-to-assume: ${{ secrets.METRICS_ROLE_ARN }}
154+
role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }}
145155
aws-region: ${{ env.AWS_DEFAULT_REGION }}
146156

147157
- name: Publish nightly build status

scripts/find_breaking_changes.py

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
#!/usr/bin/env python3
2+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
# SPDX-License-Identifier: Apache-2.0
24

5+
import os
36
import re
4-
import requests
57
import sys
8+
9+
import requests
610
from packaging import version
711

812

9-
def get_current_versions():
10-
"""Get current versions from build.gradle.kts."""
13+
def get_current_version_from_gradle():
14+
"""Extract current OpenTelemetry versions from build.gradle.kts."""
1115
try:
1216
with open("dependencyManagement/build.gradle.kts", "r", encoding="utf-8") as file:
1317
content = file.read()
1418

15-
# Extract otelVersion
19+
# Extract otelVersion (instrumentation version)
1620
otel_version_match = re.search(r'val otelVersion = "([^"]*)"', content)
1721
current_instrumentation_version = otel_version_match.group(1) if otel_version_match else None
1822

19-
return current_instrumentation_version
23+
# Extract contrib version from dependency line
24+
contrib_match = re.search(r'"io\.opentelemetry\.contrib:opentelemetry-aws-xray:([^"]*)",', content)
25+
current_contrib_version = contrib_match.group(1) if contrib_match else None
26+
27+
return current_instrumentation_version, current_contrib_version
2028

2129
except (OSError, IOError) as error:
2230
print(f"Error reading current versions: {error}")
23-
return None
31+
return None, None
2432

2533

2634
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):
4452
<= version.parse(new_version)
4553
):
4654

47-
# Check if release notes have breaking changes as headers
55+
# Check if release notes have breaking changes header or bold text
4856
body = release.get("body", "")
49-
breaking_header_pattern = r'^\s*#+.*Breaking changes'
50-
if re.search(breaking_header_pattern, body, re.MULTILINE):
57+
if re.search(r"^(#+|\*\*)\s*breaking changes", body, re.MULTILINE | re.IGNORECASE):
5158
breaking_releases.append(
5259
{
5360
"version": release_version,
@@ -56,7 +63,8 @@ def get_releases_with_breaking_changes(repo, current_version, new_version):
5663
"body": release.get("body", ""),
5764
}
5865
)
59-
except (ValueError, KeyError):
66+
except (ValueError, KeyError) as parse_error:
67+
print(f"Warning: Skipping release {release.get('name', 'unknown')} due to error: {parse_error}")
6068
continue
6169

6270
return breaking_releases
@@ -67,32 +75,32 @@ def get_releases_with_breaking_changes(repo, current_version, new_version):
6775

6876

6977
def main():
70-
current_instrumentation_version = get_current_versions()
78+
new_instrumentation_version = os.environ.get("OTEL_JAVA_INSTRUMENTATION_VERSION")
79+
new_contrib_version = os.environ.get("OTEL_JAVA_CONTRIB_VERSION")
7180

72-
if not current_instrumentation_version:
73-
print("Could not determine current versions")
81+
if not new_instrumentation_version or not new_contrib_version:
82+
print("Error: OTEL_JAVA_INSTRUMENTATION_VERSION and OTEL_JAVA_CONTRIB_VERSION environment variables required")
7483
sys.exit(1)
7584

76-
# Get new versions from the update script
77-
sys.path.append('scripts')
78-
from update_dependencies import get_latest_instrumentation_version, get_latest_contrib_version
79-
80-
new_instrumentation_version = get_latest_instrumentation_version()
81-
new_contrib_version = get_latest_contrib_version()
85+
current_instrumentation_version, current_contrib_version = get_current_version_from_gradle()
8286

83-
if not new_instrumentation_version:
84-
print("Could not determine new versions")
87+
if not current_instrumentation_version:
88+
print("Could not determine current versions")
8589
sys.exit(1)
8690

8791
print("Checking for breaking changes:")
8892
print(f"Instrumentation: {current_instrumentation_version}{new_instrumentation_version}")
89-
if new_contrib_version:
90-
print(f"Contrib: → {new_contrib_version}")
93+
print(f"Contrib: {current_contrib_version or 'unknown'}{new_contrib_version}")
9194

92-
# Check instrumentation repo for breaking changes
95+
# Check both repos for breaking changes
9396
instrumentation_breaking = get_releases_with_breaking_changes(
9497
"opentelemetry-java-instrumentation", current_instrumentation_version, new_instrumentation_version
9598
)
99+
contrib_breaking = []
100+
if current_contrib_version:
101+
contrib_breaking = get_releases_with_breaking_changes(
102+
"opentelemetry-java-contrib", current_contrib_version, new_contrib_version
103+
)
96104

97105
# Output for GitHub Actions
98106
breaking_info = ""
@@ -102,11 +110,12 @@ def main():
102110
for release in instrumentation_breaking:
103111
breaking_info += f"- [{release['name']}]({release['url']})\n"
104112

105-
if new_contrib_version:
106-
breaking_info += "\n**Check contrib releases for potential breaking changes:**\n"
107-
breaking_info += "- [opentelemetry-java-contrib releases](https://github.com/open-telemetry/opentelemetry-java-contrib/releases)\n"
113+
if contrib_breaking:
114+
breaking_info += "\n**opentelemetry-java-contrib:**\n"
115+
for release in contrib_breaking:
116+
breaking_info += f"- [{release['name']}]({release['url']})\n"
108117

109-
import os
118+
# Set GitHub output
110119
if os.environ.get("GITHUB_OUTPUT"):
111120
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output_file:
112121
output_file.write(f"breaking_changes_info<<EOF\n{breaking_info}EOF\n")

scripts/get_upstream_versions.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/usr/bin/env python3
2+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
import os
6+
import re
7+
import sys
8+
9+
import requests
10+
11+
12+
def get_latest_otel_versions():
13+
"""Get latest OpenTelemetry versions from GitHub releases."""
14+
try:
15+
# Get latest instrumentation version
16+
response = requests.get(
17+
"https://api.github.com/repos/open-telemetry/opentelemetry-java-instrumentation/releases/latest", timeout=30
18+
)
19+
response.raise_for_status()
20+
21+
release_data = response.json()
22+
otel_java_instrumentation_version = release_data["tag_name"].lstrip("v")
23+
24+
# Get latest contrib version
25+
contrib_response = requests.get(
26+
"https://api.github.com/repos/open-telemetry/opentelemetry-java-contrib/releases", timeout=30
27+
)
28+
contrib_response.raise_for_status()
29+
30+
contrib_releases = contrib_response.json()
31+
otel_java_contrib_version = None
32+
33+
# Find the latest stable release
34+
for release in contrib_releases:
35+
if release.get("prerelease", False):
36+
continue
37+
38+
tag_name = release["tag_name"]
39+
version_match = re.match(r"^v?(\d+\.\d+\.\d+)$", tag_name)
40+
if version_match:
41+
otel_java_contrib_version = version_match.group(1)
42+
break
43+
44+
if not otel_java_contrib_version:
45+
print("Warning: No stable contrib releases found")
46+
otel_java_contrib_version = "1.48.0" # fallback
47+
48+
return otel_java_instrumentation_version, otel_java_contrib_version
49+
50+
except requests.RequestException as request_error:
51+
print(f"Error getting OpenTelemetry versions: {request_error}")
52+
sys.exit(1)
53+
54+
55+
def main():
56+
otel_java_instrumentation_version, otel_java_contrib_version = get_latest_otel_versions()
57+
58+
print(f"OTEL_JAVA_INSTRUMENTATION_VERSION={otel_java_instrumentation_version}")
59+
print(f"OTEL_JAVA_CONTRIB_VERSION={otel_java_contrib_version}")
60+
61+
# Write to GitHub output if in CI
62+
if "GITHUB_OUTPUT" in os.environ:
63+
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output_file:
64+
output_file.write(f"otel_java_instrumentation_version={otel_java_instrumentation_version}\n")
65+
output_file.write(f"otel_java_contrib_version={otel_java_contrib_version}\n")
66+
67+
68+
if __name__ == "__main__":
69+
main()

0 commit comments

Comments
 (0)