File size: 1,889 Bytes
e65cda1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env node
/**
 * Release verification. Always: every published package carries one shared
 * version, and — when running from a tag or publishing — the
 * `node-addon-system-vX.Y.Z` tag matches it. With `--prebuilds`: every platform package's declared
 * binaries exist with the right native format and architecture (run after
 * `assemble-prebuilds.mjs` or a local `build:native`).
 */

import path from 'node:path';
import { packageDirs, platformDirs, readJson, root, verifyPlatformBinaries } from './repo.mjs';

const TAG_PREFIX = 'refs/tags/node-addon-system-v';

function verifyVersions() {
  const packages = packageDirs().map((dir) => ({
    dir,
    manifest: readJson(path.join(root, dir, 'package.json')),
  }));
  const versions = new Set(packages.map((pkg) => pkg.manifest.version));
  if (versions.size !== 1) {
    throw new Error([
      'published package versions must match:',
      ...packages.map((pkg) => `${pkg.dir}: ${pkg.manifest.version}`),
    ].join('\n'));
  }

  const version = packages[0].manifest.version;
  const ref = process.env.GITHUB_REF || '';
  const publish = process.env.RELEASE_PUBLISH === 'true';
  if (publish && !ref.startsWith(TAG_PREFIX)) {
    throw new Error('publishing requires running the workflow from a node-addon-system-v* tag');
  }
  if (ref.startsWith(TAG_PREFIX)) {
    const tagVersion = ref.slice(TAG_PREFIX.length);
    if (tagVersion !== version) {
      throw new Error(`tag/version mismatch: tag node-addon-system-v${tagVersion}, packages ${version}`);
    }
  }

  console.log(`Verified release version ${version}`);
}

function verifyPrebuilds() {
  for (const dir of platformDirs()) {
    const { name, count } = verifyPlatformBinaries(path.join(root, dir));
    console.log(`Verified ${name}: ${count} binaries`);
  }
}

verifyVersions();
if (process.argv.includes('--prebuilds')) {
  verifyPrebuilds();
}