dsh 0.2.0-rc.2: in-container update (experimental channel), path-agnostic compose, upstream patches adapted to 0.1.x/0.2.x

This commit is contained in:
hermes committed 2026-10-01 19:21:19 +00:00
commit e6dcef9bf5
302 files changed
+75178

No files matched your search

@@ -0,0 +1,64 @@
import assert from 'node:assert/strict'
import { mkdtemp, readFile, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import { spawnSync } from 'node:child_process'
import test from 'node:test'
import {
advanceSupportedDsh,
compareDshVersions,
parseSupportedTarget,
validateSupportedTarget,
} from '../lib/supported-target.mjs'
const target = {
schema: 1,
latestSupportedDsh: '0.1.0-rc.7',
environment: '1.0.0-dev',
}
const bytes = value => Buffer.from(`${JSON.stringify(value)}\n`)
test('parses the exact Supported Target contract and matching Environment', () => {
assert.deepEqual(parseSupportedTarget(bytes(target)), target)
assert.equal(validateSupportedTarget(bytes(target), bytes({ version: target.environment })).environment, target.environment)
assert.throws(() => parseSupportedTarget(bytes({ ...target, extra: true })), /exactly/)
assert.throws(() => validateSupportedTarget(bytes(target), bytes({ version: 'different' })), /does not match/)
})
test('compares release and prerelease DSH semantic versions without downgrade ambiguity', () => {
assert.equal(compareDshVersions('0.1.0-rc.21', '0.1.0-rc.7'), 1)
assert.equal(compareDshVersions('0.1.0', '0.1.0-rc.21'), 1)
assert.equal(compareDshVersions('0.1.0-rc.7', '0.1.0-rc.7+rebuilt'), 0)
assert.equal(compareDshVersions('0.1.0-2', '0.1.0-beta'), -1)
assert.equal(compareDshVersions('999999999999999999999.0.0', '999999999999999999998.0.0'), 1)
assert.throws(() => compareDshVersions('0.1.0-rc.07', '0.1.0-rc.7'), /numeric prerelease/)
})
test('advances only DSH and rejects an upstream rollback', () => {
const advanced = advanceSupportedDsh(target, '0.1.0-rc.8')
assert.equal(advanced.changed, true)
assert.deepEqual(advanced.target, { ...target, latestSupportedDsh: '0.1.0-rc.8' })
assert.equal(advanceSupportedDsh(target, target.latestSupportedDsh).changed, false)
assert.throws(() => advanceSupportedDsh(target, '0.1.0-rc.6'), /roll back/)
})
test('CLI validates and atomically updates the candidate target', async () => {
const root = await mkdtemp(join(tmpdir(), 'dsh-supported-target-'))
const targetPath = join(root, 'supported-target.json')
const definitionPath = join(root, 'definition.json')
await writeFile(targetPath, bytes(target))
await writeFile(definitionPath, bytes({ version: target.environment }))
const tool = new URL('../tools/supported-target.mjs', import.meta.url).pathname
const result = spawnSync(process.execPath, [tool, 'advance', targetPath, definitionPath, '0.1.0-rc.8'], { encoding: 'utf8' })
assert.equal(result.status, 0, result.stderr)
assert.equal(JSON.parse(result.stdout).changed, true)
assert.equal(JSON.parse(await readFile(targetPath, 'utf8')).latestSupportedDsh, '0.1.0-rc.8')
const rollback = spawnSync(process.execPath, [tool, 'advance', targetPath, definitionPath, '0.1.0-rc.7'], { encoding: 'utf8' })
assert.notEqual(rollback.status, 0)
assert.equal(JSON.parse(await readFile(targetPath, 'utf8')).latestSupportedDsh, '0.1.0-rc.8')
const extraArgument = spawnSync(process.execPath, [tool, 'validate', targetPath, definitionPath, 'ignored'], { encoding: 'utf8' })
assert.equal(extraArgument.status, 64)
})