mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-09 03:46:16 -08:00
53 lines
3.3 KiB
JavaScript
53 lines
3.3 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import process from 'node:process'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
const root = path.resolve(fileURLToPath(new URL('../../', import.meta.url)))
|
|
const read = file => JSON.parse(fs.readFileSync(path.join(root, file), 'utf8'))
|
|
const mode = process.argv[2]
|
|
assert(['--check', '--prepared'].includes(mode) && process.argv.length === 3, 'Use --check or --prepared')
|
|
const plan = read('refactor/version-plan.json')
|
|
const ledger = read('refactor/release-ledger.json')
|
|
const inventory = read('refactor/package-inventory.json').packages
|
|
const registry = read(plan.registrySnapshot)
|
|
assert.equal(plan.schemaVersion, 1)
|
|
assert.equal(plan.policy.publicationAuthorized, false)
|
|
assert.equal(plan.policy.siteNpmPublication, false)
|
|
assert.equal(plan.policy.prereleaseSuffix, null)
|
|
assert.deepEqual(plan.packages.map(item => item.name).sort(), ledger.packages.map(item => item.name).sort())
|
|
for (const item of plan.packages) {
|
|
const original = inventory.find(pkg => pkg.name === item.name)
|
|
const row = ledger.packages.find(pkg => pkg.name === item.name)
|
|
const observation = registry.observations.find(pkg => pkg.name === item.name)
|
|
const manifest = read(`packages/${item.name}/package.json`)
|
|
assert.equal(item.sourceVersion, original.version)
|
|
assert.equal(item.targetVersion, row.targetVersion)
|
|
assert.equal(item.targetVersion, `${Number(original.version.split('.')[0]) + 1}.0.0`)
|
|
assert.equal(item.distribution, row.distribution)
|
|
assert.equal(observation.target, item.targetVersion)
|
|
assert.equal(observation.targetState, 'not-observed', `Target was used: ${item.name}`)
|
|
assert.deepEqual(observation.majorConflicts, [], `Registry major conflict: ${item.name}`)
|
|
assert.equal(item.registry.ownershipVerified, false)
|
|
assert(item.changelog.changes.length && item.maintenanceDocs.length)
|
|
assert.equal(item.changelog.path, `packages/${item.name}/CHANGELOG.md`)
|
|
assert.equal(item.changelog.heading, `${item.targetVersion} (unreleased)`)
|
|
for (const file of item.maintenanceDocs)
|
|
assert(fs.existsSync(path.join(root, file)), `Missing maintenance guide: ${file}`)
|
|
for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies', 'peerDependenciesMeta', 'devDependencies'])
|
|
assert.deepEqual(manifest[field], item.dependencyPolicy.sourceFields[field], `Unplanned dependency change: ${item.name}/${field}`)
|
|
assert([item.sourceVersion, item.targetVersion].includes(manifest.version), `Unplanned current version: ${item.name}`)
|
|
if (mode === '--prepared') {
|
|
assert.equal(manifest.version, item.targetVersion, `Version not prepared: ${item.name}`)
|
|
assert(fs.readFileSync(path.join(root, item.changelog.path), 'utf8').includes(item.changelog.heading), `Missing target changelog: ${item.name}`)
|
|
}
|
|
}
|
|
for (const example of plan.examples) {
|
|
const manifest = read(example.manifest)
|
|
assert.equal(manifest.private, true)
|
|
for (const [name, range] of Object.entries(example.dependencies))
|
|
assert((mode === '--prepared' ? [range.planned] : [range.before, range.planned]).includes(manifest.dependencies[name]), `Example dependency not prepared: ${example.manifest}/${name}`)
|
|
}
|
|
console.log(`Version plan ${mode}: ${plan.packages.length} independent major targets; registry snapshot checked, publication remains unauthorized`)
|