@@ -25,16 +25,41 @@ generate-templates:
2525 tags : [ "arch:amd64" ]
2626 needs : []
2727 script :
28- - php ./.gitlab/generate-package.php | tee .gitlab/package-gen.yml
29- - php ./.gitlab/generate-tracer.php | tee .gitlab/tracer-gen.yml
30- - php ./.gitlab/generate-appsec.php | tee .gitlab/appsec-gen.yml
28+ - |
29+ touch libdatadog.env # always present so dotenv artifact never errors
30+ # On libdatadog CI schedule: fetch the latest SHA from GitHub, export it so
31+ # generate-common.php can embed it directly in compilation job before_scripts.
32+ if [ "${SCHEDULED_LIBDATADOG_LATEST:-}" = "true" ]; then
33+ set -x
34+ apt update
35+ apt install -y git
36+ LIBDATADOG_PINNED_SHA=$(git ls-tree HEAD libdatadog | awk '{print $3}')
37+ LIBDATADOG_OVERRIDE_SHA=$(git ls-remote https://github.com/DataDog/libdatadog main | cut -f1)
38+ export LIBDATADOG_OVERRIDE_SHA LIBDATADOG_PINNED_SHA
39+ printf 'LIBDATADOG_OVERRIDE_SHA=%s\nLIBDATADOG_PINNED_SHA=%s\n' "$LIBDATADOG_OVERRIDE_SHA" "$LIBDATADOG_PINNED_SHA" >> libdatadog.env
40+ if [ "$LIBDATADOG_OVERRIDE_SHA" = "$LIBDATADOG_PINNED_SHA" ]; then
41+ echo 'LIBDATADOG_NO_CHANGES=true' >> libdatadog.env
42+ else
43+ echo 'LIBDATADOG_NO_CHANGES=false' >> libdatadog.env
44+ fi
45+ elif [ "${CI_COMMIT_BRANCH:-}" = "bot/libdatadog-latest" ]; then
46+ # Feedback run after a bot commit: the submodule already points to the tested SHA.
47+ # Don't export — generate-common.php must not inject fetch/checkout (no-op anyway).
48+ LIBDATADOG_SHA=$(git ls-tree HEAD libdatadog | awk '{print $3}')
49+ printf 'LIBDATADOG_OVERRIDE_SHA=%s\nLIBDATADOG_FEEDBACK_RUN=true\n' "$LIBDATADOG_SHA" >> libdatadog.env
50+ fi
51+ - php ./.gitlab/generate-package.php | tee .gitlab/package-gen.yml
52+ - php ./.gitlab/generate-tracer.php | tee .gitlab/tracer-gen.yml
53+ - php ./.gitlab/generate-appsec.php | tee .gitlab/appsec-gen.yml
3154 - php ./.gitlab/generate-profiler.php | tee .gitlab/profiler-gen.yml
32- - php ./.gitlab/generate-shared.php | tee .gitlab/shared-gen.yml
55+ - php ./.gitlab/generate-shared.php | tee .gitlab/shared-gen.yml
3356 variables :
3457 GIT_SUBMODULE_STRATEGY : none
3558 artifacts :
3659 paths :
3760 - .gitlab/*-gen.yml
61+ reports :
62+ dotenv : libdatadog.env
3863
3964tracer-trigger :
4065 stage : tests
@@ -96,3 +121,33 @@ package-trigger:
96121 PARENT_PIPELINE_ID : $CI_PIPELINE_ID
97122 GIT_SUBMODULE_PATHS : libdatadog appsec/third_party/cpp-base64 appsec/third_party/libddwaf appsec/third_party/libddwaf-rust appsec/third_party/msgpack-c
98123 NIGHTLY_BUILD : $NIGHTLY_BUILD
124+
125+ # Runs after the full CI completes. Triggered in two situations:
126+ # 1. Scheduled libdatadog CI run (SCHEDULED_LIBDATADOG_LATEST=true)
127+ # 2. Push to bot/libdatadog-latest by the bot — feeds CI results back so we can verify whether Claude's fixes actually worked. The [no-ci-feedback] marker in bot commits prevents triggering a third run.
128+ analyze-and-create-pr :
129+ stage : deploy
130+ rules :
131+ - if : $SCHEDULED_LIBDATADOG_LATEST == "true"
132+ when : always
133+ - if : ' $CI_COMMIT_BRANCH == "bot/libdatadog-latest" && $CI_COMMIT_AUTHOR =~ /github-actions\[bot\]/ && $CI_COMMIT_MESSAGE !~ /\[no-ci-feedback\]/'
134+ when : always
135+ - when : never
136+ needs :
137+ - job : generate-templates
138+ artifacts : true
139+ - tracer-trigger
140+ - appsec-trigger
141+ - profiler-trigger
142+ - shared-trigger
143+ - package-trigger
144+ trigger :
145+ include :
146+ - local : .gitlab/libdatadog-latest.yml
147+ strategy : depend
148+ variables :
149+ LIBDATADOG_OVERRIDE_SHA : $LIBDATADOG_OVERRIDE_SHA
150+ LIBDATADOG_PINNED_SHA : $LIBDATADOG_PINNED_SHA
151+ LIBDATADOG_NO_CHANGES : $LIBDATADOG_NO_CHANGES
152+ LIBDATADOG_FEEDBACK_RUN : $LIBDATADOG_FEEDBACK_RUN
153+ PARENT_PIPELINE_ID : $CI_PIPELINE_ID
0 commit comments