Skip to content

Commit b74badb

Browse files
committed
ci(install): handle release-age races in sandboxes
Bun rejects a young exact pin even when an older release satisfies a latest request, and it age-checks omitted dev dependencies during production installs. Keep latest requests flexible below the cap and remove omitted dependencies from the package-size install manifest. Mint the package-size token only after PR-controlled packing and installation complete.
1 parent e13a19f commit b74badb

4 files changed

Lines changed: 29 additions & 10 deletions

File tree

.github/workflows/project.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,29 @@ jobs:
8989
permissions:
9090
id-token: write
9191
steps:
92-
- uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4
93-
id: octo-sts
94-
with:
95-
scope: DataDog/dd-trace-js
96-
policy: package-size-report
9792
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
93+
with:
94+
persist-credentials: false
9895
- uses: ./.github/actions/node/latest
9996
- run: FILENAME=$(npm pack --silent --pack-destination /tmp) && mv /tmp/$FILENAME /tmp/dd-trace.tgz
10097
- run: cp bunfig.toml /tmp/dd-trace-bunfig.toml && rm -rf *
10198
- run: tar -zxf /tmp/dd-trace.tgz -C $(pwd) --strip-components=1
10299
# `--ignore-scripts` skips the `prepare` script (`cd vendor && npm ci --include=dev`):
103100
# the packed tarball ships pre-built `vendor/dist/**` artifacts but not
104101
# `vendor/package-lock.json`, so a fresh consumer install can't rebuild vendor.
105-
- run: bun --config=/tmp/dd-trace-bunfig.toml install --production --omit=optional --ignore-scripts
102+
# Bun 1.3.1 applies the release-age gate while resolving omitted dev dependencies.
103+
# Remove them for the consumer install, then restore the shipped manifest for the size report.
104+
- run: |
105+
cp package.json /tmp/dd-trace-package.json
106+
npm pkg delete devDependencies
107+
bun --config=/tmp/dd-trace-bunfig.toml install --production --omit=optional --ignore-scripts
108+
mv /tmp/dd-trace-package.json package.json
106109
- run: ls -lisa
110+
- uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4
111+
id: octo-sts
112+
with:
113+
scope: DataDog/dd-trace-js
114+
policy: package-size-report
107115
- name: Compute module size tree and report
108116
uses: qard/heaviest-objects-in-the-universe@1e02edbdda803a45537a808ede97866db47756d3 # Unreleased
109117
with:

packages/dd-trace/test/plugins/versions.spec.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const assert = require('node:assert/strict')
55
const { describe, it } = require('mocha')
66
const { coerce, major } = require('semver')
77

8-
const { getVersionList, resolvePluginVersions, brokenVersionReason } = require('./versions')
8+
const { getCappedRange, getVersionList, resolvePluginVersions, brokenVersionReason } = require('./versions')
99

1010
const latests = require('./versions/package.json').dependencies
1111

@@ -14,6 +14,17 @@ const keys = (name, versions, nonConsecutive) =>
1414

1515
const latestMajorKey = name => String(major(coerce(latests[name])))
1616

17+
describe('getCappedRange', () => {
18+
it('keeps latest requests flexible below the pinned ceiling', () => {
19+
assert.equal(getCappedRange('mongodb', 'latest'), `<=${latests.mongodb}`)
20+
assert.equal(getCappedRange('mongodb', ''), `<=${latests.mongodb}`)
21+
})
22+
23+
it('keeps exact requests pinned so the release-age gate can reject them', () => {
24+
assert.equal(getCappedRange('mongodb', '1.2.3'), '1.2.3')
25+
})
26+
})
27+
1728
describe('getVersionList', () => {
1829
it('collapses the wildcard to the latest major', () => {
1930
assert.deepEqual(keys('mongodb', ['*']), [latestMajorKey('mongodb')])

packages/dd-trace/test/plugins/versions/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function capSubrange (name, subrange) {
5555
)
5656
}
5757

58-
if (!subrange || subrange === 'latest') return latests[name]
58+
if (!subrange || subrange === 'latest') return `<=${latests[name]}`
5959
if (subset(subrange, `<=${latests[name]}`)) return subrange
6060
if (subrange.includes(' - ')) {
6161
const minRange = subrange.split(' - ')[0].trim()

scripts/all-green.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { setTimeout } from 'node:timers/promises'
22
import { Octokit } from 'octokit'
3-
import { downloadArtifacts } from './download-artifacts.mjs'
4-
53
import { summary } from '@actions/core'
64
import { context } from '@actions/github'
5+
// eslint-disable-next-line import/order -- @actions ESM exports resolve differently across supported Node.js versions.
6+
import { downloadArtifacts } from './download-artifacts.mjs'
77

88
/* eslint-disable no-console */
99

0 commit comments

Comments
 (0)