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,59 @@
import assert from 'node:assert/strict'
import { mkdtemp } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import { join } from 'node:path'
import test from 'node:test'
import { UpdateJournal } from '../../control-plane/modules/updater/lib/journal.mjs'
const transaction = {
transactionId: 'transaction-one',
mode: 'experimental',
from: {
dsh: '0.1.0-rc.7', environment: 'env-1', runtime: 'runtime-a', dataSnapshot: null, receiptTokens: [],
},
to: { dsh: '0.1.0-rc.8', environment: 'env-1', runtime: 'runtime-b' },
}
test('persists a complete update transaction across process restarts', async () => {
const root = await mkdtemp(join(tmpdir(), 'dsh-journal-'))
const path = join(root, 'state', 'update-transaction.json')
let tick = 0
const now = () => new Date(Date.UTC(2026, 7, 19, 0, 0, tick++))
const journal = new UpdateJournal(path, now)
await journal.begin(transaction)
await journal.transition('candidate-ready', { receiptTokens: ['receipt-one'] })
await journal.transition('suspended')
await journal.transition('snapshot-created', { snapshotId: 'snapshot-one' })
const resumed = await new UpdateJournal(path, now).read()
assert.equal(resumed.phase, 'snapshot-created')
assert.equal(resumed.from.runtime, 'runtime-a')
assert.equal(resumed.to.runtime, 'runtime-b')
assert.equal(resumed.snapshotId, 'snapshot-one')
assert.deepEqual(resumed.receiptTokens, ['receipt-one'])
})
test('rejects skipped phases and clears only terminal journals', async () => {
const root = await mkdtemp(join(tmpdir(), 'dsh-journal-transition-'))
const journal = new UpdateJournal(join(root, 'state', 'update-transaction.json'))
await journal.begin(transaction)
await assert.rejects(journal.transition('switched'), /cannot transition/)
await assert.rejects(journal.clear(), /nonterminal/)
await journal.transition('failed', { error: 'candidate build failed' })
await journal.clear()
assert.equal(await journal.read(), undefined)
})
test('records an idempotent data-restoration phase before rollback completion', async () => {
const root = await mkdtemp(join(tmpdir(), 'dsh-journal-restore-'))
const path = join(root, 'state', 'update-transaction.json')
const journal = new UpdateJournal(path)
await journal.begin(transaction)
await journal.transition('candidate-ready')
await journal.transition('suspended')
await journal.transition('snapshot-created', { snapshotId: 'snapshot-one' })
await journal.transition('switched')
await journal.transition('restoring-data')
assert.equal((await new UpdateJournal(path).read()).phase, 'restoring-data')
await journal.transition('rolled-back')
})