Skip to content

Commit e0bca5e

Browse files
Automatic triggering of CiVis test environment (#9734)
1 parent 92a857d commit e0bca5e

File tree

2 files changed

+122
-2
lines changed

2 files changed

+122
-2
lines changed

.gitlab/ci-visibility-tests.yml

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,64 @@
1+
check-ci-visibility-label:
2+
stage: publish
3+
image: registry.ddbuild.io/images/dd-octo-sts-ci-base:2025.06-1
4+
tags: [ "arch:amd64" ]
5+
needs: [ publish-artifacts-to-s3 ]
6+
id_tokens:
7+
DDOCTOSTS_ID_TOKEN:
8+
aud: dd-octo-sts
9+
rules:
10+
- if: '$POPULATE_CACHE'
11+
when: never
12+
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH !~ /^(master|release\/)/'
13+
when: on_success
14+
- when: never
15+
before_script:
16+
- dd-octo-sts version
17+
- dd-octo-sts debug --scope DataDog/dd-trace-java --policy self.gitlab.github-access.read
18+
- dd-octo-sts token --scope DataDog/dd-trace-java --policy self.gitlab.github-access.read > github-token.txt
19+
- gh auth login --with-token < github-token.txt
20+
script:
21+
- |
22+
# Source utility functions
23+
source .gitlab/ci_visibility_utils.sh
24+
25+
# Get PR number
26+
if ! PR_NUMBER=$(get_pr_number "${CI_COMMIT_BRANCH}"); then
27+
echo "No open PR found for branch ${CI_COMMIT_BRANCH}"
28+
exit 1
29+
fi
30+
31+
echo "Found PR #${PR_NUMBER}"
32+
33+
# Check if PR has the CI visibility label
34+
if pr_has_label "$PR_NUMBER" "comp: ci visibility"; then
35+
echo "PR_NUMBER=${PR_NUMBER}" > pr.env
36+
echo "PR #${PR_NUMBER} detected as CI Visibility PR"
37+
exit 0
38+
else
39+
echo "PR #${PR_NUMBER} not a CI Visibility PR, ignoring trigger"
40+
exit 1
41+
fi
42+
after_script:
43+
- dd-octo-sts revoke -t $(cat github-token.txt) || true
44+
artifacts:
45+
reports:
46+
dotenv: pr.env
47+
allow_failure: true
48+
retry:
49+
max: 2
50+
when: always
51+
152
run-ci-visibility-test-environment:
253
stage: ci-visibility-tests
3-
when: manual
4-
needs: []
54+
needs:
55+
- job: check-ci-visibility-label
56+
artifacts: true
57+
rules:
58+
- if: '$POPULATE_CACHE'
59+
when: never
60+
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH !~ /^(master|release\/)/'
61+
when: on_success
562
trigger:
663
project: DataDog/apm-reliability/test-environment
764
branch: main
@@ -17,3 +74,4 @@ run-ci-visibility-test-environment:
1774
UPSTREAM_COMMIT_SHORT_SHA: $CI_COMMIT_SHORT_SHA
1875
TRACER_LANG: java
1976
JAVA_TRACER_REF_TO_TEST: $CI_COMMIT_BRANCH
77+
JAVA_TRACER_PR_TO_TEST: $PR_NUMBER

.gitlab/ci_visibility_utils.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env bash
2+
3+
function get_pr_number() {
4+
local branch=$1
5+
6+
if [ -z "$branch" ]; then
7+
echo "Error: Branch name is required" >&2
8+
return 1
9+
fi
10+
11+
local pr_number
12+
pr_number=$(gh pr list --repo DataDog/dd-trace-java --head "$branch" --state open --json number --jq '.[0].number')
13+
14+
if [ -z "$pr_number" ]; then
15+
echo "Error: No open PR found for branch $branch" >&2
16+
return 1
17+
fi
18+
19+
echo "$pr_number"
20+
return 0
21+
}
22+
23+
function get_pr_labels() {
24+
local pr_number=$1
25+
26+
if [ -z "$pr_number" ]; then
27+
echo "Error: PR number is required" >&2
28+
return 1
29+
fi
30+
31+
local labels
32+
labels=$(gh pr view "$pr_number" --repo DataDog/dd-trace-java --json labels --jq '.labels[].name')
33+
34+
if [ -z "$labels" ]; then
35+
echo "Warning: No labels found for PR #$pr_number" >&2
36+
return 1
37+
fi
38+
39+
echo "$labels"
40+
return 0
41+
}
42+
43+
function pr_has_label() {
44+
local pr_number=$1
45+
local target_label=$2
46+
47+
if [ -z "$pr_number" ] || [ -z "$target_label" ]; then
48+
echo "Error: PR number and label are required" >&2
49+
return 1
50+
fi
51+
52+
local labels
53+
if ! labels=$(get_pr_labels "$pr_number"); then
54+
return 1
55+
fi
56+
57+
if echo "$labels" | grep -q "$target_label"; then
58+
return 0
59+
else
60+
return 1
61+
fi
62+
}

0 commit comments

Comments
 (0)