Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
4c4c8bd
add script to bump dependencies
ezhang6811 Sep 24, 2025
5d6b7c9
add nightly build workflow
ezhang6811 Sep 24, 2025
807dc85
let main build run on nightly build branch
ezhang6811 Sep 24, 2025
6ffee3a
Revert "let main build run on nightly build branch"
ezhang6811 Sep 25, 2025
8c11228
update dependency upgrade script to use github releases
ezhang6811 Sep 25, 2025
7cad67f
add script to find breaking changes
ezhang6811 Sep 26, 2025
8f42024
have nightly build call main build
ezhang6811 Sep 26, 2025
05402c0
fix branching and PR logic
ezhang6811 Sep 26, 2025
1f711a2
add push trigger for testing
ezhang6811 Sep 26, 2025
60a7b99
extract scripts for getting upstream versions
ezhang6811 Sep 26, 2025
9cb1714
match more patterns for breaking changes
ezhang6811 Sep 26, 2025
ca0a2ee
use regex matching for breaking changes header
ezhang6811 Sep 26, 2025
9aa1b70
fetch more pages from contrib repo
ezhang6811 Sep 26, 2025
a09a92d
log contrib releases found
ezhang6811 Sep 26, 2025
de00bef
add log
ezhang6811 Sep 26, 2025
2c39cd7
fix tag parsing for contrib packages
ezhang6811 Sep 26, 2025
53d199c
fix PR breaking change formatting
ezhang6811 Sep 26, 2025
895b495
publish metric for nightly build outcome
ezhang6811 Sep 26, 2025
b6df6cb
remove untracked script
ezhang6811 Sep 26, 2025
b3ee1b1
update script comments
ezhang6811 Sep 26, 2025
d6341c2
Merge branch 'main' into zhaez/nightly-build
ezhang6811 Nov 5, 2025
25e392e
refactor workflow order
ezhang6811 Nov 5, 2025
ed6a13d
link to latest releases
ezhang6811 Nov 8, 2025
64ccea1
use npm for contrib packages
ezhang6811 Nov 8, 2025
e285ca8
remove contrib version fetching
ezhang6811 Nov 8, 2025
d66f779
use npm for contrib breaking changes
ezhang6811 Nov 8, 2025
3efdb14
exit early if functions fail to execute
ezhang6811 Nov 8, 2025
2ecf182
add logging for contrib breaking changes
ezhang6811 Nov 8, 2025
03ee8dd
specify contrib packages
ezhang6811 Nov 8, 2025
b3c7c58
reduce number of releases fetched
ezhang6811 Nov 8, 2025
74622ab
minor changes
ezhang6811 Nov 10, 2025
29092d9
remove redundant version fetching
ezhang6811 Nov 10, 2025
c93e51a
remove api-events and sdk-events
ezhang6811 Nov 10, 2025
082f7bc
only print updated dependencies
ezhang6811 Nov 10, 2025
46782c3
remove unnecessary logs
ezhang6811 Nov 10, 2025
72e66b4
fail workflow at certain points when needed
ezhang6811 Nov 10, 2025
98ac615
Merge branch 'main' into zhaez/nightly-build
ezhang6811 Nov 27, 2025
8e9e373
minor fixes
ezhang6811 Nov 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .github/workflows/main-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ on:
- main
- "release/v*"
workflow_dispatch:
workflow_call:
inputs:
ref:
description: 'The branch, tag or SHA to checkout'
required: false
type: string

env:
AWS_DEFAULT_REGION: us-east-1
Expand Down Expand Up @@ -34,6 +40,8 @@ jobs:
steps:
- name: Checkout Contrib Repo @ SHA - ${{ github.sha }}
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0
with:
ref: ${{ inputs.ref || github.sha }}

- name: Get Node Distro Output
id: node_output
Expand Down Expand Up @@ -109,7 +117,7 @@ jobs:
name: "Publish Main Build Status"
needs: [ 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
Expand Down
183 changes: 183 additions & 0 deletions .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
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:
- cron: "21 3 * * *"
workflow_dispatch:
push:
branches:
- zhaez/nightly-build
Copy link
Contributor Author

Choose a reason for hiding this comment

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

will remove after testing finalized

Comment on lines +8 to +10
Copy link
Contributor

Choose a reason for hiding this comment

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

Remove


env:
AWS_DEFAULT_REGION: us-east-1
BRANCH_NAME: nightly-dependency-updates

permissions:
contents: write
pull-requests: write
id-token: write

jobs:
update-dependencies:
runs-on: ubuntu-latest
outputs:
has_changes: ${{ steps.check_changes.outputs.has_changes }}
otel_js_core_version: ${{ steps.get_versions.outputs.otel_js_core_version }}
otel_js_experimental_version: ${{ steps.get_versions.outputs.otel_js_experimental_version }}
otel_js_api_version: ${{ steps.get_versions.outputs.otel_js_api_version }}
otel_js_semconv_version: ${{ steps.get_versions.outputs.otel_js_semconv_version }}
breaking_changes_info: ${{ steps.breaking_changes.outputs.breaking_changes_info }}

steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 #v5.0.0
with:
node-version: '18'

- name: Get latest upstream versions
id: get_versions
run: node scripts/get_upstream_versions.js

- name: Check for breaking changes
id: breaking_changes
run: node scripts/find_breaking_changes.js
Comment on lines +48 to +50
Copy link
Contributor

Choose a reason for hiding this comment

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

Why no env?


- 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: |
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: Update dependencies
env:
OTEL_JS_CORE_VERSION: ${{ steps.get_versions.outputs.otel_js_core_version }}
OTEL_JS_EXPERIMENTAL_VERSION: ${{ steps.get_versions.outputs.otel_js_experimental_version }}
OTEL_JS_API_VERSION: ${{ steps.get_versions.outputs.otel_js_api_version }}
OTEL_JS_SEMCONV_VERSION: ${{ steps.get_versions.outputs.otel_js_semconv_version }}
run: node scripts/update_dependencies.js

- name: Install dependencies
run: npm install
Comment on lines +75 to +76
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this needed?


- name: Check for changes and commit
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 .
git commit -m "chore: update OpenTelemetry dependencies to latest versions"
Copy link
Contributor

Choose a reason for hiding this comment

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

Why 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
permissions:
id-token: write
contents: read
with:
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 #v5.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Create or update PR
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 }}"

VERSION_LIST=""
if [[ -n "${{ needs.update-dependencies.outputs.otel_js_core_version }}" ]]; then
VERSION_LIST+="- [OpenTelemetry JS Core](https://github.com/open-telemetry/opentelemetry-js/releases/tag/v${{ needs.update-dependencies.outputs.otel_js_core_version }}): ${{ needs.update-dependencies.outputs.otel_js_core_version }}\n"
fi
if [[ -n "${{ needs.update-dependencies.outputs.otel_js_experimental_version }}" ]]; then
VERSION_LIST+="- [OpenTelemetry JS Experimental](https://github.com/open-telemetry/opentelemetry-js/releases/tag/experimental/v${{ needs.update-dependencies.outputs.otel_js_experimental_version }}): ${{ needs.update-dependencies.outputs.otel_js_experimental_version }}\n"
fi
if [[ -n "${{ needs.update-dependencies.outputs.otel_js_api_version }}" ]]; then
VERSION_LIST+="- [OpenTelemetry JS API](https://github.com/open-telemetry/opentelemetry-js/releases/tag/api/v${{ needs.update-dependencies.outputs.otel_js_api_version }}): ${{ needs.update-dependencies.outputs.otel_js_api_version }}\n"
fi
if [[ -n "${{ needs.update-dependencies.outputs.otel_js_semconv_version }}" ]]; then
VERSION_LIST+="- [OpenTelemetry JS Semantic Conventions](https://github.com/open-telemetry/opentelemetry-js/releases/tag/semconv/v${{ needs.update-dependencies.outputs.otel_js_semconv_version }}): ${{ needs.update-dependencies.outputs.otel_js_semconv_version }}\n"
fi

PR_BODY="Automated update of OpenTelemetry dependencies.

**Build Status:** ${BUILD_EMOJI} [${BUILD_STATUS}](${BUILD_LINK})

**Updated versions:**
${VERSION_LIST}
**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
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 "$PR_BODY" \
--base main \
--head "$BRANCH_NAME"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

publish-nightly-build-status:
name: "Publish Nightly Build Status"
needs: [ update-dependencies, build-and-test, create-pr ]
runs-on: ubuntu-latest
if: always()
steps:
- name: Configure AWS Credentials for emitting metrics
uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #5.0.0
with:
role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }}
aws-region: ${{ env.AWS_DEFAULT_REGION }}

- name: Publish nightly build status
run: |
if [[ "${{ needs.build-and-test.result }}" == "skipped" ]]; then
echo "Build was skipped (no changes)"
value="0.0"
else
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
Loading