build(hololake): bind mac candidates to exact source
This commit is contained in:
parent
8f18c3fba3
commit
9299fc9442
6 changed files with 278 additions and 2 deletions
|
|
@ -0,0 +1,77 @@
|
|||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import {
|
||||
buildInternalReleaseProvenance,
|
||||
validateInternalReleaseProvenance,
|
||||
} from './internal-release-provenance.mjs'
|
||||
|
||||
const sourceCommit = '1'.repeat(40)
|
||||
const sourceTree = '2'.repeat(40)
|
||||
|
||||
function input(overrides = {}) {
|
||||
return {
|
||||
sourceCommit,
|
||||
sourceTree,
|
||||
sourceBranch: 'main',
|
||||
sourceRepository: 'repo://guanghulab.com/code/bingshuo/hololake-system-architecture',
|
||||
sourceRepositoryId: 'REPO-014',
|
||||
sourcePath: 'product-source/hololake-platform',
|
||||
architectureId: 'HLP-CURRENT-ARCH-001',
|
||||
architectureVersion: '2026-08-12.16',
|
||||
applicationVersion: '0.4.6',
|
||||
developmentId: 'DEV-20260811-010',
|
||||
distribution: 'local-candidate',
|
||||
targetTriple: 'aarch64-apple-darwin',
|
||||
recordedAt: '2026-08-12T07:00:00+08:00',
|
||||
worktreeClean: true,
|
||||
...overrides,
|
||||
}
|
||||
}
|
||||
|
||||
test('builds a source-bound local candidate provenance record', () => {
|
||||
assert.deepEqual(buildInternalReleaseProvenance(input()), {
|
||||
schema: 'hololake.internal-release-provenance/v1',
|
||||
architecture: {
|
||||
id: 'HLP-CURRENT-ARCH-001',
|
||||
version: '2026-08-12.16',
|
||||
},
|
||||
build: {
|
||||
application_version: '0.4.6',
|
||||
development_id: 'DEV-20260811-010',
|
||||
distribution: 'local-candidate',
|
||||
recorded_at: '2026-08-12T07:00:00+08:00',
|
||||
target_triple: 'aarch64-apple-darwin',
|
||||
},
|
||||
source: {
|
||||
branch: 'main',
|
||||
commit: sourceCommit,
|
||||
path: 'product-source/hololake-platform',
|
||||
repository: 'repo://guanghulab.com/code/bingshuo/hololake-system-architecture',
|
||||
repository_id: 'REPO-014',
|
||||
tree: sourceTree,
|
||||
worktree_clean: true,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
test('refuses to issue provenance for a dirty source tree', () => {
|
||||
assert.throws(
|
||||
() => buildInternalReleaseProvenance(input({ worktreeClean: false })),
|
||||
/clean source worktree/,
|
||||
)
|
||||
})
|
||||
|
||||
test('validates exact source, architecture, application and development bindings', () => {
|
||||
const provenance = buildInternalReleaseProvenance(input())
|
||||
|
||||
assert.equal(validateInternalReleaseProvenance(provenance, input()), true)
|
||||
assert.throws(
|
||||
() => validateInternalReleaseProvenance(provenance, input({ sourceCommit: '3'.repeat(40) })),
|
||||
/source commit mismatch/,
|
||||
)
|
||||
assert.throws(
|
||||
() => validateInternalReleaseProvenance(provenance, input({ architectureVersion: '2026-08-12.17' })),
|
||||
/architecture version mismatch/,
|
||||
)
|
||||
})
|
||||
Loading…
Reference in a new issue