Skip to content

[Backport 7.82.x] Publish datadog-fips-proxy to the pipeline testing repositories - #55563

Closed
dd-octo-sts[bot] wants to merge 1 commit into
7.82.xfrom
backport-54908-to-7.82.x
Closed

dd-octo-sts[bot] wants to merge 1 commit into
7.82.xfrom
backport-54908-to-7.82.x

Conversation

@dd-octo-sts

@dd-octo-sts dd-octo-sts Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Backport c212f32 from #54908.


What does this PR do?

Publishes the released datadog-fips-proxy package into the testing repositories of the pipelines whose install-script tests need it, so the install script resolves it from the same repository as the Agent packages built by that pipeline.

Motivation

test_install_script triggers the agent-linux-install-script pipeline with TESTING_APT_URL and TESTING_YUM_URL so the install script installs the Agent built by the pipeline. Those variables land in the apt and yum configuration, so every Datadog package the script installs is resolved against the pipeline repository — including datadog-fips-proxy, which is released from another repository and is not published there. Nightly and RC pipelines failed with Error: Unable to find a match: datadog-fips-proxy.

The mitigation was to stop forwarding those variables for the FIPS test, which leaves it installing the latest stable Agent instead of the pipeline's packages.

Describe how you validated your changes

dda inv linter.full-gitlab-ci passes locally.

The pipeline of test commit 89fb6f4 published datadog-fips-proxy 1:1.1.29-1 into both testing repositories alongside the Agent it built. Its yum index still lists the package after the Agent upload rewrote that index, confirming rpm-s3 merges rather than replaces.

The job that triggers the install-script pipeline against it, on the branch that restores the testing-variable forwarding, ran the FIPS suite on all five of its platforms and passed. The Debian 11 job installed every package from the pipeline repository:

Get:1 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-agent amd64 1:7.84.0~devel.git.171.89fb6f4.pipeline.132516692-1 [188 MB]
Get:2 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-fips-proxy amd64 1:1.1.29-1 [7590 kB]
Get:3 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-signing-keys all 1:1.4.0-1 [23.7 kB]
--- PASS: TestInstallFipsSuite/install-fips-datadog-agent-Debian_11-132584924/TestInstallFips

This is the configuration that previously failed with Error: Unable to find a match: datadog-fips-proxy.

Additional Notes

…) ### What does this PR do?

Publishes the released `datadog-fips-proxy` package into the testing repositories of the pipelines whose install-script tests need it, so the install script resolves it from the same repository as the Agent packages built by that pipeline.

### Motivation

`test_install_script` triggers the `agent-linux-install-script` pipeline with `TESTING_APT_URL` and `TESTING_YUM_URL` so the install script installs the Agent built by the pipeline. Those variables land in the apt and yum configuration, so every Datadog package the script installs is resolved against the pipeline repository — including `datadog-fips-proxy`, which is released from another repository and is not published there. Nightly and RC pipelines failed with `Error: Unable to find a match: datadog-fips-proxy`.

The mitigation was to stop forwarding those variables for the FIPS test, which leaves it installing the latest stable Agent instead of the pipeline's packages.

### Describe how you validated your changes

`dda inv linter.full-gitlab-ci` passes locally.

The [pipeline](https://gitlab.ddbuild.io/DataDog/datadog-agent/-/pipelines/132516692) of test commit 89fb6f4 published `datadog-fips-proxy 1:1.1.29-1` into both testing repositories alongside the Agent it built. Its yum index still lists the package after the Agent upload rewrote that index, confirming `rpm-s3` merges rather than replaces.

The [job](https://gitlab.ddbuild.io/DataDog/datadog-agent/-/jobs/1974262997) that triggers the install-script pipeline against it, on the [branch](DataDog/agent-linux-install-script#446) that restores the testing-variable forwarding, ran the FIPS suite on all five of its platforms and passed. The Debian 11 [job](https://gitlab.ddbuild.io/DataDog/agent-linux-install-script/-/jobs/1974914627) installed every package from the pipeline repository:

```
Get:1 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-agent amd64 1:7.84.0~devel.git.171.89fb6f4.pipeline.132516692-1 [188 MB]
Get:2 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-fips-proxy amd64 1:1.1.29-1 [7590 kB]
Get:3 https://apttesting.***.com/datadog-agent/pipeline-132516692-a7 stable-x86_64/7 amd64 datadog-signing-keys all 1:1.4.0-1 [23.7 kB]
--- PASS: TestInstallFipsSuite/install-fips-datadog-agent-Debian_11-132584924/TestInstallFips
```

This is the configuration that previously failed with `Error: Unable to find a match: datadog-fips-proxy`.

### Additional Notes

- Merging is blocked by DataDog/agent-linux-install-script#446.
- Publishing before the Agent uploads instead of after them fails safe. Were `rpm-s3` ever to replace repository metadata rather than merge into it, this order costs `datadog-fips-proxy` its index entry and the FIPS test behaves as it does today; the reverse order would drop the Agent packages and break every e2e test that consumes them. A failed download now blocks the two Agent testing uploads rather than only the install-script test. Making the job `allow_failure: true` would trade that for a silent index race.

Co-authored-by: ofek.lev <ofek.lev@datadoghq.com>
(cherry picked from commit c212f32)

___

Co-authored-by: Ofek Lev <ofekmeister@gmail.com>
@dd-octo-sts dd-octo-sts Bot added backport bot changelog/no-changelog No changelog entry needed internal Identify a non-fork PR qa/no-code-change No code change in Agent code requiring validation labels Aug 27, 2026
@dd-octo-sts
dd-octo-sts Bot requested a review from a team as a code owner August 27, 2026 22:07
@dd-octo-sts dd-octo-sts Bot added short review PR is simple enough to be reviewed quickly team/agent-build team/agent-devx labels Aug 27, 2026
@dd-octo-sts

dd-octo-sts Bot commented Aug 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Gitlab CI Configuration Changes

Updated: .gitlab-ci.yml

Modified Jobs

variables (configuration)
  variables:
    AGENT_API_KEY_ORG2: agent-api-key-org-2
    AGENT_APP_KEY_ORG2: agent-app-key-org-2
    AGENT_BINARIES_DIR: bin/agent
    AGENT_QA_E2E: agent-qa-e2e
    ARTIFACT_DOWNLOAD_ATTEMPTS: 2
    ATLASSIAN_WRITE: atlassian-write
    BTFHUB_ARCHIVE_BRANCH: main
    BUCKET_BRANCH: dev
    CACHE_COMPRESSION_LEVEL: slowest
    CHANGELOG_COMMIT_SHA: ci.datadog-agent.gitlab_changelog_commit_sha
-   CI_IMAGE_BTF_GEN: v123723142-c6f300a6
+   CI_IMAGE_BTF_GEN: v132713351-703fb576
    CI_IMAGE_BTF_GEN_SUFFIX: ''
-   CI_IMAGE_DOCKER_ARM64: v123723142-c6f300a6
+   CI_IMAGE_DOCKER_ARM64: v132713351-703fb576
    CI_IMAGE_DOCKER_ARM64_SUFFIX: ''
-   CI_IMAGE_DOCKER_X64: v123723142-c6f300a6
+   CI_IMAGE_DOCKER_X64: v132713351-703fb576
    CI_IMAGE_DOCKER_X64_SUFFIX: ''
-   CI_IMAGE_GITLAB_AGENT_DEPLOY: v123723142-c6f300a6
?                                      ^ ^^^^^ ------
+   CI_IMAGE_GITLAB_AGENT_DEPLOY: v132713351-703fb576
?                                   + ++ ++++ ^ ^^^^
    CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX: ''
-   CI_IMAGE_LINUX: v123723142-c6f300a6
+   CI_IMAGE_LINUX: v132713351-703fb576
    CI_IMAGE_LINUX_SUFFIX: ''
-   CI_IMAGE_RPM_ARM64: v123723142-c6f300a6
+   CI_IMAGE_RPM_ARM64: v132713351-703fb576
    CI_IMAGE_RPM_ARM64_SUFFIX: ''
-   CI_IMAGE_RPM_ARMHF: v123723142-c6f300a6
+   CI_IMAGE_RPM_ARMHF: v132713351-703fb576
    CI_IMAGE_RPM_ARMHF_SUFFIX: ''
-   CI_IMAGE_RPM_X64: v123723142-c6f300a6
+   CI_IMAGE_RPM_X64: v132713351-703fb576
    CI_IMAGE_RPM_X64_SUFFIX: ''
-   CI_IMAGE_WIN_LTSC2022_X64: v123723142-c6f300a6
?                                   ^ ^^^^^ ------
+   CI_IMAGE_WIN_LTSC2022_X64: v132713351-703fb576
?                                + ++ ++++ ^ ^^^^
    CI_IMAGE_WIN_LTSC2022_X64_SUFFIX: ''
-   CI_IMAGE_WIN_LTSC2025_X64: v123723142-c6f300a6
?                                   ^ ^^^^^ ------
+   CI_IMAGE_WIN_LTSC2025_X64: v132713351-703fb576
?                                + ++ ++++ ^ ^^^^
    CI_IMAGE_WIN_LTSC2025_X64_SUFFIX: ''
    CLANG_BUILD_VERSION: v60409452-ee70de70
    CLANG_LLVM_VER: 12.0.1
    CLUSTER_AGENT_BINARIES_DIR: bin/datadog-cluster-agent
    CLUSTER_AGENT_CLOUDFOUNDRY_BINARIES_DIR: bin/datadog-cluster-agent-cloudfoundry
    CODECOV: codecov
-   COMPARE_TO_BRANCH: main
?                      ^^^^
+   COMPARE_TO_BRANCH: 7.82.x
?                      ^^^^^^
    CRC_PULL_SECRET: ci.datadog-agent.crc-pull-secret
    CWS_INSTRUMENTATION_BINARIES_DIR: bin/cws-instrumentation
    DATADOG_AGENT_EMBEDDED_PATH: /opt/datadog-agent/embedded
    DDA_CLIENT_TOKEN: dda-feature-flags-client-token
    DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS: ci.datadog-agent.dda-feature-flags-client-token
    DDA_FEATURE_FLAGS_CI_VAULT_KEY: token
    DDA_FEATURE_FLAGS_CI_VAULT_KEY_MACOS: token
    DDA_FEATURE_FLAGS_CI_VAULT_PATH: k8s/gitlab-runner-datadog-agent/datadog-agent/$DDA_CLIENT_TOKEN
    DDA_FEATURE_FLAGS_CI_VAULT_PATH_MACOS: aws/arn:aws:iam::486234852809:role/ci-datadog-agent/$DDA_CLIENT_TOKEN
    DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/new-e2e/tests
    DD_PKG_GITLAB_URL: https://artifact-gateway.us1.ddbuild.io/internal/artifact-gateway/api/v4
    DEB_GPG_KEY_ID: c0962c7d
    DEB_GPG_KEY_NAME: Datadog, Inc. APT key
    DEB_RPM_TESTING_BUCKET_BRANCH: testing
    DEB_S3_BUCKET: apt.datad0g.com
    DEB_TESTING_S3_BUCKET: apttesting.datad0g.com
    DISABLE_GIT_CACHE: true
    DOCKER_REGISTRY_RO: dockerhub-readonly
    DOCKER_REGISTRY_URL: docker.io
    DOGSTATSD_BINARIES_DIR: bin/dogstatsd
    DYNAMIC_TESTS_BREAKGLASS: dynamic-tests-breakglass
    E2E_AZURE: e2e-azure
    E2E_COVERAGE_PIPELINE: false
    E2E_GCP: e2e-gcp
    EXECUTOR_JOB_SECTION_ATTEMPTS: 2
    FF_CLEAN_UP_FAILED_CACHE_EXTRACT: true
    FF_KUBERNETES_HONOR_ENTRYPOINT: true
    FF_SCRIPT_SECTIONS: 1
    FF_TIMESTAMPS: true
    FF_USE_FASTZIP: true
    FF_USE_WINDOWS_JOB_OBJECT: true
    GENERAL_ARTIFACTS_CACHE_BUCKET_URL: https://dd-agent-omnibus.s3.amazonaws.com
    GET_SOURCES_ATTEMPTS: 2
    GIT_STRATEGY: fetch
    GO_TEST_SKIP_FLAKE: 'true'
    GPG_TEST_KEY_ID: crypto/k8s/keys/k8s_gitlab-runner-datadog-agent_datadog-agent_testing_signing-key
    INSTALLER_TESTING_S3_BUCKET: installtesting.datad0g.com
    INSTALL_SCRIPT_API_KEY_ORG2: install-script-api-key-org-2
    KERNEL_MATRIX_TESTING_ARM_AMI_ID: ami-0b5f838a19d37fc61
    KERNEL_MATRIX_TESTING_X86_AMI_ID: ami-05b3973acf5422348
    KITCHEN_INFRASTRUCTURE_FLAKES_RETRY: 2
    MACOS_APPLE_APPLICATION_SIGNING: apple-application-signing
    MACOS_APPLE_DEVELOPER_ACCOUNT: apple-developer-account
    MACOS_APPLE_INSTALLER_SIGNING: apple-installer-signing
    MACOS_KEYCHAIN_PWD: ci-keychain
    MACOS_S3_BUCKET: dd-agent-macostesting
    OMNIBUS_BASE_DIR: /omnibus
    OMNIBUS_GIT_CACHE_DIR: /tmp/omnibus-git-cache
    OMNIBUS_PACKAGE_DIR: $CI_PROJECT_DIR/omnibus/pkg/
    OMNIBUS_PACKAGE_DIR_SUSE: $CI_PROJECT_DIR/omnibus/suse/pkg
    PIPELINE_KEY_ALIAS: alias/ci_datadog-agent_pipeline-key
    PROCESS_S3_BUCKET: datad0g-process-agent
    PYTHONUNBUFFERED: 1
    RESTORE_CACHE_ATTEMPTS: 2
    RPM_GPG_KEY_ID: b01082d3
    RPM_GPG_KEY_NAME: Datadog, Inc. RPM key
    RPM_S3_BUCKET: yum.datad0g.com
    RPM_TESTING_S3_BUCKET: yumtesting.datad0g.com
    RUN_E2E_TESTS: auto
    RUN_KMT_TESTS: auto
    RUN_UNIT_TESTS: auto
    S3_ARTIFACTS_URI: s3://dd-ci-artefacts-build-stable/$CI_PROJECT_NAME/$CI_PIPELINE_ID
    S3_CP_CMD: aws s3 cp $S3_CP_OPTIONS
    S3_CP_OPTIONS: --no-progress --region us-east-1 --sse AES256
    S3_DD_AGENT_OMNIBUS_BTFS_URI: s3://dd-agent-omnibus/btfs
    S3_DD_AGENT_OMNIBUS_JAVA_URI: s3://dd-agent-omnibus/openjdk
    S3_DD_AGENT_OMNIBUS_LLVM_URI: s3://dd-agent-omnibus/llvm
    S3_DSD6_URI: s3://dsd6-staging
    S3_OMNIBUS_CACHE_BUCKET: dd-ci-datadog-agent-omnibus-cache-build-stable
    S3_OMNIBUS_GIT_CACHE_BUCKET: dd-ci-datadog-agent-omnibus-git-cache-build-stable
    S3_PERMANENT_ARTIFACTS_URI: s3://dd-ci-persistent-artefacts-build-stable/$CI_PROJECT_NAME
    S3_PROJECT_ARTIFACTS_URI: s3://dd-ci-artefacts-build-stable/$CI_PROJECT_NAME
    S3_RELEASE_ARTIFACTS_URI: s3://dd-release-artifacts/$CI_PROJECT_NAME/$CI_PIPELINE_ID
    S3_RELEASE_INSTALLER_ARTIFACTS_URI: s3://dd-release-artifacts/datadog-installer/$CI_PIPELINE_ID
    S3_SBOM_STORAGE_URI: s3://sbom-root-us1-ddbuild-io/$CI_PROJECT_NAME/$CI_PIPELINE_ID
    SECRET_GENERIC_CONNECTOR_BINARIES_DIR: bin/secret-generic-connector
    SKIP_WINDOWS: 'false'
    SLACK_AGENT: slack-agent-ci
    SMP_ACCOUNT: smp
    STATIC_BINARIES_DIR: bin/static
    SYSTEM_PROBE_BINARIES_DIR: bin/system-probe
    TEST_KEYS_URL: apttesting.datad0g.com/test-keys
    VCPKG_BLOB_SAS_URL: vcpkg-blob-sas
    VIRUS_TOTAL: virus-total
    WINDOWS_BUILDS_S3_BUCKET: $WIN_S3_BUCKET/builds
    WINDOWS_POWERSHELL_DIR: $CI_PROJECT_DIR/signed_scripts
    WINDOWS_SYMBOLS_S3_BUCKET: pipelines/windows-symbols
    WINDOWS_TESTING_S3_BUCKET: pipelines/A7/$CI_PIPELINE_ID
    WINGET_PAT: winget-pat
    WIN_S3_BUCKET: dd-agent-mstesting
.bazel:runner:linux-amd64
  .bazel:runner:linux-amd64:
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
.bazel:runner:linux-arm64
  .bazel:runner:linux-arm64:
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
.tests_windows_secagent
  .tests_windows_secagent:
    artifacts:
      paths:
      - $CI_PROJECT_DIR/test/new-e2e/tests/security-agent-functional/artifacts
      when: always
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - go_deps
    - go_tools_deps
    script:
    - $ErrorActionPreference = "Stop"
    - . ./tools/ci/sanitize-goproxy.ps1
    - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 16384M -v "$(Get-Location):c:\mnt"
-     -e AWS_NETWORKING=true -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e SIGN_WINDOWS_DD_WCS=true
?                                                                             ----------------------------
+     -e AWS_NETWORKING=true -e CI -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME
?                           ++++++
-     -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e GOMODCACHE="c:\modcache"
+     -e SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG
+     -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL -e CI_IDENTITIES_GITLAB_ID_TOKEN
-     -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\secagent.bat
?    -----------------------------------------
+     ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\secagent.bat
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    stage: source_test
    tags:
    - windows-v2:2022
    variables:
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
      XDG_CACHE_HOME: c:/bzl
.tests_windows_sysprobe
  .tests_windows_sysprobe:
    artifacts:
      paths:
      - $CI_PROJECT_DIR/test/new-e2e/tests/sysprobe-functional/artifacts
      when: always
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - go_deps
    - go_tools_deps
    script:
    - $ErrorActionPreference = "Stop"
    - . ./tools/ci/sanitize-goproxy.ps1
    - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 16384M -v "$(Get-Location):c:\mnt"
-     -e AWS_NETWORKING=true -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e SIGN_WINDOWS_DD_WCS=true
?                                                                             ----------------------------
+     -e AWS_NETWORKING=true -e CI -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME
?                           ++++++
-     -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e GOMODCACHE="c:\modcache"
+     -e SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG
+     -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL -e CI_IDENTITIES_GITLAB_ID_TOKEN
-     -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\sysprobe.bat
?    -----------------------------------------
+     ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\sysprobe.bat
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    stage: source_test
    tags:
    - windows-v2:2022
    variables:
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
      XDG_CACHE_HOME: c:/bzl
.windows_choco_7_x64
  .windows_choco_7_x64:
    artifacts:
      expire_in: 2 weeks
      paths:
      - omnibus/pkg/pipeline-$CI_PIPELINE_ID
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    retry: 2
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - allow_failure: true
      if: $BUCKET_BRANCH != "beta" && $BUCKET_BRANCH != "stable"
      when: manual
    - if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
    script:
    - $ErrorActionPreference = "Stop"
    - if (Test-Path build-out) { remove-item -recurse -force build-out }
-   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
+   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e CI_IDENTITIES_GITLAB_ID_TOKEN
+     -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
      -e CI_PROJECT_NAME -e CI_PIPELINE_ID -e BUCKET_BRANCH -e AWS_NETWORKING=true ${WINBUILDIMAGE}
      powershell.exe -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1
      -MSIDirectory c:\mnt\omnibus\pkg\pipeline-${CI_PIPELINE_ID} -Flavor $FLAVOR -InstallDeps
      1"
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    - $CopyNupkgToS3 = "$S3_CP_CMD --recursive --exclude '*' --include '*.nupkg' build-out
      $S3_RELEASE_ARTIFACTS_URI/choco/nupkg"
    - Invoke-Expression $CopyNupkgToS3
    stage: choco_build
    tags:
    - windows-v2:2022
    variables:
      ARCH: x64
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
agent_win_oci
  agent_win_oci:
    artifacts:
      expire_in: 2 weeks
      paths:
      - ${OMNIBUS_PACKAGE_DIR}/pipeline-$CI_PIPELINE_ID
    before_script:
    - PACKAGE_VERSION="$(dda inv agent.version --url-safe)-1" || exit $?
    - export INSTALL_DIR=${INSTALL_DIR:-/opt/datadog-packages/${OCI_PRODUCT}/${PACKAGE_VERSION}}
    - set +x
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs:
    - artifacts: true
      job: windows_msi_and_bosh_zip_x64-a7
    - artifacts: true
      job: windows_zip_ddot_x64
+   - artifacts: true
+     job: windows_zip_eudm_x64
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - "set -euo pipefail\nPIPE_DIR=\"$OMNIBUS_PACKAGE_DIR/pipeline-$CI_PIPELINE_ID\"\
      \nARTIFACT=$(ls -1 \"${PIPE_DIR}\"/${WIN_ARTIFACT_PATTERN} 2>/dev/null)\nif [\
      \ -z \"$ARTIFACT\" ]; then\n  echo \"No suitable input artifact found\"; exit\
      \ 1\nfi\nif [ \"$(echo \"$ARTIFACT\" | wc -l)\" != 1 ]; then\n  echo \"Expected\
      \ exactly one candidate input artifact\"; exit 1\nfi\nif [ -z \"${PACKAGE_VERSION:-}\"\
      \ ]; then\n  echo \"PACKAGE_VERSION is not set\"; exit 1\nfi\n"
    - 'SRC_DIR="$(mktemp -d)"
  
      EXTRA_FLAGS=""
  
      cp "${ARTIFACT}" "${SRC_DIR}/"
  
      '
    - "DDOT_ARTIFACT=$(ls -1 \"${PIPE_DIR}\"/datadog-agent-ddot-*x86_64.zip 2>/dev/null\
      \ || true)\nif [ -n \"$DDOT_ARTIFACT\" ]; then\n  DDOT_INPUT_DIR=\"$(mktemp -d)\"\
      \n  DDOT_EXTENSION_DIR=\"$(mktemp -d)\"\n  echo \"Extracting DDOT to ${DDOT_INPUT_DIR}\"\
      \n  unzip -q \"${DDOT_ARTIFACT}\" -d \"${DDOT_INPUT_DIR}\"\n\n  # Copy entire\
      \ DDOT structure to extension directory\n  cp -r \"${DDOT_INPUT_DIR}\"/* \"${DDOT_EXTENSION_DIR}\"\
      /\n\n  EXTRA_FLAGS=\"${EXTRA_FLAGS} --extension ddot=${DDOT_EXTENSION_DIR}\"\n\
      fi\n"
+   - "EUDM_ARTIFACT=$(ls -1 \"${PIPE_DIR}\"/datadog-agent-eudm-*x86_64.zip 2>/dev/null\
+     \ || true)\nif [ -n \"$EUDM_ARTIFACT\" ]; then\n  EUDM_INPUT_DIR=\"$(mktemp -d)\"\
+     \n  EUDM_EXTENSION_DIR=\"$(mktemp -d)\"\n  echo \"Extracting EUDM extension to\
+     \ ${EUDM_INPUT_DIR}\"\n  unzip -q \"${EUDM_ARTIFACT}\" -d \"${EUDM_INPUT_DIR}\"\
+     \n\n  # Copy entire EUDM extension structure (flat: AI Usage host binary + example\
+     \ config) to extension directory\n  cp -r \"${EUDM_INPUT_DIR}\"/* \"${EUDM_EXTENSION_DIR}\"\
+     /\n\n  EXTRA_FLAGS=\"${EXTRA_FLAGS} --extension eudm=${EUDM_EXTENSION_DIR}\"\n\
+     fi\n"
    - "INSTALLER_BIN=$(ls -1 \"${PIPE_DIR}\"/datadog-installer-*-x86_64.exe 2>/dev/null\
      \ | head -1)\nif [ -n \"$INSTALLER_BIN\" ]; then\n  EXTRA_FLAGS=\"${EXTRA_FLAGS}\
      \ --installer ${INSTALLER_BIN}\"\nelse\n  echo \"ERROR: No installer binary found\
      \ for datadog-agent OCI package\"\n  exit 1\nfi\n"
    - export PATH="$PATH:$(go env GOPATH)/bin"
    - datadog-package create --version "${PACKAGE_VERSION}" --package "${OCI_PRODUCT}"
      --os windows --arch amd64 --archive --archive-path "${PIPE_DIR}/${OCI_PRODUCT}-${PACKAGE_VERSION}-windows-amd64.oci.tar"
      ${EXTRA_FLAGS} "${SRC_DIR}/"
    - ls -l "${PIPE_DIR}"
    stage: packaging
    tags:
    - arch:amd64
    - specific:true
    variables:
      KUBERNETES_CPU_REQUEST: 16
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      OCI_PRODUCT: datadog-agent
      WIN_ARTIFACT_PATTERN: datadog-agent-[0-9]*-x86_64.msi
      WIN_SOURCE_TYPE: msi
bazel:mod-deps
  bazel:mod-deps:
    after_script:
    - "if [ $CI_JOB_STATUS = failed ]; then\n  echo >&2 \"\U0001F4A1 To fix the above\
      \ problem, please consider running the following command:\"\n  echo >&2 \"$FIX_COMMAND\"\
      \nfi"
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    script:
    - bazel mod deps --lockfile_mode=refresh
    - git diff --exit-code
    stage: lint
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      FIX_COMMAND: bazel mod deps
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:mod-tidy
  bazel:mod-tidy:
    after_script:
    - "if [ $CI_JOB_STATUS = failed ]; then\n  echo >&2 \"\U0001F4A1 To fix the above\
      \ problem, please consider running the following command:\"\n  echo >&2 \"$FIX_COMMAND\"\
      \nfi"
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    script:
    - bazel mod tidy --lockfile_mode=off
    - git diff --exit-code
    stage: lint
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      FIX_COMMAND: bazel mod tidy
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:run-buildifier-test
  bazel:run-buildifier-test:
    after_script:
    - "if [ $CI_JOB_STATUS = failed ]; then\n  echo >&2 \"\U0001F4A1 To fix the above\
      \ problem, please consider running the following command:\"\n  echo >&2 \"$FIX_COMMAND\"\
      \nfi"
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    script:
    - bazel run //bazel/buildifier:test
    stage: lint
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      FIX_COMMAND: bazel run //bazel/buildifier
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:run-gazelle
  bazel:run-gazelle:
    after_script:
    - "if [ $CI_JOB_STATUS = failed ]; then\n  echo >&2 \"\U0001F4A1 To fix the above\
      \ problem, please consider running the following command:\"\n  echo >&2 \"$FIX_COMMAND\"\
      \nfi"
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    script:
    - bazel run //:gazelle -- -mode=diff
    stage: lint
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      FIX_COMMAND: bazel run //:gazelle
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:run-go-mod-tidy
  bazel:run-go-mod-tidy:
    after_script:
    - "if [ $CI_JOB_STATUS = failed ]; then\n  echo >&2 \"\U0001F4A1 To fix the above\
      \ problem, please consider running the following command:\"\n  echo >&2 \"$FIX_COMMAND\"\
      \nfi"
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    script:
    - bazel run //:go_mod_tidy_all -- -diff
    stage: lint
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      FIX_COMMAND: bazel run //:go_mod_tidy_all
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-amd64
  bazel:test:linux-amd64:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
-   - bazel test --keep_going --remote_download_outputs=toplevel --build_event_json_file=$BEP_FILE
-     --config=no-dd-agent-go-tests //...
+   - bazel test --jobs=$KUBERNETES_CPU_REQUEST --keep_going --remote_download_outputs=toplevel
+     --build_event_json_file=$BEP_FILE --config=no-dd-agent-go-tests //...
    stage: source_test
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: base
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-amd64:base
  bazel:test:linux-amd64:base:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: base
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-amd64:dogstatsd
  bazel:test:linux-amd64:dogstatsd:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: dogstatsd
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-amd64:heroku
  bazel:test:linux-amd64:heroku:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: heroku
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-amd64:iot
  bazel:test:linux-amd64:iot:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:amd64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: iot
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-arm64
  bazel:test:linux-arm64:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
-   - bazel test --keep_going --remote_download_outputs=toplevel --build_event_json_file=$BEP_FILE
-     --config=no-dd-agent-go-tests //...
+   - bazel test --jobs=$KUBERNETES_CPU_REQUEST --keep_going --remote_download_outputs=toplevel
+     --build_event_json_file=$BEP_FILE --config=no-dd-agent-go-tests //...
    stage: source_test
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: base
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-arm64:base
  bazel:test:linux-arm64:base:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: base
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-arm64:dogstatsd
  bazel:test:linux-arm64:dogstatsd:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: dogstatsd
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-arm64:heroku
  bazel:test:linux-arm64:heroku:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: heroku
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
bazel:test:linux-arm64:iot
  bazel:test:linux-arm64:iot:
    after_script:
    - dda inv -- -e bazel.collect-junit --flavor=$FLAVOR --output-tgz=junit-${CI_JOB_NAME}.tgz
      --bep-file=$BEP_FILE || true
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh
    artifacts:
      expire_in: 2 weeks
      paths:
      - junit-*.tgz
      - bazel-bep-*.json
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    cache:
    - key:
        files:
        - .bazelversion
        prefix: bazelversion-$CI_RUNNER_DESCRIPTION
      paths:
      - .cache/bazelisk
      - .cache/bazel/*/install
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    - key:
        files:
        - .go-version
        - .python-version
        prefix: bazel-$CI_JOB_NAME
      paths:
      - .cache/bazel/*/cache
      - .cache/go
      - .cache/ms-go
      - .cache/pip
      policy: pull$BAZEL_CACHE_POLICY_SUFFIX
      when: on_success
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs: []
    rules:
    - when: on_success
    script:
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - bazel test --keep_going --remote_download_outputs=toplevel --test_arg=-test.v=test2json
      --build_event_json_file=$BEP_FILE --build_tests_only --config=$FLAVOR //pkg/...
      //comp/... //cmd/...
    stage: source_test
    tags:
    - arch:arm64
    - specific:true
    variables:
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      BEP_FILE: $CI_PROJECT_DIR/bazel-bep-$FLAVOR.json
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAVOR: iot
-     KUBERNETES_CPU_REQUEST: 4
?                             ^
+     KUBERNETES_CPU_REQUEST: 8
?                             ^
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
      XDG_CACHE_HOME: $CI_PROJECT_DIR/.cache
deploy_deb_testing-a7_x64
  deploy_deb_testing-a7_x64:
    before_script:
    - ls $OMNIBUS_PACKAGE_DIR
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
    needs:
    - installer_deb-amd64
    - agent_deb-x64-a7
    - agent_deb-x64-a7-fips
    - agent_heroku_deb-x64-a7
    - iot_agent_deb-x64
    - dogstatsd_deb-x64
    - ddot_deb-x64
+   - job: deploy_fips_proxy_testing-a7_x64
+     optional: true
    rules:
    - allow_failure: true
      if: $DEPLOY_AGENT == "false" && $DDR_WORKFLOW_ID == null && $RUN_E2E_TESTS ==
        "off"
      when: manual
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - echo 'deb [signed-by=/usr/share/keyrings/datadog-archive-keyring.gpg] https://apt.datadoghq.com/
      stable 7' > /etc/apt/sources.list.d/datadog.list
    - touch /usr/share/keyrings/datadog-archive-keyring.gpg
    - chmod a+r /usr/share/keyrings/datadog-archive-keyring.gpg
    - curl https://keys.datadoghq.com/DATADOG_APT_KEY_CURRENT.public | gpg --no-default-keyring
      --keyring /usr/share/keyrings/datadog-archive-keyring.gpg --import --batch
    - apt-get -o Acquire::Retries="5" update
    - apt-get -o Acquire::Retries="5" -o "Dir::Cache::archives=$OMNIBUS_PACKAGE_DIR"
      install --download-only datadog-signing-keys
    - pushd $OMNIBUS_PACKAGE_DIR
    - filename=$(ls datadog-signing-keys*.deb); mv $filename datadog-signing-keys_${DD_PIPELINE_ID}.deb
    - popd
    - ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
      .
    - tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
    - mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
    - echo '#!/usr/bin/env bash' > /usr/bin/gpg
    - echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
      /usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
    - chmod +x /usr/bin/gpg
    - echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
    - echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
      "$@"' >> /usr/bin/gpg-vault
    - chmod +x /usr/bin/gpg-vault
    - "for package in $OMNIBUS_PACKAGE_DIR/datadog-*_7*amd64.deb; do\n  tools/ci/signing/sign_deb_package.sh\
      \ \"$package\" $GPG_TEST_KEY_ID out/\ndone\n"
    - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
      --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
      public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} out/datadog-*_7*amd64.deb
    - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
      --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
      public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} out/datadog-*_7*amd64.deb
    - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
      --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
      public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb
    - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
      --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
      public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb
    stage: e2e_deploy
    tags:
    - arch:amd64
    - specific:true
    variables:
      DD_PIPELINE_ID: $CI_PIPELINE_ID-a7
deploy_rpm_testing-a7_x64
  deploy_rpm_testing-a7_x64:
    before_script:
    - ls $OMNIBUS_PACKAGE_DIR
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
    needs:
    - installer_rpm-amd64
    - agent_rpm-x64-a7
    - agent_rpm-x64-a7-fips
    - iot_agent_rpm-x64
    - dogstatsd_rpm-x64
    - ddot_rpm-x64
+   - job: deploy_fips_proxy_testing-a7_x64
+     optional: true
    rules:
    - allow_failure: true
      if: $DEPLOY_AGENT == "false" && $DDR_WORKFLOW_ID == null && $RUN_E2E_TESTS ==
        "off"
      when: manual
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
      .
    - tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
    - mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
    - echo '#!/usr/bin/env bash' > /usr/bin/gpg
    - echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
      /usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
    - chmod +x /usr/bin/gpg
    - echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
    - echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
      "$@"' >> /usr/bin/gpg-vault
    - chmod +x /usr/bin/gpg-vault
    - "for package in $OMNIBUS_PACKAGE_DIR/datadog-*-7.*x86_64.rpm; do\n  tools/ci/signing/sign_rpm_package.sh\
      \ \"$package\" $GPG_TEST_KEY_ID out/\ndone\n"
    - python2 /opt/rpm-s3/bin/rpm-s3 --verbose --visibility public-read -c "https://s3.amazonaws.com"
      -b $RPM_TESTING_S3_BUCKET -p "testing/pipeline-$DD_PIPELINE_ID/7/x86_64/" -a "x86_64"
      --sign --metadata-signing-key $GPG_TEST_KEY_ID out/datadog-*-7.*x86_64.rpm
    stage: e2e_deploy
    tags:
    - arch:amd64
    - specific:true
    variables:
      DD_PIPELINE_ID: $CI_PIPELINE_ID-a7
docker_image_build_otel
  docker_image_build_otel:
    after_script:
    - "if [[ \"$BUCKET_BRANCH\" == \"nightly\" && \"$IMAGE\" =~ \"ci/datadog-agent/agent\"\
      \ ]]; then\n  ECR_RELEASE_SUFFIX=\"-nightly\"\nelse\n  ECR_RELEASE_SUFFIX=\"${CI_COMMIT_TAG:+-release}\"\
      \nfi\nexport OT_AGENT_IMAGE_NAME=\"${IMAGE}${ECR_RELEASE_SUFFIX}\"\nexport OT_AGENT_TAG=\"\
      v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-${ARCH}\"\n"
    - python3 /tmp/otel-ci/otel_agent_build_tests.py
    before_script:
    - mkdir -p /tmp/otel-ci
    - cp comp/otelcol/collector-contrib/impl/manifest.yaml /tmp/otel-ci/
    - cp Dockerfiles/agent-ddot/Dockerfile.agent-otel /tmp/otel-ci/Dockerfile
    - cp test/integration/docker/otel_agent_build_tests.py /tmp/otel-ci/
    - export OTELCOL_VERSION=$(yq eval '.processors[] | select(.gomod | test("opentelemetry-collector-contrib"))
      | .gomod' /tmp/otel-ci/manifest.yaml | head -1 | awk '{print $NF}')
    - 'yq eval -i ''.receivers += [{"gomod": "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver
      " + env(OTELCOL_VERSION)}]'' /tmp/otel-ci/manifest.yaml'
    - 'yq eval -i ''.processors += [{"gomod": "github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor
      " + env(OTELCOL_VERSION)}]'' /tmp/otel-ci/manifest.yaml'
    - 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
    - export GO_VERSION=$(cat .go-version)
    - docker buildx create --use --driver docker-container --bootstrap
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/docker_x64$CI_IMAGE_DOCKER_X64_SUFFIX:$CI_IMAGE_DOCKER_X64
    needs:
    - integration_tests_otel
    retry: 2
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - TAG_SUFFIX=${TAG_SUFFIX:-}
    - BUILD_ARG=${BUILD_ARG:-}
    - EXTRA_BUILD_CONTEXT=${ARTIFACTS_BUILD_CONTEXT:+"--build-context artifacts=$ARTIFACTS_BUILD_CONTEXT"}
    - "if [[ \"$BUCKET_BRANCH\" == \"nightly\" && ( \"$IMAGE\" =~ \"ci/datadog-agent/agent\"\
      \ || \"$IMAGE\" =~ \"ci/datadog-agent/cluster-agent\" || \"$IMAGE\" =~ \"ci/datadog-agent/cws-instrumentation\"\
      \ || \"$IMAGE\" =~ \"ci/datadog-agent/secret-generic-connector\" || \"$IMAGE\"\
      \ =~ \"ci/datadog-agent/otel-agent\" || \"$IMAGE\" =~ \"ci/datadog-agent/ddot-ebpf\"\
      \ ) ]]; then\n  export ECR_RELEASE_SUFFIX=\"-nightly\"\nelse\n  export ECR_RELEASE_SUFFIX=${CI_COMMIT_TAG+-release}\n\
      fi\n"
    - AGENT_BASE_IMAGE_TAG=registry.ddbuild.io/ci/datadog-agent/${BASE_IMAGE_NAME:-agent-base-image}${ECR_RELEASE_SUFFIX}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}${BASE_IMAGE_TAG_SUFFIX:-}-$ARCH
    - TARGET_TAG=${IMAGE}${ECR_RELEASE_SUFFIX}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}$TAG_SUFFIX-$ARCH
    - DOCKER_CACHE_REGISTRY_TARGET="${IMAGE}${TAG_SUFFIX}-${ARCH}:cache"
    - CACHE_SOURCE="--cache-from type=registry,ref=${DOCKER_CACHE_REGISTRY_TARGET}"
    - CACHE_TO=""
    - CACHE_TARGET=${CACHE_TARGET:-}
    - "if [[ \"$BUCKET_BRANCH\" == \"nightly\" ]]; then\n  DOCKER_NO_CACHE=\"--no-cache\"\
      \n  CACHE_SOURCE=\"\"\n  CACHE_TO=\"--cache-to type=registry,ref=${DOCKER_CACHE_REGISTRY_TARGET},mode=max\"\
      \nfi\nif [[ \"$CI_COMMIT_BRANCH\" == \"$CI_DEFAULT_BRANCH\" ]]; then\n  CACHE_TO=\"\
      --cache-to type=registry,ref=${DOCKER_CACHE_REGISTRY_TARGET},mode=max\"\nfi\n"
    - "if [[ \"$DEPLOY_AGENT\" == \"true\" ]]; then\n  DOCKER_NO_CACHE=\"--no-cache\"\
      \n  CACHE_SOURCE=\"\"\nfi\n"
    - "if [[ -n \"${CACHE_TO}\" && -n \"${CACHE_TARGET}\" ]]; then\n  # Build cacheable\
      \ target to only export certain steps to registry.\n  # Doing this first build\
      \ separately lets us avoid uploading heavy artifacts (such as Agent packages),\n\
      \  # that can't be usefully cached, to the remote cache.\n  echo \"Building ${CACHE_TARGET}\
      \ for cache\"\n  # We accept failures on this build, because the build can still\
      \ succeed, and the only consequence of\n  # failure is that the cache doesn't\
      \ get updated, which is not critical.\n  # We do send an event to DD to be able\
      \ to monitor it.\n\n  send_docker_export_failure_event() {\n    DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh\
      \ $AGENT_API_KEY_ORG2 token) && \\\n    curl -X POST \"https://api.datadoghq.com/api/v1/events\"\
      \ \\\n         -H \"Content-Type: application/json\" \\\n         -H \"DD-API-KEY:\
      \ ${DD_API_KEY}\" \\\n         -d '{\n          \"title\": \"docker cache export\
      \ failure\",\n          \"text\": \"An Agent docker build failed to export the\
      \ cache to the remote registry\",\n          \"alert_type\": \"error\",\n    \
      \      \"date_happened\": '\"$(date +%s)\"',\n          \"tags\": [\"team:agent-build\"\
      , \"pipeline:'${CI_PIPELINE_ID}'\", \"job:'${CI_JOB_NAME}'\", \"job-id:'${CI_JOB_ID}'\"\
      ]\n        }'\n  }\n\n  docker buildx build --pull --platform linux/$ARCH \\\n\
      \    ${CACHE_SOURCE} \\\n    ${CACHE_TO} \\\n    ${DOCKER_NO_CACHE} \\\n    --build-arg\
      \ AGENT_BASE_IMAGE_TAG=${AGENT_BASE_IMAGE_TAG} \\\n    --build-arg CI \\\n   \
      \ --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL}\
      \ \\\n    --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent\
      \ \\\n    --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} \\\n    --build-arg BASE_IMAGE_REGISTRY\
      \ \\\n    $BUILD_ARG \\\n    ${EXTRA_BUILD_CONTEXT} \\\n    --file $BUILD_CONTEXT/Dockerfile\
      \ \\\n    --target ${CACHE_TARGET} \\\n    $BUILD_CONTEXT \\\n    || send_docker_export_failure_event\
      \ \\\n    || true\n\n  # On non-deploy pipelines we're fine with relying on the\
      \ cache from this point on\n  DOCKER_NO_CACHE=\"\"\nfi\n"
    - "docker buildx build --push --pull --platform linux/$ARCH \\\n  ${CACHE_SOURCE}\
      \ \\\n  ${DOCKER_NO_CACHE} \\\n  --build-arg AGENT_BASE_IMAGE_TAG=${AGENT_BASE_IMAGE_TAG}\
      \ \\\n  --build-arg CI \\\n  --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL}\
      \ \\\n  --build-arg BASE_IMAGE_REGISTRY \\\n  $BUILD_ARG \\\n  $TARGET_ARG \\\n\
      \  --build-arg DD_GIT_REPOSITORY_URL=https://github.com/DataDog/datadog-agent\
      \ \\\n  --build-arg DD_GIT_COMMIT_SHA=${CI_COMMIT_SHA} \\\n  ${EXTRA_BUILD_CONTEXT}\
      \ \\\n  --file $BUILD_CONTEXT/Dockerfile \\\n  --tag ${TARGET_TAG} \\\n  --label\
      \ \"org.opencontainers.image.created=$(date --rfc-3339=seconds)\" \\\n  --label\
      \ \"org.opencontainers.image.authors=Datadog <package@datadoghq.com>\" \\\n  --label\
      \ \"org.opencontainers.image.source=https://github.com/DataDog/datadog-agent\"\
      \ \\\n  --label \"org.opencontainers.image.version=$(dda inv agent.version)\"\
      \ \\\n  --label \"org.opencontainers.image.revision=${CI_COMMIT_SHA}\" \\\n  --label\
      \ \"org.opencontainers.image.vendor=Datadog, Inc.\" \\\n  --label \"target=none\"\
      \ \\\n  $BUILD_CONTEXT"
    - FLATTEN_IMAGE=${FLATTEN_IMAGE:-true}
    - "if [[ \"$FLATTEN_IMAGE\" == \"true\" ]]; then\n  crane flatten -t ${TARGET_TAG}\
      \ ${TARGET_TAG}\nfi\n"
    - "# Measure Docker image size and generate in-place report\n# This runs after the\
      \ main script and won't fail the job if there are issues.\n# This is common for\
      \ all Docker image builds\n\nif [[ -n \"$STATIC_QUALITY_GATE_NAME\" ]]; then\n\
      \  echo \"\U0001F4CA Starting Docker image measurement...\"\n\n  # Construct the\
      \ built image reference from build variables\n  # This follows the same pattern\
      \ used in docker build jobs\n  ECR_RELEASE_SUFFIX=${ECR_RELEASE_SUFFIX:-}\n  TAG_SUFFIX=${TAG_SUFFIX:-}\n\
      \  IMAGE_REF=\"${IMAGE}${ECR_RELEASE_SUFFIX}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}${TAG_SUFFIX}-$ARCH\"\
      \n  \n  echo \"\U0001F50D Measuring Docker image: $IMAGE_REF\"\n\n  # Extract\
      \ report prefix from gate name (e.g. static_quality_gate_docker_agent_amd64 ->\
      \ docker_agent_amd64)\n  REPORT_PREFIX=\"${STATIC_QUALITY_GATE_NAME#static_quality_gate_}\"\
      \n\n  # Generate measurement report using STATIC_QUALITY_GATE_NAME variable\n\
      \  dda inv quality-gates.measure-image-local \\\n    --image-ref \"$IMAGE_REF\"\
      \ \\\n    --gate-name \"$STATIC_QUALITY_GATE_NAME\" \\\n    --build-job-name \"\
      $CI_JOB_NAME\" \\\n    --output-path \"${REPORT_PREFIX}_size_report_${CI_PIPELINE_ID}_${CI_COMMIT_SHA:0:8}.yml\"\
      \ \\\n    --debug || { echo \"\u26A0\uFE0F  Docker image measurement failed for\
      \ $IMAGE_REF\"; exit 0; }\n\n  echo \"\u2705 Docker image measurement completed\"\
      \n\n  # Upload the report to S3 (same bucket structure as packages)\n  BUCKET_BASE_PATH=\"\
      s3://dd-ci-artefacts-build-stable/datadog-agent/static_quality_gates/GATE_REPORTS/${CI_COMMIT_SHA}\"\
      \n  echo \"Uploading report to ${BUCKET_BASE_PATH}\"\n  aws s3 cp --only-show-errors\
      \ --region us-east-1 --sse AES256 \\\n    \"${REPORT_PREFIX}_size_report_${CI_PIPELINE_ID}_${CI_COMMIT_SHA:0:8}.yml\"\
      \ \\\n    \"${BUCKET_BASE_PATH}/${REPORT_PREFIX}_size_report_${CI_PIPELINE_ID}_${CI_COMMIT_SHA:0:8}.yml\"\
      \nelse\n  echo \"\u2139\uFE0F  Skipping Docker image measurement (no STATIC_QUALITY_GATE_NAME\
      \ defined)\"\nfi\n"
    stage: integration_test
    tags:
    - docker-in-docker:amd64
-   timeout: 30m
?            ^
+   timeout: 40m
?            ^
    variables:
      AFTER_SCRIPT_IGNORE_ERRORS: false
      ARCH: amd64
      BASE_IMAGE_REGISTRY: registry.ddbuild.io/images/mirror
      BUILD_ARG: '--build-arg AGENT_VERSION=$CI_COMMIT_REF_NAME
  
        --build-arg AGENT_GIT_REF=$CI_COMMIT_REF_NAME
  
        --build-arg AGENT_DOCKER_REPO=datadog/agent-dev
  
        --build-arg AGENT_DOCKER_TAG=nightly-full-main-jmx
  
        --build-arg BASE_IMAGE_REGISTRY=registry.ddbuild.io/images/mirror
  
        --build-arg CI
  
        --build-arg GOPROXY
  
        --build-arg GONOSUMDB
  
        --build-arg GO_VERSION
  
        '
      BUILD_CONTEXT: /tmp/otel-ci
      CACHE_TARGET: builder_base
      IMAGE: registry.ddbuild.io/ci/datadog-agent/agent-byoc
      KUBERNETES_MEMORY_LIMIT: 32Gi
      KUBERNETES_MEMORY_REQUEST: 32Gi
integration_tests_otel
  integration_tests_otel:
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs:
    - go_deps
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - . tools/ci/sanitize-goproxy.sh
    - mkdir -p $GOPATH/pkg/mod/cache && zstd -dc modcache.tar.zst | tar xf - -C $GOPATH/pkg/mod/cache
    - rm -f modcache.tar.zst
    - dda inv -- check-otel-build
    - dda inv -- check-otel-module-versions
    - dda inv -- otel-agent.integration-test
    stage: integration_test
    tags:
    - arch:amd64
    - specific:true
    variables:
+     DD_NO_PROXY_NONEXACT_MATCH: 'true'
      KUBERNETES_MEMORY_LIMIT: 16Gi
      KUBERNETES_MEMORY_REQUEST: 16Gi
new-e2e-installer-windows
  new-e2e-installer-windows:
    after_script:
    - CODECOV_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $CODECOV token) || exit
      $?; export CODECOV_TOKEN
    - $CI_PROJECT_DIR/tools/ci/junit_upload.sh "junit-${CI_JOB_ID}.tgz" "$E2E_RESULT_JSON"
    - "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n  dda inv -- -e coverage.process-e2e-coverage-folders\
      \ $E2E_COVERAGE_OUT_DIR\n  dda inv -- -e dyntest.compute-and-upload-job-index\
      \ --bucket-uri $S3_PERMANENT_ARTIFACTS_URI --coverage-folder $E2E_COVERAGE_OUT_DIR\
      \ --commit-sha $CI_COMMIT_SHA --job-id $CI_JOB_ID\nfi\n"
    - "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n  DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh\
      \ $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY\n  for coverage in\
      \ \"$E2E_COVERAGE_OUT_DIR\"/*/coverage.txt; do\n    datadog-ci coverage upload\
      \ --format=go-coverprofile \"$coverage\" || true\n  done\nfi\n"
    artifacts:
      expire_in: 2 weeks
      paths:
      - $E2E_OUTPUT_DIR
      - $E2E_RESULT_JSON
      - junit-*.tgz
      - $E2E_COVERAGE_OUT_DIR
      reports:
        annotations:
        - $EXTERNAL_LINKS_PATH
      when: always
    before_script:
    - CURRENT_AGENT_ASSERT_VERSION=$(dda inv agent.version) || exit $?; export CURRENT_AGENT_ASSERT_VERSION
    - CURRENT_AGENT_ASSERT_PACKAGE_VERSION=$(dda inv agent.version --url-safe)-1 ||
      exit $?; export CURRENT_AGENT_ASSERT_PACKAGE_VERSION
    - mkdir -p $GOPATH/pkg/mod/cache && zstd -dc modcache_e2e.tar.zst | tar xf - -C
      $GOPATH/pkg/mod/cache
    - rm -f modcache_e2e.tar.zst
    - mkdir -p ~/.pulumi && zstd -dc pulumi_plugins.tar.zst | tar xf - -C ~/.pulumi
    - rm -f pulumi_plugins.tar.zst
    - "go_bin=\"$(go env GOBIN)\"\nif [ -z \"$go_bin\" ]; then\n  go_bin=\"$(go env\
      \ GOPATH)/bin\"\nfi\nmkdir -p \"$go_bin\" \"$GOPATH/pkg/mod/cache\"\nzstd -dc\
      \ go_tools_bin.tar.zst | tar xf - -C \"$go_bin\"\nzstd -dc modcache_tools.tar.zst\
      \ | tar xf - -C \"$GOPATH/pkg/mod/cache\"\n"
    - rm -f go_tools_bin.tar.zst modcache_tools.tar.zst
    - export PATH=$PATH:$go_bin
    - mkdir -p ~/.aws
    - "if [ -n \"$E2E_USE_AWS_PROFILE\" ]; then\n  echo Using agent-qa-ci aws profile\n\
      \  $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E profile >> ~/.aws/config\
      \ || exit $?\n  # Now all `aws` commands target the agent-qa profile\n  export\
      \ AWS_PROFILE=agent-qa-ci\nelse\n  # Assume role to fetch only once credentials\
      \ and avoid rate limits\n  echo Assuming ddbuild-agent-ci role\n  roleoutput=\"\
      $(aws sts assume-role --role-arn arn:aws:iam::669783387624:role/ddbuild-agent-ci\
      \ --external-id ddbuild-agent-ci --role-session-name RoleSession)\"\n  export\
      \ AWS_ACCESS_KEY_ID=\"$(echo \"$roleoutput\" | jq -r '.Credentials.AccessKeyId')\"\
      \n  export AWS_SECRET_ACCESS_KEY=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SecretAccessKey')\"\
      \n  export AWS_SESSION_TOKEN=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SessionToken')\"\
      \nfi\n"
    - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AWS_PUBLIC_KEY_PATH
      || exit $?
    - touch $E2E_AWS_PRIVATE_KEY_PATH && chmod 600 $E2E_AWS_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
      $AGENT_QA_E2E ssh_key_rsa > $E2E_AWS_PRIVATE_KEY_PATH || exit $?
    - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AZURE_PUBLIC_KEY_PATH
      || exit $?
    - touch $E2E_AZURE_PRIVATE_KEY_PATH && chmod 600 $E2E_AZURE_PRIVATE_KEY_PATH &&
      $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AZURE_PRIVATE_KEY_PATH
      || exit $?
    - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_GCP_PUBLIC_KEY_PATH
      || exit $?
    - touch $E2E_GCP_PRIVATE_KEY_PATH && chmod 600 $E2E_GCP_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
      $AGENT_QA_E2E ssh_key_rsa > $E2E_GCP_PRIVATE_KEY_PATH || exit $?
    - pulumi login "s3://dd-pulumi-state?region=us-east-1&awssdk=v2&profile=$AWS_PROFILE"
    - ARM_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE client_id)
      || exit $?; export ARM_CLIENT_ID
    - ARM_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE token)
      || exit $?; export ARM_CLIENT_SECRET
    - ARM_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE tenant_id)
      || exit $?; export ARM_TENANT_ID
    - ARM_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE subscription_id)
      || exit $?; export ARM_SUBSCRIPTION_ID
    - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_json > ~/gcp-credentials.json
      || exit $?
    - export GOOGLE_APPLICATION_CREDENTIALS=~/gcp-credentials.json
    - 'gcp_acr_key=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_acr_readonly)
      || exit $?
  
      export E2E_GCP_IMAGE_PULL_PASSWORD="b64=$(printf ''%s'' "$gcp_acr_key" | base64
      -w 0)"
  
      '
    - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
    - export DD_ENV=nativetest
    - export DD_CIVISIBILITY_ENABLED=true
    - export DD_CIVISIBILITY_AGENTLESS_ENABLED=true
    - export DD_CIVISIBILITY_FLAKY_RETRY_ENABLED=false
    - export DD_TAGS="gitlab.pipeline_source:${CI_PIPELINE_SOURCE}"
    - DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token)
      || exit $?; export DD_API_KEY
    - export WINDOWS_DDNPM_DRIVER=${WINDOWS_DDNPM_DRIVER:-$(dda inv release.get-release-json-value
      "dependencies::WINDOWS_DDNPM_DRIVER" --no-worktree)}
    - export WINDOWS_DDPROCMON_DRIVER=${WINDOWS_DDPROCMON_DRIVER:-$(dda inv release.get-release-json-value
      "dependencies::WINDOWS_DDPROCMON_DRIVER" --no-worktree)}
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
    needs:
    - go_e2e_deps
    - artifacts: false
      job: go_e2e_test_binaries
    - go_tools_deps
    - job: new-e2e-base-coverage
      optional: true
    - deploy_windows_testing-a7
    - deploy_installer_oci
    - deploy_agent_oci
    - qa_installer_script_windows
    - deploy_ddot_oci
    parallel:
      matrix:
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeMSI$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackage$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackageWithAltDir$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackageFromExeWithAltDir$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackageAfterRollback$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestDowngradeAgentPackage$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestStopExperiment$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestExperimentForNonExistingPackageFails$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestExperimentCurrentVersionFails$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestStopWithoutExperiment$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestRevertsExperimentWhenServiceDies$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestRevertsExperimentWhenTimeout$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestExperimentMSIRollbackMaintainsCustomUserAndAltDir$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestRevertsExperimentWhenServiceDiesMaintainsCustomUserAndAltDir$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeWithHostNameChange$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestRunAgentMSIAfterExperiment$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeWithAgentUser$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeWithLocalSystemUser$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestDowngradeWithMissingInstallSource$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackageOCIBootstrap$"
      - EXTRA_PARAMS: --run "TestAgentUpgrades$/TestUpgradeAgentPackageMSIBootstrap$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesOnDC$/TestUpgradeMSI$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesOnDC$/TestUpgradeAgentPackage$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesAfterDCPromotion$/TestUpgradeAfterDCPromotion$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesOnDCWithGMSA$/TestUpgradeMSI$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesOnDCWithGMSA$/TestUpgradeAgentPackage$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesFromGA$/TestUpgradeAgentPackage$"
      - EXTRA_PARAMS: --run "TestAgentUpgradesFromGA$/TestUpgradeAgentPackageAfterRollback$"
      - EXTRA_PARAMS: --run "TestAgentInstalls$/TestSetupScriptInstallInfo$"
      - EXTRA_PARAMS: --run "TestUpgradeWithMissingPassword$/TestUpgradeWithMissingPassword$"
      - EXTRA_PARAMS: --run "TestExtensionPersistence$/TestExtensionPersistThroughMSIUpgrade$"
      - EXTRA_PARAMS: --run "TestExtensionPersistence$/TestExtensionRestoredOnMSIRollback$"
      - EXTRA_PARAMS: --run "TestExtensionPersistence$/TestExtensionRemovedOnUninstall$"
+     - EXTRA_PARAMS: --run "TestAgentKeepRightsFleetUpgrade$/TestKeepRightsSurvivesFleetUpgrade$"
+     - EXTRA_PARAMS: --run "TestAgentKeepRightsFleetUpgrade$/TestKeepRightsExplicitArgWinsOnFleetUpgrade$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigUpgradeSuccessful$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigUpgradeFailure$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigUpgradeNewAgents$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestRevertsConfigExperimentWhenServiceDies$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestRevertsConfigExperimentWhenTimeout$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestManagedConfigActiveAfterUpgrade$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigAltDir$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigCustomUser$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestConfigCustomUserAndAltDir$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestApplicationMonitoringGlobalRead$"
      - EXTRA_PARAMS: --run "TestAgentConfig$/TestApplicationMonitoringGlobalReadAfterRollback$"
      - EXTRA_PARAMS: --run "TestInstallExe$/TestInstallAgentPackage$"
      - EXTRA_PARAMS: --run "TestInstallExe$/TestInstallAgentFails$"
      - EXTRA_PARAMS: --run "TestInstallExe$/TestConfigValuesNotOverwrittenByDefaults$"
      - EXTRA_PARAMS: --run "TestInstallExeWithProxy$/TestInstallAgentPackageWithProxy$"
      - EXTRA_PARAMS: --run "TestInstallScript$/TestInstallAgentPackage$"
      - EXTRA_PARAMS: --run "TestInstallScript$/TestInstallIgnoreMajorMinor$"
      - EXTRA_PARAMS: --run "TestInstallScript$/TestReinstallAfterMSIUninstall$"
      - EXTRA_PARAMS: --run "TestInstallScriptWithAgentUser$/TestInstallScriptWithAgentUser"
      - EXTRA_PARAMS: --run "TestInstallScriptWithAgentUser$/TestInstallScriptChangesAgentUser$"
      - EXTRA_PARAMS: --run "TestInstallScriptWithAgentUserOnDC$"
      - EXTRA_PARAMS: --run "TestInstaller$"
      - EXTRA_PARAMS: --run "TestDotnetLibraryInstalls$"
      - EXTRA_PARAMS: --run "TestDotnetLibraryInstallsWithoutIIS/TestInstallDotnetLibraryPackageWithoutIIS$"
      - EXTRA_PARAMS: --run "TestDotnetLibraryInstallsWithoutIIS/TestMSIInstallDotnetLibraryFailsWithoutIIS$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestInstallFromMSI$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestUpgradeWithMSI$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestMSIRollbackRemovesLibrary$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestMSISkipRollbackIfInstalled$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestUninstallKeepsLibrary$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestUninstallScript$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestMSIPurge$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestDisableEnableScript$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsDotnetLibrary/TestEnableSSIOnReinstall$"
      - EXTRA_PARAMS: --run "TestAgentScriptInstallsDotnetLibrary/TestInstallFromScript$"
      - EXTRA_PARAMS: --run "TestAPMInjectInstall/TestInstallUninstallAPMInjectPackage$"
      - EXTRA_PARAMS: --run "TestAgentScriptInstallsAPMInject/TestInstallFromScript$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsAPMInject/TestInstallFromMSI$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsAPMInject/TestEnableDisable$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsAPMInject/TestInstallFromMSIWithIIS$"
      - EXTRA_PARAMS: --run "TestAgentMSIInstallsAPMInject/TestInstallFromMSIWithJava$"
      - EXTRA_PARAMS: --run "TestInjectorStats/TestQueryStatsViaSystemProbe$"
      - EXTRA_PARAMS: --run "TestInjectorStats/TestQueryStatsAfterInjection$"
      - EXTRA_PARAMS: --run "TestSystemProbeConfig/TestInstallScriptStartsSystemProbe$"
      - EXTRA_PARAMS: --run "TestSystemProbeConfig/TestStandaloneInstallDoesNotStartSystemProbe$"
    rules:
    - if: $RUN_E2E_TESTS == "off"
      when: never
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - if: $RUN_E2E_TESTS == "on"
      when: on_success
    - if: $CI_COMMIT_BRANCH == "main"
      when: on_success
    - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/
      when: on_success
    - if: $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$/
      when: on_success
    - changes:
        compare_to: $COMPARE_TO_BRANCH
        paths:
        - .gitlab/test/e2e/e2e.yml
        - test/e2e-framework/**/*
        - test/new-e2e/go.mod
        - flakes.yaml
        - release.json
    - changes:
        compare_to: $COMPARE_TO_BRANCH
        paths:
        - .gitlab/deploy/**/*
        - .gitlab/test/e2e_install_packages/**/*
        - .gitlab/test/e2e/e2e.yml
        - omnibus/config/**/*
        - pkg/fleet/**/*
        - cmd/installer/**/*
        - test/new-e2e/tests/fleet/**/*
        - test/new-e2e/tests/installer/**/*
        - tasks/installer.py
        - tools/windows/DatadogAgentInstaller/**/*
      when: on_success
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - allow_failure: true
      when: manual
    script:
    - export IS_DEV_BRANCH="$(dda inv -- -e pipeline.is-dev-branch)"
    - DYNAMIC_TESTS_BREAKGLASS=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DYNAMIC_TESTS_BREAKGLASS
      value) || exit $?; export DYNAMIC_TESTS_BREAKGLASS
    - "if [ \"$DYNAMIC_TESTS_BREAKGLASS\" == \"true\" ] || [ \"$IS_DEV_BRANCH\" == \"\
      false\" ] || [ \"$RUN_E2E_TESTS\" == \"on\" ]; then\n  export DYNAMIC_TESTS_FLAG=\"\
      \"\nfi\n"
    - export E2E_IMAGE_PULL_PASSWORD=$(aws ecr get-login-password),$E2E_GCP_IMAGE_PULL_PASSWORD
    - dda inv -- -e new-e2e-tests.run $DYNAMIC_TESTS_FLAG $PRE_BUILT_BINARIES_FLAG $MAX_RETRIES_FLAG
      --local-package $CI_PROJECT_DIR/$OMNIBUS_BASE_DIR --result-json $E2E_RESULT_JSON
      --targets $TARGETS --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer
      --logs-folder=$E2E_OUTPUT_DIR/logs --logs-post-processing --logs-post-processing-test-depth=$E2E_LOGS_PROCESSING_TEST_DEPTH
    stage: e2e
    tags:
    - arch:amd64
    - specific:true
    variables:
      DYNAMIC_TESTS_FLAG: --impacted
      E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key
      E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub
      E2E_AZURE_PRIVATE_KEY_PATH: /tmp/agent-qa-azure-ssh-key
      E2E_AZURE_PUBLIC_KEY_PATH: /tmp/agent-qa-azure-ssh-key.pub
      E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA
      E2E_COVERAGE_OUT_DIR: $CI_PROJECT_DIR/coverage
      E2E_GCP_PRIVATE_KEY_PATH: /tmp/agent-qa-gcp-ssh-key
      E2E_GCP_PUBLIC_KEY_PATH: /tmp/agent-qa-gcp-ssh-key.pub
      E2E_IMAGE_PULL_REGISTRY: 669783387624.dkr.ecr.us-east-1.amazonaws.com,us-central1-docker.pkg.dev
      E2E_IMAGE_PULL_USERNAME: AWS,_json_key
      E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa
      E2E_LOGS_PROCESSING_TEST_DEPTH: 1
      E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output
      E2E_PIPELINE_ID: $CI_PIPELINE_ID
      E2E_PREBUILD_S3_URI: $S3_PERMANENT_ARTIFACTS_URI/e2e-pre-build/$CI_PIPELINE_ID
      E2E_RESULT_JSON: $CI_PROJECT_DIR/e2e_test_output.json
      E2E_SKIP_WINDOWS: $SKIP_WINDOWS
      E2E_USE_AWS_PROFILE: 'false'
      EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
      FLAKY_PATTERNS_CONFIG: $CI_PROJECT_DIR/flaky-patterns-runtime.yaml
      FLEET_INSTALL_METHOD: windows
      GIT_STRATEGY: clone
      KUBERNETES_CPU_REQUEST: 6
      KUBERNETES_MEMORY_LIMIT: 16Gi
      KUBERNETES_MEMORY_REQUEST: 12Gi
      MAX_RETRIES_FLAG: --max-retries=0
      PRE_BUILT_BINARIES_FLAG: --use-prebuilt-binaries
      REMOTE_STACK_CLEANING: 'true'
      SHOULD_RUN_IN_FLAKES_FINDER: 'true'
      TARGETS: ./tests/installer/windows
      TEAM: windows-products
single_machine_performance-regression_detector-merge_base_check
  single_machine_performance-regression_detector-merge_base_check:
    artifacts:
      expire_in: 1 day
      paths:
      - regression_detector.env
      reports:
        dotenv:
        - regression_detector.env
    image: registry.ddbuild.io/ci/datadog-agent-buildimages/docker_x64$CI_IMAGE_DOCKER_X64_SUFFIX:$CI_IMAGE_DOCKER_X64
    needs: []
    rules:
    - if: $E2E_COVERAGE_PIPELINE == "true"
      when: never
    - if: $CI_COMMIT_BRANCH == "main"
      needs:
      - artifacts: false
        job: single_machine_performance-full-amd64-a7
    - if: $CI_COMMIT_BRANCH == "main"
      when: never
    - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/
      when: never
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - if: $CI_COMMIT_TAG != null
      when: never
    - changes:
        compare_to: $COMPARE_TO_BRANCH
        paths:
        - go.mod
        - go.sum
        - cmd/**/*
        - comp/**/*
        - internal/**/*
        - pkg/**/*
        - rtloader/**/*
        - tasks/**/*.py
        - omnibus/**/*
        - release.json
        - test/regression/**/*
        - Dockerfiles/**/*
        - .gitlab/test/functional_test/regression_detector.yml
        - .gitlab/childs/smp-regression-child-pipeline.yml
    - changes:
        compare_to: $COMPARE_TO_BRANCH
        paths:
        - '**/*.bazel*'
        - deps/**/*
        - bazel/**/*
        - tasks/build_tags.bzl
    script:
    - DATADOG_API_KEY="$("$CI_PROJECT_DIR"/tools/ci/fetch_secret.sh "$AGENT_API_KEY_ORG2"
      token)" || exit $?; export DATADOG_API_KEY
    - git fetch origin
    - SMP_BASE_BRANCH=$(dda inv release.get-release-json-value base_branch --no-worktree)
    - FOUR_DAYS_BEFORE_NOW=$(date --date="-4 days +1 hour" "+%s")
    - "if [[ \"$CI_COMMIT_BRANCH\" == \"$SMP_BASE_BRANCH\" ]]; then\n    # On the base\
      \ branch, use the parent commit as the baseline\n    BASELINE_SHA=$(git rev-parse\
      \ \"${CI_COMMIT_SHA}^\")\n    echo \"On base branch, using parent commit ${BASELINE_SHA}\
      \ as initial baseline\"\nelse\n    # On a dev branch, compute the merge base with\
      \ the base branch\n    echo \"Looking for merge base for branch ${SMP_BASE_BRANCH}\"\
      \n    SMP_MERGE_BASE=$(git merge-base ${CI_COMMIT_SHA} origin/${SMP_BASE_BRANCH})\n\
      \    echo \"Merge base is ${SMP_MERGE_BASE}\"\n    BASELINE_SHA=\"${SMP_MERGE_BASE}\"\
      \nfi\n"
-   - BASELINE_COMMIT_TIME=$(git -c log.showSignature=false show --no-patch --format=%ct
-     ${BASELINE_SHA})
    - AWS_NAMED_PROFILE="single-machine-performance"
    - SMP_ACCOUNT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $SMP_ACCOUNT account_id)
      || exit $?
    - SMP_AGENT_TEAM_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $SMP_ACCOUNT agent_team_id)
      || exit $?
    - SMP_BOT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $SMP_ACCOUNT bot_login)
      || exit $?
    - SMP_BOT_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $SMP_ACCOUNT bot_token)
      || exit $?
    - aws configure set aws_access_key_id "$SMP_BOT_ID" --profile ${AWS_NAMED_PROFILE}
    - aws configure set aws_secret_access_key "$SMP_BOT_KEY" --profile ${AWS_NAMED_PROFILE}
    - aws configure set region us-west-2 --profile ${AWS_NAMED_PROFILE}
    - echo "Checking if image exists for commit ${BASELINE_SHA}..."
    - "while [[ ! $(aws ecr describe-images --region us-west-2 --profile single-machine-performance\
      \ --registry-id \"${SMP_ACCOUNT_ID}\" --repository-name \"${SMP_AGENT_TEAM_ID}-agent\"\
      \ --image-ids imageTag=\"${BASELINE_SHA}-7-full-amd64\") ]]\ndo\n    echo \"No\
      \ image exists for ${BASELINE_SHA} - checking predecessor of ${BASELINE_SHA} next\"\
      \n    BASELINE_SHA=$(git rev-parse ${BASELINE_SHA}^)\n    echo \"Checking if commit\
      \ ${BASELINE_SHA} is recent enough...\"\n    BASELINE_COMMIT_TIME=$(git -c log.showSignature=false\
      \ show --no-patch --format=%ct ${BASELINE_SHA})\n    if [[ ${BASELINE_COMMIT_TIME}\
-     \ -le ${FOUR_DAYS_BEFORE_NOW} ]]\n    then\n        echo \"ERROR: Merge-base of\
?                                                                       ^^^^^^^     ^
+     \ -le ${FOUR_DAYS_BEFORE_NOW} ]]\n    then\n        echo \"ERROR: Baseline commit\
?                                                                       ^   ++++ + ^^^^
-     \ this branch is too old for SMP. Please update your branch by merging an up-to-date\
-     \ main branch into your branch or by rebasing it on an up-to-date main branch.\"\
+     \ (${BASELINE_SHA}) for this branch (${CI_COMMIT_BRANCH}) is too old for SMP.\
+     \ Please update your branch by merging or rebasing it onto an up-to-date ${SMP_BASE_BRANCH}\
+     \ branch.\"\n        # Updating onto ${SMP_BASE_BRANCH} makes its tip this branch's\
+     \ new\n        # merge base, so the next pipeline needs a baseline image for that\n\
+     \        # tip. A release branch can sit idle long enough for its tip's\n    \
+     \    # image to age out of ECR, in which case that next pipeline fails\n     \
+     \   # here too -- costing another image build, which takes 40-60\n        # minutes\
+     \ once started plus unknown runner queue time. Start the\n        # build now\
+     \ so it overlaps with the update instead of following it.\n        #\n       \
+     \ # Release branches only: a merge base with main has almost always\n        #\
+     \ been built already by some other recent pipeline, and updating\n        # onto\
+     \ main costs one pipeline rather than two.\n        #\n        # Best-effort --\
+     \ a failure to trigger is reported but does not\n        # change this job's outcome,\
+     \ which is a failure either way.\n        if [[ \"$SMP_BASE_BRANCH\" =~ ^[0-9]+\\\
+     .[0-9]+\\.x$ ]]\n        then\n            SMP_BASE_TIP=$(git rev-parse \"origin/${SMP_BASE_BRANCH}\"\
+     )\n            # Trigger only on a *confirmed* miss. Throttling, expired\n   \
+     \         # credentials and network errors all leave `describe-images`\n     \
+     \       # stdout empty too, so the `[[ ! $(...) ]]` test the loop\n          \
+     \  # above uses cannot tell \"no such image\" from \"could not\n            #\
+     \ check\". Guessing wrong is cheap in that loop -- it steps\n            # back\
+     \ one commit -- but here it starts an ~860-job pipeline,\n            # and the\
+     \ two failures correlate: credentials expiring\n            # mid-loop is itself\
+     \ a way to reach this branch spuriously.\n            # The distinguishing information\
+     \ is on stderr, so capture\n            # that and discard stdout. `if VAR=$(...)`\
+     \ is exempt from\n            # `set -e`.\n            if SMP_ECR_ERROR=$(aws\
+     \ ecr describe-images --region us-west-2 --profile single-machine-performance\
+     \ --registry-id \"${SMP_ACCOUNT_ID}\" --repository-name \"${SMP_AGENT_TEAM_ID}-agent\"\
+     \ --image-ids imageTag=\"${SMP_BASE_TIP}-7-full-amd64\" 2>&1 >/dev/null)\n   \
+     \         then\n                echo \"A baseline image already exists for the\
+     \ ${SMP_BASE_BRANCH} tip (${SMP_BASE_TIP})\"\n            elif [[ \"${SMP_ECR_ERROR}\"\
+     \ != *ImageNotFoundException* ]]\n            then\n                echo \"WARNING:\
+     \ could not determine whether a baseline image exists for the ${SMP_BASE_BRANCH}\
+     \ tip (${SMP_BASE_TIP}), so not triggering a rebuild: ${SMP_ECR_ERROR}\"\n   \
+     \         else\n                echo \"No baseline image exists for the ${SMP_BASE_BRANCH}\
+     \ tip (${SMP_BASE_TIP}) - triggering a pipeline to build one now\"\n         \
+     \       # Report the triggered pipeline's URL rather than an\n               \
+     \ # expected duration, which would go stale as build times\n                #\
+     \ and runner queue depths change.\n                #\n                # `POST\
+     \ /trigger/pipeline`, not `POST /pipeline`: GitLab\n                # allowlists\
+     \ `CI_JOB_TOKEN` for the former only, and it\n                # authenticates\
+     \ through a `token` body parameter rather\n                # than a header. `tasks/pipeline.py`\
+     \ starts child\n                # pipelines the same way, for the same reason.\n\
+     \                #\n                # This call therefore cannot be reproduced\
+     \ verbatim outside\n                # a running job, since job tokens exist only\
+     \ inside one. A\n                # personal token minted with `dda inv auth.gitlab`\
+     \ works\n                # the other way around: it may use `POST /pipeline`,\
+     \ but is\n                # not a valid `token` value for the trigger endpoint,\
+     \ which\n                # accepts only trigger and job tokens. So the equivalent\n\
+     \                # local command is the `PRIVATE-TOKEN` one printed below,\n \
+     \               # aimed at a different endpoint on purpose.\n                #\n\
+     \                # `CI_API_V4_URL` is https://gitlab.ddbuild.io/api/v4 and\n \
+     \               # `CI_PROJECT_ID` is 4670 for this project.\n                #\n\
+     \                # The trailing `|| true` on both lines keeps this\n         \
+     \       # best-effort. The runner runs this script under\n                # `set\
+     \ -eo pipefail`, where a bare `VAR=$(failing-cmd)`\n                # aborts the\
+     \ block -- which would skip the warning and\n                # self-service output\
+     \ below, the most useful thing this\n                # branch prints. `--fail`\
+     \ also makes curl exit nonzero on\n                # an HTTP error while emitting\
+     \ nothing, and `jq` exits\n                # nonzero on a non-JSON body, so the\
+     \ empty-string check\n                # below is what actually detects failure.\n\
+     \                SMP_REBUILD_PIPELINE=$(curl --silent --show-error --fail --request\
+     \ POST --data \"token=${CI_JOB_TOKEN}\" --data \"ref=${SMP_BASE_BRANCH}\" \"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/trigger/pipeline\"\
+     \ || true)\n                SMP_REBUILD_PIPELINE_URL=$(echo \"${SMP_REBUILD_PIPELINE}\"\
+     \ | jq -r '.web_url // empty' || true)\n                if [[ -z \"${SMP_REBUILD_PIPELINE_URL}\"\
+     \ ]]\n                then\n                    SMP_REBUILD_TRIGGERED=\"false\"\
+     \n                    echo \"WARNING: could not trigger a pipeline on ${SMP_BASE_BRANCH}\
+     \ - one may need to be started manually\"\n                else\n            \
+     \        SMP_REBUILD_TRIGGERED=\"true\"\n                    echo \"Triggered\
+     \ ${SMP_REBUILD_PIPELINE_URL} on ${SMP_BASE_BRANCH}\"\n                    # Name\
+     \ the job that publishes the image rather than\n                    # linking\
+     \ it. Resolving its URL means listing the\n                    # pipeline's jobs,\
+     \ and GitLab allowlists `CI_JOB_TOKEN`\n                    # for only `GET /job`\
+     \ out of the whole Jobs API, so that\n                    # lookup cannot succeed\
+     \ from here whatever it is given.\n                    echo \"The baseline image\
+     \ for ${SMP_BASE_TIP} is published by the single_machine_performance-full-amd64-a7\
+     \ job, listed at ${SMP_REBUILD_PIPELINE_URL}/builds\"\n                fi\n  \
+     \              echo \"NOTE: this job will keep failing until that image is published\
+     \ to SMP's ECR registry, so wait for it before re-running this job.\"\n      \
+     \          # Give a self-service path to starting the build. Needed\n        \
+     \        # when the trigger above failed, and also when a triggered\n        \
+     \        # pipeline dies for reasons outside this job -- CI runners\n        \
+     \        # are taken offline for maintenance periodically, which\n           \
+     \     # kills the pipelines on them.\n                #\n                # `dda\
+     \ inv auth.gitlab` prints feature-flag lines to stdout\n                # before\
+     \ the token, so the `tail -1` is load-bearing: without\n                # it those\
+     \ lines land in the header value and curl fails with\n                # \"curl:\
+     \ (43) bad argument\".\n                echo \"To start that pipeline yourself\
+     \ -- if the trigger above failed, or if the\"\n                echo \"pipeline\
+     \ is cancelled, e.g. by CI runner maintenance -- either open\"\n             \
+     \   echo \"    https://gitlab.ddbuild.io/DataDog/datadog-agent/-/pipelines/new?ref=${SMP_BASE_BRANCH}\"\
+     \n                echo \"and click the blue \\\"New pipeline\\\" button, or run\
+     \ this command from a\"\n                echo \"datadog-agent checkout:\"\n  \
+     \              echo \"    curl --silent --show-error --fail \\\\\"\n         \
+     \       echo \"        --request POST \\\\\"\n                echo \"        --header\
+     \ \\\"PRIVATE-TOKEN: \\$(dda inv auth.gitlab | tail -1)\\\" \\\\\"\n         \
+     \       echo \"        --data \\\"ref=${SMP_BASE_BRANCH}\\\" \\\\\"\n        \
+     \        echo \"        \\\"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipeline\\\
+     \"\"\n                # Report the outcome, not the attempt -- tagging \"true\"\
+     \n                # unconditionally would hide the trigger's failure rate.\n \
+     \               datadog-ci tag --level job --tags smp_baseline_rebuild_triggered:\"\
+     ${SMP_REBUILD_TRIGGERED}\"\n            fi\n        fi\n        datadog-ci tag\
-     \n        datadog-ci tag --level job --tags smp_merge_base_failure_reason:\"branch_too_old\"\
?      -----------------------
+     \ --level job --tags smp_merge_base_failure_reason:\"branch_too_old\"\n      \
?                                                                           ++++++++
-     \n        exit 1\n    fi\n    echo \"Commit ${BASELINE_SHA} is recent enough\"\
?      -------
+     \  exit 1\n    fi\n    echo \"Commit ${BASELINE_SHA} is recent enough\"\n    echo\
?                                                                             ++++++++++
-     \n    echo \"Checking if image exists for commit ${BASELINE_SHA}...\"\ndone\n"
?      ---------
+     \ \"Checking if image exists for commit ${BASELINE_SHA}...\"\ndone\n"
    - echo "Image exists for commit ${BASELINE_SHA}"
    - echo "BASELINE_SHA=${BASELINE_SHA}" > regression_detector.env
    - echo "Merge-base check passed. Baseline SHA saved to artifact."
    stage: functional_test
    tags:
    - arch:amd64
    - specific:true
    timeout: 10m
    variables:
      GIT_DEPTH: 0
tests_windows_secagent_x64
  tests_windows_secagent_x64:
    artifacts:
      paths:
      - $CI_PROJECT_DIR/test/new-e2e/tests/security-agent-functional/artifacts
      when: always
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - go_deps
    - go_tools_deps
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - $ErrorActionPreference = "Stop"
    - . ./tools/ci/sanitize-goproxy.ps1
    - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 16384M -v "$(Get-Location):c:\mnt"
-     -e AWS_NETWORKING=true -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e SIGN_WINDOWS_DD_WCS=true
?                                                                             ----------------------------
+     -e AWS_NETWORKING=true -e CI -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME
?                           ++++++
-     -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e GOMODCACHE="c:\modcache"
+     -e SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG
+     -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL -e CI_IDENTITIES_GITLAB_ID_TOKEN
-     -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\secagent.bat
?    -----------------------------------------
+     ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\secagent.bat
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    stage: source_test
    tags:
    - windows-v2:2022
    variables:
      ARCH: x64
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
      XDG_CACHE_HOME: c:/bzl
tests_windows_sysprobe_x64
  tests_windows_sysprobe_x64:
    artifacts:
      paths:
      - $CI_PROJECT_DIR/test/new-e2e/tests/sysprobe-functional/artifacts
      when: always
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      BUILDBARN_ID_TOKEN:
        aud: buildbarn.us1.ddbuild.io
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - go_deps
    - go_tools_deps
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - when: on_success
    script:
    - $ErrorActionPreference = "Stop"
    - . ./tools/ci/sanitize-goproxy.ps1
    - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 16384M -v "$(Get-Location):c:\mnt"
-     -e AWS_NETWORKING=true -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e SIGN_WINDOWS_DD_WCS=true
?                                                                             ----------------------------
+     -e AWS_NETWORKING=true -e CI -e GITLAB_CI -e CI_PIPELINE_ID -e CI_PROJECT_NAME
?                           ++++++
-     -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e GOMODCACHE="c:\modcache"
+     -e SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG
+     -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL -e CI_IDENTITIES_GITLAB_ID_TOKEN
-     -e GOPROXY -e GONOSUMDB -e PIP_INDEX_URL ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\sysprobe.bat
?    -----------------------------------------
+     ${WINBUILDIMAGE} c:\mnt\tasks\winbuildscripts\sysprobe.bat
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    stage: source_test
    tags:
    - windows-v2:2022
    variables:
      ARCH: x64
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
      XDG_CACHE_HOME: c:/bzl
windows_choco_7_x64
  windows_choco_7_x64:
    artifacts:
      expire_in: 2 weeks
      paths:
      - omnibus/pkg/pipeline-$CI_PIPELINE_ID
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - windows_msi_and_bosh_zip_x64-a7
    retry: 2
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - allow_failure: true
      if: $BUCKET_BRANCH != "beta" && $BUCKET_BRANCH != "stable"
      when: manual
    - if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
    script:
    - $ErrorActionPreference = "Stop"
    - if (Test-Path build-out) { remove-item -recurse -force build-out }
-   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
+   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e CI_IDENTITIES_GITLAB_ID_TOKEN
+     -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
      -e CI_PROJECT_NAME -e CI_PIPELINE_ID -e BUCKET_BRANCH -e AWS_NETWORKING=true ${WINBUILDIMAGE}
      powershell.exe -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1
      -MSIDirectory c:\mnt\omnibus\pkg\pipeline-${CI_PIPELINE_ID} -Flavor $FLAVOR -InstallDeps
      1"
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    - $CopyNupkgToS3 = "$S3_CP_CMD --recursive --exclude '*' --include '*.nupkg' build-out
      $S3_RELEASE_ARTIFACTS_URI/choco/nupkg"
    - Invoke-Expression $CopyNupkgToS3
    stage: choco_build
    tags:
    - windows-v2:2022
    variables:
      ARCH: x64
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      FLAVOR: datadog-agent
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
windows_choco_7_x64-fips
  windows_choco_7_x64-fips:
    artifacts:
      expire_in: 2 weeks
      paths:
      - omnibus/pkg/pipeline-$CI_PIPELINE_ID
    before_script:
    - C:\ci-identities-gitlab-job-client.exe assume-role
    id_tokens:
      CI_IDENTITIES_GITLAB_ID_TOKEN:
        aud: ci-identities
    needs:
    - windows_msi_and_bosh_zip_x64-a7-fips
    retry: 2
    rules:
    - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
      when: never
    - allow_failure: true
      if: $BUCKET_BRANCH != "beta" && $BUCKET_BRANCH != "stable"
      when: manual
    - if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
    script:
    - $ErrorActionPreference = "Stop"
    - if (Test-Path build-out) { remove-item -recurse -force build-out }
-   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
+   - 'docker run --rm -v "$(Get-Location):c:\mnt" -e CI -e GITLAB_CI -e CI_IDENTITIES_GITLAB_ID_TOKEN
+     -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
      -e CI_PROJECT_NAME -e CI_PIPELINE_ID -e BUCKET_BRANCH -e AWS_NETWORKING=true ${WINBUILDIMAGE}
      powershell.exe -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1
      -MSIDirectory c:\mnt\omnibus\pkg\pipeline-${CI_PIPELINE_ID} -Flavor $FLAVOR -InstallDeps
      1"
  
      '
    - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
    - $CopyNupkgToS3 = "$S3_CP_CMD --recursive --exclude '*' --include '*.nupkg' build-out
      $S3_RELEASE_ARTIFACTS_URI/choco/nupkg"
    - Invoke-Expression $CopyNupkgToS3
    stage: choco_build
    tags:
    - windows-v2:2022
    variables:
      ARCH: x64
      AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
      FLAVOR: datadog-fips-agent
      GIT_STRATEGY: clone
      WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}

Added Jobs

.windows_zip_bazel_base
.windows_zip_bazel_base:
  artifacts:
    expire_in: 2 weeks
    paths:
    - omnibus/pkg/pipeline-$CI_PIPELINE_ID
  before_script:
  - C:\ci-identities-gitlab-job-client.exe assume-role
  id_tokens:
    BUILDBARN_ID_TOKEN:
      aud: buildbarn.us1.ddbuild.io
    CI_IDENTITIES_GITLAB_ID_TOKEN:
      aud: ci-identities
  needs:
  - go_deps
  rules:
  - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
    when: never
  - when: on_success
  script:
  - $ErrorActionPreference = "Stop"
  - . ./tools/ci/sanitize-goproxy.ps1
  - if (Test-Path omnibus\pkg) { remove-item -recurse -force omnibus\pkg }
  - mkdir omnibus\pkg
  - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 24576M -v "$(Get-Location):c:\mnt"
    -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
    -e GITLAB_CI -e CI_JOB_ID -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e CI_COMMIT_BRANCH
    -e CI_JOB_NAME_SLUG -e CI_COMMIT_REF_NAME -e OMNIBUS_TARGET -e WINDOWS_BUILDER=true
    -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e AWS_NETWORKING=true -e
    SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e
    TARGET_ARCH="$ARCH" -e BUCKET_BRANCH -e S3_OMNIBUS_CACHE_BUCKET -e S3_OMNIBUS_GIT_CACHE_BUCKET
    -e BUNDLE_MIRROR__RUBYGEMS__ORG -e PIP_INDEX_URL -e AGENT_API_KEY_ORG2 -e OMNIBUS_GIT_CACHE_DIR=${Env:TEMP}/${CI_PIPELINE_ID}/omnibus-git-cache
    -e AGENT_FLAVOR -e OMNIBUS_RUBY_VERSION -e PYTHONUTF8=1 -e DEPLOY_AGENT -e CI_JOB_TOKEN
    -e CI_IDENTITIES_GITLAB_ID_TOKEN ${WINBUILDIMAGE} powershell -C "c:\mnt\tasks\winbuildscripts\Build-OmnibusTarget.ps1
    -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1"

    '
  - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
  - get-childitem omnibus\pkg\pipeline-$CI_PIPELINE_ID
  - Invoke-Expression "$S3_CP_CMD omnibus\pkg\pipeline-$CI_PIPELINE_ID\version-manifest.json
    $S3_SBOM_STORAGE_URI/$CI_JOB_NAME/version-manifest.json"
  - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
  stage: package_build
  tags:
  - windows-v2:2022
  variables:
    ARCH: x64
    AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
    BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
    GIT_STRATEGY: clone
    WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
    XDG_CACHE_HOME: c:/bzl
deploy_fips_proxy_testing-a7_x64
deploy_fips_proxy_testing-a7_x64:
  image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$CI_IMAGE_GITLAB_AGENT_DEPLOY_SUFFIX:$CI_IMAGE_GITLAB_AGENT_DEPLOY
  needs: []
  rules:
  - if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
  - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
    when: never
  - changes:
      compare_to: $COMPARE_TO_BRANCH
      paths:
      - .gitlab/deploy/e2e_testing_deploy/e2e_deploy.yml
  script:
  - ${CI_PROJECT_DIR}/tools/ci/retry.sh aws s3 cp s3://binaries-ddbuild-io-prod/dd-source/domains/seceng/sit/apps/artifact-security/vault-gpg-client/gpg-vault/dev/gpg-vault-v1.6.2-linux-amd64.tar.gz
    .
  - tar -xzf gpg-vault-v1.6.2-linux-amd64.tar.gz
  - mv gpg-vault-linux-amd64 /usr/bin/gpg-vault-bin
  - echo '#!/usr/bin/env bash' > /usr/bin/gpg
  - echo 'GPG_VAULT_COMPAT_MODE=true GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com"
    /usr/bin/gpg-vault "$@"' >> /usr/bin/gpg
  - chmod +x /usr/bin/gpg
  - echo '#!/usr/bin/env bash' > /usr/bin/gpg-vault
  - echo 'GPG_USER_ID="Datadog Packages" GPG_USER_EMAIL="package@datadoghq.com" /usr/bin/gpg-vault-bin
    "$@"' >> /usr/bin/gpg-vault
  - chmod +x /usr/bin/gpg-vault
  - tools/ci/retry.sh curl -fsSLO "https://yum.datadoghq.com/stable/7/x86_64/datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
  - tools/ci/retry.sh curl -fsSLO "https://apt.datadoghq.com/pool/d/da/datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
  - tools/ci/signing/sign_rpm_package.sh "datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
    $GPG_TEST_KEY_ID out/
  - python2 /opt/rpm-s3/bin/rpm-s3 --verbose --visibility public-read -c "https://s3.amazonaws.com"
    -b $RPM_TESTING_S3_BUCKET -p "testing/pipeline-$DD_PIPELINE_ID/7/x86_64/" -a "x86_64"
    --sign --metadata-signing-key $GPG_TEST_KEY_ID "out/datadog-fips-proxy-${FIPS_PROXY_VERSION}.x86_64.rpm"
  - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a amd64 --sign=$GPG_TEST_KEY_ID
    --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
    public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} "datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
  - deb-s3 upload -c "stable-x86_64" -m 7 -b $DEB_TESTING_S3_BUCKET -a x86_64 --sign=$GPG_TEST_KEY_ID
    --gpg_options="--batch --digest-algo sha512" --preserve_versions --visibility
    public --prefix datadog-agent/pipeline-${DD_PIPELINE_ID} "datadog-fips-proxy_${FIPS_PROXY_VERSION}_amd64.deb"
  stage: e2e_deploy
  tags:
  - arch:amd64
  - specific:true
  variables:
    DD_PIPELINE_ID: $CI_PIPELINE_ID-a7
    FIPS_PROXY_VERSION: 1.1.29-1
new-e2e-windows-eudm-package-a7-x86_64
new-e2e-windows-eudm-package-a7-x86_64:
  after_script:
  - CODECOV_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $CODECOV token) || exit
    $?; export CODECOV_TOKEN
  - $CI_PROJECT_DIR/tools/ci/junit_upload.sh "junit-${CI_JOB_ID}.tgz" "$E2E_RESULT_JSON"
  - "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n  dda inv -- -e coverage.process-e2e-coverage-folders\
    \ $E2E_COVERAGE_OUT_DIR\n  dda inv -- -e dyntest.compute-and-upload-job-index\
    \ --bucket-uri $S3_PERMANENT_ARTIFACTS_URI --coverage-folder $E2E_COVERAGE_OUT_DIR\
    \ --commit-sha $CI_COMMIT_SHA --job-id $CI_JOB_ID\nfi\n"
  - "if [ -d \"$E2E_COVERAGE_OUT_DIR\" ]; then\n  DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh\
    \ $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY\n  for coverage in\
    \ \"$E2E_COVERAGE_OUT_DIR\"/*/coverage.txt; do\n    datadog-ci coverage upload\
    \ --format=go-coverprofile \"$coverage\" || true\n  done\nfi\n"
  artifacts:
    expire_in: 2 weeks
    paths:
    - $E2E_OUTPUT_DIR
    - $E2E_RESULT_JSON
    - junit-*.tgz
    - $E2E_COVERAGE_OUT_DIR
    reports:
      annotations:
      - $EXTERNAL_LINKS_PATH
    when: always
  before_script:
  - CURRENT_AGENT_ASSERT_VERSION=$(dda inv agent.version) || exit $?; export CURRENT_AGENT_ASSERT_VERSION
  - CURRENT_AGENT_ASSERT_PACKAGE_VERSION=$(dda inv agent.version --url-safe)-1 ||
    exit $?; export CURRENT_AGENT_ASSERT_PACKAGE_VERSION
  - mkdir -p $GOPATH/pkg/mod/cache && zstd -dc modcache_e2e.tar.zst | tar xf - -C
    $GOPATH/pkg/mod/cache
  - rm -f modcache_e2e.tar.zst
  - mkdir -p ~/.pulumi && zstd -dc pulumi_plugins.tar.zst | tar xf - -C ~/.pulumi
  - rm -f pulumi_plugins.tar.zst
  - "go_bin=\"$(go env GOBIN)\"\nif [ -z \"$go_bin\" ]; then\n  go_bin=\"$(go env\
    \ GOPATH)/bin\"\nfi\nmkdir -p \"$go_bin\" \"$GOPATH/pkg/mod/cache\"\nzstd -dc\
    \ go_tools_bin.tar.zst | tar xf - -C \"$go_bin\"\nzstd -dc modcache_tools.tar.zst\
    \ | tar xf - -C \"$GOPATH/pkg/mod/cache\"\n"
  - rm -f go_tools_bin.tar.zst modcache_tools.tar.zst
  - export PATH=$PATH:$go_bin
  - mkdir -p ~/.aws
  - "if [ -n \"$E2E_USE_AWS_PROFILE\" ]; then\n  echo Using agent-qa-ci aws profile\n\
    \  $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E profile >> ~/.aws/config\
    \ || exit $?\n  # Now all `aws` commands target the agent-qa profile\n  export\
    \ AWS_PROFILE=agent-qa-ci\nelse\n  # Assume role to fetch only once credentials\
    \ and avoid rate limits\n  echo Assuming ddbuild-agent-ci role\n  roleoutput=\"\
    $(aws sts assume-role --role-arn arn:aws:iam::669783387624:role/ddbuild-agent-ci\
    \ --external-id ddbuild-agent-ci --role-session-name RoleSession)\"\n  export\
    \ AWS_ACCESS_KEY_ID=\"$(echo \"$roleoutput\" | jq -r '.Credentials.AccessKeyId')\"\
    \n  export AWS_SECRET_ACCESS_KEY=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SecretAccessKey')\"\
    \n  export AWS_SESSION_TOKEN=\"$(echo \"$roleoutput\" | jq -r '.Credentials.SessionToken')\"\
    \nfi\n"
  - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AWS_PUBLIC_KEY_PATH
    || exit $?
  - touch $E2E_AWS_PRIVATE_KEY_PATH && chmod 600 $E2E_AWS_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
    $AGENT_QA_E2E ssh_key_rsa > $E2E_AWS_PRIVATE_KEY_PATH || exit $?
  - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AZURE_PUBLIC_KEY_PATH
    || exit $?
  - touch $E2E_AZURE_PRIVATE_KEY_PATH && chmod 600 $E2E_AZURE_PRIVATE_KEY_PATH &&
    $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AZURE_PRIVATE_KEY_PATH
    || exit $?
  - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_GCP_PUBLIC_KEY_PATH
    || exit $?
  - touch $E2E_GCP_PRIVATE_KEY_PATH && chmod 600 $E2E_GCP_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh
    $AGENT_QA_E2E ssh_key_rsa > $E2E_GCP_PRIVATE_KEY_PATH || exit $?
  - pulumi login "s3://dd-pulumi-state?region=us-east-1&awssdk=v2&profile=$AWS_PROFILE"
  - ARM_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE client_id)
    || exit $?; export ARM_CLIENT_ID
  - ARM_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE token)
    || exit $?; export ARM_CLIENT_SECRET
  - ARM_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE tenant_id)
    || exit $?; export ARM_TENANT_ID
  - ARM_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_AZURE subscription_id)
    || exit $?; export ARM_SUBSCRIPTION_ID
  - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_json > ~/gcp-credentials.json
    || exit $?
  - export GOOGLE_APPLICATION_CREDENTIALS=~/gcp-credentials.json
  - 'gcp_acr_key=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $E2E_GCP credentials_acr_readonly)
    || exit $?

    export E2E_GCP_IMAGE_PULL_PASSWORD="b64=$(printf ''%s'' "$gcp_acr_key" | base64
    -w 0)"

    '
  - dda inv -- -e gitlab.generate-ci-visibility-links --output=$EXTERNAL_LINKS_PATH
  - export DD_ENV=nativetest
  - export DD_CIVISIBILITY_ENABLED=true
  - export DD_CIVISIBILITY_AGENTLESS_ENABLED=true
  - export DD_CIVISIBILITY_FLAKY_RETRY_ENABLED=false
  - export DD_TAGS="gitlab.pipeline_source:${CI_PIPELINE_SOURCE}"
  - DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token)
    || exit $?; export DD_API_KEY
  - export WINDOWS_DDNPM_DRIVER=${WINDOWS_DDNPM_DRIVER:-$(dda inv release.get-release-json-value
    "dependencies::WINDOWS_DDNPM_DRIVER" --no-worktree)}
  - export WINDOWS_DDPROCMON_DRIVER=${WINDOWS_DDPROCMON_DRIVER:-$(dda inv release.get-release-json-value
    "dependencies::WINDOWS_DDPROCMON_DRIVER" --no-worktree)}
  image: registry.ddbuild.io/ci/datadog-agent-buildimages/linux$CI_IMAGE_LINUX_SUFFIX:$CI_IMAGE_LINUX
  needs:
  - go_e2e_deps
  - artifacts: false
    job: go_e2e_test_binaries
  - go_tools_deps
  - job: new-e2e-base-coverage
    optional: true
  - deploy_windows_testing-a7
  - deploy_installer_oci
  - deploy_agent_oci
  - qa_installer_script_windows
  parallel:
    matrix:
    - EXTRA_PARAMS: --run "TestEUDMExtensionViaMSI$/TestInstallAndUninstallEUDMExtension$"
    - EXTRA_PARAMS: --run "TestEUDMExtensionViaMSI$/TestUpgradeEnablesEUDMExtension$"
    - EXTRA_PARAMS: --run "TestEUDMExtensionViaMSI$/TestInstallWithoutEUDMSkipsExtension$"
  rules:
  - if: $DEPLOY_AGENT == "true" || $DDR_WORKFLOW_ID != null
  - if: $RUN_E2E_TESTS == "off"
    when: never
  - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
    when: never
  - if: $RUN_E2E_TESTS == "on"
    when: on_success
  - if: $CI_COMMIT_BRANCH == "main"
    when: on_success
  - if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/
    when: on_success
  - if: $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$/
    when: on_success
  - changes:
      compare_to: $COMPARE_TO_BRANCH
      paths:
      - .gitlab/test/e2e/e2e.yml
      - test/e2e-framework/**/*
      - test/new-e2e/go.mod
      - flakes.yaml
      - release.json
  - changes:
      compare_to: $COMPARE_TO_BRANCH
      paths:
      - tools/windows/DatadogAgentInstaller/**/*
      - .gitlab/windows/test/e2e_install_packages/windows.yml
      - test/new-e2e/tests/windows/install-test/**/*
      - test/new-e2e/tests/windows/domain-test/**/*
      - tasks/msi.py
      - omnibus/python-scripts/**/*
      - omnibus/lib/**/*
      - omnibus/config/projects/agent.rb
      - omnibus/config/software/**/*
      - omnibus/config/templates/**/*
      - release.json
    when: on_success
  - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
    when: never
  - allow_failure: true
    when: manual
  script:
  - export IS_DEV_BRANCH="$(dda inv -- -e pipeline.is-dev-branch)"
  - DYNAMIC_TESTS_BREAKGLASS=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $DYNAMIC_TESTS_BREAKGLASS
    value) || exit $?; export DYNAMIC_TESTS_BREAKGLASS
  - "if [ \"$DYNAMIC_TESTS_BREAKGLASS\" == \"true\" ] || [ \"$IS_DEV_BRANCH\" == \"\
    false\" ] || [ \"$RUN_E2E_TESTS\" == \"on\" ]; then\n  export DYNAMIC_TESTS_FLAG=\"\
    \"\nfi\n"
  - export E2E_IMAGE_PULL_PASSWORD=$(aws ecr get-login-password),$E2E_GCP_IMAGE_PULL_PASSWORD
  - dda inv -- -e new-e2e-tests.run $DYNAMIC_TESTS_FLAG $PRE_BUILT_BINARIES_FLAG $MAX_RETRIES_FLAG
    --local-package $CI_PROJECT_DIR/$OMNIBUS_BASE_DIR --result-json $E2E_RESULT_JSON
    --targets $TARGETS --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer
    --logs-folder=$E2E_OUTPUT_DIR/logs --logs-post-processing --logs-post-processing-test-depth=$E2E_LOGS_PROCESSING_TEST_DEPTH
  stage: e2e_install_packages
  tags:
  - arch:amd64
  - specific:true
  timeout: 45m
  variables:
    AGENT_MAJOR_VERSION: 7
    DYNAMIC_TESTS_FLAG: --impacted
    E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key
    E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub
    E2E_AZURE_PRIVATE_KEY_PATH: /tmp/agent-qa-azure-ssh-key
    E2E_AZURE_PUBLIC_KEY_PATH: /tmp/agent-qa-azure-ssh-key.pub
    E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA
    E2E_COVERAGE_OUT_DIR: $CI_PROJECT_DIR/coverage
    E2E_GCP_PRIVATE_KEY_PATH: /tmp/agent-qa-gcp-ssh-key
    E2E_GCP_PUBLIC_KEY_PATH: /tmp/agent-qa-gcp-ssh-key.pub
    E2E_IMAGE_PULL_REGISTRY: 669783387624.dkr.ecr.us-east-1.amazonaws.com,us-central1-docker.pkg.dev
    E2E_IMAGE_PULL_USERNAME: AWS,_json_key
    E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa
    E2E_LOGS_PROCESSING_TEST_DEPTH: 1
    E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output
    E2E_PIPELINE_ID: $CI_PIPELINE_ID
    E2E_PREBUILD_S3_URI: $S3_PERMANENT_ARTIFACTS_URI/e2e-pre-build/$CI_PIPELINE_ID
    E2E_RESULT_JSON: $CI_PROJECT_DIR/e2e_test_output.json
    E2E_SKIP_WINDOWS: $SKIP_WINDOWS
    E2E_USE_AWS_PROFILE: 'true'
    EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json
    EXTRA_PARAMS: --run "TestEUDMExtensionViaMSI"
    FLAKY_PATTERNS_CONFIG: $CI_PROJECT_DIR/flaky-patterns-runtime.yaml
    GIT_STRATEGY: clone
    KUBERNETES_CPU_REQUEST: 6
    KUBERNETES_MEMORY_LIMIT: 16Gi
    KUBERNETES_MEMORY_REQUEST: 12Gi
    MAX_RETRIES_FLAG: ''
    PRE_BUILT_BINARIES_FLAG: --use-prebuilt-binaries
    REMOTE_STACK_CLEANING: 'true'
    SHOULD_RUN_IN_FLAKES_FINDER: 'true'
    TARGETS: ./tests/installer/windows
    TEAM: windows-products
windows_zip_eudm_x64
windows_zip_eudm_x64:
  artifacts:
    expire_in: 2 weeks
    paths:
    - omnibus/pkg/pipeline-$CI_PIPELINE_ID
  before_script:
  - C:\ci-identities-gitlab-job-client.exe assume-role
  id_tokens:
    BUILDBARN_ID_TOKEN:
      aud: buildbarn.us1.ddbuild.io
    CI_IDENTITIES_GITLAB_ID_TOKEN:
      aud: ci-identities
  needs:
  - go_deps
  rules:
  - if: $CI_COMMIT_BRANCH =~ /^mq-working-branch-/
    when: never
  - when: on_success
  script:
  - $ErrorActionPreference = "Stop"
  - . ./tools/ci/sanitize-goproxy.ps1
  - if (Test-Path omnibus\pkg) { remove-item -recurse -force omnibus\pkg }
  - mkdir omnibus\pkg
  - '.\tools\ci\docker-run-with-bazel-cache.ps1 -m 24576M -v "$(Get-Location):c:\mnt"
    -e DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS="${DDA_FEATURE_FLAGS_CI_SSM_KEY_WINDOWS}"
    -e GITLAB_CI -e CI_JOB_ID -e CI_PIPELINE_ID -e CI_PROJECT_NAME -e CI_COMMIT_BRANCH
    -e CI_JOB_NAME_SLUG -e CI_COMMIT_REF_NAME -e OMNIBUS_TARGET -e WINDOWS_BUILDER=true
    -e GOMODCACHE="c:\modcache" -e GOPROXY -e GONOSUMDB -e AWS_NETWORKING=true -e
    SIGN_WINDOWS_DD_WCS=true -e WINDOWS_SIGNING_CERT -e WINDOWS_SIGNING_CONFIG -e
    TARGET_ARCH="$ARCH" -e BUCKET_BRANCH -e S3_OMNIBUS_CACHE_BUCKET -e S3_OMNIBUS_GIT_CACHE_BUCKET
    -e BUNDLE_MIRROR__RUBYGEMS__ORG -e PIP_INDEX_URL -e AGENT_API_KEY_ORG2 -e OMNIBUS_GIT_CACHE_DIR=${Env:TEMP}/${CI_PIPELINE_ID}/omnibus-git-cache
    -e AGENT_FLAVOR -e OMNIBUS_RUBY_VERSION -e PYTHONUTF8=1 -e DEPLOY_AGENT -e CI_JOB_TOKEN
    -e CI_IDENTITIES_GITLAB_ID_TOKEN ${WINBUILDIMAGE} powershell -C "c:\mnt\tasks\winbuildscripts\Build-OmnibusTarget.ps1
    -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1"

    '
  - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
  - get-childitem omnibus\pkg\pipeline-$CI_PIPELINE_ID
  - Invoke-Expression "$S3_CP_CMD omnibus\pkg\pipeline-$CI_PIPELINE_ID\version-manifest.json
    $S3_SBOM_STORAGE_URI/$CI_JOB_NAME/version-manifest.json"
  - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" }
  stage: package_build
  tags:
  - windows-v2:2022
  variables:
    ARCH: x64
    AWS_SHARED_CREDENTIALS_FILE: ${CI_PROJECT_DIR}\.aws\credentials-by-job-id\${CI_JOB_ID}
    BAZELISK_HOME: $XDG_CACHE_HOME/bazelisk
    GIT_STRATEGY: clone
    OMNIBUS_TARGET: eudm
    WINBUILDIMAGE: registry.ddbuild.io/ci/datadog-agent-buildimages/windows_ltsc2022_${ARCH}${CI_IMAGE_WIN_LTSC2022_X64_SUFFIX}:${CI_IMAGE_WIN_LTSC2022_X64}
    XDG_CACHE_HOME: c:/bzl

Removed Jobs

  • .setup_github_ci_platform_machine_images_token

Changes Summary

Removed Modified Added Renamed
1 32 4 0

Updated: .gitlab/distribution.yml

Removed Jobs

  • .setup_github_ci_platform_machine_images_token
  • generate_windows_gitlab_runner_bump_pr_manual
  • generate_windows_gitlab_runner_bump_pr

Changes Summary

Removed Modified Added Renamed
3 0 0 0

ℹ️ Diff available in the job log.

@dd-octo-sts

dd-octo-sts Bot commented Aug 27, 2026 •

Copy link
Copy Markdown
Contributor Author

Files inventory check summary

File checks results against ancestor 8a0700e8:

Results for datadog-agent_7.82.3.git.3.4de8a79.pipeline.133801846-1_amd64.deb:

No change detected

@ofek

ofek commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

/merge

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Sep 2, 2026 •

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-09-02 16:01:47 UTC ℹ️ Start processing command /merge


2026-09-02 16:01:50 UTC ❌ MergeQueue

You are not allowed to use the merge queue towards 7.82.x. User is not part of the authorized users or teams.
The authorized teams (including their child teams) are: agent-delivery.

@ofek

ofek commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

This is no longer necessary.

@ofek ofek closed this Sep 10, 2026
@ofek
ofek deleted the backport-54908-to-7.82.x branch September 10, 2026 13:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport bot changelog/no-changelog No changelog entry needed internal Identify a non-fork PR qa/no-code-change No code change in Agent code requiring validation short review PR is simple enough to be reviewed quickly team/agent-build team/agent-devx

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants