bulletin-deploy 0.7.16 → 0.7.17-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,15 @@
27
27
  "ipfs": "https://paseo-bulletin-review-ipfs.polkadot.io",
28
28
  "uptimeUrl": "https://stats.uptimerobot.com/bckl1cu0AO"
29
29
  },
30
+ {
31
+ "id": "paseo-next-v2",
32
+ "name": "Paseo Next v2",
33
+ "network": "testnet",
34
+ "description": "Next iteration of the Paseo Next testnet",
35
+ "backend": "https://identity-backend-next.parity-testnet.parity.io",
36
+ "ipfs": "https://paseo-bulletin-next-ipfs.polkadot.io",
37
+ "docsUrl": "https://sre.teleport.parity.io/environments/paseo-next/"
38
+ },
30
39
  {
31
40
  "id": "polkadot",
32
41
  "name": "Polkadot",
@@ -56,6 +65,10 @@
56
65
  "wss": "wss://paseo-rpc.n.dwellir.com",
57
66
  "uptimeUrl": "https://stats.uptimerobot.com/UrEXbl6Xyt"
58
67
  },
68
+ "paseo-next-v2": {
69
+ "wss": "wss://paseo-rpc.n.dwellir.com",
70
+ "uptimeUrl": "https://stats.uptimerobot.com/UrEXbl6Xyt"
71
+ },
59
72
  "polkadot": {
60
73
  "wss": [
61
74
  "wss://polkadot-rpc.n.dwellir.com",
@@ -92,6 +105,10 @@
92
105
  "parachainId": 1000,
93
106
  "uptimeUrl": "https://stats.uptimerobot.com/UrEXbl6Xyt"
94
107
  },
108
+ "paseo-next-v2": {
109
+ "wss": "wss://paseo-asset-hub-next-rpc.polkadot.io",
110
+ "parachainId": 1500
111
+ },
95
112
  "polkadot": {
96
113
  "wss": [
97
114
  "wss://asset-hub-polkadot-rpc.n.dwellir.com",
@@ -193,6 +210,10 @@
193
210
  "parachainId": 5167,
194
211
  "uptimeUrl": "https://stats.uptimerobot.com/bckl1cu0AO"
195
212
  },
213
+ "paseo-next-v2": {
214
+ "wss": "wss://paseo-people-next-system-rpc.polkadot.io",
215
+ "parachainId": 1502
216
+ },
196
217
  "polkadot": {
197
218
  "wss": [
198
219
  "wss://people-polkadot-rpc.n.dwellir.com",
@@ -230,6 +251,10 @@
230
251
  "wss": "wss://paseo-bulletin-review-rpc.polkadot.io",
231
252
  "parachainId": 5168,
232
253
  "uptimeUrl": "https://stats.uptimerobot.com/bckl1cu0AO"
254
+ },
255
+ "paseo-next-v2": {
256
+ "wss": "wss://paseo-bulletin-next-rpc.polkadot.io",
257
+ "parachainId": 1501
233
258
  }
234
259
  }
235
260
  }
@@ -2,16 +2,25 @@
2
2
 
3
3
  import { deploy, DEFAULT_BULLETIN_RPC, DEFAULT_POOL_SIZE, NonRetryableError, EXIT_CODE_NO_RETRY, isConnectionError } from "../dist/deploy.js";
4
4
  import { VERSION, setDeployAttribute, captureWarning, closeTelemetry, setRunStateActive, markRelaunchOomHintShown } from "../dist/telemetry.js";
5
- import { handleFailedDeploy, preReleaseWarning } from "../dist/version-check.js";
5
+ import { handleFailedDeploy, preReleaseWarning, checkNodeVersion } from "../dist/version-check.js";
6
6
  import { setDeployContext, installLogCapture, buildCliFlagsSummary } from "../dist/bug-report.js";
7
7
  import { loadRunState, writeRunState, shouldSkipStaleWarning, shouldShowOomHint, probablyOomRssMb } from "../dist/run-state.js";
8
8
  import { loadEnvironments, listEnvironments, formatEnvironmentTable, DEFAULT_ENV_ID, DEFAULT_ENVIRONMENTS_URL } from "../dist/environments.js";
9
+ import { shouldMirrorToPaseoNextV2 } from "../dist/mirror.js";
9
10
  import * as fs from "fs";
10
11
 
11
12
  // Install early so anything printed during flag parsing / preflight is
12
13
  // available to the bug-report log tail.
13
14
  installLogCapture();
14
15
 
16
+ // Preflight: fail fast on unsupported Node.js versions.
17
+ {
18
+ const pkgPath = new URL("../package.json", import.meta.url);
19
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
20
+ const nodeErr = checkNodeVersion(pkg.engines?.node ?? ">=22", process.version);
21
+ if (nodeErr) { console.error(`Error: ${nodeErr}`); process.exit(1); }
22
+ }
23
+
15
24
  const args = process.argv.slice(2);
16
25
 
17
26
  const flags = {};
@@ -35,6 +44,8 @@ for (let i = 0; i < args.length; i++) {
35
44
  else if (args[i] === "--allow-large-deploy") { flags.allowLargeDeploy = true; }
36
45
  else if (args[i] === "--reproducible") { flags.reproducibleSource = "commit"; }
37
46
  else if (args[i].startsWith("--reproducible=")) { flags.reproducibleSource = args[i].slice("--reproducible=".length); }
47
+ else if (args[i] === "--skip-automated-deployment-to-paseo-next-v2") { flags.skipMirrorToPaseoNextV2 = true; }
48
+ else if (args[i] === "--fail-on-mirror-error") { flags.failOnMirrorError = true; }
38
49
  else if (args[i] === "--version" || args[i] === "-V") { flags.version = true; }
39
50
  else if (args[i] === "--help" || args[i] === "-h") { flags.help = true; }
40
51
  else { positional.push(args[i]); }
@@ -103,6 +114,11 @@ Options:
103
114
  --description "..." Optional. Sets the "description" text record (≤100 chars recommended).
104
115
  --gh-pages-mirror After deploy, push the CAR to the current repo's gh-pages branch
105
116
  at bulletin/<domain>.dot.car (opt-in; also set GH_PAGES_MIRROR=1)
117
+ --skip-automated-deployment-to-paseo-next-v2
118
+ Suppress the automatic mirror deploy to paseo-next-v2.
119
+ --fail-on-mirror-error
120
+ Exit non-zero if the automated mirror deploy to paseo-next-v2 fails.
121
+ Default: non-fatal (warning logged, exit 0).
106
122
  --version Show version
107
123
  --help Show this help`);
108
124
  process.exit(0);
@@ -284,6 +300,39 @@ try {
284
300
 
285
301
  console.log(`CID: ${result.cid}`);
286
302
  console.log(`Domain: ${result.domainName}`);
303
+
304
+ // Automated mirror deploy to paseo-next-v2.
305
+ // Runs after the primary succeeds unless the target is already paseo-next-v2
306
+ // or --skip-automated-deployment-to-paseo-next-v2 is set.
307
+ if (shouldMirrorToPaseoNextV2(flags, DEFAULT_ENV_ID)) {
308
+ console.log("\nRunning automated mirror deploy to paseo-next-v2…");
309
+ try {
310
+ await deploy(buildDir, domain, {
311
+ mnemonic: flags.mnemonic,
312
+ derivationPath: flags.derivationPath,
313
+ poolSize: flags.poolSize,
314
+ password: flags.password,
315
+ jsMerkle: flags.jsMerkle,
316
+ inputCar: flags.inputCar,
317
+ tag: flags.tag,
318
+ name: flags.name,
319
+ description: flags.description,
320
+ allowLargeDeploy: flags.allowLargeDeploy,
321
+ reproducibleSource: flags.reproducibleSource,
322
+ env: "paseo-next-v2",
323
+ automatedMirror: true,
324
+ });
325
+ } catch (mirrorError) {
326
+ const mirrorMsg = mirrorError?.message ?? String(mirrorError);
327
+ if (flags.failOnMirrorError) {
328
+ try { writeRunState({ status: "failed", endedAt: Date.now() }); } catch {}
329
+ console.error(`Automated mirror deploy to paseo-next-v2 failed:`, mirrorMsg);
330
+ process.exit(1);
331
+ }
332
+ console.error(`Warning: automated mirror deploy to paseo-next-v2 failed: ${mirrorMsg}`);
333
+ }
334
+ }
335
+
287
336
  if (!flags.help && !flags.version) {
288
337
  try { writeRunState({ status: "succeeded", endedAt: Date.now() }); } catch {}
289
338
  }
@@ -9,10 +9,10 @@ import {
9
9
  offerBugReport,
10
10
  scrubSecrets,
11
11
  setDeployContext
12
- } from "./chunk-GMVRWMK5.js";
13
- import "./chunk-XE56RZQZ.js";
14
- import "./chunk-KTVELHHZ.js";
15
- import "./chunk-DESQCUVX.js";
12
+ } from "./chunk-SEOC622U.js";
13
+ import "./chunk-2K2FAWCW.js";
14
+ import "./chunk-THJ4U4MZ.js";
15
+ import "./chunk-62Y7KCOV.js";
16
16
  import "./chunk-QGM4M3NI.js";
17
17
  export {
18
18
  buildCliFlagsSummary,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VERSION
3
- } from "./chunk-KTVELHHZ.js";
3
+ } from "./chunk-THJ4U4MZ.js";
4
4
 
5
5
  // src/version-check.ts
6
6
  import { execSync, execFileSync } from "child_process";
@@ -8,6 +8,17 @@ import { createInterface } from "readline";
8
8
  var REGISTRY_URL = "https://registry.npmjs.org/bulletin-deploy/latest";
9
9
  var KILL_SWITCH_URL = "https://raw.githubusercontent.com/paritytech/triangle-deploy/main/min-version.json";
10
10
  var FETCH_TIMEOUT = 3e3;
11
+ function checkNodeVersion(enginesNode, currentVersion) {
12
+ const match = enginesNode.match(/(\d+)/);
13
+ if (!match) return null;
14
+ const required = parseInt(match[1], 10);
15
+ const actual = parseInt(currentVersion.replace(/^v/, "").split(".")[0], 10);
16
+ if (actual < required) {
17
+ return `bulletin-deploy requires Node.js ${enginesNode} (running ${currentVersion}).
18
+ Download a supported version at https://nodejs.org/`;
19
+ }
20
+ return null;
21
+ }
11
22
  function compareSemver(a, b) {
12
23
  const [coreA, preA] = a.split("-", 2);
13
24
  const [coreB, preB] = b.split("-", 2);
@@ -179,6 +190,7 @@ async function handleFailedDeploy(error) {
179
190
  }
180
191
 
181
192
  export {
193
+ checkNodeVersion,
182
194
  compareSemver,
183
195
  isPreReleaseVersion,
184
196
  preReleaseWarning,
@@ -6,7 +6,7 @@ import * as path from "path";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "bulletin-deploy",
9
- version: "0.7.16",
9
+ version: "0.7.17-rc.1",
10
10
  private: false,
11
11
  repository: {
12
12
  type: "git",
@@ -37,7 +37,7 @@ var package_default = {
37
37
  ],
38
38
  scripts: {
39
39
  prebuild: "node scripts/refresh-environments.mjs",
40
- build: "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts --format esm --dts --clean --target node22",
40
+ build: "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/mirror.ts --format esm --dts --clean --target node22",
41
41
  "refresh-environments": "node scripts/refresh-environments.mjs",
42
42
  prepare: "npm run build",
43
43
  test: "npm run build && node --test test/test.js test/cli-help.test.js test/helpers/e2e-helpers.test.js test/environments.test.js",
@@ -18,10 +18,10 @@ import {
18
18
  } from "./chunk-S7EM5VMW.js";
19
19
  import {
20
20
  setDeployContext
21
- } from "./chunk-GMVRWMK5.js";
21
+ } from "./chunk-SEOC622U.js";
22
22
  import {
23
23
  probeChunks
24
- } from "./chunk-5XLGTLSI.js";
24
+ } from "./chunk-TISYCYOM.js";
25
25
  import {
26
26
  packSection
27
27
  } from "./chunk-C2TS5MER.js";
@@ -32,7 +32,7 @@ import {
32
32
  parseDomainName,
33
33
  popStatusName,
34
34
  verifyNonceAdvanced
35
- } from "./chunk-6IT7FRTA.js";
35
+ } from "./chunk-ROD5OK32.js";
36
36
  import {
37
37
  derivePoolAccounts,
38
38
  detectTestnet,
@@ -54,7 +54,7 @@ import {
54
54
  truncateAddress,
55
55
  withDeploySpan,
56
56
  withSpan
57
- } from "./chunk-KTVELHHZ.js";
57
+ } from "./chunk-THJ4U4MZ.js";
58
58
  import {
59
59
  DEFAULT_ENV_ID,
60
60
  loadEnvironments,
@@ -1196,6 +1196,7 @@ async function deploy(content, domainName = null, options = {}) {
1196
1196
  setDeploySentryTag("deploy.tag", deployTag);
1197
1197
  }
1198
1198
  setDeployAttribute("deploy.env", envId);
1199
+ if (options.automatedMirror) setDeployAttribute("deploy.automated_mirror", "true");
1199
1200
  if (envNetwork) setDeployAttribute("deploy.network", envNetwork);
1200
1201
  if (envSource) setDeployAttribute("deploy.environments_source", envSource);
1201
1202
  let cid;
@@ -0,0 +1,9 @@
1
+ // src/mirror.ts
2
+ function shouldMirrorToPaseoNextV2(flags, defaultEnvId) {
3
+ const effectiveEnv = flags.env ?? defaultEnvId;
4
+ return effectiveEnv !== "paseo-next-v2" && !flags.skipMirrorToPaseoNextV2;
5
+ }
6
+
7
+ export {
8
+ shouldMirrorToPaseoNextV2
9
+ };
@@ -5,7 +5,7 @@ import {
5
5
  captureWarning,
6
6
  setDeployAttribute,
7
7
  withSpan
8
- } from "./chunk-KTVELHHZ.js";
8
+ } from "./chunk-THJ4U4MZ.js";
9
9
 
10
10
  // src/dotns.ts
11
11
  import { spawn } from "child_process";
@@ -2,11 +2,11 @@ import {
2
2
  classifyErrorArea,
3
3
  isInteractive,
4
4
  promptYesNo
5
- } from "./chunk-XE56RZQZ.js";
5
+ } from "./chunk-2K2FAWCW.js";
6
6
  import {
7
7
  VERSION,
8
8
  getCurrentSentryTraceId
9
- } from "./chunk-KTVELHHZ.js";
9
+ } from "./chunk-THJ4U4MZ.js";
10
10
 
11
11
  // src/bug-report.ts
12
12
  import { execSync, execFileSync } from "child_process";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  package_default,
3
3
  writeRunState
4
- } from "./chunk-DESQCUVX.js";
4
+ } from "./chunk-62Y7KCOV.js";
5
5
 
6
6
  // src/memory-report.ts
7
7
  import * as fs2 from "fs";
@@ -223,7 +223,9 @@ function getDeployAttributes(domain) {
223
223
  // denominator for "% of deploys hitting the floor" and "% recovered via
224
224
  // testnet auto-top-up" metrics. Flipped by gateOnFeeBalance.
225
225
  "deploy.dotns.signer_below_floor": "false",
226
- "deploy.dotns.toppedup": "false"
226
+ "deploy.dotns.toppedup": "false",
227
+ // Flipped to "true" by deploy() when options.automatedMirror is set.
228
+ "deploy.automated_mirror": "false"
227
229
  };
228
230
  if (hostApp) attrs["deploy.host_app"] = hostApp;
229
231
  const hostAppVersion = process.env.BULLETIN_DEPLOY_HOST_APP_VERSION;
@@ -430,9 +432,11 @@ function setDeployReportContext(patch) {
430
432
  reportContext = { ...reportContext, ...patch };
431
433
  }
432
434
  function setDeployAttribute(key, value) {
433
- if (!Sentry) return;
434
- const span = Sentry.getActiveSpan();
435
- if (span) span.setAttribute(key, value);
435
+ if (!deployRootSpan) return;
436
+ deployRootSpan.setAttribute(key, value);
437
+ }
438
+ function __setDeployRootSpanForTest(span) {
439
+ deployRootSpan = span;
436
440
  }
437
441
  function getCurrentSentryTraceId() {
438
442
  if (!Sentry) return void 0;
@@ -449,8 +453,7 @@ function captureWarning(message, context) {
449
453
  try {
450
454
  Sentry.addBreadcrumb({ level: "warning", message, data: context });
451
455
  Sentry.captureMessage(message, { level: "warning", extra: context });
452
- const root = Sentry.getRootSpan(Sentry.getActiveSpan());
453
- if (root) root.setAttribute("deploy.sad", "true");
456
+ if (deployRootSpan) deployRootSpan.setAttribute("deploy.sad", "true");
454
457
  const reason = classifySadReason(message);
455
458
  const priority = SAD_REASON_PRIORITY[reason] ?? 0;
456
459
  if (priority >= currentSadReasonPriority) {
@@ -611,6 +614,7 @@ export {
611
614
  withDeploySpan,
612
615
  setDeployReportContext,
613
616
  setDeployAttribute,
617
+ __setDeployRootSpanForTest,
614
618
  getCurrentSentryTraceId,
615
619
  setDeploySentryTag,
616
620
  captureWarning,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  captureWarning
3
- } from "./chunk-KTVELHHZ.js";
3
+ } from "./chunk-THJ4U4MZ.js";
4
4
 
5
5
  // src/chunk-probe.ts
6
6
  import { Twox128, Blake2128Concat, decAnyMetadata, unifyMetadata } from "@polkadot-api/substrate-bindings";
@@ -5,9 +5,9 @@ import {
5
5
  _decodeStorageValue,
6
6
  _resetProbeSession,
7
7
  probeChunks
8
- } from "./chunk-5XLGTLSI.js";
9
- import "./chunk-KTVELHHZ.js";
10
- import "./chunk-DESQCUVX.js";
8
+ } from "./chunk-TISYCYOM.js";
9
+ import "./chunk-THJ4U4MZ.js";
10
+ import "./chunk-62Y7KCOV.js";
11
11
  import "./chunk-QGM4M3NI.js";
12
12
  export {
13
13
  ChainProbeCrossValidationError,
package/dist/deploy.d.ts CHANGED
@@ -199,6 +199,8 @@ interface DeployOptions {
199
199
  bulletinEndpoints?: string[];
200
200
  /** Pre-resolved asset-hub endpoints. Same escape-hatch semantics. */
201
201
  assetHubEndpoints?: string[];
202
+ /** When true, marks this as an automated mirror deploy in telemetry. */
203
+ automatedMirror?: boolean;
202
204
  }
203
205
  declare function resolveDotnsConnectOptions(options: Pick<DeployOptions, "mnemonic" | "derivationPath" | "signer" | "signerAddress">, assetHubEndpoints?: string[]): {
204
206
  signer?: PolkadotSigner;
package/dist/deploy.js CHANGED
@@ -32,19 +32,19 @@ import {
32
32
  storeDirectory,
33
33
  storeDirectoryV2,
34
34
  storeFile
35
- } from "./chunk-AHSZ5WRE.js";
35
+ } from "./chunk-7FAJK65N.js";
36
36
  import "./chunk-MJTQOXBC.js";
37
37
  import "./chunk-KOSF5FDO.js";
38
38
  import "./chunk-5MRZ3V4A.js";
39
39
  import "./chunk-S7EM5VMW.js";
40
- import "./chunk-GMVRWMK5.js";
41
- import "./chunk-XE56RZQZ.js";
42
- import "./chunk-5XLGTLSI.js";
40
+ import "./chunk-SEOC622U.js";
41
+ import "./chunk-2K2FAWCW.js";
42
+ import "./chunk-TISYCYOM.js";
43
43
  import "./chunk-C2TS5MER.js";
44
- import "./chunk-6IT7FRTA.js";
44
+ import "./chunk-ROD5OK32.js";
45
45
  import "./chunk-VOEFHED3.js";
46
- import "./chunk-KTVELHHZ.js";
47
- import "./chunk-DESQCUVX.js";
46
+ import "./chunk-THJ4U4MZ.js";
47
+ import "./chunk-62Y7KCOV.js";
48
48
  import "./chunk-X3F7WHSF.js";
49
49
  import {
50
50
  EXIT_CODE_NO_RETRY,
package/dist/dotns.js CHANGED
@@ -37,10 +37,10 @@ import {
37
37
  stripTrailingDigits,
38
38
  validateDomainLabel,
39
39
  verifyNonceAdvanced
40
- } from "./chunk-6IT7FRTA.js";
40
+ } from "./chunk-ROD5OK32.js";
41
41
  import "./chunk-VOEFHED3.js";
42
- import "./chunk-KTVELHHZ.js";
43
- import "./chunk-DESQCUVX.js";
42
+ import "./chunk-THJ4U4MZ.js";
43
+ import "./chunk-62Y7KCOV.js";
44
44
  import "./chunk-QGM4M3NI.js";
45
45
  export {
46
46
  CONNECTION_TIMEOUT_MS,
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { finaliseEmbeddedManifest, writeEmbeddedManifestPlaceholder } from './ma
8
8
  export { FetchOptions, FetchOutcome, fetchPreviousManifest } from './manifest-fetch.js';
9
9
  export { ComputeStatsInput, IncrementalStats, computeStats, renderSummary, telemetryAttributes } from './incremental-stats.js';
10
10
  export { RunState, RunStatus, VERSION, loadRunState, probablyOomRssMb, resolveStateDir, shouldShowOomHint, shouldSkipStaleWarning, stateFilePath, writeRunState } from './run-state.js';
11
+ export { shouldMirrorToPaseoNextV2 } from './mirror.js';
11
12
  import 'multiformats/cid';
12
13
  import 'polkadot-api';
13
14
  import './errors.js';
package/dist/index.js CHANGED
@@ -1,8 +1,11 @@
1
+ import {
2
+ shouldMirrorToPaseoNextV2
3
+ } from "./chunk-EQPIYO7J.js";
1
4
  import {
2
5
  deploy,
3
6
  merkleizeJS,
4
7
  merkleizeWithStableOrder
5
- } from "./chunk-AHSZ5WRE.js";
8
+ } from "./chunk-7FAJK65N.js";
6
9
  import {
7
10
  computeStats,
8
11
  renderSummary,
@@ -24,16 +27,16 @@ import {
24
27
  isVolatilePath,
25
28
  parseManifest
26
29
  } from "./chunk-S7EM5VMW.js";
27
- import "./chunk-GMVRWMK5.js";
28
- import "./chunk-XE56RZQZ.js";
30
+ import "./chunk-SEOC622U.js";
31
+ import "./chunk-2K2FAWCW.js";
29
32
  import {
30
33
  probeChunks
31
- } from "./chunk-5XLGTLSI.js";
34
+ } from "./chunk-TISYCYOM.js";
32
35
  import "./chunk-C2TS5MER.js";
33
36
  import {
34
37
  DotNS,
35
38
  parseDomainName
36
- } from "./chunk-6IT7FRTA.js";
39
+ } from "./chunk-ROD5OK32.js";
37
40
  import {
38
41
  bootstrapPool,
39
42
  derivePoolAccounts,
@@ -41,7 +44,7 @@ import {
41
44
  fetchPoolAuthorizations,
42
45
  selectAccount
43
46
  } from "./chunk-VOEFHED3.js";
44
- import "./chunk-KTVELHHZ.js";
47
+ import "./chunk-THJ4U4MZ.js";
45
48
  import {
46
49
  VERSION,
47
50
  loadRunState,
@@ -51,7 +54,7 @@ import {
51
54
  shouldSkipStaleWarning,
52
55
  stateFilePath,
53
56
  writeRunState
54
- } from "./chunk-DESQCUVX.js";
57
+ } from "./chunk-62Y7KCOV.js";
55
58
  import "./chunk-X3F7WHSF.js";
56
59
  import "./chunk-ZOC4GITL.js";
57
60
  import "./chunk-HOTQDYHD.js";
@@ -83,6 +86,7 @@ export {
83
86
  renderSummary,
84
87
  resolveStateDir,
85
88
  selectAccount,
89
+ shouldMirrorToPaseoNextV2,
86
90
  shouldShowOomHint,
87
91
  shouldSkipStaleWarning,
88
92
  stateFilePath,
@@ -5,8 +5,8 @@ import {
5
5
  maybeWriteMemoryReport,
6
6
  safeHeap,
7
7
  sampleFromBytes
8
- } from "./chunk-KTVELHHZ.js";
9
- import "./chunk-DESQCUVX.js";
8
+ } from "./chunk-THJ4U4MZ.js";
9
+ import "./chunk-62Y7KCOV.js";
10
10
  import "./chunk-QGM4M3NI.js";
11
11
  export {
12
12
  DEFAULT_THRESHOLD_MB,
package/dist/merkle.js CHANGED
@@ -5,19 +5,19 @@ import {
5
5
  merkleizeJSBackend,
6
6
  merkleizeKuboBackend,
7
7
  merkleizeWithStableOrder
8
- } from "./chunk-AHSZ5WRE.js";
8
+ } from "./chunk-7FAJK65N.js";
9
9
  import "./chunk-MJTQOXBC.js";
10
10
  import "./chunk-KOSF5FDO.js";
11
11
  import "./chunk-5MRZ3V4A.js";
12
12
  import "./chunk-S7EM5VMW.js";
13
- import "./chunk-GMVRWMK5.js";
14
- import "./chunk-XE56RZQZ.js";
15
- import "./chunk-5XLGTLSI.js";
13
+ import "./chunk-SEOC622U.js";
14
+ import "./chunk-2K2FAWCW.js";
15
+ import "./chunk-TISYCYOM.js";
16
16
  import "./chunk-C2TS5MER.js";
17
- import "./chunk-6IT7FRTA.js";
17
+ import "./chunk-ROD5OK32.js";
18
18
  import "./chunk-VOEFHED3.js";
19
- import "./chunk-KTVELHHZ.js";
20
- import "./chunk-DESQCUVX.js";
19
+ import "./chunk-THJ4U4MZ.js";
20
+ import "./chunk-62Y7KCOV.js";
21
21
  import "./chunk-X3F7WHSF.js";
22
22
  import "./chunk-ZOC4GITL.js";
23
23
  import "./chunk-HOTQDYHD.js";
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Returns true if the deploy should be automatically mirrored to paseo-next-v2.
3
+ * Mirror is suppressed when the effective target env IS paseo-next-v2, or when
4
+ * the caller has set skipMirrorToPaseoNextV2.
5
+ */
6
+ declare function shouldMirrorToPaseoNextV2(flags: {
7
+ env?: string;
8
+ skipMirrorToPaseoNextV2?: boolean;
9
+ }, defaultEnvId: string): boolean;
10
+
11
+ export { shouldMirrorToPaseoNextV2 };
package/dist/mirror.js ADDED
@@ -0,0 +1,7 @@
1
+ import {
2
+ shouldMirrorToPaseoNextV2
3
+ } from "./chunk-EQPIYO7J.js";
4
+ import "./chunk-QGM4M3NI.js";
5
+ export {
6
+ shouldMirrorToPaseoNextV2
7
+ };
package/dist/run-state.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  shouldSkipStaleWarning,
8
8
  stateFilePath,
9
9
  writeRunState
10
- } from "./chunk-DESQCUVX.js";
10
+ } from "./chunk-62Y7KCOV.js";
11
11
  import "./chunk-QGM4M3NI.js";
12
12
  export {
13
13
  VERSION,
@@ -34,9 +34,10 @@ declare function setDeployReportContext(patch: Partial<DeployContextForReport> &
34
34
  outputDir?: string;
35
35
  }): void;
36
36
  declare function setDeployAttribute(key: string, value: string | number | boolean): void;
37
+ declare function __setDeployRootSpanForTest(span: any | null): void;
37
38
  declare function getCurrentSentryTraceId(): string | undefined;
38
39
  declare function setDeploySentryTag(key: string, value: string): void;
39
40
  declare function captureWarning(message: string, context?: Record<string, unknown>): void;
40
41
  declare function flush(): Promise<void>;
41
42
 
42
- export { type DeployErrorCategory, type InternalContextSignals, VERSION, captureWarning, classifyDeployError, classifySadReason, closeTelemetry, computeDeployOutcome, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
43
+ export { type DeployErrorCategory, type InternalContextSignals, VERSION, __setDeployRootSpanForTest, captureWarning, classifyDeployError, classifySadReason, closeTelemetry, computeDeployOutcome, flush, getCurrentSentryTraceId, getDeployAttributes, initTelemetry, isExpectedError, isInternalContext, isInternalContextFromSignals, markRelaunchOomHintShown, resolveRepo, resolveRunner, resolveRunnerType, sampleMemory, sanitizeBranch, sanitizeRepo, scrubPaths, setDeployAttribute, setDeployReportContext, setDeploySentryTag, setRunStateActive, truncateAddress, withDeploySpan, withSpan };
package/dist/telemetry.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  VERSION,
3
+ __setDeployRootSpanForTest,
3
4
  captureWarning,
4
5
  classifyDeployError,
5
6
  classifySadReason,
@@ -27,11 +28,12 @@ import {
27
28
  truncateAddress,
28
29
  withDeploySpan,
29
30
  withSpan
30
- } from "./chunk-KTVELHHZ.js";
31
- import "./chunk-DESQCUVX.js";
31
+ } from "./chunk-THJ4U4MZ.js";
32
+ import "./chunk-62Y7KCOV.js";
32
33
  import "./chunk-QGM4M3NI.js";
33
34
  export {
34
35
  VERSION,
36
+ __setDeployRootSpanForTest,
35
37
  captureWarning,
36
38
  classifyDeployError,
37
39
  classifySadReason,
@@ -6,6 +6,7 @@ interface VersionInfo {
6
6
  minimumFromKillSwitch: string | null;
7
7
  killSwitchMessage: string | null;
8
8
  }
9
+ declare function checkNodeVersion(enginesNode: string, currentVersion: string): string | null;
9
10
  declare function compareSemver(a: string, b: string): number;
10
11
  declare function isPreReleaseVersion(version: string): boolean;
11
12
  declare function preReleaseWarning(version: string): string | null;
@@ -32,4 +33,4 @@ type VersionVerdict = {
32
33
  declare function assessVersion(currentVersion: string, info: VersionInfo, internal: boolean): VersionVerdict;
33
34
  declare function handleFailedDeploy(error: Error): Promise<void>;
34
35
 
35
- export { type VersionVerdict, assessVersion, classifyErrorArea, compareSemver, handleFailedDeploy, isInteractive, isInternalUser, isPreReleaseVersion, preReleaseWarning, promptYesNo };
36
+ export { type VersionVerdict, assessVersion, checkNodeVersion, classifyErrorArea, compareSemver, handleFailedDeploy, isInteractive, isInternalUser, isPreReleaseVersion, preReleaseWarning, promptYesNo };
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  assessVersion,
3
+ checkNodeVersion,
3
4
  classifyErrorArea,
4
5
  compareSemver,
5
6
  handleFailedDeploy,
@@ -8,12 +9,13 @@ import {
8
9
  isPreReleaseVersion,
9
10
  preReleaseWarning,
10
11
  promptYesNo
11
- } from "./chunk-XE56RZQZ.js";
12
- import "./chunk-KTVELHHZ.js";
13
- import "./chunk-DESQCUVX.js";
12
+ } from "./chunk-2K2FAWCW.js";
13
+ import "./chunk-THJ4U4MZ.js";
14
+ import "./chunk-62Y7KCOV.js";
14
15
  import "./chunk-QGM4M3NI.js";
15
16
  export {
16
17
  assessVersion,
18
+ checkNodeVersion,
17
19
  classifyErrorArea,
18
20
  compareSemver,
19
21
  handleFailedDeploy,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bulletin-deploy",
3
- "version": "0.7.16",
3
+ "version": "0.7.17-rc.1",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,7 +31,7 @@
31
31
  ],
32
32
  "scripts": {
33
33
  "prebuild": "node scripts/refresh-environments.mjs",
34
- "build": "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts --format esm --dts --clean --target node22",
34
+ "build": "tsup src/index.ts src/deploy.ts src/dotns.ts src/pool.ts src/telemetry.ts src/memory-report.ts src/merkle.ts src/gh-pages-mirror.ts src/version-check.ts src/bug-report.ts src/run-state.ts src/environments.ts src/errors.ts src/manifest.ts src/chunk-probe.ts src/manifest-embed.ts src/manifest-fetch.ts src/manifest-roundtrip.ts src/incremental-stats.ts src/chunker.ts src/mirror.ts --format esm --dts --clean --target node22",
35
35
  "refresh-environments": "node scripts/refresh-environments.mjs",
36
36
  "prepare": "npm run build",
37
37
  "test": "npm run build && node --test test/test.js test/cli-help.test.js test/helpers/e2e-helpers.test.js test/environments.test.js",