[ACTP] package and activate par-control - #54529
Draft
embeaken wants to merge 4 commits into
Draft
Conversation
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 6, 2026 17:36
d595af1 to
f0f6ff6
Compare
embeaken
changed the base branch from
ilya/par-control-foundation
to
ilya/par-control-integration
August 6, 2026 17:40
embeaken
marked this pull request as ready for review
August 6, 2026 17:40
embeaken
requested review from
Madhu-TV,
clarkb7 and
jeremy-hanna
and removed request for
a team
August 6, 2026 17:40
Contributor
Static quality checks❌ Please find below the results from static quality gates Error
Gate failure full details
Static quality gate failures prevent this PR from merging! Successful checksInfo
3 successful checks with minimal change (< 2 KiB)
|
embeaken
marked this pull request as draft
August 6, 2026 17:41
Contributor
Gitlab CI Configuration ChangesModified Jobsnew-e2e-privateactionrunner new-e2e-privateactionrunner:
after_script:
- CODECOV_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $CODECOV token) || exit
$?; export CODECOV_TOKEN
- $CI_PROJECT_DIR/tools/ci/junit_upload.sh "junit-${CI_JOB_ID}.tgz" "$E2E_RESULT_JSON"
- "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n dda inv -- -e coverage.process-e2e-coverage-folders\
\ $E2E_COVERAGE_OUT_DIR\n dda inv -- -e dyntest.compute-and-upload-job-index\
\ --bucket-uri $S3_PERMANENT_ARTIFACTS_URI --coverage-folder $E2E_COVERAGE_OUT_DIR\
\ --commit-sha $CI_COMMIT_SHA --job-id $CI_JOB_ID\nfi\n"
- "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh\
\ $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY\n for coverage in\
\ \"$E2E_COVERAGE_OUT_DIR\"/*/coverage.txt; do\n datadog-ci coverage upload\
\ --format=go-coverprofile \"$coverage\" || true\n done\nfi\n"
artifacts:
expire_in: 2 weeks
paths:
- $E2E_OUTPUT_DIR
- $E2E_RESULT_JSON
- junit-*.tgz
- $E2E_COVERAGE_OUT_DIR
reports:
annotations:
- $EXTERNAL_LINKS_PATH
when: always
before_script:
- mkdir -p $GOPATH/pkg/mod/cache && zstd -dc modcache_e2e.tar.zst | tar xf - -C
$GOPATH/pkg/mod/cache
- rm -f modcache_e2e.tar.zst
- mkdir -p ~/.pulumi && zstd -dc pulumi_plugins.tar.zst | tar xf - -C ~/.pulumi
- rm -f pulumi_plugins.tar.zst
- "go_bin=\"$(go env GOBIN)\"\nif [ -z \"$go_bin\" ]; then\n go_bin=\"$(go env\
\ GOPATH)/bin\"\nfi\nmkdir -p \"$go_bin\" \"$GOPATH/pkg/mod/cache\"\nzstd -dc\
\ go_tools_bin.tar.zst | tar xf - -C \"$go_bin\"\nzstd -dc modcache_tools.tar.zst\
\ | tar xf - -C \"$GOPATH/pkg/mod/cache\"\n"
- rm -f go_tools_bin.tar.zst modcache_tools.tar.zst
- export PATH=$PATH:$go_bin
- mkdir -p ~/.aws
- "if [ -n \"$E2E_USE_AWS_PROFILE\" ]; then\n echo Using agent-qa-ci aws profile\n\
\ $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E profile >> ~/.aws/config\
\ || exit $?\n # Now all `aws` commands target the agent-qa profile\n export\
\ AWS_PROFILE=agent-qa-ci\nelse\n # Assume role to fetch only once credentials\
\ and avoid rate limits\n echo Assuming ddbuild-agent-ci role\n roleoutput=\"\
$(aws sts assume-role --role-arn arn:aws:iam::669783387624:role/ddbuild-agent-ci\
\ --external-id ddbuild-agent-ci --role-session-name RoleSession)\"\n export\
\ AWS_ACCESS_KEY_ID=\"$(echo \"$roleoutput\" | jq -r '.Credentials.AccessKeyId')\"\
\n export AWS_SECRET_ACCESS_KEY=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SecretAccessKey')\"\
\n export AWS_SESSION_TOKEN=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SessionToken')\"\
\nfi\n"
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AWS_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_AWS_PRIVATE_KEY_PATH && chmod 600 $E2E_AWS_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
$AGENT_QA_E2E ssh_key_rsa > $E2E_AWS_PRIVATE_KEY_PATH || exit $?
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AZURE_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_AZURE_PRIVATE_KEY_PATH && chmod 600 $E2E_AZURE_PRIVATE_KEY_PATH &&
$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AZURE_PRIVATE_KEY_PATH
|| exit $?
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_GCP_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_GCP_PRIVATE_KEY_PATH && chmod 600 $E2E_GCP_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
$AGENT_QA_E2E ssh_key_rsa > $E2E_GCP_PRIVATE_KEY_PATH || exit $?
- pulumi login "s3://dd-pulumi-state?region=us-east-1&awssdk=v2&profile=$AWS_PROFILE"
- ARM_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE client_id)
|| exit $?; export ARM_CLIENT_ID
- ARM_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE token)
|| exit $?; export ARM_CLIENT_SECRET
- ARM_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE tenant_id)
|| exit $?; export ARM_TENANT_ID
- ARM_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE subscription_id)
|| exit $?; export ARM_SUBSCRIPTION_ID
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_json > ~/gcp-credentials.json
|| exit $?
- export GOOGLE_APPLICATION_CREDENTIALS=~/gcp-credentials.json
- 'gcp_acr_key=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_acr_readonly)
|| exit $?
export E2E_GCP_IMAGE_PULL_PASSWORD="b64=$(printf ''%s'' "$gcp_acr_key" | base64
-w 0)"
'
- dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
- export DD_ENV=nativetest
- export DD_CIVISIBILITY_ENABLED=true
- export DD_CIVISIBILITY_AGENTLESS_ENABLED=true
- export DD_CIVISIBILITY_FLAKY_RETRY_ENABLED=false
- export DD_TAGS="gitlab.pipeline_source:${CI_PIPELINE_SOURCE}"
- DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token)
|| exit $?; export DD_API_KEY
- export WINDOWS_DDNPM_DRIVER=${WINDOWS_DDNPM_DRIVER:-$(dda inv release.get-release-json-value
"dependencies::WINDOWS_DDNPM_DRIVER" --no-worktree)}
- export WINDOWS_DDPROCMON_DRIVER=${WINDOWS_DDPROCMON_DRIVER:-$(dda inv release.get-release-json-value
"dependencies::WINDOWS_DDPROCMON_DRIVER" --no-worktree)}
cache:
- key:
files:
- .bazelversion
prefix: bazelversion-$CI_RUNNER_DESCRIPTION
paths:
- .cache/bazelisk
- .cache/bazel/*/install
policy: pull$BAZEL_CACHE_POLICY_SUFFIX
when: on_success
- key:
files:
- MODULE.bazel.lock
prefix: bazel-$CI_JOB_NAME
paths:
- .cache/bazel/*/cache
- .cache/go
- .cache/ms-go
- .cache/pip
policy: pull$BAZEL_CACHE_POLICY_SUFFIX
when: on_success
id_tokens:
BUILDBARN_ID_TOKEN:
aud: buildbarn.us1.ddbuild.io
image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
needs:
- go_e2e_deps
- artifacts: false
job: go_e2e_test_binaries
- go_tools_deps
- job: new-e2e-base-coverage
optional: true
- job: publish_fakeintake
optional: true
- job: publish_fakeintake_pinned
optional: true
- agent_deb-x64-a7
- qa_agent_linux
- qa_dca
rules:
- if: $RUN_E2E_TESTS == "off"
when: never
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- if: $RUN_E2E_TESTS == "off"
when: never
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- test/fakeintake/cmd/server/**/*.go
- test/fakeintake/server/**/*.go
- test/fakeintake/aggregator/**/*.go
- test/fakeintake/api/**/*.go
- test/fakeintake/go.mod
- test/fakeintake/go.sum
- test/fakeintake/Dockerfile
- test/fakeintake/version/VERSION
- .gitlab/build/binary_build/fakeintake.yml
- .gitlab/deploy/container_build/fakeintake.yml
- .gitlab/deploy/dev_container_deploy/fakeintake.yml
variables:
E2E_FAKEINTAKE_IMAGE_OVERRIDE: public.ecr.aws/datadog/fakeintake:v$CI_COMMIT_SHORT_SHA
when: on_success
- if: $RUN_E2E_TESTS == "on"
when: on_success
- if: $CI_COMMIT_BRANCH == "main"
when: on_success
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/
when: on_success
- if: $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$/
when: on_success
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- test/fakeintake/**/*
- .gitlab/build/binary_build/fakeintake.yml
- .gitlab/deploy/container_build/fakeintake.yml
- .gitlab/deploy/dev_container_deploy/fakeintake.yml
when: on_success
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- .gitlab/test/e2e/e2e.yml
- bazel/rules/go_shim/**/*
- internal/tools/**/*
- test/e2e-framework/**/*
- test/new-e2e/go.mod
- flakes.yaml
- release.json
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- cmd/privateactionrunner/**/*
- comp/privateactionrunner/**/*
- pkg/privateactionrunner/**/*
- pkg/config/setup/privateactionrunner.go
- pkg/proto/datadog/privateactionrunner/**/*
- pkg/proto/pbgo/privateactionrunner/**/*
- test/new-e2e/tests/privateactionrunner/**/*
when: on_success
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- allow_failure: true
when: manual
script:
- export IS_DEV_BRANCH="$(dda inv -- -e pipeline.is-dev-branch)"
- DYNAMIC_TESTS_BREAKGLASS=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DYNAMIC_TESTS_BREAKGLASS
value) || exit $?; export DYNAMIC_TESTS_BREAKGLASS
- "if [ \"$DYNAMIC_TESTS_BREAKGLASS\" == \"true\" ] || [ \"$IS_DEV_BRANCH\" == \"\
false\" ] || [ \"$RUN_E2E_TESTS\" == \"on\" ]; then\n export DYNAMIC_TESTS_FLAG=\"\
\"\nfi\n"
- export E2E_IMAGE_PULL_PASSWORD=$(aws ecr get-login-password),$E2E_GCP_IMAGE_PULL_PASSWORD
- dda inv -- -e new-e2e-tests.run $DYNAMIC_TESTS_FLAG $PRE_BUILT_BINARIES_FLAG $MAX_RETRIES_FLAG
--local-package $CI_PROJECT_DIR/$OMNIBUS_BASE_DIR --result-json $E2E_RESULT_JSON
--targets $TARGETS --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer
--logs-folder=$E2E_OUTPUT_DIR/logs --logs-post-processing --logs-post-processing-test-depth=$E2E_LOGS_PROCESSING_TEST_DEPTH
stage: e2e
tags:
- arch:amd64
- specific:true
variables:
BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
DYNAMIC_TESTS_FLAG: --impacted
E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key
E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub
E2E_AZURE_PRIVATE_KEY_PATH: /tmp/agent-qa-azure-ssh-key
E2E_AZURE_PUBLIC_KEY_PATH: /tmp/agent-qa-azure-ssh-key.pub
E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA
E2E_COVERAGE_OUT_DIR: $CI_PROJECT_DIR/coverage
E2E_GCP_PRIVATE_KEY_PATH: /tmp/agent-qa-gcp-ssh-key
E2E_GCP_PUBLIC_KEY_PATH: /tmp/agent-qa-gcp-ssh-key.pub
E2E_IMAGE_PULL_REGISTRY: 669783387624.dkr.ecr.us-east-1.amazonaws.com,us-central1-docker.pkg.dev
E2E_IMAGE_PULL_USERNAME: AWS,_json_key
E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa
E2E_LOGS_PROCESSING_TEST_DEPTH: 1
E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output
E2E_PIPELINE_ID: $CI_PIPELINE_ID
E2E_PREBUILD_S3_URI: $S3_PERMANENT_ARTIFACTS_URI/e2e-pre-build/$CI_PIPELINE_ID
E2E_RESULT_JSON: $CI_PROJECT_DIR/e2e_test_output.json
E2E_SKIP_WINDOWS: $SKIP_WINDOWS
E2E_USE_AWS_PROFILE: 'true'
EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
+ EXTRA_PARAMS: --skip "Windows"
FLAKY_PATTERNS_CONFIG: $CI_PROJECT_DIR/flaky-patterns-runtime.yaml
GIT_DEPTH: 0
GIT_STRATEGY: clone
KUBERNETES_CPU_REQUEST: 6
KUBERNETES_MEMORY_LIMIT: 16Gi
KUBERNETES_MEMORY_REQUEST: 12Gi
MAX_RETRIES_FLAG: ''
PRE_BUILT_BINARIES_FLAG: --use-prebuilt-binaries
REMOTE_STACK_CLEANING: 'true'
SHOULD_RUN_IN_FLAKES_FINDER: 'true'
TARGETS: ./tests/privateactionrunner
TEAM: action-platform
XDG_CACHE_HOME: $CI_PROJECT_DIR/.cacheAdded Jobsnew-e2e-privateactionrunner-windowsnew-e2e-privateactionrunner-windows:
after_script:
- CODECOV_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $CODECOV token) || exit
$?; export CODECOV_TOKEN
- $CI_PROJECT_DIR/tools/ci/junit_upload.sh "junit-${CI_JOB_ID}.tgz" "$E2E_RESULT_JSON"
- "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n dda inv -- -e coverage.process-e2e-coverage-folders\
\ $E2E_COVERAGE_OUT_DIR\n dda inv -- -e dyntest.compute-and-upload-job-index\
\ --bucket-uri $S3_PERMANENT_ARTIFACTS_URI --coverage-folder $E2E_COVERAGE_OUT_DIR\
\ --commit-sha $CI_COMMIT_SHA --job-id $CI_JOB_ID\nfi\n"
- "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh\
\ $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY\n for coverage in\
\ \"$E2E_COVERAGE_OUT_DIR\"/*/coverage.txt; do\n datadog-ci coverage upload\
\ --format=go-coverprofile \"$coverage\" || true\n done\nfi\n"
artifacts:
expire_in: 2 weeks
paths:
- $E2E_OUTPUT_DIR
- $E2E_RESULT_JSON
- junit-*.tgz
- $E2E_COVERAGE_OUT_DIR
reports:
annotations:
- $EXTERNAL_LINKS_PATH
when: always
before_script:
- mkdir -p $GOPATH/pkg/mod/cache && zstd -dc modcache_e2e.tar.zst | tar xf - -C
$GOPATH/pkg/mod/cache
- rm -f modcache_e2e.tar.zst
- mkdir -p ~/.pulumi && zstd -dc pulumi_plugins.tar.zst | tar xf - -C ~/.pulumi
- rm -f pulumi_plugins.tar.zst
- "go_bin=\"$(go env GOBIN)\"\nif [ -z \"$go_bin\" ]; then\n go_bin=\"$(go env\
\ GOPATH)/bin\"\nfi\nmkdir -p \"$go_bin\" \"$GOPATH/pkg/mod/cache\"\nzstd -dc\
\ go_tools_bin.tar.zst | tar xf - -C \"$go_bin\"\nzstd -dc modcache_tools.tar.zst\
\ | tar xf - -C \"$GOPATH/pkg/mod/cache\"\n"
- rm -f go_tools_bin.tar.zst modcache_tools.tar.zst
- export PATH=$PATH:$go_bin
- mkdir -p ~/.aws
- "if [ -n \"$E2E_USE_AWS_PROFILE\" ]; then\n echo Using agent-qa-ci aws profile\n\
\ $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E profile >> ~/.aws/config\
\ || exit $?\n # Now all `aws` commands target the agent-qa profile\n export\
\ AWS_PROFILE=agent-qa-ci\nelse\n # Assume role to fetch only once credentials\
\ and avoid rate limits\n echo Assuming ddbuild-agent-ci role\n roleoutput=\"\
$(aws sts assume-role --role-arn arn:aws:iam::669783387624:role/ddbuild-agent-ci\
\ --external-id ddbuild-agent-ci --role-session-name RoleSession)\"\n export\
\ AWS_ACCESS_KEY_ID=\"$(echo \"$roleoutput\" | jq -r '.Credentials.AccessKeyId')\"\
\n export AWS_SECRET_ACCESS_KEY=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SecretAccessKey')\"\
\n export AWS_SESSION_TOKEN=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SessionToken')\"\
\nfi\n"
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AWS_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_AWS_PRIVATE_KEY_PATH && chmod 600 $E2E_AWS_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
$AGENT_QA_E2E ssh_key_rsa > $E2E_AWS_PRIVATE_KEY_PATH || exit $?
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AZURE_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_AZURE_PRIVATE_KEY_PATH && chmod 600 $E2E_AZURE_PRIVATE_KEY_PATH &&
$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AZURE_PRIVATE_KEY_PATH
|| exit $?
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_GCP_PUBLIC_KEY_PATH
|| exit $?
- touch $E2E_GCP_PRIVATE_KEY_PATH && chmod 600 $E2E_GCP_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
$AGENT_QA_E2E ssh_key_rsa > $E2E_GCP_PRIVATE_KEY_PATH || exit $?
- pulumi login "s3://dd-pulumi-state?region=us-east-1&awssdk=v2&profile=$AWS_PROFILE"
- ARM_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE client_id)
|| exit $?; export ARM_CLIENT_ID
- ARM_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE token)
|| exit $?; export ARM_CLIENT_SECRET
- ARM_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE tenant_id)
|| exit $?; export ARM_TENANT_ID
- ARM_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE subscription_id)
|| exit $?; export ARM_SUBSCRIPTION_ID
- $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_json > ~/gcp-credentials.json
|| exit $?
- export GOOGLE_APPLICATION_CREDENTIALS=~/gcp-credentials.json
- 'gcp_acr_key=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_acr_readonly)
|| exit $?
export E2E_GCP_IMAGE_PULL_PASSWORD="b64=$(printf ''%s'' "$gcp_acr_key" | base64
-w 0)"
'
- dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
- export DD_ENV=nativetest
- export DD_CIVISIBILITY_ENABLED=true
- export DD_CIVISIBILITY_AGENTLESS_ENABLED=true
- export DD_CIVISIBILITY_FLAKY_RETRY_ENABLED=false
- export DD_TAGS="gitlab.pipeline_source:${CI_PIPELINE_SOURCE}"
- DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token)
|| exit $?; export DD_API_KEY
- export WINDOWS_DDNPM_DRIVER=${WINDOWS_DDNPM_DRIVER:-$(dda inv release.get-release-json-value
"dependencies::WINDOWS_DDNPM_DRIVER" --no-worktree)}
- export WINDOWS_DDPROCMON_DRIVER=${WINDOWS_DDPROCMON_DRIVER:-$(dda inv release.get-release-json-value
"dependencies::WINDOWS_DDPROCMON_DRIVER" --no-worktree)}
cache:
- key:
files:
- .bazelversion
prefix: bazelversion-$CI_RUNNER_DESCRIPTION
paths:
- .cache/bazelisk
- .cache/bazel/*/install
policy: pull$BAZEL_CACHE_POLICY_SUFFIX
when: on_success
- key:
files:
- MODULE.bazel.lock
prefix: bazel-$CI_JOB_NAME
paths:
- .cache/bazel/*/cache
- .cache/go
- .cache/ms-go
- .cache/pip
policy: pull$BAZEL_CACHE_POLICY_SUFFIX
when: on_success
id_tokens:
BUILDBARN_ID_TOKEN:
aud: buildbarn.us1.ddbuild.io
image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
needs:
- go_e2e_deps
- artifacts: false
job: go_e2e_test_binaries
- go_tools_deps
- job: new-e2e-base-coverage
optional: true
- job: publish_fakeintake
optional: true
- job: publish_fakeintake_pinned
optional: true
- windows_msi_and_bosh_zip_x64-a7
- windows_msi_and_bosh_zip_x64-a7-fips
rules:
- if: $RUN_E2E_TESTS == "off"
when: never
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- if: $RUN_E2E_TESTS == "off"
when: never
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- test/fakeintake/cmd/server/**/*.go
- test/fakeintake/server/**/*.go
- test/fakeintake/aggregator/**/*.go
- test/fakeintake/api/**/*.go
- test/fakeintake/go.mod
- test/fakeintake/go.sum
- test/fakeintake/Dockerfile
- test/fakeintake/version/VERSION
- .gitlab/build/binary_build/fakeintake.yml
- .gitlab/deploy/container_build/fakeintake.yml
- .gitlab/deploy/dev_container_deploy/fakeintake.yml
variables:
E2E_FAKEINTAKE_IMAGE_OVERRIDE: public.ecr.aws/datadog/fakeintake:v$CI_COMMIT_SHORT_SHA
when: on_success
- if: $RUN_E2E_TESTS == "on"
when: on_success
- if: $CI_COMMIT_BRANCH == "main"
when: on_success
- if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/
when: on_success
- if: $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$/
when: on_success
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- test/fakeintake/**/*
- .gitlab/build/binary_build/fakeintake.yml
- .gitlab/deploy/container_build/fakeintake.yml
- .gitlab/deploy/dev_container_deploy/fakeintake.yml
when: on_success
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- .gitlab/test/e2e/e2e.yml
- bazel/rules/go_shim/**/*
- internal/tools/**/*
- test/e2e-framework/**/*
- test/new-e2e/go.mod
- flakes.yaml
- release.json
- changes:
compare_to: $COMPARE_TO_BRANCH
paths:
- cmd/privateactionrunner/**/*
- comp/privateactionrunner/**/*
- pkg/privateactionrunner/**/*
- pkg/config/setup/privateactionrunner.go
- pkg/proto/datadog/privateactionrunner/**/*
- pkg/proto/pbgo/privateactionrunner/**/*
- test/new-e2e/tests/privateactionrunner/**/*
when: on_success
- if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
when: never
- allow_failure: true
when: manual
script:
- export IS_DEV_BRANCH="$(dda inv -- -e pipeline.is-dev-branch)"
- DYNAMIC_TESTS_BREAKGLASS=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DYNAMIC_TESTS_BREAKGLASS
value) || exit $?; export DYNAMIC_TESTS_BREAKGLASS
- "if [ \"$DYNAMIC_TESTS_BREAKGLASS\" == \"true\" ] || [ \"$IS_DEV_BRANCH\" == \"\
false\" ] || [ \"$RUN_E2E_TESTS\" == \"on\" ]; then\n export DYNAMIC_TESTS_FLAG=\"\
\"\nfi\n"
- export E2E_IMAGE_PULL_PASSWORD=$(aws ecr get-login-password),$E2E_GCP_IMAGE_PULL_PASSWORD
- dda inv -- -e new-e2e-tests.run $DYNAMIC_TESTS_FLAG $PRE_BUILT_BINARIES_FLAG $MAX_RETRIES_FLAG
--local-package $CI_PROJECT_DIR/$OMNIBUS_BASE_DIR --result-json $E2E_RESULT_JSON
--targets $TARGETS --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer
--logs-folder=$E2E_OUTPUT_DIR/logs --logs-post-processing --logs-post-processing-test-depth=$E2E_LOGS_PROCESSING_TEST_DEPTH
stage: e2e
tags:
- arch:amd64
- specific:true
variables:
BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
DYNAMIC_TESTS_FLAG: --impacted
E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key
E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub
E2E_AZURE_PRIVATE_KEY_PATH: /tmp/agent-qa-azure-ssh-key
E2E_AZURE_PUBLIC_KEY_PATH: /tmp/agent-qa-azure-ssh-key.pub
E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA
E2E_COVERAGE_OUT_DIR: $CI_PROJECT_DIR/coverage
E2E_GCP_PRIVATE_KEY_PATH: /tmp/agent-qa-gcp-ssh-key
E2E_GCP_PUBLIC_KEY_PATH: /tmp/agent-qa-gcp-ssh-key.pub
E2E_IMAGE_PULL_REGISTRY: 669783387624.dkr.ecr.us-east-1.amazonaws.com,us-central1-docker.pkg.dev
E2E_IMAGE_PULL_USERNAME: AWS,_json_key
E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa
E2E_LOGS_PROCESSING_TEST_DEPTH: 1
E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output
E2E_PIPELINE_ID: $CI_PIPELINE_ID
E2E_PREBUILD_S3_URI: $S3_PERMANENT_ARTIFACTS_URI/e2e-pre-build/$CI_PIPELINE_ID
E2E_RESULT_JSON: $CI_PROJECT_DIR/e2e_test_output.json
E2E_SKIP_WINDOWS: $SKIP_WINDOWS
E2E_USE_AWS_PROFILE: 'true'
EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
EXTRA_PARAMS: --run "Windows"
FLAKY_PATTERNS_CONFIG: $CI_PROJECT_DIR/flaky-patterns-runtime.yaml
GIT_DEPTH: 0
GIT_STRATEGY: clone
KUBERNETES_CPU_REQUEST: 6
KUBERNETES_MEMORY_LIMIT: 16Gi
KUBERNETES_MEMORY_REQUEST: 12Gi
MAX_RETRIES_FLAG: ''
PRE_BUILT_BINARIES_FLAG: --use-prebuilt-binaries
REMOTE_STACK_CLEANING: 'true'
SHOULD_RUN_IN_FLAKES_FINDER: 'true'
TARGETS: ./tests/privateactionrunner
TEAM: action-platform
XDG_CACHE_HOME: $CI_PROJECT_DIR/.cacheChanges Summary
ℹ️ Diff available in the job log. |
embeaken
force-pushed
the
ilya/par-control-integration
branch
from
August 6, 2026 17:54
b9f8762 to
0c700ba
Compare
Contributor
|
🎯 Code Coverage (details) 🔗 Commit SHA: 3eda2e7 | Docs | View more details | Give us feedback! |
embeaken
force-pushed
the
ilya/par-control-integration
branch
from
August 6, 2026 18:00
0c700ba to
5035d15
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 6, 2026 18:02
f0f6ff6 to
d63d1da
Compare
embeaken
changed the base branch from
ilya/par-control-integration
to
ilya/par-control-runner-wiring
August 6, 2026 18:04
Closed
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 6, 2026 18:09
3564748 to
8f3dd5f
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 6, 2026 18:09
d63d1da to
d71c97c
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 6, 2026 18:34
8f3dd5f to
9baf977
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 6, 2026 18:34
d71c97c to
58007bc
Compare
Contributor
Go Package Import DifferencesBaseline: 296059f
|
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 7, 2026 20:57
fe1b3c3 to
9cd55fb
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
2 times, most recently
from
August 10, 2026 15:09
492099e to
da8c7bf
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 15:09
9cd55fb to
32c23f1
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 15:22
da8c7bf to
a63285f
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 15:26
32c23f1 to
9cd2336
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 16:14
a63285f to
f1fbdb7
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
2 times, most recently
from
August 10, 2026 17:12
3763110 to
fdd3c78
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 17:12
f1fbdb7 to
b74dce0
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 17:26
fdd3c78 to
3f5a8d2
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 17:26
b74dce0 to
eb4762e
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 18:22
3f5a8d2 to
8c77f78
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
2 times, most recently
from
August 10, 2026 18:50
461e8cc to
9b525b9
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 18:51
8c77f78 to
7ef24ed
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 19:01
9b525b9 to
111ff22
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 19:02
7ef24ed to
d4af37c
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 19:12
111ff22 to
6e0ba2a
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
2 times, most recently
from
August 10, 2026 19:35
7797d82 to
deaab4e
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 19:35
6e0ba2a to
75208d0
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 20:07
deaab4e to
73ed519
Compare
embeaken
force-pushed
the
ilya/par-control-runner-wiring
branch
from
August 10, 2026 20:07
75208d0 to
374f5c4
Compare
embeaken
force-pushed
the
ilya/par-control-packaging
branch
from
August 10, 2026 20:47
73ed519 to
3c683d5
Compare
Contributor
Files inventory check summaryFile checks results against ancestor 296059ff: Results for datadog-agent_7.84.0~devel.git.464.3eda2e7.pipeline.132944423-1_amd64.deb:Detected file changes:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Packages and activates split-mode PAR on Linux and Windows hosts:
par-controland process-manager definitions for it and the on-demand executor;PATHfor process-manager children;Two details about how the definitions delegate to
dd-procmgrd:par-controldefinition redirectsstdout/stderrto<ETC_ROOT>/logs/par-control.loginstead of the binary managing its own log file.dd-procmgrdnow creates a missing stdio parent directory rather than silently falling back to inherit on a fresh install.DD_FLEET_POLICIES_DIR=${DD_CONF_DIR}/managed/datadog-agent/stable, whichdd-procmgrdexpands from the supervising unit, so a stable or experiment unit selects the matching config tree. Hardcoding the rendered stable path would have made the control plane and executor read stable policies during an experiment while the core Agent read the experiment's. This matches what the DDOT definition already does. Windows keeps readingfleet_policies_dirfrom the registry, aspkg/config/setup/config_windows.godoes, because there are no experiment services there.The
par-controldefinitions invokeprivateactionrunner bootstrap-par-control --cfgpath <datadog.yaml>via--bootstrap-command. par-control reads no configfile of its own, so there is no separate
--configargument: Go resolves the wholecontrol-plane configuration and returns it (#54870, #54590).
Docker and Kubernetes deployments remain monolithic.
Validation
dda env dev run -- bazel test //pkg/fleet/installer/packages:packages_test //pkg/fleet/installer/packages/embedded:tmpl_test //pkg/procmgr/rust:dd-procmgrd_testdda inv linter.go --module=test/new-e2e --targets=./tests/privateactionrunnerThe installer test now pins the full
DD_FLEET_POLICIES_DIRvalue for both definitions; asserting only the key name would not catch a regression to a hardcoded path. Live Linux and Windows E2E execution is left to CI.Stack 9 of 9; based on #54594.