OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay / scripts / verify-blind-vnext-successor-v3.mjs

73 lines · javascript ref:
#!/usr/bin/env node
import path from 'node:path'
import process from 'node:process'
import { spawnSync } from 'node:child_process'
import { fileURLToPath } from 'node:url'

const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
const node = process.execPath
const executableSuffix = process.platform === 'win32' ? '.cmd' : ''
const brittleNode = path.join(root, `node_modules/.bin/brittle-node${executableSuffix}`)
const brittleBare = path.join(root, `node_modules/.bin/brittle-bare${executableSuffix}`)
const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm'
const skipChromium = process.argv.includes('--skip-chromium')

const successorTests = [
  'test/unit/blind-protocol-wire-v3.test.js',
  'packages/blind-ipc/test/private-ipc-v4-contract.test.js',
  'test/unit/blind-client-composition-v3.test.js'
]

const commands = [
  ['accepted predecessor successor-contract gate', node, ['packages/blind-protocol/verify-vnext-contracts.mjs']],
  ['WIRE v3 deterministic generator', node, ['packages/blind-protocol/generate-wire-v3.mjs', '--check']],
  ['private IPC v4 deterministic generator', node, ['packages/blind-ipc/generate-private-ipc-v4.mjs', '--check']],
  ['client composition v3 deterministic generator', node, ['packages/blind-protocol/generate-client-composition-v3.mjs', '--check']],
  ['browser v3 deterministic generator and source closure', node, ['packages/blind-client/generate-browser-artifact-v3.mjs', '--check']],
  ['successor Node contracts', brittleNode, ['--timeout', '120000', ...successorTests]],
  ['successor Bare contracts', brittleBare, ['--timeout', '120000', ...successorTests]],
  ['successor Node package-root exports', brittleNode, ['test/unit/blind-vnext-successor-package-exports.test.js']],
  ['accepted blind specifications', npm, ['run', 'verify:blind-specs']],
  ['accepted WIRE cross-runtime', npm, ['run', 'test:blind-wire:cross-runtime']],
  ['accepted composition cross-runtime', npm, ['run', 'test:blind-client-composition:cross-runtime']]
]
if (!skipChromium) {
  commands.push([
    'real Chromium v3 IndexedDB crash/retry gate',
    node,
    ['scripts/test-blind-client-browser-artifact-v3-chromium.mjs']
  ])
}

const completed = []
for (const [label, command, args] of commands) {
  process.stdout.write(`\n[successor-v3] ${label}\n`)
  const started = Date.now()
  const result = spawnSync(command, args, {
    cwd: root,
    stdio: 'inherit',
    env: {
      ...process.env,
      PATH: `${path.join(root, 'node_modules/bare/bin')}${path.delimiter}${process.env.PATH || ''}`
    }
  })
  const durationMillis = Date.now() - started
  if (result.error) throw result.error
  if (result.status !== 0) {
    process.stderr.write(`${JSON.stringify({ label, exitCode: result.status, durationMillis, ok: false })}\n`)
    process.exit(result.status == null ? 1 : result.status)
  }
  completed.push({ label, durationMillis })
}

process.stdout.write(`${JSON.stringify({
  schema: 'hiverelay-blind-vnext-successor-v3-verification-v1',
  node: process.version,
  chromiumIncluded: !skipChromium,
  gates: completed,
  readiness: 0,
  runtimeReady: false,
  authorizesRelease: false,
  ok: true
}, null, 2)}\n`)