Skip to content

Commit b2592f4

Browse files
authored
Nightly metadata synchronizer Github action (#14335)
1 parent 9decdbe commit b2592f4

File tree

4 files changed

+274
-118
lines changed

4 files changed

+274
-118
lines changed

.github/workflows/metadata-update.yml

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
name: Metadata Update
2+
3+
on:
4+
workflow_dispatch: # allow this to be manually triggered
5+
schedule:
6+
- cron: "00 1 * * *" # daily at 1:00 UTC
7+
8+
permissions:
9+
contents: read
10+
11+
# Should only be one job running at a time to avoid conflicts with the metadata update branch
12+
concurrency:
13+
group: metadata-update
14+
cancel-in-progress: true
15+
16+
jobs:
17+
update:
18+
runs-on: ubuntu-latest
19+
permissions:
20+
contents: write # for git push to PR branch
21+
pull-requests: write # for adding label and assignee to PR
22+
23+
steps:
24+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
25+
26+
- name: Free disk space
27+
run: .github/scripts/gha-free-disk-space.sh
28+
29+
- name: Set up JDK for running Gradle
30+
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
31+
with:
32+
distribution: temurin
33+
java-version-file: .java-version
34+
35+
- name: Set up gradle
36+
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
37+
38+
- name: Collect telemetry
39+
run: ./instrumentation-docs/ci-collect.sh
40+
41+
- name: Run documentation analyzer
42+
run: ./gradlew :instrumentation-docs:runAnalysis
43+
44+
- name: Check for diff
45+
id: diffcheck
46+
run: |
47+
git add docs/instrumentation-list.yaml
48+
if ! git diff --cached --quiet; then
49+
echo "has_diff=true" >> $GITHUB_OUTPUT
50+
else
51+
echo "has_diff=false" >> $GITHUB_OUTPUT
52+
fi
53+
54+
- name: Use CLA approved github bot
55+
if: steps.diffcheck.outputs.has_diff == 'true'
56+
run: .github/scripts/use-cla-approved-bot.sh
57+
58+
- uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
59+
if: steps.diffcheck.outputs.has_diff == 'true'
60+
id: otelbot-token
61+
with:
62+
app-id: ${{ vars.OTELBOT_APP_ID }}
63+
private-key: ${{ secrets.OTELBOT_PRIVATE_KEY }}
64+
65+
- name: Find or create metadata update branch
66+
if: steps.diffcheck.outputs.has_diff == 'true'
67+
id: findbranch
68+
env:
69+
GH_TOKEN: ${{ steps.otelbot-token.outputs.token }}
70+
run: |
71+
BRANCH_NAME="metadata-update-main"
72+
echo "branch=$BRANCH_NAME" >> $GITHUB_OUTPUT
73+
if git ls-remote --exit-code --heads origin "$BRANCH_NAME"; then
74+
git fetch origin "$BRANCH_NAME"
75+
git checkout "$BRANCH_NAME"
76+
git merge origin/main --no-edit
77+
else
78+
git checkout -b "$BRANCH_NAME" origin/main
79+
fi
80+
81+
- name: Commit and push changes
82+
if: steps.diffcheck.outputs.has_diff == 'true'
83+
env:
84+
GH_TOKEN: ${{ steps.otelbot-token.outputs.token }}
85+
run: |
86+
BRANCH_NAME="${{ steps.findbranch.outputs.branch }}"
87+
git commit -m "chore: update instrumentation list [automated]" || echo "No changes to commit."
88+
git push origin "$BRANCH_NAME"
89+
90+
- name: Create PR if needed
91+
if: steps.diffcheck.outputs.has_diff == 'true'
92+
id: createpr
93+
env:
94+
GH_TOKEN: ${{ steps.otelbot-token.outputs.token }}
95+
run: |
96+
BRANCH_NAME="${{ steps.findbranch.outputs.branch }}"
97+
PR_EXISTS=$(gh pr list --state open --head "$BRANCH_NAME" --label automation --json url -q '.[0].url')
98+
if [ -z "$PR_EXISTS" ]; then
99+
gh pr create \
100+
--title "chore: update instrumentation list [automated]" \
101+
--body "This PR was created automatically by the metadata update workflow." \
102+
--head "$BRANCH_NAME" \
103+
--base main
104+
echo "new_pr=true" >> $GITHUB_OUTPUT
105+
else
106+
echo "PR already exists: $PR_EXISTS"
107+
echo "new_pr=false" >> $GITHUB_OUTPUT
108+
fi
109+
110+
- name: Add label to PR
111+
if: steps.createpr.outputs.new_pr == 'true'
112+
env:
113+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
114+
run: |
115+
BRANCH_NAME="${{ steps.findbranch.outputs.branch }}"
116+
PR_URL=$(gh pr list --state open --head "$BRANCH_NAME" --json url -q '.[0].url')
117+
if [ -n "$PR_URL" ]; then
118+
gh pr edit "$PR_URL" --add-label "automation" --add-assignee jaydeluca
119+
else
120+
echo "No open PR found for branch $BRANCH_NAME."
121+
fi

instrumentation-docs/ci-collect.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
3+
# Runs selected Gradle test tasks to regenerate *.telemetry output for
4+
# individual OpenTelemetry Java agent instrumentations.
5+
6+
set -euo pipefail
7+
8+
# shellcheck source=instrumentation-docs/instrumentations.sh
9+
source "$(dirname "$0")/instrumentations.sh"
10+
11+
ALL_TASKS=()
12+
for task in "${INSTRUMENTATIONS[@]}"; do
13+
ALL_TASKS+=(":instrumentation:${task}")
14+
done
15+
for task in "${COLIMA_INSTRUMENTATIONS[@]}"; do
16+
ALL_TASKS+=(":instrumentation:${task}")
17+
done
18+
19+
echo "Processing instrumentations..."
20+
./gradlew "${ALL_TASKS[@]}" \
21+
-PcollectMetadata=true \
22+
--rerun-tasks --continue
23+
echo "Telemetry file regeneration complete."

instrumentation-docs/collect.sh

Lines changed: 3 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -2,127 +2,12 @@
22

33
# Runs selected Gradle test tasks to regenerate *.telemetry output for
44
# individual OpenTelemetry Java agent instrumentations. Some instrumentation test suites don't run
5-
# on Apple Silicon, so we use colima to run them in an x86_64 container.
5+
# on ARM, so we use colima to run them in an x86_64 container.
66

77
set -euo pipefail
88

9-
readonly INSTRUMENTATIONS=(
10-
# <module path (colon-separated)> : <javaagent|library> : [ gradle-task-suffix ]
11-
"activej-http-6.0:javaagent:test"
12-
"akka:akka-http-10.0:javaagent:test"
13-
"armeria:armeria-grpc-1.14:javaagent:test"
14-
"apache-httpasyncclient-4.1:javaagent:test"
15-
"alibaba-druid-1.0:javaagent:test"
16-
"alibaba-druid-1.0:javaagent:testStableSemconv"
17-
"apache-dbcp-2.0:javaagent:test"
18-
"apache-dbcp-2.0:javaagent:testStableSemconv"
19-
"apache-httpclient:apache-httpclient-2.0:javaagent:test"
20-
"apache-httpclient:apache-httpclient-4.0:javaagent:test"
21-
"apache-httpclient:apache-httpclient-4.3:library:test"
22-
"apache-httpclient:apache-httpclient-5.0:javaagent:test"
23-
"apache-dubbo-2.7:javaagent:testDubbo"
24-
"c3p0-0.9:javaagent:test"
25-
"c3p0-0.9:javaagent:testStableSemconv"
26-
"clickhouse-client-0.5:javaagent:test"
27-
"clickhouse-client-0.5:javaagent:testStableSemconv"
28-
"aws-sdk:aws-sdk-1.11:javaagent:test"
29-
"google-http-client-1.19:javaagent:test"
30-
"http-url-connection:javaagent:test"
31-
"java-http-client:javaagent:test"
32-
"jetty-httpclient:jetty-httpclient-9.2:javaagent:test"
33-
"jetty-httpclient:jetty-httpclient-12.0:javaagent:test"
34-
"jodd-http-4.2:javaagent:test"
35-
"netty:netty-3.8:javaagent:test"
36-
"netty:netty-4.0:javaagent:test"
37-
"netty:netty-4.1:javaagent:test"
38-
"okhttp:okhttp-2.2:javaagent:test"
39-
"okhttp:okhttp-3.0:javaagent:test"
40-
"pekko:pekko-http-1.0:javaagent:test"
41-
"play:play-ws:play-ws-1.0:javaagent:test"
42-
"play:play-ws:play-ws-2.0:javaagent:test"
43-
"play:play-ws:play-ws-2.1:javaagent:test"
44-
"reactor:reactor-netty:reactor-netty-0.9:javaagent:test"
45-
"reactor:reactor-netty:reactor-netty-1.0:javaagent:test"
46-
"spring:spring-webflux:spring-webflux-5.0:javaagent:test"
47-
"vertx:vertx-http-client:vertx-http-client-3.0:javaagent:test"
48-
"vertx:vertx-http-client:vertx-http-client-4.0:javaagent:test"
49-
"vertx:vertx-http-client:vertx-http-client-5.0:javaagent:test"
50-
"vertx:vertx-redis-client-4.0:javaagent:test"
51-
"vertx:vertx-redis-client-4.0:javaagent:testStableSemconv"
52-
"vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:test"
53-
"vertx:vertx-sql-client:vertx-sql-client-4.0:javaagent:testStableSemconv"
54-
"vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:test"
55-
"vertx:vertx-sql-client:vertx-sql-client-5.0:javaagent:testStableSemconv"
56-
"aws-sdk:aws-sdk-1.11:javaagent:testStableSemconv"
57-
"aws-sdk:aws-sdk-2.2:javaagent:test"
58-
"aws-sdk:aws-sdk-2.2:javaagent:testStableSemconv"
59-
"aws-sdk:aws-sdk-2.2:javaagent:testBedrockRuntime"
60-
"hikaricp-3.0:javaagent:test"
61-
"hikaricp-3.0:javaagent:testStableSemconv"
62-
"tomcat:tomcat-jdbc:javaagent:test"
63-
"tomcat:tomcat-jdbc:javaagent:testStableSemconv"
64-
"oshi:javaagent:test"
65-
"oshi:javaagent:testExperimental"
66-
"vibur-dbcp-11.0:javaagent:test"
67-
"vibur-dbcp-11.0:javaagent:testStableSemconv"
68-
"elasticsearch:elasticsearch-api-client-7.16:javaagent:test"
69-
"elasticsearch:elasticsearch-api-client-7.16:javaagent:testStableSemconv"
70-
"elasticsearch:elasticsearch-rest-7.0:javaagent:test"
71-
"elasticsearch:elasticsearch-transport-5.0:javaagent:test"
72-
"elasticsearch:elasticsearch-transport-5.0:javaagent:testStableSemconv"
73-
"elasticsearch:elasticsearch-transport-5.0:javaagent:testExperimental"
74-
"elasticsearch:elasticsearch-transport-5.3:javaagent:test"
75-
"elasticsearch:elasticsearch-transport-5.3:javaagent:testStableSemconv"
76-
"elasticsearch:elasticsearch-transport-5.3:javaagent:testExperimental"
77-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch6Test"
78-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch6TestStableSemconv"
79-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch6TestExperimental"
80-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch65Test"
81-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch65TestStableSemconv"
82-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch65TestExperimental"
83-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch7Test"
84-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch7TestStableSemconv"
85-
"elasticsearch:elasticsearch-transport-6.0:javaagent:elasticsearch7TestExperimental"
86-
"apache-httpclient:apache-httpclient-5.2:library:test"
87-
"armeria:armeria-1.3:javaagent:test"
88-
"async-http-client:async-http-client-1.9:javaagent:test"
89-
"async-http-client:async-http-client-2.0:javaagent:test"
90-
"apache-dubbo-2.7:javaagent:testDubbo"
91-
"finagle-http-23.11:javaagent:test"
92-
"finatra-2.9:javaagent:test"
93-
"spring:spring-batch-3.0:javaagent:test"
94-
"spring:spring-data:spring-data-1.8:javaagent:test"
95-
"spring:spring-integration-4.1:javaagent:test"
96-
"spring:spring-integration-4.1:javaagent:testWithRabbitInstrumentation"
97-
"spring:spring-integration-4.1:javaagent:testWithProducerInstrumentation"
98-
"spring:spring-jms:spring-jms-2.0:javaagent:test"
99-
"spring:spring-kafka-2.7:javaagent:test"
100-
"spring:spring-kafka-2.7:javaagent:testNoReceiveTelemetry"
101-
"spring:spring-pulsar-1.0:javaagent:test"
102-
"spring:spring-rabbit-1.0:javaagent:test"
103-
"spring:spring-rmi-4.0:javaagent:test"
104-
"spring:spring-scheduling-3.1:javaagent:test"
105-
"spring:spring-scheduling-3.1:javaagent:testExperimental"
106-
"spring:spring-web:spring-web-3.1:library:test"
107-
"spring:spring-web:spring-web-6.0:javaagent:test"
108-
"spring:spring-webflux:spring-webflux-5.0:javaagent:test"
109-
"spring:spring-webflux:spring-webflux-5.3:library:test"
110-
"spring:spring-webmvc:spring-webmvc-3.1:javaagent:test"
111-
"spring:spring-webmvc:spring-webmvc-3.1:javaagent:testExperimental"
112-
"spring:spring-webmvc:spring-webmvc-5.3:library:test"
113-
"spring:spring-webmvc:spring-webmvc-6.0:javaagent:test"
114-
"spring:spring-webmvc:spring-webmvc-3.1:javaagent:testExperimental"
115-
"spring:spring-webmvc:spring-webmvc-6.0:javaagent:test"
116-
"spring:spring-webmvc:spring-webmvc-6.0:javaagent:testExperimental"
117-
"openai:openai-java-1.1:javaagent:test"
118-
)
119-
120-
readonly COLIMA_INSTRUMENTATIONS=(
121-
"elasticsearch:elasticsearch-rest-6.4:javaagent:test"
122-
"elasticsearch:elasticsearch-rest-5.0:javaagent:test"
123-
"oracle-ucp-11.2:javaagent:test"
124-
"oracle-ucp-11.2:javaagent:testStableSemconv"
125-
)
9+
# shellcheck source=instrumentation-docs/instrumentations.sh
10+
source "$(dirname "$0")/instrumentations.sh"
12611

12712
readonly TELEMETRY_DIR_NAME=".telemetry"
12813

0 commit comments

Comments
 (0)