mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Merge latest master into Web transcript
This commit is contained in:
@@ -305,7 +305,7 @@ describe('worktree-local Lefthook installer', () => {
|
||||
expect(readFileSync(mainHookPath, 'utf8')).toBe(initialHook)
|
||||
expect(existsSync(join(commonDirectory(fixture), 'dsh-lefthook-install.lock'))).toBe(false)
|
||||
expect(existsSync(join(hooksPath(fixture, fixture.main), '.fake-lefthook-running'))).toBe(false)
|
||||
})
|
||||
}, 15_000)
|
||||
|
||||
it('repairs its owned absolute hook path after the checkout moves', async () => {
|
||||
const fixture = createFixture()
|
||||
|
||||
@@ -135,6 +135,23 @@ describe('Oxlint gate', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('Node compatibility graph', () => {
|
||||
it('runs the jsdom environment smoke on every advertised Node line', () => {
|
||||
const subject = withPnpmEntrypoint(() => gatesForMode('node-compat'))
|
||||
|
||||
expect(subject.find(item => item.id === 'vitest-jsdom-smoke')).toMatchObject({
|
||||
label: 'Vitest jsdom smoke',
|
||||
args: [
|
||||
'/private/pnpm.cjs',
|
||||
'exec',
|
||||
'vitest',
|
||||
'run',
|
||||
'scripts/vitest-environment.compat.spec.ts',
|
||||
],
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('Node 24 lane ownership', () => {
|
||||
it('keeps the static lane source-only', () => {
|
||||
const subject = withPnpmEntrypoint(() => gatesForMode('ci-static'))
|
||||
|
||||
@@ -270,14 +270,27 @@ function ciPrimaryGates(): Gate[] {
|
||||
}
|
||||
|
||||
function nodeCompatGates(): Gate[] {
|
||||
const typecheck = flagEnabled('DSH_NODE_COMPAT_SKIP_TYPECHECK')
|
||||
? []
|
||||
: [pnpmScript('typecheck', 'typecheck')]
|
||||
if (runningNodeMajor() !== 22) {
|
||||
return [...typecheck, ...nodeCompatSmokeGates()]
|
||||
}
|
||||
return [
|
||||
...flagEnabled('DSH_NODE_COMPAT_SKIP_TYPECHECK') ? [] : [pnpmScript('typecheck', 'typecheck')],
|
||||
...nodeCompatSmokeGates(),
|
||||
...typecheck,
|
||||
pnpmScript('build', 'build', {
|
||||
...typecheck.length === 0 ? {} : { needs: ['typecheck'] },
|
||||
}),
|
||||
pnpmScript('build:web', 'build:web', {
|
||||
label: 'Web frontend build',
|
||||
needs: ['build'],
|
||||
}),
|
||||
...nodeCompatSmokeGates({ cliSmoke: true }),
|
||||
]
|
||||
}
|
||||
|
||||
function nodeCompatSmokeGates(): Gate[] {
|
||||
return [
|
||||
function nodeCompatSmokeGates(options: { cliSmoke?: boolean } = {}): Gate[] {
|
||||
const gates: Gate[] = [
|
||||
pnpmExec('source-worker-smoke', [
|
||||
'vitest',
|
||||
'run',
|
||||
@@ -293,7 +306,35 @@ function nodeCompatSmokeGates(): Gate[] {
|
||||
'run',
|
||||
'apps/cli/tests/source-launch.compat.spec.ts',
|
||||
], { label: 'dsh source-launch smoke' }),
|
||||
pnpmExec('vitest-jsdom-smoke', [
|
||||
'vitest',
|
||||
'run',
|
||||
'scripts/vitest-environment.compat.spec.ts',
|
||||
], { label: 'Vitest jsdom smoke' }),
|
||||
]
|
||||
if (options.cliSmoke) {
|
||||
gates.push(
|
||||
pnpmExec('cli-lazy-search-startup-smoke', [
|
||||
'vitest',
|
||||
'run',
|
||||
'apps/cli/tests/lazy-search-startup.compat.spec.ts',
|
||||
], {
|
||||
label: 'CLI lazy-search startup smoke',
|
||||
env: { DSH_REQUIRE_BUILT_CLI_SMOKE: '1' },
|
||||
needs: ['build:web'],
|
||||
}),
|
||||
)
|
||||
}
|
||||
return gates
|
||||
}
|
||||
|
||||
/** Active Node major used to scope version-specific compatibility contracts. */
|
||||
function runningNodeMajor(): number {
|
||||
const major = Number.parseInt(process.versions.node.split('.')[0] ?? '', 10)
|
||||
if (!Number.isSafeInteger(major)) {
|
||||
throw new Error(`run-gates: cannot parse Node version ${JSON.stringify(process.versions.node)}.`)
|
||||
}
|
||||
return major
|
||||
}
|
||||
|
||||
function ciStaticGates(options: { ownsBuild: boolean }): Gate[] {
|
||||
|
||||
14
scripts/vitest-environment.compat.spec.ts
Normal file
14
scripts/vitest-environment.compat.spec.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
// @vitest-environment jsdom
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
describe('Vitest jsdom compatibility', () => {
|
||||
it('provides isolated browser storage instead of Node process storage', () => {
|
||||
if (process.allowedNodeEnvironmentFlags.has('--webstorage')) {
|
||||
expect(process.execArgv.filter(argument => argument === '--no-webstorage')).toHaveLength(1)
|
||||
}
|
||||
localStorage.setItem('dsh-vitest-storage-probe', 'available')
|
||||
|
||||
expect(localStorage.getItem('dsh-vitest-storage-probe')).toBe('available')
|
||||
localStorage.removeItem('dsh-vitest-storage-probe')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user