Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c098632
chore(eslint): update eslint-plugin-unicorn to 72 (#9503)
BridgeAR Jul 27, 2026
8cb0e76
feat(startup-log): report OTLP export status (#9517)
bm1549 Jul 27, 2026
c1fc412
ci(scripts): speed up verify-exercised-tests and close detection gaps…
BridgeAR Jul 27, 2026
0e509de
fix(instrumentation): wait for asyncEnd on promise settlement (#9538)
juan-fernandez Jul 27, 2026
1499016
chore(licenses): read dependencies directly from lockfiles (#9540)
BridgeAR Jul 27, 2026
5862312
chore(deps): bump the cloud-and-messaging group across 1 directory wi…
dependabot[bot] Jul 28, 2026
7d12bf6
feat(test-optimization): support WebdriverIO with Mocha (#9520)
juan-fernandez Jul 28, 2026
68739ee
chore(deps): bump the ai-and-llm group across 1 directory with 6 upda…
dependabot[bot] Jul 28, 2026
ad89423
chore(deps): bump @smithy/smithy-client (#9550)
dependabot[bot] Jul 28, 2026
679ffa8
chore(deps): bump the test-versions group across 1 directory with 11 …
dependabot[bot] Jul 28, 2026
c1acfb7
chore(openfeature): update node server provider to 2.0.2 (#9480)
leoromanovsky Jul 28, 2026
57d5700
feat(ci-visibility): add ci.pipeline.display_name tag for Buildkite (…
gbrandrea Jul 28, 2026
f407cc1
fix(test-optimization): hide WebdriverIO worker messages (#9561)
juan-fernandez Jul 28, 2026
4a2ad42
fix(appsec): fix express ssrf flaky test (#9564)
IlyasShabi Jul 28, 2026
c51ea37
chore(deps): bump the testing-and-build group across 1 directory with…
dependabot[bot] Jul 28, 2026
34f7193
fix(logs): properly split name and version for scoped names (#9508)
pabloerhard Jul 28, 2026
f407c59
chore(deps): bump the web-frameworks group across 1 directory with 7 …
dependabot[bot] Jul 28, 2026
c12fc57
fix(test-optimization): wait for WebDriverIO worker payloads (#9565)
juan-fernandez Jul 28, 2026
225eb9b
feat(llmobs): add experiments dataset operations (#9458)
mehulsonowal Jul 28, 2026
dc42791
chore(deps): bump next (#9572)
dependabot[bot] Jul 29, 2026
638bbc1
chore(deps): bump the gh-actions-packages group across 2 directories …
dependabot[bot] Jul 29, 2026
c6f9666
v6.8.0
BridgeAR Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
/integration-tests/mocha/ @DataDog/ci-app-libraries
/integration-tests/playwright/ @DataDog/ci-app-libraries
/integration-tests/vitest/ @DataDog/ci-app-libraries
/integration-tests/webdriverio/ @DataDog/ci-app-libraries
/integration-tests/vitest.config.mjs @DataDog/ci-app-libraries
/integration-tests/vitest.second-project.config.mjs @DataDog/ci-app-libraries
/integration-tests/vitest.typecheck.config.mjs @DataDog/ci-app-libraries
Expand Down Expand Up @@ -279,7 +280,10 @@

/scripts/generate-config-types.js @DataDog/apm-sdk-capabilities-js
/scripts/generate-supported-integrations.js @DataDog/apm-sdk-capabilities-js
/scripts/helpers/test-file-index.js @DataDog/apm-sdk-capabilities-js
/scripts/helpers/test-file-index.spec.js @DataDog/apm-sdk-capabilities-js
/scripts/verify-exercised-tests.js @DataDog/apm-sdk-capabilities-js
/scripts/verify-exercised-tests.spec.mjs @DataDog/apm-sdk-capabilities-js
/supported_versions_output.json @DataDog/apm-sdk-capabilities-js
/supported_versions_table.csv @DataDog/apm-sdk-capabilities-js

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:

- name: Initialize CodeQL
id: init-codeql
uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
with:
languages: ${{ matrix.language }}
config-file: .github/codeql_config.yml
Expand All @@ -57,7 +57,7 @@ jobs:

- name: Perform CodeQL Analysis
id: analyze
uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
with:
token: ${{ github.token }}
wait-for-processing: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/llmobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ jobs:
env:
PLUGINS: openai-agents
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: ./.github/actions/testagent/start
- uses: ./.github/actions/node/oldest-maintenance-lts
- uses: ./.github/actions/install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mirror-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
policy: self.mirror-image

- name: Log in to GHCR
uses: docker/login-action@v4
uses: docker/login-action@v4.5.1
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/serverless.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ jobs:
spec:
- client
- aws-sdk
- base-inject-field
- bedrockruntime
- dynamodb
- eventbridge
Expand Down
73 changes: 64 additions & 9 deletions .github/workflows/test-optimization.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,11 @@ jobs:
- name: Get Playwright version from versions package.json
id: playwright-version
run: |
PLAYWRIGHT_VERSION=$(node -p "require('./packages/dd-trace/test/plugins/versions/package.json').dependencies['@playwright/test']")
PLAYWRIGHT_VERSION=$(node -p \
"const versions = require('./integration-tests/playwright/versions'); \
versions.getLatestPlaywrightSpecifier() === 'latest' \
? versions.latest \
: versions.latestSupportedByNode18")
echo "version=$PLAYWRIGHT_VERSION" >> $GITHUB_OUTPUT
echo "Playwright version: $PLAYWRIGHT_VERSION"
- name: Cache Playwright browsers
Expand All @@ -73,14 +77,14 @@ jobs:
strategy:
fail-fast: false
matrix:
playwright-version: [oldest, latest]
playwright-version: [oldest, latest, latest-node18]
name: Ensure Playwright Docker image (${{ matrix.playwright-version }})
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
# Both matrix jobs set this to the same value, so the last-writer-wins
# All matrix jobs set this to the same value, so the last-writer-wins
# behaviour of matrix outputs is safe here.
images: ${{ steps.versions.outputs.images }}
steps:
Expand All @@ -89,19 +93,35 @@ jobs:
id: versions
run: |
LATEST=$(node -p "require('./integration-tests/playwright/versions').latest")
LATEST_NODE18=$(node -p "require('./integration-tests/playwright/versions').latestSupportedByNode18")
OLDEST=$(node -p "require('./integration-tests/playwright/versions').oldest")
DOCKER_HASH=$(sha256sum .github/playwright/Dockerfile | cut -c1-8)
LATEST_TAG="${LATEST}-${DOCKER_HASH}"
LATEST_NODE18_TAG="${LATEST_NODE18}-${DOCKER_HASH}"
OLDEST_TAG="${OLDEST}-${DOCKER_HASH}"
BASE="ghcr.io/datadog/dd-trace-js/playwright-tools"
IMAGES=$(printf '{"latest":"%s:%s","oldest":"%s:%s"}' "$BASE" "$LATEST_TAG" "$BASE" "$OLDEST_TAG")
PW_VERSION=$([ "${{ matrix.playwright-version }}" = "latest" ] && echo "$LATEST" || echo "$OLDEST")
IMAGE_TAG=$([ "${{ matrix.playwright-version }}" = "latest" ] && echo "$LATEST_TAG" || echo "$OLDEST_TAG")
IMAGES=$(printf \
'{"latest":{"latest":"%s:%s","oldest":"%s:%s"},"oldest":{"latest":"%s:%s","oldest":"%s:%s"}}' \
"$BASE" "$LATEST_TAG" "$BASE" "$OLDEST_TAG" "$BASE" "$LATEST_NODE18_TAG" "$BASE" "$OLDEST_TAG")
case "${{ matrix.playwright-version }}" in
latest)
PW_VERSION="$LATEST"
IMAGE_TAG="$LATEST_TAG"
;;
latest-node18)
PW_VERSION="$LATEST_NODE18"
IMAGE_TAG="$LATEST_NODE18_TAG"
;;
*)
PW_VERSION="$OLDEST"
IMAGE_TAG="$OLDEST_TAG"
;;
esac
echo "images=$IMAGES" >> $GITHUB_OUTPUT
echo "pw-version=$PW_VERSION" >> $GITHUB_OUTPUT
echo "image-tag=$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Log in to GHCR
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down Expand Up @@ -140,7 +160,7 @@ jobs:
permissions:
id-token: write
container:
image: ${{ fromJson(needs.playwright-image.outputs.images)[matrix.playwright-version] }}
image: ${{ fromJson(needs.playwright-image.outputs.images)[matrix.node-version][matrix.playwright-version] }}
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
Expand Down Expand Up @@ -202,6 +222,33 @@ jobs:
with:
flags: test-optimization-mocha-${{ matrix.version }}-${{ matrix.mocha-version }}

integration-webdriverio:
strategy:
fail-fast: false
matrix:
include:
- node-version: oldest
webdriverio-version: oldest
- node-version: latest
webdriverio-version: latest
name: integration-webdriverio (${{ matrix.webdriverio-version }}, node-${{ matrix.node-version }})
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: ./.github/actions/node
with:
version: ${{ matrix.node-version }}
- uses: ./.github/actions/install
- run: npm run test:instrumentations
env:
PLUGINS: webdriverio
- run: npm run test:integration:webdriverio:coverage
env:
WEBDRIVERIO_VERSION: ${{ matrix.webdriverio-version }}
- uses: ./.github/actions/coverage
with:
flags: test-optimization-webdriverio-${{ matrix.node-version }}-${{ matrix.webdriverio-version }}

integration-jest:
strategy:
fail-fast: false
Expand Down Expand Up @@ -252,6 +299,14 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: ./.github/actions/plugins/test

dependency-helpers:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: ./.github/actions/node
- uses: ./.github/actions/install
- run: npm run test:integration:test-optimization:helpers

integration-cucumber:
strategy:
fail-fast: false
Expand Down Expand Up @@ -299,7 +354,7 @@ jobs:
IMAGE="ghcr.io/datadog/dd-trace-js/selenium-tools:${DOCKER_HASH}"
echo "image=$IMAGE" >> $GITHUB_OUTPUT
- name: Log in to GHCR
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
uses: docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update-3rdparty-licenses.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Set up Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.14"

Expand Down
2 changes: 1 addition & 1 deletion ci/test-optimization-validation/generated-files.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ function getMissingDirectories (root, directory) {
function cleanupCreatedDirectories (root) {
const outcome = { removed: 0, retained: 0 }
const resolvedRoot = path.resolve(root)
const directories = [...createdGeneratedDirectories.entries()]
const directories = [...createdGeneratedDirectories]
.filter(([directory]) => isPathInside(resolvedRoot, directory))
.sort(([left], [right]) => right.length - left.length)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,7 @@ function getGeneratedTestContractError (framework) {
if (!cleanupPaths.has(path.normalize(stepsFile))) {
return 'must include the isolated Cucumber step definitions in cleanupPaths.'
}
}

if (framework.framework === 'playwright') {
} else if (framework.framework === 'playwright') {
const configPath = playwrightAdapter.getGeneratedConfigPath(strategy.testDirectory)
const config = files.find(file => path.normalize(file.path) === path.normalize(configPath))
if (config?.contentLines?.join('\n') !== playwrightAdapter.getGeneratedConfigContent()) {
Expand Down
3 changes: 1 addition & 2 deletions ci/test-optimization-validation/manifest-scaffold.js
Original file line number Diff line number Diff line change
Expand Up @@ -477,8 +477,7 @@ function buildGeneratedTestStrategy ({ framework, projectRoot, representative })
const stepsFile = cucumber.getGeneratedStepsPath(testDirectory)
files.push({ path: stepsFile, contentLines: cucumber.getGeneratedStepsContent().split('\n') })
cleanupPaths.push(stepsFile)
}
if (framework === 'playwright') {
} else if (framework === 'playwright') {
const configFile = playwright.getGeneratedConfigPath(testDirectory)
files.push({ path: configFile, contentLines: playwright.getGeneratedConfigContent().split('\n') })
cleanupPaths.push(configFile)
Expand Down
2 changes: 1 addition & 1 deletion ci/test-optimization-validation/runner-command.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ function getRunnerArgs (framework, testFile, generated) {
*/
function getRunnerEnv (framework) {
return {
...(framework.validation.environment || {}),
...framework.validation.environment,
...(framework.framework === 'cucumber' ? { CUCUMBER_PUBLISH_QUIET: 'true' } : {}),
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ async function runBasicReporting ({ framework, out, options }) {
selector,
settingsLoadedFromCache: run.offline.inputs.settings?.status === 'loaded',
}
evidence.foundationalReportingEstablished = evidence.foundationalReportingEstablished && selector.verified
evidence.foundationalReportingEstablished &&= selector.verified

if (run.result.timedOut) {
return inconclusive(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ function buildQuarantinedResponse (framework, scenario, discoveredIdentities = [
for (const identity of identities) {
for (const suite of getSuiteCandidates(identity, scenario)) {
for (const name of getNameCandidates(identity)) {
suites[suite] = suites[suite] || { tests: {} }
suites[suite] ||= { tests: {} }
suites[suite].tests[name] = {
properties: {
quarantined: true,
Expand Down Expand Up @@ -210,7 +210,7 @@ function summarizeManagedTests (testManagementTests) {
}
summary.set(displaySuite, testNames)
}
return [...summary.entries()].slice(0, 5).map(([suite, tests]) => ({
return [...summary].slice(0, 5).map(([suite, tests]) => ({
suite,
tests: [...tests].slice(0, 5),
}))
Expand Down
Loading
Loading