Repository: DataDog/datadog-agent
Pull request #34092: [BARX-870] Add new otel-agent standalone image
Author: login: AliDatadog
Labels: name: changelog/no-changelog
description: No changelog entry needed
name: team/agent-delivery
name: long review
description: PR is complex, plan time to review it
name: qa/rc-required
description: Only for a PR that requires validation on the Release Candidate
name: team/opentelemetry-agent
Created: 2025-02-17T11:59:09Z | Merged: 2025-04-30T10:49:50Z

<!--
* Contributors are encouraged to read our [CONTRIBUTING](/CONTRIBUTING.md) documentation.
* Both Contributor and Reviewer Checklists are available at https://datadoghq.dev/datadog-agent/guidelines/contributing/#pull-requests.
* The pull request:
  * Should only fix one issue or add one feature at a time.
  * Must update the test suite for the relevant functionality.
  * Should pass all status checks before being reviewed or merged.
* Commit titles should be prefixed with general area of pull request's change.
* Please fill the below sections if possible with relevant information or links.
-->
### What does this PR do?
This PR introduces a new base image for the Agent. This one should be flattened and all future standalone images should be based off this image and not flattened to share the common base layer.

It also adds new jobs to:
- Deploy a dev image otel-agent-dev https://gitlab.ddbuild.io/DataDog/datadog-agent/-/jobs/827411868
- Deploy the otel-agent standalone internally https://github.com/DataDog/images/pull/6600

### Motivation

### Describe how you validated your changes
<!--
Validate your changes before merge, ensuring that:
* Your PR is tested by static / unit / integrations / e2e tests
* Your PR description details which e2e tests cover your changes, if any
* The PR description contains details of how you validated your changes. If you validated changes manually and not through automated tests, add context on why automated tests did not fit your changes validation.

If you want additional validation by a second person, you can ask reviewers to do it. Describe how to set up an environment for manual tests in the PR description. Manual validation is expected to happen on every commit before merge.

Any manual validation step should then map to an automated test. Manual validation should not substitute automation, minus exceptions not supported by test tooling yet.
-->
- Image build jobs should pass. 
- otel-agent should be able to run with the standalone image.
  - I ran a dummy app using the dev image generated.
  - It's currently impossible to test the standalone image.

### Possible Drawbacks / Trade-offs

### Additional Notes
<!--
* Anything else we should know when reviewing?
* Include benchmarking information here whenever possible.
* Include info about alternatives that were considered and why the proposed
  version was chosen.
-->
https://github.com/DataDog/images/pull/6600 needs to be merged first
`git-ref ali/otel-image` should be reverted in the new docker_trigger_internal job


Diff:
diff --git a/.gitlab/common/container_publish_job_templates.yml b/.gitlab/common/container_publish_job_templates.yml
index 950d7d9cd2aa..a91b0988f54f 100644
--- a/.gitlab/common/container_publish_job_templates.yml
+++ b/.gitlab/common/container_publish_job_templates.yml
@@ -4,6 +4,7 @@
   SRC_DSD: registry.ddbuild.io/ci/datadog-agent/dogstatsd
   SRC_DCA: registry.ddbuild.io/ci/datadog-agent/cluster-agent
   SRC_CWS_INSTRUMENTATION: registry.ddbuild.io/ci/datadog-agent/cws-instrumentation
+  SRC_OTEL_AGENT: registry.ddbuild.io/ci/datadog-agent/otel-agent
 
 .docker_publish_job_definition:
   image: registry.ddbuild.io/ci/datadog-agent-buildimages/docker_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES
diff --git a/.gitlab/container_build/docker_linux.yml b/.gitlab/container_build/docker_linux.yml
index 21886c281784..adf7041fc44c 100644
--- a/.gitlab/container_build/docker_linux.yml
+++ b/.gitlab/container_build/docker_linux.yml
@@ -12,10 +12,15 @@
       fi
     - TARGET_TAG=${IMAGE}${ECR_RELEASE_SUFFIX}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}$TAG_SUFFIX-$ARCH
     - !reference [.login_to_docker_readonly]
+    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/agent-base-image:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-$ARCH
     # Build image, use target none label to avoid replication
-    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(dda inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
-    # Squash image
-    - crane flatten -t ${TARGET_TAG} ${TARGET_TAG}
+    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg AGENT_BASE_IMAGE_TAG=${AGENT_BASE_IMAGE_TAG} --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(dda inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
+    - FLATTEN_IMAGE=${FLATTEN_IMAGE:-true}
+    # Squash image if FLATTEN_IMAGE is true
+    - |
+      if [[ "$FLATTEN_IMAGE" == "true" ]]; then
+        crane flatten -t ${TARGET_TAG} ${TARGET_TAG}
+      fi
   # Workaround for temporary network failures
   retry: 2
   timeout: 30m
@@ -173,6 +178,44 @@ docker_build_fips_agent7_arm64_jmx:
     TAG_SUFFIX: -7-fips-jmx
     BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz
 
+# agent base image: future agent images will be based on this image
+.docker_build_base_image:
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs: []
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/agent-base-image
+    BUILD_CONTEXT: Dockerfiles/base-image
+    BUILD_ARG: --target release
+
+docker_build_base_image_amd64:
+  extends: [.docker_build_base_image, .docker_build_job_definition_amd64]
+
+docker_build_base_image_arm64:
+  extends: [.docker_build_base_image, .docker_build_job_definition_arm64]
+
+.docker_build_ot_agent_standalone:
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs:
+    - job: docker_build_base_image_arm64
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/otel-agent
+    BUILD_CONTEXT: Dockerfiles/otel-agent
+    FLATTEN_IMAGE: false
+    BUILD_ARG: --target release
+    TAG_SUFFIX: -7
+
+docker_build_ot_agent_standalone_amd64:
+  extends:
+    [.docker_build_ot_agent_standalone, .docker_build_job_definition_amd64]
+
+docker_build_ot_agent_standalone_arm64:
+  extends:
+    [.docker_build_ot_agent_standalone, .docker_build_job_definition_arm64]
+
 docker_build_agent7_full:
   extends: [.docker_build_job_definition_amd64, .docker_build_artifact]
   rules:
diff --git a/.gitlab/dev_container_deploy/docker_linux.yml b/.gitlab/dev_container_deploy/docker_linux.yml
index ee6634350803..f22e8929ba69 100644
--- a/.gitlab/dev_container_deploy/docker_linux.yml
+++ b/.gitlab/dev_container_deploy/docker_linux.yml
@@ -214,3 +214,16 @@ dev_branch-full:
     IMG_REGISTRIES: dev
     IMG_SOURCES: ${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-full-amd64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-full-arm64
     IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-full
+
+dev_branch-ot-standalone:
+  extends: .docker_publish_job_definition
+  stage: dev_container_deploy
+  rules:
+    - !reference [.manual]
+  needs:
+    - docker_build_ot_agent_standalone_amd64
+    - docker_build_ot_agent_standalone_arm64
+  variables:
+    IMG_REGISTRIES: dev
+    IMG_SOURCES: ${SRC_OTEL_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-amd64,${SRC_OTEL_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-arm64
+    IMG_DESTINATIONS: otel-agent-dev:${CI_COMMIT_REF_SLUG}-7
diff --git a/.gitlab/internal_image_deploy/internal_image_deploy.yml b/.gitlab/internal_image_deploy/internal_image_deploy.yml
index 1d26105aeeb7..788fb9ff2850 100644
--- a/.gitlab/internal_image_deploy/internal_image_deploy.yml
+++ b/.gitlab/internal_image_deploy/internal_image_deploy.yml
@@ -14,7 +14,7 @@ docker_trigger_internal:
   tags: ["arch:amd64"]
   variables:
     DYNAMIC_BUILD_RENDER_RULES: agent-build-only # fake rule to not trigger the ones in the images repo
-    IMAGE_VERSION: tmpl-v13
+    IMAGE_VERSION: tmpl-v14
     IMAGE_NAME: datadog-agent
     RELEASE_TAG: ${CI_COMMIT_REF_SLUG}-jmx
     BUILD_TAG: ${CI_COMMIT_REF_SLUG}-jmx
@@ -31,23 +31,7 @@ docker_trigger_internal:
         TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
       fi
     - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
-    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600
-      --variable IMAGE_VERSION
-      --variable IMAGE_NAME
-      --variable RELEASE_TAG
-      --variable BUILD_TAG
-      --variable TMPL_SRC_IMAGE
-      --variable TMPL_SRC_REPO
-      --variable TMPL_ADP_VERSION
-      --variable RELEASE_STAGING
-      --variable RELEASE_PROD
-      --variable DYNAMIC_BUILD_RENDER_RULES
-      --variable APPS
-      --variable BAZEL_TARGET
-      --variable DDR
-      --variable DDR_WORKFLOW_ID
-      --variable TARGET_ENV
-      --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable TMPL_ADP_VERSION --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
 
 docker_trigger_internal-fips:
@@ -62,7 +46,7 @@ docker_trigger_internal-fips:
   tags: ["arch:amd64"]
   variables:
     DYNAMIC_BUILD_RENDER_RULES: agent-build-only # fake rule to not trigger the ones in the images repo
-    IMAGE_VERSION: tmpl-v12
+    IMAGE_VERSION: tmpl-v14
     IMAGE_NAME: datadog-agent
     RELEASE_TAG: ${CI_COMMIT_REF_SLUG}-fips-jmx
     BUILD_TAG: ${CI_COMMIT_REF_SLUG}-fips-jmx
@@ -78,22 +62,7 @@ docker_trigger_internal-fips:
         TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
       fi
     - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
-    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600
-      --variable IMAGE_VERSION
-      --variable IMAGE_NAME
-      --variable RELEASE_TAG
-      --variable BUILD_TAG
-      --variable TMPL_SRC_IMAGE
-      --variable TMPL_SRC_REPO
-      --variable RELEASE_STAGING
-      --variable RELEASE_PROD
-      --variable DYNAMIC_BUILD_RENDER_RULES
-      --variable APPS
-      --variable BAZEL_TARGET
-      --variable DDR
-      --variable DDR_WORKFLOW_ID
-      --variable TARGET_ENV
-      --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
 
 docker_trigger_cluster_agent_internal:
@@ -125,22 +94,7 @@ docker_trigger_cluster_agent_internal:
         TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
       fi
     - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
-    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600
-      --variable IMAGE_VERSION
-      --variable IMAGE_NAME
-      --variable RELEASE_TAG
-      --variable BUILD_TAG
-      --variable TMPL_SRC_IMAGE
-      --variable TMPL_SRC_REPO
-      --variable RELEASE_STAGING
-      --variable RELEASE_PROD
-      --variable DYNAMIC_BUILD_RENDER_RULES
-      --variable APPS
-      --variable BAZEL_TARGET
-      --variable DDR
-      --variable DDR_WORKFLOW_ID
-      --variable TARGET_ENV
-      --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
 
 docker_trigger_cluster_agent_internal-fips:
@@ -172,22 +126,7 @@ docker_trigger_cluster_agent_internal-fips:
         TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
       fi
     - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
-    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600
-      --variable IMAGE_VERSION
-      --variable IMAGE_NAME
-      --variable RELEASE_TAG
-      --variable BUILD_TAG
-      --variable TMPL_SRC_IMAGE
-      --variable TMPL_SRC_REPO
-      --variable RELEASE_STAGING
-      --variable RELEASE_PROD
-      --variable DYNAMIC_BUILD_RENDER_RULES
-      --variable APPS
-      --variable BAZEL_TARGET
-      --variable DDR
-      --variable DDR_WORKFLOW_ID
-      --variable TARGET_ENV
-      --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
 
 docker_trigger_internal-full:
@@ -202,7 +141,7 @@ docker_trigger_internal-full:
   tags: ["arch:amd64"]
   variables:
     DYNAMIC_BUILD_RENDER_RULES: agent-build-only # fake rule to not trigger the ones in the images repo
-    IMAGE_VERSION: tmpl-v13
+    IMAGE_VERSION: tmpl-v14
     IMAGE_NAME: datadog-agent
     RELEASE_TAG: ${CI_COMMIT_REF_SLUG}-full
     BUILD_TAG: ${CI_COMMIT_REF_SLUG}-full
@@ -219,21 +158,36 @@ docker_trigger_internal-full:
         TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
       fi
     - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
-    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600
-      --variable IMAGE_VERSION
-      --variable IMAGE_NAME
-      --variable RELEASE_TAG
-      --variable BUILD_TAG
-      --variable TMPL_SRC_IMAGE
-      --variable TMPL_SRC_REPO
-      --variable TMPL_ADP_VERSION
-      --variable RELEASE_STAGING
-      --variable RELEASE_PROD
-      --variable DYNAMIC_BUILD_RENDER_RULES
-      --variable APPS
-      --variable BAZEL_TARGET
-      --variable DDR
-      --variable DDR_WORKFLOW_ID
-      --variable TARGET_ENV
-      --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+    - "dda inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable TMPL_ADP_VERSION --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
+  retry: 2
+
+docker_trigger_internal-ot_standalone:
+  stage: internal_image_deploy
+  rules: !reference [.on_deploy_internal_or_manual]
+  needs:
+    - job: docker_build_ot_agent_standalone_amd64
+      artifacts: false
+    - job: docker_build_ot_agent_standalone_arm64
+      artifacts: false
+  image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES
+  tags: ["arch:amd64"]
+  variables:
+    DYNAMIC_BUILD_RENDER_RULES: agent-build-only # fake rule to not trigger the ones in the images repo
+    IMAGE_VERSION: tmpl-v14
+    IMAGE_NAME: datadog-agent
+    RELEASE_TAG: ${CI_COMMIT_REF_SLUG}-7
+    BUILD_TAG: ${CI_COMMIT_REF_SLUG}-7
+    TMPL_SRC_IMAGE: v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7
+    TMPL_SRC_REPO: ci/datadog-agent/otel-agent
+    RELEASE_STAGING: "true"
+  script:
+    - GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_TOKEN write_api) || exit $?; export GITLAB_TOKEN
+    - if [ "$BUCKET_BRANCH" = "beta" ] || [ "$BUCKET_BRANCH" = "stable" ]; then TMPL_SRC_REPO="${TMPL_SRC_REPO}-release"; fi
+    - |
+      if [ "$BUCKET_BRANCH" = "nightly" ]; then
+        RELEASE_TAG="${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"
+        TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
+      fi
+    - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
+    - "inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref master --timeout 3600 --variable IMAGE_VERSION --variable IMAGE_NAME --variable RELEASE_TAG --variable BUILD_TAG --variable TMPL_SRC_IMAGE --variable TMPL_SRC_REPO --variable RELEASE_STAGING --variable RELEASE_PROD --variable DYNAMIC_BUILD_RENDER_RULES --variable APPS --variable BAZEL_TARGET --variable DDR --variable DDR_WORKFLOW_ID --variable TARGET_ENV --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
diff --git a/Dockerfiles/base-image/Dockerfile b/Dockerfiles/base-image/Dockerfile
new file mode 100644
index 000000000000..a1d96340ee75
--- /dev/null
+++ b/Dockerfiles/base-image/Dockerfile
@@ -0,0 +1,85 @@
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS baseimage
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+LABEL baseimage.os="ubuntu ${BASE_IMAGE_UBUNTU_NAME}"
+LABEL baseimage.name="ubuntu:${BASE_IMAGE_UBUNTU_VERSION}"
+LABEL org.opencontainers.image.base.name="ubuntu:${BASE_IMAGE_UBUNTU_VERSION}"
+LABEL maintainer="Datadog <package@datadoghq.com>"
+
+ARG CIBUILD
+# NOTE about APT mirrorlists:
+# It seems that this feature could use some improvement. If you just get mirrorlist
+# from mirrors.ubuntu.com/mirrors.txt, it might contain faulty mirrors that either
+# cause `apt update` to fail with exit code 100 or make it hang on `0% [Working]`
+# indefinitely. Therefore we create a mirrorlist with the 2 mirrors that we know
+# should be reliable enough in combination and also well maintained.
+RUN if [ "$CIBUILD" = "true" ]; then \
+  echo "http://us-east-1.ec2.archive.ubuntu.com/ubuntu\tpriority:1\nhttp://archive.ubuntu.com/ubuntu" > /etc/apt/mirrorlist.main && \
+  echo "http://us-east-1.ec2.ports.ubuntu.com/ubuntu-ports\tpriority:1\nhttp://ports.ubuntu.com/ubuntu-ports" > /etc/apt/mirrorlist.ports && \
+  sed -i -e 's#http://archive.ubuntu.com\S*#mirror+file:/etc/apt/mirrorlist.main#g' \
+         -e 's#http://security.ubuntu.com\S*#mirror+file:/etc/apt/mirrorlist.main#g' \
+         -e 's#http://ports.ubuntu.com\S*#mirror+file:/etc/apt/mirrorlist.ports#g' /etc/apt/sources.list; \
+  fi
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt update
+
+FROM baseimage AS nosys-seccomp
+COPY nosys-seccomp/nosys.c   /tmp/nosys.c
+COPY nosys-seccomp/nosys.sym /tmp/nosys.sym
+RUN apt install --no-install-recommends -y gcc libc6-dev libseccomp-dev
+RUN gcc -pipe -Wall -Wextra -O2 -shared -fPIC -Wl,--version-script=/tmp/nosys.sym -o /tmp/nosys.so /tmp/nosys.c  -lseccomp
+
+# ------------------------------
+# Final stage
+# ------------------------------
+
+FROM baseimage AS release
+
+ARG DD_GIT_REPOSITORY_URL
+ARG DD_GIT_COMMIT_SHA
+LABEL maintainer="Datadog <package@datadoghq.com>"
+
+ENV DEBIAN_FRONTEND=noninteractive
+# make sure we have recent dependencies -- CVE-fixing time!
+RUN apt full-upgrade -y && \
+    apt install -y tzdata ca-certificates adduser && \
+    apt clean && \
+    rm -rf /var/lib/apt/lists/*
+
+# Prepare for running without root
+# - Create a dd-agent:root user and give it permissions on relevant folders
+# - Remove the /var/run -> /run symlink and create a legit /var/run folder
+# as some docker versions re-create /run from zero at container start
+RUN adduser --system --no-create-home --disabled-password --ingroup root dd-agent \
+  && rm /var/run && mkdir -p /var/run/datadog /var/log/datadog/ /etc/datadog-agent \
+  && chown -R dd-agent:root /etc/datadog-agent/ /var/log/datadog/ /var/run/datadog/ \
+  && chmod g+r,g+w,g+X -R /etc/datadog-agent/ /var/log/datadog/ /var/run/datadog/
+
+# Check that the UID of dd-agent is still 100.
+#
+# The exact numeric value of the UID of the dd-agent user shouldn’t matter.
+# But people that don’t want to let the agent run as root might want to explicitly set a non-root user in their k8s security context.
+# And, in a k8s security context, we can only specify a numeric UID and not a username.
+# So, if the UID of the dd-agent user happen to change again and cannot be forced to 100 (because of a conflict), we need to update
+# * the documentation https://docs.datadoghq.com/data_security/kubernetes/#running-container-as-root-user
+#   (see PR https://github.com/DataDog/documentation/pull/21889)
+# * https://datadoghq.atlassian.net/wiki/spaces/TS/pages/2615709591/Why+the+containerized+Agent+runs+as+root#Agent-user
+RUN [ "$(getent passwd dd-agent | cut -d: -f 3)" -eq 100 ]
+
+# Configuration:
+#   - copy default config files
+COPY datadog*.yaml etc/datadog-agent/
+
+# Installation information
+COPY install_info etc/datadog-agent/
+
+# Ensure the glibc doesn't try to call syscalls that may not be supported
+COPY --from=nosys-seccomp /tmp/nosys.so /opt/lib/nosys.so
+ENV LD_PRELOAD=/opt/lib/nosys.so \
+    PATH="/opt/datadog-agent/embedded/bin:${PATH}" \
+    DD_GIT_COMMIT_SHA=${DD_GIT_COMMIT_SHA} \
+    DD_GIT_REPOSITORY_URL=${DD_GIT_REPOSITORY_URL}
diff --git a/Dockerfiles/base-image/datadog-ci.yaml b/Dockerfiles/base-image/datadog-ci.yaml
new file mode 100644
index 000000000000..2e779beeeeda
--- /dev/null
+++ b/Dockerfiles/base-image/datadog-ci.yaml
@@ -0,0 +1,8 @@
+## Provides defaults for CI environments,
+## please see datadog.yaml.example for all supported options
+
+hostname: "none"
+
+apm_config:
+  enabled: true
+  apm_non_local_traffic: true
diff --git a/Dockerfiles/base-image/datadog-docker.yaml b/Dockerfiles/base-image/datadog-docker.yaml
new file mode 100644
index 000000000000..4b13f55d674c
--- /dev/null
+++ b/Dockerfiles/base-image/datadog-docker.yaml
@@ -0,0 +1,8 @@
+## Provides autodetected defaults, for vanilla Docker environments,
+## please see datadog.yaml.example for all supported options
+
+apm_config:
+  apm_non_local_traffic: true
+
+# Use java container support
+jmx_use_container_support: true
diff --git a/Dockerfiles/base-image/datadog-ecs.yaml b/Dockerfiles/base-image/datadog-ecs.yaml
new file mode 100644
index 000000000000..9a65c5256389
--- /dev/null
+++ b/Dockerfiles/base-image/datadog-ecs.yaml
@@ -0,0 +1,9 @@
+## Provides autodetected defaults, for ECS Fargate environments,
+## please see datadog.yaml.example for all supported options
+
+# Enable APM by setting the DD_APM_ENABLED envvar to true, or override this configuration
+apm_config:
+  apm_non_local_traffic: true
+
+# Use java container support
+jmx_use_container_support: true
diff --git a/Dockerfiles/base-image/datadog-kubernetes.yaml b/Dockerfiles/base-image/datadog-kubernetes.yaml
new file mode 100644
index 000000000000..5532007364d0
--- /dev/null
+++ b/Dockerfiles/base-image/datadog-kubernetes.yaml
@@ -0,0 +1,8 @@
+## Provides autodetected defaults, for kubernetes environments,
+## please see datadog.yaml.example for all supported options
+
+apm_config:
+  apm_non_local_traffic: true
+
+# Use java container support
+jmx_use_container_support: true
diff --git a/Dockerfiles/base-image/install_info b/Dockerfiles/base-image/install_info
new file mode 100644
index 000000000000..c91f22b82e19
--- /dev/null
+++ b/Dockerfiles/base-image/install_info
@@ -0,0 +1,5 @@
+---
+install_method:
+  tool: docker
+  tool_version: docker
+  installer_version: docker
diff --git a/Dockerfiles/base-image/nosys-seccomp/README.md b/Dockerfiles/base-image/nosys-seccomp/README.md
new file mode 100644
index 000000000000..4c8b4de8b734
--- /dev/null
+++ b/Dockerfiles/base-image/nosys-seccomp/README.md
@@ -0,0 +1,3 @@
+In order to fix issues with newer system calls (`clone3`, `faccessat2`) that may not be present in
+default `seccomp` profile used by older versions of Docker, containerd, etc, this wrapper
+adds `seccomp` rules to make sure these syscalls are returning `ENOSYS` instead of `EPERM`.
diff --git a/Dockerfiles/base-image/nosys-seccomp/nosys.c b/Dockerfiles/base-image/nosys-seccomp/nosys.c
new file mode 100644
index 000000000000..dd29b60a37ac
--- /dev/null
+++ b/Dockerfiles/base-image/nosys-seccomp/nosys.c
@@ -0,0 +1,113 @@
+#define _GNU_SOURCE // Needed for the TEMP_FAILURE_RETRY macro.
+#include <stdlib.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <linux/wait.h>
+#include <linux/sched.h>
+#include <seccomp.h>
+
+static void cleanup_fd(int *dirfd) {
+    if (close(*dirfd) < 0) {
+        perror("Failed to close \"/\"");
+    }
+}
+
+static bool test_faccessat2(void) {
+    int dirfd __attribute__((__cleanup__(cleanup_fd))) = TEMP_FAILURE_RETRY(open("/", O_CLOEXEC | O_DIRECTORY));
+    if (dirfd < 0)
+        perror("failed to open \"/\"");
+
+    long rc = syscall(SYS_faccessat2, dirfd, "/", F_OK, 0);
+
+    // Success or not implemented
+    if (rc == 0 || errno == ENOSYS)
+        return true;
+
+    // Blocked by docker seccomp profile
+    if (rc < 0 && errno == EPERM)
+        return false;
+
+    perror("failed to faccessat2");
+    return true;
+}
+
+static bool test_clone3(void) {
+    int child_pidfd;
+    struct clone_args cl_args = {
+        .exit_signal = SIGCHLD,
+        .flags = CLONE_PIDFD,
+        .pidfd = (uint64_t)&child_pidfd
+    };
+
+    long rc = syscall(SYS_clone3, &cl_args, sizeof(cl_args));
+
+    // Child process
+    if (rc == 0)
+        exit(EXIT_SUCCESS);
+
+    // Success
+    else if (rc > 0) {
+        siginfo_t infop;
+        if (TEMP_FAILURE_RETRY(waitid(P_PIDFD, child_pidfd, &infop, WEXITED)) < 0)
+            perror("failed to waitid");
+        return true;
+    }
+
+    // Not implemented
+    else if (rc < 0 && errno == ENOSYS)
+        return true;
+
+    // Blocked by docker seccomp profile
+    if (rc < 0 && errno == EPERM)
+        return false;
+
+    perror("failed to clone3");
+    return true;
+}
+
+static void cleanup_seccomp_ctx(scmp_filter_ctx *ctx) {
+    seccomp_release(*ctx);
+}
+
+__attribute__((constructor, visibility("hidden"))) void nosys_init(void) {
+    bool faccessat2_is_usable = test_faccessat2();
+    bool clone3_is_usable = test_clone3();
+
+    if (faccessat2_is_usable && clone3_is_usable)
+        return;
+
+    scmp_filter_ctx ctx __attribute__((cleanup(cleanup_seccomp_ctx))) = seccomp_init(SCMP_ACT_ALLOW);
+    if (ctx == NULL) {
+        fputs("seccomp_init failed\n", stderr);
+        return;
+    }
+
+    if (!faccessat2_is_usable) {
+        fputs("faccessat2 seems blocked by the seccomp profile of an old version of docker.\n", stderr);
+        int rc = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(ENOSYS), SCMP_SYS(faccessat2), 0);
+        if (rc < 0)
+            fprintf(stderr, "seccomp_rule_add failed: %s\n", strerror(-rc));
+    }
+
+    if (!clone3_is_usable) {
+        fputs("clone3 seems blocked by the seccomp profile of an old version of docker.\n", stderr);
+        int rc = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(ENOSYS), SCMP_SYS(clone3), 0);
+        if (rc < 0)
+            fprintf(stderr, "seccomp_rule_add failed: %s\n", strerror(-rc));
+    }
+
+    fputs("load a seccomp profile to force ENOSYS.\n", stderr);
+    int rc = seccomp_load(ctx);
+    if (rc < 0) {
+        fprintf(stderr, "seccomp_load failed: %s\n", strerror(-rc));
+        return;
+    }
+}
diff --git a/Dockerfiles/base-image/nosys-seccomp/nosys.sym b/Dockerfiles/base-image/nosys-seccomp/nosys.sym
new file mode 100644
index 000000000000..071e32cfa199
--- /dev/null
+++ b/Dockerfiles/base-image/nosys-seccomp/nosys.sym
@@ -0,0 +1,4 @@
+{
+local:
+  *;
+};
diff --git a/Dockerfiles/otel-agent/Dockerfile b/Dockerfiles/otel-agent/Dockerfile
new file mode 100644
index 000000000000..e8cd8f3845ca
--- /dev/null
+++ b/Dockerfiles/otel-agent/Dockerfile
@@ -0,0 +1,94 @@
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install dda && \
+    dda self dep sync -f legacy-tasks
+
+# Generate the files
+RUN . venv/bin/activate && invoke collector.generate
+
+# Build the OTel agent
+RUN . venv/bin/activate && invoke otel-agent.build
+
+# ------------------------------
+# Inject the otel-agent in the base image
+# ------------------------------
+
+FROM $AGENT_BASE_IMAGE_TAG AS release
+
+LABEL org.opencontainers.image.title="Otel Agent"
+# Copy the built OTel agent from the builder stage
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/otel-agent /opt/datadog-agent/embedded/bin/otel-agent
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/dist/otel-config.yaml /etc/datadog-agent/otel-config.yaml
+# Find all directories and files in /etc with world-writable permissions and remove write permissions for group and others
+RUN find /etc -type d,f -perm -o+w -print0 | xargs -r -0 chmod g-w,o-w
+
+ENTRYPOINT ["/bin/bash"]
+CMD ["/opt/datadog-agent/embedded/bin/otel-agent", "run"]


Reviews:
user: login: spencergilbert
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T13:26:17Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T13:29:38Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T13:31:12Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T13:31:58Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T13:32:59Z
user: login: vboulineau
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-11T17:42:59Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T11:02:32Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T11:03:13Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T11:05:00Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T11:33:00Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T14:03:50Z
user: login: vboulineau
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T16:16:26Z
user: login: spencergilbert
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T13:02:58Z
user: login: dineshg13
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-18T20:30:09Z
user: login: AliDatadog
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-22T12:41:55Z
user: login: dineshg13
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-22T14:49:08Z
user: login: ogaca-dd
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-28T09:32:01Z
user: login: mackjmr
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-28T09:33:25Z

Review comments:
diff_hunk: @@ -15,10 +15,15 @@
     - DOCKER_LOGIN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO user) || exit $?
     - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO token | docker login --username "$DOCKER_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL"
     - EXIT="${PIPESTATUS[0]}"; if [ $EXIT -ne 0 ]; then echo "Unable to locate credentials needs gitlab runner restart"; exit $EXIT; fi
+    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/agent-base-image:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-base-image-$ARCH
     # Build image, use target none label to avoid replication
-    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
-    # Squash image
-    - crane flatten -t ${TARGET_TAG} ${TARGET_TAG}
+    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg AGENT_BASE_IMAGE_TAG=${AGENT_BASE_IMAGE_TAG} --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
path: .gitlab/container_build/docker_linux.yml
user: login: spencergilbert
body: <!-- Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously.  -->
**💬 suggestion:** ‏ we should consider rewriting these into a form with line breaks to create more readable diffs in the future (this shouldn't be part of this PR, but a task opened if you agree).
created_at: 2025-03-11T13:09:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -15,10 +15,15 @@
     - DOCKER_LOGIN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO user) || exit $?
     - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO token | docker login --username "$DOCKER_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL"
     - EXIT="${PIPESTATUS[0]}"; if [ $EXIT -ne 0 ]; then echo "Unable to locate credentials needs gitlab runner restart"; exit $EXIT; fi
+    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/agent-base-image:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-base-image-$ARCH
     # Build image, use target none label to avoid replication
-    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
-    # Squash image
-    - crane flatten -t ${TARGET_TAG} ${TARGET_TAG}
+    - docker buildx build --no-cache --push --pull --platform linux/$ARCH --build-arg AGENT_BASE_IMAGE_TAG=${AGENT_BASE_IMAGE_TAG} --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} --file $BUILD_CONTEXT/Dockerfile --tag ${TARGET_TAG} --label "org.opencontainers.image.created=$(date --rfc-3339=seconds)" --label "org.opencontainers.image.authors=Datadog <package@datadoghq.com>" --label "org.opencontainers.image.source=https://github.com/DataDog/datadog-agent" --label "org.opencontainers.image.version=$(inv agent.version)" --label "org.opencontainers.image.revision=${CI_COMMIT_SHA}" --label "org.opencontainers.image.vendor=Datadog, Inc." --label "target=none" $BUILD_CONTEXT
path: .gitlab/container_build/docker_linux.yml
user: login: spencergilbert
body: Double-checking, this just added the new AGENT_BASE_IMAGE_TAG build-arg?
created_at: 2025-03-11T13:10:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -198,6 +203,49 @@ docker_build_ot_agent7_arm64:
     TAG_SUFFIX: -7-ot-beta
     BUILD_ARG: --target test --build-arg DD_AGENT_ARTIFACT=datadog-*-7*-arm64.tar.xz
 
+# agent base image for standalone images
+.docker_build_base_image:
+  extends: [.docker_build_job_definition_amd64]
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs: []
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/agent-base-image
+    BUILD_CONTEXT: Dockerfiles/base-image
+    BUILD_ARG: --target release
+    TAG_SUFFIX: -base-image
+
+# agent base image for standalone images
+docker_build_base_image_amd64:
+  extends: [.docker_build_base_image, .docker_build_job_definition_amd64]
+
+# agent base image for standalone images
+docker_build_base_image:
+  extends: [.docker_build_base_image, .docker_build_job_definition_arm64]
+
+
+# standalone otel-agent
+.docker_build_ot_agent_standalone:
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs:
+    - job: docker_build_base_image
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/otel-agent
+    BUILD_CONTEXT: Dockerfiles/otel-agent
+    FLATTEN_IMAGE: false
+    BUILD_ARG: --target release
+    TAG_SUFFIX: -7
+
+docker_build_ot_agent_standalone_amd64:
+  extends: [.docker_build_ot_agent_standalone, .docker_build_job_definition_amd64]
+
+docker_build_ot_agent_standalone_arm64:
+  extends: [.docker_build_ot_agent_standalone, .docker_build_job_definition_arm64]
path: .gitlab/container_build/docker_linux.yml
user: login: spencergilbert
body: <!-- Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously.  -->
**💬 suggestion:** ‏ 

A few things here:
- the first three comments are identical and don't seem particularly useful
- `docker_base_build_image` extends `_arm64` and this should likely be reflected in the name
- `.docker_build_base_image` extends `.docker_build_job_definition_amd64` and then the arch variants import the non-arch job as well as the `.docker_build_job_definition_*`'s, this seems either a mistake or confusing and possible needing a comment
created_at: 2025-03-11T13:17:54Z
author_association: CONTRIBUTOR
diff_hunk: @@ -233,3 +233,49 @@ docker_trigger_cluster_agent_internal-fips:
       --variable TARGET_ENV
       --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
+
+docker_trigger_internal-ot_standalone:
+  stage: internal_image_deploy
+  rules: !reference [.on_deploy_internal_or_manual]
+  needs:
+    - job: docker_build_ot_agent_standalone_amd64
+      artifacts: false
+    - job: docker_build_ot_agent_standalone_arm64
+      artifacts: false
+  image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES
+  tags: ["arch:amd64"]
+  variables:
path: .gitlab/internal_image_deploy/internal_image_deploy.yml
user: login: spencergilbert
body: <!-- Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously.  -->
**💬 suggestion:** ‏ we may want to consider hoisting some of these variables into a more global place to reduce the copy-pasting of them, it feels like it's getting a bit out of control.
created_at: 2025-03-11T13:19:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -233,3 +233,49 @@ docker_trigger_cluster_agent_internal-fips:
       --variable TARGET_ENV
       --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
+
+docker_trigger_internal-ot_standalone:
+  stage: internal_image_deploy
+  rules: !reference [.on_deploy_internal_or_manual]
+  needs:
+    - job: docker_build_ot_agent_standalone_amd64
+      artifacts: false
+    - job: docker_build_ot_agent_standalone_arm64
+      artifacts: false
+  image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES
+  tags: ["arch:amd64"]
+  variables:
+    DYNAMIC_BUILD_RENDER_RULES: agent-build-only # fake rule to not trigger the ones in the images repo
+    IMAGE_VERSION: tmpl-v13
+    IMAGE_NAME: datadog-agent
+    RELEASE_TAG: ${CI_COMMIT_REF_SLUG}-7
+    BUILD_TAG: ${CI_COMMIT_REF_SLUG}-7
+    TMPL_SRC_IMAGE: v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7
+    TMPL_SRC_REPO: ci/datadog-agent/otel-agent
+    RELEASE_STAGING: "true"
+  script:
+    - GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_TOKEN write_api) || exit $?; export GITLAB_TOKEN
+    - if [ "$BUCKET_BRANCH" = "beta" ] || [ "$BUCKET_BRANCH" = "stable" ]; then TMPL_SRC_REPO="${TMPL_SRC_REPO}-release"; fi
+    - |
+      if [ "$BUCKET_BRANCH" = "nightly" ]; then
+        RELEASE_TAG="${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"
+        TMPL_SRC_REPO="${TMPL_SRC_REPO}-nightly"
+      fi
+    - if [ "$BUCKET_BRANCH" = "dev" ]; then RELEASE_TAG="dev-${RELEASE_TAG}-${CI_COMMIT_SHORT_SHA}"; fi
+    - "inv pipeline.trigger-child-pipeline --project-name DataDog/images --git-ref ali/otel-image --timeout 3600
path: .gitlab/internal_image_deploy/internal_image_deploy.yml
user: login: spencergilbert
body: TODO: "in-code" reminder that the git-ref needs to be updated before merging 👍 
created_at: 2025-03-11T13:19:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,86 @@
+# Use the Ubuntu Slim AMD64 base image
path: Dockerfiles/base-image/Dockerfile
user: login: spencergilbert
body: <!-- Questions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution.  -->
**❓ question:** ‏ it doesn't look like the following ARGs set either "slim" or amd64?
created_at: 2025-03-11T13:20:39Z
author_association: CONTRIBUTOR
path: Dockerfiles/base-image/Dockerfile
user: login: spencergilbert
body: <!-- Questions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution.  -->
**❓ question:** ‏ I remember you asking about standard labels and annotations, were there any others we should include in this Dockerfile?
created_at: 2025-03-11T13:21:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
path: Dockerfiles/otel-agent/Dockerfile
user: login: spencergilbert
body: Same as in the base-image Dockerfile
created_at: 2025-03-11T13:22:33Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install -r requirements.txt
+
+# TODO confirm if we can remove this
+# Copy the manifest file
+# COPY manifest.yaml /workspace/datadog-agent/comp/otelcol/collector-contrib/impl/manifest.yaml
+
+# Generate the files
+RUN . venv/bin/activate && invoke collector.generate
+
+# Build the OTel agent
+RUN . venv/bin/activate && invoke otel-agent.build
+
+# ------------------------------
+# Inject the otel-agent in the base image
+# ------------------------------
+
+FROM $AGENT_BASE_IMAGE_TAG AS release
+
+LABEL org.opencontainers.image.title="Otel Agent"
+# Copy the built OTel agent from the builder stage
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/otel-agent /opt/datadog-agent/embedded/bin/otel-agent
+# TODO: confirm if this should be copied to otel-config.yaml.example
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/dist/otel-config.yaml /etc/datadog-agent/otel-config.yaml
+
+RUN find /etc -type d,f -perm -o+w -print0 | xargs -r -0 chmod g-w,o-w
path: Dockerfiles/otel-agent/Dockerfile
user: login: spencergilbert
body: <!-- Suggestions are specific requests to improve the subject under review. It is assumed that we all want to do what's best, so these comments are never dismissed as “mere suggestions”, but are taken seriously.  -->
**💬 suggestion:** ‏ comment what this pipeline of commands should be doing
created_at: 2025-03-11T13:23:13Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install -r requirements.txt
+
+# TODO confirm if we can remove this
path: Dockerfiles/otel-agent/Dockerfile
user: login: spencergilbert
body: <!-- Questions are appropriate if you have a potential concern but are not quite sure if it's relevant or not. Asking the author for clarification or investigation can lead to a quick resolution.  -->
**❓ question:** ‏ should we resolve this todo before merging or should we track it longer term?
created_at: 2025-03-11T13:23:37Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install -r requirements.txt
+
+# TODO confirm if we can remove this
path: Dockerfiles/otel-agent/Dockerfile
user: login: AliDatadog
body: This one should be confirmed by otel
created_at: 2025-03-11T13:29:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,86 @@
+# Use the Ubuntu Slim AMD64 base image
path: Dockerfiles/base-image/Dockerfile
user: login: AliDatadog
body: Indeed, I'll clean this up. I took it from the existing otel dockerfile
created_at: 2025-03-11T13:31:12Z
author_association: CONTRIBUTOR
path: Dockerfiles/base-image/Dockerfile
user: login: AliDatadog
body: I think I aligned on what we already use. If we need to add more I think we should do it in another PR
created_at: 2025-03-11T13:31:58Z
author_association: CONTRIBUTOR
diff_hunk: @@ -233,3 +233,49 @@ docker_trigger_cluster_agent_internal-fips:
       --variable TARGET_ENV
       --variable DYNAMIC_BUILD_RENDER_TARGET_FORWARD_PARAMETERS"
   retry: 2
+
+docker_trigger_internal-ot_standalone:
+  stage: internal_image_deploy
+  rules: !reference [.on_deploy_internal_or_manual]
+  needs:
+    - job: docker_build_ot_agent_standalone_amd64
+      artifacts: false
+    - job: docker_build_ot_agent_standalone_arm64
+      artifacts: false
+  image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES
+  tags: ["arch:amd64"]
+  variables:
path: .gitlab/internal_image_deploy/internal_image_deploy.yml
user: login: AliDatadog
body: I was thinking of doing a small refactoring but I think it should belong to another PR
created_at: 2025-03-11T13:32:59Z
author_association: CONTRIBUTOR
diff_hunk: @@ -15,10 +15,15 @@
     - DOCKER_LOGIN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO user) || exit $?
     - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO token | docker login --username "$DOCKER_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL"
     - EXIT="${PIPESTATUS[0]}"; if [ $EXIT -ne 0 ]; then echo "Unable to locate credentials needs gitlab runner restart"; exit $EXIT; fi
+    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/agent-base-image:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-base-image-$ARCH
path: .gitlab/container_build/docker_linux.yml
user: login: vboulineau
body: There's is `base-image` in the repo name + `base-image` in the tag name, seems redundant
created_at: 2025-03-11T17:15:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,8 @@
+## Provides defaults for CI environments,
path: Dockerfiles/base-image/datadog-ci.yaml
user: login: vboulineau
body: Shouldn't all this be symlinks?
created_at: 2025-03-11T17:42:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -198,6 +203,49 @@ docker_build_ot_agent7_arm64:
     TAG_SUFFIX: -7-ot-beta
     BUILD_ARG: --target test --build-arg DD_AGENT_ARTIFACT=datadog-*-7*-arm64.tar.xz
 
+# agent base image for standalone images
+.docker_build_base_image:
+  extends: [.docker_build_job_definition_amd64]
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs: []
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/agent-base-image
+    BUILD_CONTEXT: Dockerfiles/base-image
+    BUILD_ARG: --target release
+    TAG_SUFFIX: -base-image
+
+# agent base image for standalone images
+docker_build_base_image_amd64:
+  extends: [.docker_build_base_image, .docker_build_job_definition_amd64]
+
+# agent base image for standalone images
+docker_build_base_image:
+  extends: [.docker_build_base_image, .docker_build_job_definition_arm64]
+
+
+# standalone otel-agent
+.docker_build_ot_agent_standalone:
+  rules:
+    - !reference [.except_mergequeue]
+    - when: on_success
+  needs:
+    - job: docker_build_base_image
+  variables:
+    IMAGE: registry.ddbuild.io/ci/datadog-agent/otel-agent
+    BUILD_CONTEXT: Dockerfiles/otel-agent
+    FLATTEN_IMAGE: false
+    BUILD_ARG: --target release
+    TAG_SUFFIX: -7
+
+docker_build_ot_agent_standalone_amd64:
+  extends: [.docker_build_ot_agent_standalone, .docker_build_job_definition_amd64]
+
+docker_build_ot_agent_standalone_arm64:
+  extends: [.docker_build_ot_agent_standalone, .docker_build_job_definition_arm64]
path: .gitlab/container_build/docker_linux.yml
user: login: AliDatadog
body: Indeed, I think it can be improved. I proposed a fix in the latest commit. Let me know what you think
created_at: 2025-03-17T11:02:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,86 @@
+# Use the Ubuntu Slim AMD64 base image
path: Dockerfiles/base-image/Dockerfile
user: login: AliDatadog
body: Done
created_at: 2025-03-17T11:03:13Z
author_association: CONTRIBUTOR
diff_hunk: @@ -15,10 +15,15 @@
     - DOCKER_LOGIN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO user) || exit $?
     - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DOCKER_REGISTRY_RO token | docker login --username "$DOCKER_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL"
     - EXIT="${PIPESTATUS[0]}"; if [ $EXIT -ne 0 ]; then echo "Unable to locate credentials needs gitlab runner restart"; exit $EXIT; fi
+    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/agent-base-image:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-base-image-$ARCH
path: .gitlab/container_build/docker_linux.yml
user: login: AliDatadog
body: Nice catch! I removed the tag suffix in the last commit
created_at: 2025-03-17T11:05:00Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,8 @@
+## Provides defaults for CI environments,
path: Dockerfiles/base-image/datadog-ci.yaml
user: login: AliDatadog
body: Docker doesn't support symlinks outside of the build context. IMO the best path forward is to store these files in a single place and inject them but I think it should be done when we introduce an invoke command to standardize it
created_at: 2025-03-17T11:33:00Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install -r requirements.txt
+
+# TODO confirm if we can remove this
+# Copy the manifest file
+# COPY manifest.yaml /workspace/datadog-agent/comp/otelcol/collector-contrib/impl/manifest.yaml
+
+# Generate the files
+RUN . venv/bin/activate && invoke collector.generate
+
+# Build the OTel agent
+RUN . venv/bin/activate && invoke otel-agent.build
+
+# ------------------------------
+# Inject the otel-agent in the base image
+# ------------------------------
+
+FROM $AGENT_BASE_IMAGE_TAG AS release
+
+LABEL org.opencontainers.image.title="Otel Agent"
+# Copy the built OTel agent from the builder stage
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/otel-agent /opt/datadog-agent/embedded/bin/otel-agent
+# TODO: confirm if this should be copied to otel-config.yaml.example
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/dist/otel-config.yaml /etc/datadog-agent/otel-config.yaml
+
+RUN find /etc -type d,f -perm -o+w -print0 | xargs -r -0 chmod g-w,o-w
path: Dockerfiles/otel-agent/Dockerfile
user: login: AliDatadog
body: Done !
created_at: 2025-03-17T14:03:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,99 @@
+# Use the Ubuntu Slim AMD64 base image
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install -r requirements.txt
+
+# TODO confirm if we can remove this
path: Dockerfiles/otel-agent/Dockerfile
user: login: spencergilbert
body: Is this still outstanding?
created_at: 2025-03-18T13:01:55Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,94 @@
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install dda && \
+    dda self dep sync -f legacy-tasks
+
+# Generate the files
+RUN . venv/bin/activate && invoke collector.generate
+
+# Build the OTel agent
+RUN . venv/bin/activate && invoke otel-agent.build
+
+# ------------------------------
+# Inject the otel-agent in the base image
+# ------------------------------
+
+FROM $AGENT_BASE_IMAGE_TAG AS release
+
+LABEL org.opencontainers.image.title="Otel Agent"
+# Copy the built OTel agent from the builder stage
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/otel-agent /opt/datadog-agent/embedded/bin/otel-agent
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/dist/otel-config.yaml /etc/datadog-agent/otel-config.yaml
+# Find all directories and files in /etc with world-writable permissions and remove write permissions for group and others
+RUN find /etc -type d,f -perm -o+w -print0 | xargs -r -0 chmod g-w,o-w
+
+ENTRYPOINT ["/bin/bash"]
path: Dockerfiles/otel-agent/Dockerfile
user: login: dineshg13
body: Why is entry point bash? shouldn't it be OTel Agent binary 
created_at: 2025-04-18T20:30:09Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,94 @@
+ARG BASE_IMAGE_UBUNTU_VERSION=24.04
+ARG BASE_IMAGE_UBUNTU_NAME=noble
+ARG AGENT_BASE_IMAGE_TAG
+
+# ------------------------------
+# Build the OTel agent
+# ------------------------------
+FROM ubuntu:$BASE_IMAGE_UBUNTU_VERSION AS builder
+ARG BASE_IMAGE_UBUNTU_VERSION
+ARG BASE_IMAGE_UBUNTU_NAME
+
+# Set environment variables
+ARG DD_GIT_COMMIT_SHA
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Set the working directory
+WORKDIR /workspace
+
+# Update and install necessary packages
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+    curl \
+    ca-certificates \
+    software-properties-common \
+    build-essential \
+    git \
+    python3 \
+    python3-pip \
+    python3-venv
+
+# TODO: For now we have to clone the whole repository and checkout to a specific commit / ref / branch then recompile the otel-agent
+# Cloning the whole repo is necessary because `get_version` in the build script runs git describe --tags --candidates=50...
+# We should eventually just fetch the binary and just copy it
+RUN git clone --filter=blob:none https://github.com/DataDog/datadog-agent.git datadog-agent && \
+    cd datadog-agent && \
+    git checkout $DD_GIT_COMMIT_SHA
+
+RUN ls /workspace/
+
+# Set the working directory to the source code
+WORKDIR /workspace/datadog-agent
+
+# Install Go based on architecture
+RUN GO_VERSION=$(cat .go-version) && \
+    ARCH=$(dpkg --print-architecture) && \
+    if [ "$ARCH" = "amd64" ]; then \
+    GO_ARCH="linux-amd64"; \
+    elif [ "$ARCH" = "arm64" ]; then \
+    GO_ARCH="linux-arm64"; \
+    else \
+    echo "Unsupported architecture: $ARCH" && exit 1; \
+    fi && \
+    curl -OL https://golang.org/dl/go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    tar -C /usr/local -xzf go${GO_VERSION}.$GO_ARCH.tar.gz && \
+    rm go${GO_VERSION}.$GO_ARCH.tar.gz
+
+# Set up Go environment
+ENV PATH="/usr/local/go/bin:${PATH}"
+RUN mkdir /go
+ENV GOPATH=/go
+
+# Verify installations
+RUN go version && \
+    python3 --version && \
+    curl --version
+
+# Create and activate virtual environment, then install requirements
+RUN python3 -m venv venv && \
+    . venv/bin/activate && \
+    pip install --upgrade pip && \
+    pip install dda && \
+    dda self dep sync -f legacy-tasks
+
+# Generate the files
+RUN . venv/bin/activate && invoke collector.generate
+
+# Build the OTel agent
+RUN . venv/bin/activate && invoke otel-agent.build
+
+# ------------------------------
+# Inject the otel-agent in the base image
+# ------------------------------
+
+FROM $AGENT_BASE_IMAGE_TAG AS release
+
+LABEL org.opencontainers.image.title="Otel Agent"
+# Copy the built OTel agent from the builder stage
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/otel-agent /opt/datadog-agent/embedded/bin/otel-agent
+COPY --from=builder /workspace/datadog-agent/bin/otel-agent/dist/otel-config.yaml /etc/datadog-agent/otel-config.yaml
+# Find all directories and files in /etc with world-writable permissions and remove write permissions for group and others
+RUN find /etc -type d,f -perm -o+w -print0 | xargs -r -0 chmod g-w,o-w
+
+ENTRYPOINT ["/bin/bash"]
path: Dockerfiles/otel-agent/Dockerfile
user: login: AliDatadog
body: The entrypoint is bash so that you can just run `docker run -it <image> sh` but the default CMD is the binary
created_at: 2025-04-22T12:41:55Z
author_association: CONTRIBUTOR

PR comments:
user: login: agent-platform-auto-pr[bot]
created_at: 2025-02-17T12:25:24Z
body: 
[Fast Unit Tests Report]

On pipeline [59012219](https://gitlab.ddbuild.io/DataDog/datadog-agent/-/pipelines/59012219) ([CI Visibility](https://app.datadoghq.com/ci/pipeline-executions?query=ci_level%3Apipeline%20%40ci.pipeline.name%3ADataDog%2Fdatadog-agent%20%40ci.pipeline.id%3A59012219&fromUser=false&index=cipipeline)). The following jobs did not run any unit tests:

<details>
<summary>Jobs:</summary>

  - tests_deb-arm64-py3
  - tests_deb-x64-py3
  - tests_flavor_dogstatsd_deb-x64
  - tests_flavor_heroku_deb-x64
  - tests_flavor_iot_deb-x64
  - tests_rpm-arm64-py3
  - tests_rpm-x64-py3
  - tests_windows-x64
</details>

If you modified Go files and expected unit tests to run in these jobs, please double check the job logs. If you think tests should have been executed reach out to #agent-devx-help
author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-02-17T12:26:42Z
body: ## Gitlab CI Configuration Changes

<details><summary><h2>Updated: .gitlab-ci.yml</h2></summary>

:warning: Diff too large to display on Github.

### Changes Summary
| Removed | Modified | Added | Renamed |
| ------- | -------- | ----- | ------- |
| 0 | 88 | 8 | 0 |

</details>
<details><summary><h2>Updated: .gitlab/deploy_containers/deploy_containers_a7.yml</h2></summary>

:warning: Diff too large to display on Github.

### Changes Summary
| Removed | Modified | Added | Renamed |
| ------- | -------- | ----- | ------- |
| 0 | 25 | 0 | 0 |

</details>

:information_source: *Diff available in the [job log](https://gitlab.ddbuild.io/DataDog/datadog-agent/-/jobs/918348309).*
author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-02-17T12:48:19Z
body: ## Uncompressed package size comparison

Comparison with [ancestor](https://github.com/DataDog/datadog-agent/commit/47381946b20644a51799fade30673fef6d708f93) `47381946b20644a51799fade30673fef6d708f93`


<details>
  <summary> Diff per package </summary>

|package|diff|status|size|ancestor|threshold|
|--|--|--|--|--|--|
|datadog-agent-x86_64-rpm|0.00MB|✅|788.81MB|788.81MB|0.50MB|
|datadog-agent-x86_64-suse|0.00MB|✅|788.81MB|788.81MB|0.50MB|
|datadog-agent-amd64-deb|0.00MB|✅|779.87MB|779.87MB|0.50MB|
|datadog-agent-arm64-deb|0.00MB|✅|769.96MB|769.96MB|0.50MB|
|datadog-agent-aarch64-rpm|0.00MB|✅|778.88MB|778.88MB|0.50MB|
|datadog-dogstatsd-amd64-deb|0.00MB|✅|31.17MB|31.17MB|0.50MB|
|datadog-dogstatsd-x86_64-rpm|0.00MB|✅|31.25MB|31.25MB|0.50MB|
|datadog-dogstatsd-x86_64-suse|0.00MB|✅|31.25MB|31.25MB|0.50MB|
|datadog-dogstatsd-arm64-deb|0.00MB|✅|30.00MB|30.00MB|0.50MB|
|datadog-heroku-agent-amd64-deb|0.00MB|✅|367.88MB|367.88MB|0.50MB|
|datadog-iot-agent-amd64-deb|0.00MB|✅|60.81MB|60.81MB|0.50MB|
|datadog-iot-agent-x86_64-rpm|0.00MB|✅|60.89MB|60.89MB|0.50MB|
|datadog-iot-agent-x86_64-suse|0.00MB|✅|60.89MB|60.89MB|0.50MB|
|datadog-iot-agent-arm64-deb|0.00MB|✅|58.11MB|58.11MB|0.50MB|
|datadog-iot-agent-aarch64-rpm|0.00MB|✅|58.19MB|58.19MB|0.50MB|

</details>

## Decision
✅ Passed



author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-02-17T12:53:35Z
body: ## Static quality checks ✅

Please find below the results from static quality gates


<details>
<summary>Successful checks</summary>

### Info

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|✅|static_quality_gate_agent_deb_amd64|788.99MiB|801.8MiB|192.29MiB|202.62MiB|
|✅|static_quality_gate_agent_deb_arm64|780.34MiB|793.14MiB|174.09MiB|184.51MiB|
|✅|static_quality_gate_agent_rpm_amd64|788.96MiB|801.79MiB|194.36MiB|205.03MiB|
|✅|static_quality_gate_agent_rpm_arm64|780.34MiB|793.09MiB|175.88MiB|186.44MiB|
|✅|static_quality_gate_agent_suse_amd64|788.98MiB|801.81MiB|194.36MiB|205.03MiB|
|✅|static_quality_gate_agent_suse_arm64|780.34MiB|793.14MiB|175.88MiB|186.44MiB|
|✅|static_quality_gate_dogstatsd_deb_amd64|37.67MiB|47.67MiB|9.78MiB|19.78MiB|
|✅|static_quality_gate_dogstatsd_deb_arm64|36.28MiB|46.27MiB|8.48MiB|18.49MiB|
|✅|static_quality_gate_dogstatsd_rpm_amd64|37.67MiB|47.67MiB|9.79MiB|19.79MiB|
|✅|static_quality_gate_dogstatsd_suse_amd64|37.67MiB|47.67MiB|9.79MiB|19.79MiB|
|✅|static_quality_gate_iot_agent_deb_amd64|59.28MiB|69.0MiB|14.89MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_deb_arm64|56.65MiB|66.4MiB|12.83MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_rpm_amd64|59.28MiB|69.0MiB|14.92MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_rpm_arm64|56.65MiB|66.4MiB|12.86MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_suse_amd64|59.28MiB|69.0MiB|14.92MiB|24.8MiB|
|✅|static_quality_gate_docker_agent_amd64|873.58MiB|886.12MiB|293.85MiB|304.21MiB|
|✅|static_quality_gate_docker_agent_arm64|888.23MiB|900.79MiB|280.11MiB|290.47MiB|
|✅|static_quality_gate_docker_agent_jmx_amd64|1.05GiB|1.06GiB|368.97MiB|379.33MiB|
|✅|static_quality_gate_docker_agent_jmx_arm64|1.05GiB|1.06GiB|351.16MiB|361.55MiB|
|✅|static_quality_gate_docker_dogstatsd_amd64|45.82MiB|55.78MiB|17.28MiB|27.28MiB|
|✅|static_quality_gate_docker_dogstatsd_arm64|44.45MiB|54.45MiB|16.16MiB|26.16MiB|
|✅|static_quality_gate_docker_cluster_agent_amd64|264.98MiB|274.78MiB|106.37MiB|116.28MiB|
|✅|static_quality_gate_docker_cluster_agent_arm64|280.94MiB|290.82MiB|101.19MiB|111.12MiB|

</details>

author_association: CONTRIBUTOR
user: login: cit-pr-commenter[bot]
created_at: 2025-02-17T13:39:46Z
body: ## Regression Detector

# Regression Detector Results

[Metrics dashboard](https://app.datadoghq.com/dashboard/ykh-ua8-vcu/SMP-Regression-Detector-Metrics?fromUser=true&refresh_mode=paused&tpl_var_run-id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)  
[Target profiles](https://app.datadoghq.com/profiling/explorer?query=env%3Asingle-machine-performance%20service%3Adatadog-agent%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_t=count&fromUser=false&viz=stream&start=1745997620000&end=1746009020000&paused=true)  
Run ID: a0d963a4-8f2c-40fc-8f5b-111ffe4518ef

Baseline: 47381946b20644a51799fade30673fef6d708f93
Comparison: eb4f6f08d0a71386d692e71e24abd18b38dd5b2f
[Diff](47381946b20644a51799fade30673fef6d708f93...eb4f6f08d0a71386d692e71e24abd18b38dd5b2f)


## Optimization Goals: ✅ No significant changes detected


<details>
<summary><h2>
Fine details of change detection per experiment
</h2></summary>

| perf | experiment                                   | goal               | Δ mean % | Δ mean % CI    | trials | links                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|------|----------------------------------------------|--------------------|----------|----------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ➖   | ddot_logs                                    | memory utilization | +0.35    | [+0.22, +0.47] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Addot_logs%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                                       |
| ➖   | uds_dogstatsd_to_api_cpu                     | % cpu utilization  | +0.26    | [-0.65, +1.18] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api_cpu%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                        |
| ➖   | uds_dogstatsd_20mb_12k_contexts_20_senders   | memory utilization | +0.24    | [+0.20, +0.29] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_20mb_12k_contexts_20_senders%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                      |
| ➖   | file_to_blackhole_300ms_latency              | egress throughput  | +0.10    | [-0.54, +0.74] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_300ms_latency%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | otlp_ingest_logs                             | memory utilization | +0.05    | [-0.07, +0.18] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aotlp_ingest_logs%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                                |
| ➖   | file_to_blackhole_0ms_latency_http2          | egress throughput  | +0.03    | [-0.62, +0.68] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http2%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                             |
| ➖   | file_to_blackhole_1000ms_latency             | egress throughput  | +0.02    | [-0.65, +0.69] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                |
| ➖   | file_to_blackhole_100ms_latency              | egress throughput  | +0.01    | [-0.61, +0.64] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_100ms_latency%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | uds_dogstatsd_to_api                         | ingress throughput | +0.00    | [-0.29, +0.29] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                            |
| ➖   | tcp_dd_logs_filter_exclude                   | ingress throughput | -0.00    | [-0.02, +0.01] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_dd_logs_filter_exclude%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                      |
| ➖   | file_to_blackhole_0ms_latency_http1          | egress throughput  | -0.01    | [-0.63, +0.61] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http1%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                             |
| ➖   | quality_gate_idle_all_features               | memory utilization | -0.04    | [-0.14, +0.05] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle_all_features%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false) |
| ➖   | file_to_blackhole_1000ms_latency_linear_load | egress throughput  | -0.05    | [-0.28, +0.18] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency_linear_load%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                    |
| ➖   | file_to_blackhole_500ms_latency              | egress throughput  | -0.07    | [-0.69, +0.56] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_500ms_latency%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                 |
| ➖   | file_to_blackhole_0ms_latency                | egress throughput  | -0.12    | [-0.78, +0.55] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                   |
| ➖   | otlp_ingest_metrics                          | memory utilization | -0.32    | [-0.47, -0.17] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aotlp_ingest_metrics%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                             |
| ➖   | ddot_metrics                                 | memory utilization | -0.46    | [-0.58, -0.34] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Addot_metrics%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                                    |
| ➖   | tcp_syslog_to_blackhole                      | ingress throughput | -0.55    | [-0.61, -0.49] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_syslog_to_blackhole%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                         |
| ➖   | file_tree                                    | memory utilization | -0.66    | [-0.80, -0.53] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_tree%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                                       |
| ➖   | docker_containers_cpu                        | % cpu utilization  | -0.69    | [-4.40, +3.03] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Adocker_containers_cpu%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                           |
| ➖   | quality_gate_idle                            | memory utilization | -0.82    | [-0.88, -0.77] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)                           |
| ➖   | docker_containers_memory                     | memory utilization | -1.21    | [-1.29, -1.14] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Adocker_containers_memory%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false)                                                                                                                                                                                                                                                                                                        |
| ➖   | quality_gate_logs                            | % cpu utilization  | -2.22    | [-4.96, +0.52] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_logs%20job_id%3Aa0d963a4-8f2c-40fc-8f5b-111ffe4518ef&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1745997620000&to_ts=1746009020000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)                           |
</details>


<details>
<summary><h2>
Bounds Checks: ✅ Passed
</h2></summary>

| perf | experiment                                   | bounds_check_name  | replicates_passed | links                                                                                                                                                                                                                                                                                            |
|------|----------------------------------------------|--------------------|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ✅   | docker_containers_cpu                        | simple_check_run   | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | docker_containers_memory                     | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | docker_containers_memory                     | simple_check_run   | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency                | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency                | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http1          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http1          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http2          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_0ms_latency_http2          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_1000ms_latency             | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_1000ms_latency_linear_load | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_100ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_100ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_300ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_300ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_500ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | file_to_blackhole_500ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                  |
| ✅   | quality_gate_idle                            | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)              |
| ✅   | quality_gate_idle                            | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)              |
| ✅   | quality_gate_idle_all_features               | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false) |
| ✅   | quality_gate_idle_all_features               | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false) |
| ✅   | quality_gate_logs                            | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)              |
| ✅   | quality_gate_logs                            | lost_bytes         | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)              |
| ✅   | quality_gate_logs                            | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_logs&tpl_var_job_id%5B0%5D=a0d963a4-8f2c-40fc-8f5b-111ffe4518ef&view=spans&from_ts=1746004820000&to_ts=1746005420000&live=false)              |
</details>


<details>
<summary><h2>
Explanation
</h2></summary>

**Confidence level:** 90.00%
**Effect size tolerance:** |Δ mean %| ≥ 5.00%

Performance changes are noted in the **perf** column of each table:

* ✅ = significantly better comparison variant performance
* ❌ = significantly worse comparison variant performance
* ➖ = no significant change in performance

A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".

For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:

1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

2. Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that *if our statistical model is accurate*, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.

3. Its configuration does not mark it "erratic".
</details>

## CI Pass/Fail Decision

✅ **Passed.** All Quality Gates passed.

- **quality_gate_idle**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **lost_bytes**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
author_association: NONE
user: login: agent-platform-auto-pr[bot]
created_at: 2025-02-19T09:51:51Z
body: ## Static quality checks ❌

Please find below the results from static quality gates
### Error

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|❌|static_quality_gate_agent_suse_amd64|DataNotFound|847.82MiB|DataNotFound|215.76MiB|
<details>
<summary>Gate failure full details</summary>

|Quality gate|Error type|Error message|
|----|---|--------|
|static_quality_gate_agent_suse_amd64|StackTrace|Traceback (most recent call last):<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/quality_gates.py", line 121, in parse_and_trigger_gates<br>    gate_mod.entrypoint(**gate_inputs)<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/static_quality_gates/static_quality_gate_agent_suse_amd64.py", line 5, in entrypoint<br>    generic_package_agent_quality_gate(<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/static_quality_gates/lib/package_agent_lib.py", line 69, in generic_package_agent_quality_gate<br>    package_on_wire_size, package_on_disk_size = calculate_package_size(<br>                                                 ^^^^^^^^^^^^^^^^^^^^^^^<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/static_quality_gates/lib/package_agent_lib.py", line 10, in calculate_package_size<br>    extract_package(ctx=ctx, package_os=package_os, package_path=package_path, extract_dir=extract_dir)<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/libs/package/size.py", line 72, in extract_package<br>    return extract_rpm_package(ctx, package_path, extract_dir)<br>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>  File "/go/src/github.com/DataDog/datadog-agent/tasks/libs/package/size.py", line 65, in extract_rpm_package<br>    ctx.run(f"rpm2cpio {package_path} | cpio -idm > /dev/null")<br>  File "/.pyenv/versions/3.12.6/lib/python3.12/site-packages/invoke/context.py", line 104, in run<br>    return self._run(runner, command, **kwargs)<br>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>  File "/.pyenv/versions/3.12.6/lib/python3.12/site-packages/invoke/context.py", line 113, in _run<br>    return runner.run(command, **kwargs)<br>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>  File "/.pyenv/versions/3.12.6/lib/python3.12/site-packages/invoke/runners.py", line 395, in run<br>    return self._run_body(command, **kwargs)<br>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>  File "/.pyenv/versions/3.12.6/lib/python3.12/site-packages/invoke/runners.py", line 451, in _run_body<br>    return self.make_promise() if self._asynchronous else self._finish()<br>                                                          ^^^^^^^^^^^^^^<br>  File "/.pyenv/versions/3.12.6/lib/python3.12/site-packages/invoke/runners.py", line 518, in _finish<br>    raise UnexpectedExit(result)<br>invoke.exceptions.UnexpectedExit: Encountered a bad command exit code!<br><br>Command: 'cd /tmp/tmpzfis099u && rpm2cpio /go/src/github.com/DataDog/datadog-agent/omnibus/pkg/datadog-agent-7.65.0~devel.git.49.650b340.pipeline.57196467-1.x86_64.rpm | cpio -idm > /dev/null'<br><br>Exit code: 2<br><br>Stdout: already printed<br><br>Stderr: already printed<br><br><br>|

</details>


<details>
<summary>Successful checks</summary>

### Info

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|✅|static_quality_gate_agent_deb_amd64|831.08MiB|847.49MiB|201.79MiB|212.33MiB|
|✅|static_quality_gate_agent_deb_arm64|820.85MiB|836.66MiB|182.78MiB|192.5MiB|
|✅|static_quality_gate_agent_rpm_amd64|831.07MiB|847.82MiB|204.6MiB|215.76MiB|
|✅|static_quality_gate_agent_rpm_arm64|820.84MiB|836.66MiB|184.06MiB|194.24MiB|
|✅|static_quality_gate_agent_suse_arm64|820.84MiB|836.66MiB|184.06MiB|194.24MiB|
|✅|static_quality_gate_dogstatsd_deb_amd64|39.56MiB|49.7MiB|10.55MiB|20.6MiB|
|✅|static_quality_gate_dogstatsd_deb_arm64|37.9MiB|48.1MiB|9.13MiB|19.1MiB|
|✅|static_quality_gate_dogstatsd_rpm_amd64|39.56MiB|49.7MiB|10.56MiB|20.6MiB|
|✅|static_quality_gate_dogstatsd_suse_amd64|39.56MiB|49.7MiB|10.56MiB|20.6MiB|
|✅|static_quality_gate_iot_agent_deb_amd64|59.23MiB|69.0MiB|14.88MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_deb_arm64|56.59MiB|66.4MiB|12.85MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_rpm_amd64|59.23MiB|69.0MiB|14.9MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_rpm_arm64|56.59MiB|66.4MiB|12.85MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_suse_amd64|59.23MiB|69.0MiB|14.9MiB|24.8MiB|
|✅|static_quality_gate_docker_agent_amd64|915.93MiB|931.7MiB|307.45MiB|318.67MiB|
|✅|static_quality_gate_docker_agent_arm64|928.99MiB|944.08MiB|292.43MiB|303.0MiB|
|✅|static_quality_gate_docker_agent_jmx_amd64|1.09GiB|1.1GiB|382.56MiB|393.75MiB|
|✅|static_quality_gate_docker_agent_jmx_arm64|1.09GiB|1.1GiB|363.53MiB|373.71MiB|
|✅|static_quality_gate_docker_dogstatsd_amd64|47.7MiB|57.88MiB|18.26MiB|28.29MiB|
|✅|static_quality_gate_docker_dogstatsd_arm64|46.09MiB|56.27MiB|17.02MiB|27.06MiB|
|✅|static_quality_gate_docker_cluster_agent_amd64|264.95MiB|274.78MiB|106.33MiB|116.28MiB|
|✅|static_quality_gate_docker_cluster_agent_arm64|280.91MiB|290.82MiB|101.19MiB|111.12MiB|

</details>

author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-04-17T11:19:17Z
body: ## Static quality checks

✅ Please find below the results from static quality gates


<details>
<summary>Successful checks</summary>

### Info

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|✅|static_quality_gate_agent_deb_amd64|754.36 MiB|778.06 MiB|184.8 MiB|191.06 MiB|
|✅|static_quality_gate_agent_deb_amd64_fips|752.3 MiB|776.09 MiB|184.27 MiB|190.72 MiB|
|✅|static_quality_gate_agent_heroku_amd64|358.86 MiB|434.99 MiB|95.42 MiB|114.34 MiB|
|✅|static_quality_gate_agent_msi|954.63 MiB|978.45 MiB|147.31 MiB|151.65 MiB|
|✅|static_quality_gate_agent_rpm_amd64|754.39 MiB|778.06 MiB|187.09 MiB|193.42 MiB|
|✅|static_quality_gate_agent_rpm_amd64_fips|752.39 MiB|776.06 MiB|186.74 MiB|192.61 MiB|
|✅|static_quality_gate_agent_rpm_arm64|744.98 MiB|768.33 MiB|168.91 MiB|174.71 MiB|
|✅|static_quality_gate_agent_rpm_arm64_fips|743.0 MiB|766.55 MiB|168.11 MiB|173.92 MiB|
|✅|static_quality_gate_agent_suse_amd64|754.37 MiB|778.08 MiB|187.09 MiB|193.42 MiB|
|✅|static_quality_gate_agent_suse_amd64_fips|752.4 MiB|776.11 MiB|186.74 MiB|192.78 MiB|
|✅|static_quality_gate_agent_suse_arm64|744.94 MiB|768.31 MiB|168.91 MiB|174.71 MiB|
|✅|static_quality_gate_agent_suse_arm64_fips|743.01 MiB|766.5 MiB|168.11 MiB|173.92 MiB|
|✅|static_quality_gate_docker_agent_amd64|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_arm64|862.32 MiB|876.0 MiB|272.28 MiB|278.3 MiB|
|✅|static_quality_gate_docker_agent_jmx_amd64|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_jmx_arm64|862.32 MiB|876.63 MiB|272.28 MiB|278.4 MiB|
|✅|static_quality_gate_docker_agent_windows1809|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_core|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_core_jmx|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows1809_jmx|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_core|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_core_jmx|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_agent_windows2022_jmx|848.64 MiB|862.5 MiB|285.53 MiB|292.0 MiB|
|✅|static_quality_gate_docker_cluster_agent_amd64|261.94 MiB|263.4 MiB|102.91 MiB|104.07 MiB|
|✅|static_quality_gate_docker_cluster_agent_arm64|277.9 MiB|279.38 MiB|97.81 MiB|98.95 MiB|
|✅|static_quality_gate_docker_cws_instrumentation_amd64|6.66 MiB|7.12 MiB|2.82 MiB|3.29 MiB|
|✅|static_quality_gate_docker_cws_instrumentation_arm64|6.44 MiB|6.92 MiB|2.6 MiB|3.07 MiB|
|✅|static_quality_gate_docker_dogstatsd_amd64|37.95 MiB|46.39 MiB|14.64 MiB|17.78 MiB|
|✅|static_quality_gate_docker_dogstatsd_arm64|36.85 MiB|45.05 MiB|13.72 MiB|16.65 MiB|
|✅|static_quality_gate_dogstatsd_deb_amd64|29.81 MiB|38.4 MiB|7.89 MiB|10.26 MiB|
|✅|static_quality_gate_dogstatsd_deb_arm64|28.69 MiB|36.98 MiB|6.87 MiB|8.96 MiB|
|✅|static_quality_gate_dogstatsd_rpm_amd64|29.81 MiB|38.4 MiB|7.9 MiB|10.27 MiB|
|✅|static_quality_gate_dogstatsd_suse_amd64|29.81 MiB|38.4 MiB|7.9 MiB|10.27 MiB|
|✅|static_quality_gate_iot_agent_deb_amd64|58.08 MiB|58.51 MiB|14.62 MiB|15.02 MiB|
|✅|static_quality_gate_iot_agent_deb_arm64|55.5 MiB|55.94 MiB|12.64 MiB|13.05 MiB|
|✅|static_quality_gate_iot_agent_deb_armhf|54.19 MiB|54.32 MiB|12.62 MiB|13.05 MiB|
|✅|static_quality_gate_iot_agent_rpm_amd64|58.08 MiB|58.51 MiB|14.64 MiB|15.04 MiB|
|✅|static_quality_gate_iot_agent_rpm_arm64|55.5 MiB|55.94 MiB|12.65 MiB|13.07 MiB|
|✅|static_quality_gate_iot_agent_suse_amd64|58.08 MiB|58.51 MiB|14.64 MiB|15.04 MiB|

</details>

author_association: CONTRIBUTOR
user: login: AliDatadog
created_at: 2025-04-30T08:53:46Z
body: /merge
author_association: CONTRIBUTOR
user: login: dd-devflow[bot]
created_at: 2025-04-30T08:53:51Z
body: <!-- "FeedbackWorkflowId":"36dc7665-f24e-4cbd-8c47-5cc5670d974d_36" -->
[View all feedbacks in Devflow UI.](https://mosaic.us1.ddbuild.io/devflow/logs/36dc7665-f24e-4cbd-8c47-5cc5670d974d_36)

`2025-04-30 08:53:50 UTC` :information_source: Start processing command `/merge`

---
`2025-04-30 08:53:56 UTC` :information_source: **MergeQueue:** waiting for PR to be ready

This merge request is not mergeable yet, because of pending checks/missing approvals. It will be added to the queue as soon as checks pass and/or get approvals.
**Note:** if you pushed new commits since the last approval, you may need additional approval.
You can remove it from the waiting list with `/remove` command.

---
`2025-04-30 10:22:08 UTC` :information_source: **MergeQueue:** merge request added to the queue

The expected merge time in `main` is approximately 58m (p90).

---
`2025-04-30 10:49:53 UTC` :information_source: **MergeQueue:** This merge request was merged

author_association: NONE