relizy 1.4.9 → 1.5.0-beta.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.
- package/README.md +1 -1
- package/dist/cli.mjs +2 -1
- package/dist/index.d.mts +105 -4
- package/dist/index.d.ts +105 -4
- package/dist/index.mjs +2 -1
- package/dist/shared/{relizy.C95AEGVa.mjs → relizy.wrrRuBuo.mjs} +295 -117
- package/package.json +17 -15
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ Imagine you have multiple packages in your project (like a box with several toys
|
|
|
54
54
|
- 🔗 Automatic dependency bumping for workspace dependencies
|
|
55
55
|
- 🐙 GitHub, GitLab & Bitbucket support
|
|
56
56
|
- 🔐 2FA/OTP support for npm publishing
|
|
57
|
-
- 🎛️ Custom registry support (private registries, GitHub Packages, etc.)
|
|
57
|
+
- 🎛️ Custom registry support (private registries, GitHub Packages, etc.), with optional mirroring/routing to multiple registries (Nexus, JFrog, etc.)
|
|
58
58
|
- ⚙️ Multiple configuration files support for different release workflows
|
|
59
59
|
- 🔧 Support for npm, yarn, pnpm, and bun (auto-detected)
|
|
60
60
|
- 📱 Social media integration (Twitter & Slack) for release announcements
|
package/dist/cli.mjs
CHANGED
|
@@ -5,13 +5,14 @@ import process from 'node:process';
|
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { printBanner, logger } from '@maz-ui/node';
|
|
7
7
|
import { Command } from 'commander';
|
|
8
|
-
import {
|
|
8
|
+
import { aD as isInCI, aE as getCIName, b as bump, c as changelog, g as publish, e as providerRelease, h as social, p as prComment, r as release } from './shared/relizy.wrrRuBuo.mjs';
|
|
9
9
|
import 'node:child_process';
|
|
10
10
|
import '@maz-ui/utils/helpers/formatJson';
|
|
11
11
|
import 'c12';
|
|
12
12
|
import 'changelogen';
|
|
13
13
|
import 'defu';
|
|
14
14
|
import '@inquirer/prompts';
|
|
15
|
+
import 'micromatch';
|
|
15
16
|
import '@maz-ui/utils/helpers/getErrorMessage';
|
|
16
17
|
import 'fast-glob';
|
|
17
18
|
import 'semver';
|
package/dist/index.d.mts
CHANGED
|
@@ -340,10 +340,51 @@ declare function detectPackageManager(cwd?: string): PackageManager;
|
|
|
340
340
|
declare function determinePublishTag(version: string, configTag?: string): string;
|
|
341
341
|
declare function getPackagesToPublishInSelectiveMode(sortedPackages: PackageBase[], rootVersion: string | undefined): PackageBase[];
|
|
342
342
|
declare function getPackagesToPublishInIndependentMode(sortedPackages: PackageBase[], config: ResolvedRelizyConfig): Promise<PackageBase[]>;
|
|
343
|
-
|
|
343
|
+
/**
|
|
344
|
+
* Resolve every distinct registry referenced by the config (legacy `registry`
|
|
345
|
+
* plus every `registries` entry, regardless of package scoping). Conservative
|
|
346
|
+
* fallback for the pre-publish authentication safety check when the package
|
|
347
|
+
* list to publish isn't known yet - prefer `resolveRegistryTargetsForPackages`
|
|
348
|
+
* once it is, so a registry scoped to packages outside this release doesn't
|
|
349
|
+
* needlessly block it.
|
|
350
|
+
*
|
|
351
|
+
* When no default `registry` is configured but explicit `registries` are, the
|
|
352
|
+
* legacy target degrades to an empty URL that would target the ambient
|
|
353
|
+
* `.npmrc` registry with no managed auth. It is a phantom in that case and is
|
|
354
|
+
* excluded, so a config that lists every registry explicitly does not
|
|
355
|
+
* authenticate against a bogus empty registry.
|
|
356
|
+
*/
|
|
357
|
+
declare function resolveAllConfiguredRegistryTargets(config: ResolvedRelizyConfig): RegistryTarget[];
|
|
358
|
+
/**
|
|
359
|
+
* Resolve the registry targets a given package should be published to: the
|
|
360
|
+
* legacy registry (if any) plus every `registries` entry that either has no
|
|
361
|
+
* `packageFilter` (mirrored to all packages) or whose `packageFilter` glob
|
|
362
|
+
* patterns match the package name.
|
|
363
|
+
*
|
|
364
|
+
* The legacy/default registry is skipped for this package when either:
|
|
365
|
+
* - an applicable entry is marked `exclusive` - the package is published only
|
|
366
|
+
* to the matching registries instead of mirroring on top of the default one;
|
|
367
|
+
* - no default `registry` is configured yet the package already has at least
|
|
368
|
+
* one applicable explicit registry. Without a default, the legacy target
|
|
369
|
+
* degrades to an empty URL that would publish to the ambient `.npmrc`
|
|
370
|
+
* registry with no managed auth, so it is a phantom once real targets exist.
|
|
371
|
+
* When nothing else covers the package, the empty legacy target is kept as
|
|
372
|
+
* the historical `.npmrc` fallback.
|
|
373
|
+
*/
|
|
374
|
+
declare function resolveRegistryTargetsForPackage(pkg: PackageBase, config: ResolvedRelizyConfig): RegistryTarget[];
|
|
375
|
+
/**
|
|
376
|
+
* Resolve every distinct registry actually needed to publish the given set of
|
|
377
|
+
* packages - the union of `resolveRegistryTargetsForPackage` across all of
|
|
378
|
+
* them, deduped by registry URL. Used for the pre-publish authentication
|
|
379
|
+
* safety check once the package list to publish is known, so a registry
|
|
380
|
+
* scoped to packages that are not part of this release does not block it.
|
|
381
|
+
*/
|
|
382
|
+
declare function resolveRegistryTargetsForPackages(packages: PackageBase[], config: ResolvedRelizyConfig): RegistryTarget[];
|
|
383
|
+
declare function getAuthCommand({ packageManager, config, otp, registryTarget, }: {
|
|
344
384
|
packageManager: PackageManager;
|
|
345
385
|
config: ResolvedRelizyConfig;
|
|
346
386
|
otp?: string;
|
|
387
|
+
registryTarget?: RegistryTarget;
|
|
347
388
|
}): string;
|
|
348
389
|
declare function publishPackage({ pkg, config, packageManager, dryRun, }: {
|
|
349
390
|
pkg: PackageBase;
|
|
@@ -1198,6 +1239,57 @@ interface SocialOptions {
|
|
|
1198
1239
|
* true = force-enable AI, false = force-disable AI, undefined = use config
|
|
1199
1240
|
*/
|
|
1200
1241
|
ai?: boolean;
|
|
1242
|
+
/**
|
|
1243
|
+
* Prerelease suffix, forwarded to package discovery in independent mode
|
|
1244
|
+
* when no bump result is available (standalone `social` runs).
|
|
1245
|
+
*/
|
|
1246
|
+
suffix?: string;
|
|
1247
|
+
/**
|
|
1248
|
+
* Force package discovery to include all packages (independent standalone runs).
|
|
1249
|
+
* @default false
|
|
1250
|
+
*/
|
|
1251
|
+
force?: boolean;
|
|
1252
|
+
}
|
|
1253
|
+
interface RegistryTarget {
|
|
1254
|
+
/**
|
|
1255
|
+
* Optional label used in logs to identify this registry (e.g. `nexus-internal`)
|
|
1256
|
+
*/
|
|
1257
|
+
name?: string;
|
|
1258
|
+
/**
|
|
1259
|
+
* Registry URL (e.g. `https://registry.npmjs.org/`, a Nexus or JFrog URL)
|
|
1260
|
+
*/
|
|
1261
|
+
registry: string;
|
|
1262
|
+
/**
|
|
1263
|
+
* Registry token - only supported for pnpm and npm
|
|
1264
|
+
*/
|
|
1265
|
+
token?: string;
|
|
1266
|
+
/**
|
|
1267
|
+
* Publish tag (e.g. `latest`)
|
|
1268
|
+
*/
|
|
1269
|
+
tag?: string;
|
|
1270
|
+
/**
|
|
1271
|
+
* Publish access level (e.g. `public` or `restricted`)
|
|
1272
|
+
*/
|
|
1273
|
+
access?: 'public' | 'restricted';
|
|
1274
|
+
/**
|
|
1275
|
+
* OTP for this registry (e.g. `123456`)
|
|
1276
|
+
*/
|
|
1277
|
+
otp?: string;
|
|
1278
|
+
/**
|
|
1279
|
+
* Glob pattern matching package names this registry applies to. Distinct
|
|
1280
|
+
* from `PublishConfig.packages` (which packages get published at all) -
|
|
1281
|
+
* this only routes already-publishable packages to this registry.
|
|
1282
|
+
* Omitted or empty = applies to every publishable package (mirroring).
|
|
1283
|
+
*/
|
|
1284
|
+
packageFilter?: string[];
|
|
1285
|
+
/**
|
|
1286
|
+
* When true, packages matched by this target are published ONLY to this
|
|
1287
|
+
* (and any other matching) registry - the default `publish.registry` is
|
|
1288
|
+
* skipped for them. Without this flag, `registries` is purely additive:
|
|
1289
|
+
* matched packages are published to this registry ON TOP OF the default one.
|
|
1290
|
+
* @default false
|
|
1291
|
+
*/
|
|
1292
|
+
exclusive?: boolean;
|
|
1201
1293
|
}
|
|
1202
1294
|
type PublishConfig = ChangelogConfig$1['publish'] & {
|
|
1203
1295
|
/**
|
|
@@ -1244,6 +1336,14 @@ type PublishConfig = ChangelogConfig$1['publish'] & {
|
|
|
1244
1336
|
* @default 15000
|
|
1245
1337
|
*/
|
|
1246
1338
|
safetyCheckTimeout?: number;
|
|
1339
|
+
/**
|
|
1340
|
+
* Additional registries to publish to, on top of `registry` (if set).
|
|
1341
|
+
* Entries without `packageFilter` apply to every package (mirroring);
|
|
1342
|
+
* entries with `packageFilter` only apply to packages matching one of the
|
|
1343
|
+
* glob patterns. Fully additive: leaving this unset preserves the
|
|
1344
|
+
* single-registry behavior.
|
|
1345
|
+
*/
|
|
1346
|
+
registries?: RegistryTarget[];
|
|
1247
1347
|
};
|
|
1248
1348
|
interface PublishOptions extends PublishConfig {
|
|
1249
1349
|
/**
|
|
@@ -1988,8 +2088,9 @@ declare function providerReleaseSafetyCheck({ config, provider }: {
|
|
|
1988
2088
|
}): Promise<void>;
|
|
1989
2089
|
declare function providerRelease(options?: Partial<ProviderReleaseOptions>): Promise<ProviderReleaseResult>;
|
|
1990
2090
|
|
|
1991
|
-
declare function publishSafetyCheck({ config }: {
|
|
2091
|
+
declare function publishSafetyCheck({ config, packages }: {
|
|
1992
2092
|
config: ResolvedRelizyConfig;
|
|
2093
|
+
packages?: PackageBase[];
|
|
1993
2094
|
}): Promise<void>;
|
|
1994
2095
|
declare function publish(options?: Partial<PublishOptions>): Promise<{
|
|
1995
2096
|
publishedPackages: PackageBase[];
|
|
@@ -2002,5 +2103,5 @@ declare function socialSafetyCheck({ config }: {
|
|
|
2002
2103
|
}): Promise<void>;
|
|
2003
2104
|
declare function social(options?: Partial<SocialOptions>): Promise<SocialResult>;
|
|
2004
2105
|
|
|
2005
|
-
export { NEW_PACKAGE_MARKER, PR_COMMENT_MARKER, buildChangelogBody, buildCommentBody, buildCompareLink, buildContributors, bump, capReleaseTypeForZeroMajor, changelog, checkGitStatusIfDirty, collectContributorNames, collectPackageBumps, confirmBump, createCommitAndTags, createGitlabRelease, defineConfig, detectGitProvider, detectPackageManager, detectPullRequest, determinePublishTag, determineReleaseType, determineSemverChange, executeBuildCmd, executeFormatCmd, executeHook, expandPackagesToBumpWithDependents, extractChangelogSummary, extractVersionFromPackageTag, extractVersionFromTag, fetchGitTags, filterOutPrivatePackages, findGitHubPR, findGitLabMR, findReachableCommitBySubject, formatChangelogForSlack, formatPackagesForSlack, formatSlackMessage, formatTweetMessage, generateChangelog, generateMarkDown, getAuthCommand, getBumpedIndependentPackages, getBumpedPackageIndependently, getCIName, getCanaryVersion, getCommitSubject, getCurrentGitBranch, getCurrentGitRef, getDefaultConfig, getDependentsOf, getFirstCommit, getGitStatus, getIndependentTag, getLastPackageTag, getLastRepoTag, getLastStableTag, getLastTag, getModifiedReleaseFilePatterns, getNpmRegistry, getPackageCommits, getPackageDependencies, getPackageNewVersion, getPackages, getPackagesOrBumpedPackages, getPackagesToPublishInIndependentMode, getPackagesToPublishInSelectiveMode, getPreid, getReleaseUrl, getRootPackage, getShortCommitSha, getSlackToken, getSlackWebhookUrl, getTwitterCredentials, github, gitlab, hasLernaJson, isAncestor, isBumpedPackage, isChangedPreid, isGraduating, isGraduatingToStableBetweenVersion, isInCI, isPrerelease, isPrereleaseReleaseType, isStableReleaseType, isTagVersionCompatibleWithCurrent, loadRelizyConfig, mergeTypes, parseChangelogMarkdown, parseGitRemoteUrl, postPrComment, postReleaseToSlack, postReleaseToTwitter, prComment, providerRelease, providerReleaseSafetyCheck, publish, publishPackage, publishSafetyCheck, pushCommitAndTags, pushTagForce, readPackageJson, readPackages, reconcileFromTag, redactSecrets, release, resetRewrittenTagCache, resolveTags, retagAnnotatedLocal, rollbackModifiedFiles, shouldFilterPrereleaseTags, social, socialSafetyCheck, tagExists, topologicalSort, updateLernaVersion, writeChangelogToFile, writeVersion };
|
|
2006
|
-
export type { AIConfig, AIPromptTarget, AIProviderName, AISocialConfig, AISystemPromptOverrides, AITargetConfig, BumpConfig, BumpOptions, BumpResult, BumpResultFalsy, BumpResultTruthy, ChangelogConfig, ChangelogInclude, ChangelogOptions, ClaudeCodeProviderOptions, ConfigType, GitProvider, GitlabRelease, GitlabReleaseResponse, HookConfig, HookStep, HookType, MonorepoConfig, OnRewrittenTag, PackageBase, PackageBumpEntry, PackageManager, PostedRelease, PrCommentConfig, PrCommentMode, PrCommentOptions, PrCommentStatus, ProviderReleaseOptions, ProviderReleaseResult, PublishConfig, PublishOptions, PublishResponse, PullRequestInfo, ReadPackage, Reference, ReleaseConfig, ReleaseContext, ReleaseOptions, RelizyConfig, RepoConfig, ResolvedConfig, ResolvedRelizyConfig, ResolvedTags, ResolvedTwitterCredentials, RootPackage, SlackCredentials, SlackOptions, SlackPackageEntry, SlackSocialConfig, SocialConfig, SocialNetworkResult, SocialOptions, SocialResult, Step, TemplatesConfig, TokensConfig, TwitterCredentials, TwitterOptions, TwitterSocialConfig, VersionMode };
|
|
2106
|
+
export { NEW_PACKAGE_MARKER, PR_COMMENT_MARKER, buildChangelogBody, buildCommentBody, buildCompareLink, buildContributors, bump, capReleaseTypeForZeroMajor, changelog, checkGitStatusIfDirty, collectContributorNames, collectPackageBumps, confirmBump, createCommitAndTags, createGitlabRelease, defineConfig, detectGitProvider, detectPackageManager, detectPullRequest, determinePublishTag, determineReleaseType, determineSemverChange, executeBuildCmd, executeFormatCmd, executeHook, expandPackagesToBumpWithDependents, extractChangelogSummary, extractVersionFromPackageTag, extractVersionFromTag, fetchGitTags, filterOutPrivatePackages, findGitHubPR, findGitLabMR, findReachableCommitBySubject, formatChangelogForSlack, formatPackagesForSlack, formatSlackMessage, formatTweetMessage, generateChangelog, generateMarkDown, getAuthCommand, getBumpedIndependentPackages, getBumpedPackageIndependently, getCIName, getCanaryVersion, getCommitSubject, getCurrentGitBranch, getCurrentGitRef, getDefaultConfig, getDependentsOf, getFirstCommit, getGitStatus, getIndependentTag, getLastPackageTag, getLastRepoTag, getLastStableTag, getLastTag, getModifiedReleaseFilePatterns, getNpmRegistry, getPackageCommits, getPackageDependencies, getPackageNewVersion, getPackages, getPackagesOrBumpedPackages, getPackagesToPublishInIndependentMode, getPackagesToPublishInSelectiveMode, getPreid, getReleaseUrl, getRootPackage, getShortCommitSha, getSlackToken, getSlackWebhookUrl, getTwitterCredentials, github, gitlab, hasLernaJson, isAncestor, isBumpedPackage, isChangedPreid, isGraduating, isGraduatingToStableBetweenVersion, isInCI, isPrerelease, isPrereleaseReleaseType, isStableReleaseType, isTagVersionCompatibleWithCurrent, loadRelizyConfig, mergeTypes, parseChangelogMarkdown, parseGitRemoteUrl, postPrComment, postReleaseToSlack, postReleaseToTwitter, prComment, providerRelease, providerReleaseSafetyCheck, publish, publishPackage, publishSafetyCheck, pushCommitAndTags, pushTagForce, readPackageJson, readPackages, reconcileFromTag, redactSecrets, release, resetRewrittenTagCache, resolveAllConfiguredRegistryTargets, resolveRegistryTargetsForPackage, resolveRegistryTargetsForPackages, resolveTags, retagAnnotatedLocal, rollbackModifiedFiles, shouldFilterPrereleaseTags, social, socialSafetyCheck, tagExists, topologicalSort, updateLernaVersion, writeChangelogToFile, writeVersion };
|
|
2107
|
+
export type { AIConfig, AIPromptTarget, AIProviderName, AISocialConfig, AISystemPromptOverrides, AITargetConfig, BumpConfig, BumpOptions, BumpResult, BumpResultFalsy, BumpResultTruthy, ChangelogConfig, ChangelogInclude, ChangelogOptions, ClaudeCodeProviderOptions, ConfigType, GitProvider, GitlabRelease, GitlabReleaseResponse, HookConfig, HookStep, HookType, MonorepoConfig, OnRewrittenTag, PackageBase, PackageBumpEntry, PackageManager, PostedRelease, PrCommentConfig, PrCommentMode, PrCommentOptions, PrCommentStatus, ProviderReleaseOptions, ProviderReleaseResult, PublishConfig, PublishOptions, PublishResponse, PullRequestInfo, ReadPackage, Reference, RegistryTarget, ReleaseConfig, ReleaseContext, ReleaseOptions, RelizyConfig, RepoConfig, ResolvedConfig, ResolvedRelizyConfig, ResolvedTags, ResolvedTwitterCredentials, RootPackage, SlackCredentials, SlackOptions, SlackPackageEntry, SlackSocialConfig, SocialConfig, SocialNetworkResult, SocialOptions, SocialResult, Step, TemplatesConfig, TokensConfig, TwitterCredentials, TwitterOptions, TwitterSocialConfig, VersionMode };
|
package/dist/index.d.ts
CHANGED
|
@@ -340,10 +340,51 @@ declare function detectPackageManager(cwd?: string): PackageManager;
|
|
|
340
340
|
declare function determinePublishTag(version: string, configTag?: string): string;
|
|
341
341
|
declare function getPackagesToPublishInSelectiveMode(sortedPackages: PackageBase[], rootVersion: string | undefined): PackageBase[];
|
|
342
342
|
declare function getPackagesToPublishInIndependentMode(sortedPackages: PackageBase[], config: ResolvedRelizyConfig): Promise<PackageBase[]>;
|
|
343
|
-
|
|
343
|
+
/**
|
|
344
|
+
* Resolve every distinct registry referenced by the config (legacy `registry`
|
|
345
|
+
* plus every `registries` entry, regardless of package scoping). Conservative
|
|
346
|
+
* fallback for the pre-publish authentication safety check when the package
|
|
347
|
+
* list to publish isn't known yet - prefer `resolveRegistryTargetsForPackages`
|
|
348
|
+
* once it is, so a registry scoped to packages outside this release doesn't
|
|
349
|
+
* needlessly block it.
|
|
350
|
+
*
|
|
351
|
+
* When no default `registry` is configured but explicit `registries` are, the
|
|
352
|
+
* legacy target degrades to an empty URL that would target the ambient
|
|
353
|
+
* `.npmrc` registry with no managed auth. It is a phantom in that case and is
|
|
354
|
+
* excluded, so a config that lists every registry explicitly does not
|
|
355
|
+
* authenticate against a bogus empty registry.
|
|
356
|
+
*/
|
|
357
|
+
declare function resolveAllConfiguredRegistryTargets(config: ResolvedRelizyConfig): RegistryTarget[];
|
|
358
|
+
/**
|
|
359
|
+
* Resolve the registry targets a given package should be published to: the
|
|
360
|
+
* legacy registry (if any) plus every `registries` entry that either has no
|
|
361
|
+
* `packageFilter` (mirrored to all packages) or whose `packageFilter` glob
|
|
362
|
+
* patterns match the package name.
|
|
363
|
+
*
|
|
364
|
+
* The legacy/default registry is skipped for this package when either:
|
|
365
|
+
* - an applicable entry is marked `exclusive` - the package is published only
|
|
366
|
+
* to the matching registries instead of mirroring on top of the default one;
|
|
367
|
+
* - no default `registry` is configured yet the package already has at least
|
|
368
|
+
* one applicable explicit registry. Without a default, the legacy target
|
|
369
|
+
* degrades to an empty URL that would publish to the ambient `.npmrc`
|
|
370
|
+
* registry with no managed auth, so it is a phantom once real targets exist.
|
|
371
|
+
* When nothing else covers the package, the empty legacy target is kept as
|
|
372
|
+
* the historical `.npmrc` fallback.
|
|
373
|
+
*/
|
|
374
|
+
declare function resolveRegistryTargetsForPackage(pkg: PackageBase, config: ResolvedRelizyConfig): RegistryTarget[];
|
|
375
|
+
/**
|
|
376
|
+
* Resolve every distinct registry actually needed to publish the given set of
|
|
377
|
+
* packages - the union of `resolveRegistryTargetsForPackage` across all of
|
|
378
|
+
* them, deduped by registry URL. Used for the pre-publish authentication
|
|
379
|
+
* safety check once the package list to publish is known, so a registry
|
|
380
|
+
* scoped to packages that are not part of this release does not block it.
|
|
381
|
+
*/
|
|
382
|
+
declare function resolveRegistryTargetsForPackages(packages: PackageBase[], config: ResolvedRelizyConfig): RegistryTarget[];
|
|
383
|
+
declare function getAuthCommand({ packageManager, config, otp, registryTarget, }: {
|
|
344
384
|
packageManager: PackageManager;
|
|
345
385
|
config: ResolvedRelizyConfig;
|
|
346
386
|
otp?: string;
|
|
387
|
+
registryTarget?: RegistryTarget;
|
|
347
388
|
}): string;
|
|
348
389
|
declare function publishPackage({ pkg, config, packageManager, dryRun, }: {
|
|
349
390
|
pkg: PackageBase;
|
|
@@ -1198,6 +1239,57 @@ interface SocialOptions {
|
|
|
1198
1239
|
* true = force-enable AI, false = force-disable AI, undefined = use config
|
|
1199
1240
|
*/
|
|
1200
1241
|
ai?: boolean;
|
|
1242
|
+
/**
|
|
1243
|
+
* Prerelease suffix, forwarded to package discovery in independent mode
|
|
1244
|
+
* when no bump result is available (standalone `social` runs).
|
|
1245
|
+
*/
|
|
1246
|
+
suffix?: string;
|
|
1247
|
+
/**
|
|
1248
|
+
* Force package discovery to include all packages (independent standalone runs).
|
|
1249
|
+
* @default false
|
|
1250
|
+
*/
|
|
1251
|
+
force?: boolean;
|
|
1252
|
+
}
|
|
1253
|
+
interface RegistryTarget {
|
|
1254
|
+
/**
|
|
1255
|
+
* Optional label used in logs to identify this registry (e.g. `nexus-internal`)
|
|
1256
|
+
*/
|
|
1257
|
+
name?: string;
|
|
1258
|
+
/**
|
|
1259
|
+
* Registry URL (e.g. `https://registry.npmjs.org/`, a Nexus or JFrog URL)
|
|
1260
|
+
*/
|
|
1261
|
+
registry: string;
|
|
1262
|
+
/**
|
|
1263
|
+
* Registry token - only supported for pnpm and npm
|
|
1264
|
+
*/
|
|
1265
|
+
token?: string;
|
|
1266
|
+
/**
|
|
1267
|
+
* Publish tag (e.g. `latest`)
|
|
1268
|
+
*/
|
|
1269
|
+
tag?: string;
|
|
1270
|
+
/**
|
|
1271
|
+
* Publish access level (e.g. `public` or `restricted`)
|
|
1272
|
+
*/
|
|
1273
|
+
access?: 'public' | 'restricted';
|
|
1274
|
+
/**
|
|
1275
|
+
* OTP for this registry (e.g. `123456`)
|
|
1276
|
+
*/
|
|
1277
|
+
otp?: string;
|
|
1278
|
+
/**
|
|
1279
|
+
* Glob pattern matching package names this registry applies to. Distinct
|
|
1280
|
+
* from `PublishConfig.packages` (which packages get published at all) -
|
|
1281
|
+
* this only routes already-publishable packages to this registry.
|
|
1282
|
+
* Omitted or empty = applies to every publishable package (mirroring).
|
|
1283
|
+
*/
|
|
1284
|
+
packageFilter?: string[];
|
|
1285
|
+
/**
|
|
1286
|
+
* When true, packages matched by this target are published ONLY to this
|
|
1287
|
+
* (and any other matching) registry - the default `publish.registry` is
|
|
1288
|
+
* skipped for them. Without this flag, `registries` is purely additive:
|
|
1289
|
+
* matched packages are published to this registry ON TOP OF the default one.
|
|
1290
|
+
* @default false
|
|
1291
|
+
*/
|
|
1292
|
+
exclusive?: boolean;
|
|
1201
1293
|
}
|
|
1202
1294
|
type PublishConfig = ChangelogConfig$1['publish'] & {
|
|
1203
1295
|
/**
|
|
@@ -1244,6 +1336,14 @@ type PublishConfig = ChangelogConfig$1['publish'] & {
|
|
|
1244
1336
|
* @default 15000
|
|
1245
1337
|
*/
|
|
1246
1338
|
safetyCheckTimeout?: number;
|
|
1339
|
+
/**
|
|
1340
|
+
* Additional registries to publish to, on top of `registry` (if set).
|
|
1341
|
+
* Entries without `packageFilter` apply to every package (mirroring);
|
|
1342
|
+
* entries with `packageFilter` only apply to packages matching one of the
|
|
1343
|
+
* glob patterns. Fully additive: leaving this unset preserves the
|
|
1344
|
+
* single-registry behavior.
|
|
1345
|
+
*/
|
|
1346
|
+
registries?: RegistryTarget[];
|
|
1247
1347
|
};
|
|
1248
1348
|
interface PublishOptions extends PublishConfig {
|
|
1249
1349
|
/**
|
|
@@ -1988,8 +2088,9 @@ declare function providerReleaseSafetyCheck({ config, provider }: {
|
|
|
1988
2088
|
}): Promise<void>;
|
|
1989
2089
|
declare function providerRelease(options?: Partial<ProviderReleaseOptions>): Promise<ProviderReleaseResult>;
|
|
1990
2090
|
|
|
1991
|
-
declare function publishSafetyCheck({ config }: {
|
|
2091
|
+
declare function publishSafetyCheck({ config, packages }: {
|
|
1992
2092
|
config: ResolvedRelizyConfig;
|
|
2093
|
+
packages?: PackageBase[];
|
|
1993
2094
|
}): Promise<void>;
|
|
1994
2095
|
declare function publish(options?: Partial<PublishOptions>): Promise<{
|
|
1995
2096
|
publishedPackages: PackageBase[];
|
|
@@ -2002,5 +2103,5 @@ declare function socialSafetyCheck({ config }: {
|
|
|
2002
2103
|
}): Promise<void>;
|
|
2003
2104
|
declare function social(options?: Partial<SocialOptions>): Promise<SocialResult>;
|
|
2004
2105
|
|
|
2005
|
-
export { NEW_PACKAGE_MARKER, PR_COMMENT_MARKER, buildChangelogBody, buildCommentBody, buildCompareLink, buildContributors, bump, capReleaseTypeForZeroMajor, changelog, checkGitStatusIfDirty, collectContributorNames, collectPackageBumps, confirmBump, createCommitAndTags, createGitlabRelease, defineConfig, detectGitProvider, detectPackageManager, detectPullRequest, determinePublishTag, determineReleaseType, determineSemverChange, executeBuildCmd, executeFormatCmd, executeHook, expandPackagesToBumpWithDependents, extractChangelogSummary, extractVersionFromPackageTag, extractVersionFromTag, fetchGitTags, filterOutPrivatePackages, findGitHubPR, findGitLabMR, findReachableCommitBySubject, formatChangelogForSlack, formatPackagesForSlack, formatSlackMessage, formatTweetMessage, generateChangelog, generateMarkDown, getAuthCommand, getBumpedIndependentPackages, getBumpedPackageIndependently, getCIName, getCanaryVersion, getCommitSubject, getCurrentGitBranch, getCurrentGitRef, getDefaultConfig, getDependentsOf, getFirstCommit, getGitStatus, getIndependentTag, getLastPackageTag, getLastRepoTag, getLastStableTag, getLastTag, getModifiedReleaseFilePatterns, getNpmRegistry, getPackageCommits, getPackageDependencies, getPackageNewVersion, getPackages, getPackagesOrBumpedPackages, getPackagesToPublishInIndependentMode, getPackagesToPublishInSelectiveMode, getPreid, getReleaseUrl, getRootPackage, getShortCommitSha, getSlackToken, getSlackWebhookUrl, getTwitterCredentials, github, gitlab, hasLernaJson, isAncestor, isBumpedPackage, isChangedPreid, isGraduating, isGraduatingToStableBetweenVersion, isInCI, isPrerelease, isPrereleaseReleaseType, isStableReleaseType, isTagVersionCompatibleWithCurrent, loadRelizyConfig, mergeTypes, parseChangelogMarkdown, parseGitRemoteUrl, postPrComment, postReleaseToSlack, postReleaseToTwitter, prComment, providerRelease, providerReleaseSafetyCheck, publish, publishPackage, publishSafetyCheck, pushCommitAndTags, pushTagForce, readPackageJson, readPackages, reconcileFromTag, redactSecrets, release, resetRewrittenTagCache, resolveTags, retagAnnotatedLocal, rollbackModifiedFiles, shouldFilterPrereleaseTags, social, socialSafetyCheck, tagExists, topologicalSort, updateLernaVersion, writeChangelogToFile, writeVersion };
|
|
2006
|
-
export type { AIConfig, AIPromptTarget, AIProviderName, AISocialConfig, AISystemPromptOverrides, AITargetConfig, BumpConfig, BumpOptions, BumpResult, BumpResultFalsy, BumpResultTruthy, ChangelogConfig, ChangelogInclude, ChangelogOptions, ClaudeCodeProviderOptions, ConfigType, GitProvider, GitlabRelease, GitlabReleaseResponse, HookConfig, HookStep, HookType, MonorepoConfig, OnRewrittenTag, PackageBase, PackageBumpEntry, PackageManager, PostedRelease, PrCommentConfig, PrCommentMode, PrCommentOptions, PrCommentStatus, ProviderReleaseOptions, ProviderReleaseResult, PublishConfig, PublishOptions, PublishResponse, PullRequestInfo, ReadPackage, Reference, ReleaseConfig, ReleaseContext, ReleaseOptions, RelizyConfig, RepoConfig, ResolvedConfig, ResolvedRelizyConfig, ResolvedTags, ResolvedTwitterCredentials, RootPackage, SlackCredentials, SlackOptions, SlackPackageEntry, SlackSocialConfig, SocialConfig, SocialNetworkResult, SocialOptions, SocialResult, Step, TemplatesConfig, TokensConfig, TwitterCredentials, TwitterOptions, TwitterSocialConfig, VersionMode };
|
|
2106
|
+
export { NEW_PACKAGE_MARKER, PR_COMMENT_MARKER, buildChangelogBody, buildCommentBody, buildCompareLink, buildContributors, bump, capReleaseTypeForZeroMajor, changelog, checkGitStatusIfDirty, collectContributorNames, collectPackageBumps, confirmBump, createCommitAndTags, createGitlabRelease, defineConfig, detectGitProvider, detectPackageManager, detectPullRequest, determinePublishTag, determineReleaseType, determineSemverChange, executeBuildCmd, executeFormatCmd, executeHook, expandPackagesToBumpWithDependents, extractChangelogSummary, extractVersionFromPackageTag, extractVersionFromTag, fetchGitTags, filterOutPrivatePackages, findGitHubPR, findGitLabMR, findReachableCommitBySubject, formatChangelogForSlack, formatPackagesForSlack, formatSlackMessage, formatTweetMessage, generateChangelog, generateMarkDown, getAuthCommand, getBumpedIndependentPackages, getBumpedPackageIndependently, getCIName, getCanaryVersion, getCommitSubject, getCurrentGitBranch, getCurrentGitRef, getDefaultConfig, getDependentsOf, getFirstCommit, getGitStatus, getIndependentTag, getLastPackageTag, getLastRepoTag, getLastStableTag, getLastTag, getModifiedReleaseFilePatterns, getNpmRegistry, getPackageCommits, getPackageDependencies, getPackageNewVersion, getPackages, getPackagesOrBumpedPackages, getPackagesToPublishInIndependentMode, getPackagesToPublishInSelectiveMode, getPreid, getReleaseUrl, getRootPackage, getShortCommitSha, getSlackToken, getSlackWebhookUrl, getTwitterCredentials, github, gitlab, hasLernaJson, isAncestor, isBumpedPackage, isChangedPreid, isGraduating, isGraduatingToStableBetweenVersion, isInCI, isPrerelease, isPrereleaseReleaseType, isStableReleaseType, isTagVersionCompatibleWithCurrent, loadRelizyConfig, mergeTypes, parseChangelogMarkdown, parseGitRemoteUrl, postPrComment, postReleaseToSlack, postReleaseToTwitter, prComment, providerRelease, providerReleaseSafetyCheck, publish, publishPackage, publishSafetyCheck, pushCommitAndTags, pushTagForce, readPackageJson, readPackages, reconcileFromTag, redactSecrets, release, resetRewrittenTagCache, resolveAllConfiguredRegistryTargets, resolveRegistryTargetsForPackage, resolveRegistryTargetsForPackages, resolveTags, retagAnnotatedLocal, rollbackModifiedFiles, shouldFilterPrereleaseTags, social, socialSafetyCheck, tagExists, topologicalSort, updateLernaVersion, writeChangelogToFile, writeVersion };
|
|
2107
|
+
export type { AIConfig, AIPromptTarget, AIProviderName, AISocialConfig, AISystemPromptOverrides, AITargetConfig, BumpConfig, BumpOptions, BumpResult, BumpResultFalsy, BumpResultTruthy, ChangelogConfig, ChangelogInclude, ChangelogOptions, ClaudeCodeProviderOptions, ConfigType, GitProvider, GitlabRelease, GitlabReleaseResponse, HookConfig, HookStep, HookType, MonorepoConfig, OnRewrittenTag, PackageBase, PackageBumpEntry, PackageManager, PostedRelease, PrCommentConfig, PrCommentMode, PrCommentOptions, PrCommentStatus, ProviderReleaseOptions, ProviderReleaseResult, PublishConfig, PublishOptions, PublishResponse, PullRequestInfo, ReadPackage, Reference, RegistryTarget, ReleaseConfig, ReleaseContext, ReleaseOptions, RelizyConfig, RepoConfig, ResolvedConfig, ResolvedRelizyConfig, ResolvedTags, ResolvedTwitterCredentials, RootPackage, SlackCredentials, SlackOptions, SlackPackageEntry, SlackSocialConfig, SocialConfig, SocialNetworkResult, SocialOptions, SocialResult, Step, TemplatesConfig, TokensConfig, TwitterCredentials, TwitterOptions, TwitterSocialConfig, VersionMode };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { ax as NEW_PACKAGE_MARKER, a9 as PR_COMMENT_MARKER, S as buildChangelogBody, a as buildCommentBody, R as buildCompareLink, U as buildContributors, b as bump, aL as capReleaseTypeForZeroMajor, c as changelog, v as checkGitStatusIfDirty, T as collectContributorNames, a5 as collectPackageBumps, aZ as confirmBump, B as createCommitAndTags, P as createGitlabRelease, k as defineConfig, y as detectGitProvider, Y as detectPackageManager, a8 as detectPullRequest, Z as determinePublishTag, aN as determineReleaseType, aM as determineSemverChange, aG as executeBuildCmd, aF as executeFormatCmd, aC as executeHook, q as expandPackagesToBumpWithDependents, aq as extractChangelogSummary, aR as extractVersionFromPackageTag, b0 as extractVersionFromTag, x as fetchGitTags, aI as filterOutPrivatePackages, a6 as findGitHubPR, a7 as findGitLabMR, K as findReachableCommitBySubject, am as formatChangelogForSlack, an as formatPackagesForSlack, ao as formatSlackMessage, aA as formatTweetMessage, i as generateChangelog, V as generateMarkDown, a3 as getAuthCommand, a_ as getBumpedIndependentPackages, aY as getBumpedPackageIndependently, aE as getCIName, b1 as getCanaryVersion, J as getCommitSubject, F as getCurrentGitBranch, G as getCurrentGitRef, j as getDefaultConfig, o as getDependentsOf, E as getFirstCommit, u as getGitStatus, as as getIndependentTag, aw as getLastPackageTag, av as getLastRepoTag, at as getLastStableTag, au as getLastTag, A as getModifiedReleaseFilePatterns, X as getNpmRegistry, ag as getPackageCommits, n as getPackageDependencies, aP as getPackageNewVersion, af as getPackages, aJ as getPackagesOrBumpedPackages, $ as getPackagesToPublishInIndependentMode, _ as getPackagesToPublishInSelectiveMode, aW as getPreid, ar as getReleaseUrl, ad as getRootPackage, H as getShortCommitSha, ak as getSlackToken, al as getSlackWebhookUrl, az as getTwitterCredentials, O as github, Q as gitlab, ah as hasLernaJson, I as isAncestor, aH as isBumpedPackage, aX as isChangedPreid, aV as isGraduating, aK as isGraduatingToStableBetweenVersion, aD as isInCI, aS as isPrerelease, aU as isPrereleaseReleaseType, aT as isStableReleaseType, b2 as isTagVersionCompatibleWithCurrent, l as loadRelizyConfig, m as mergeTypes, W as parseChangelogMarkdown, z as parseGitRemoteUrl, aa as postPrComment, ap as postReleaseToSlack, aB as postReleaseToTwitter, p as prComment, e as providerRelease, d as providerReleaseSafetyCheck, g as publish, a4 as publishPackage, f as publishSafetyCheck, C as pushCommitAndTags, N as pushTagForce, ac as readPackageJson, ae as readPackages, aj as reconcileFromTag, ab as redactSecrets, r as release, ai as resetRewrittenTagCache, a0 as resolveAllConfiguredRegistryTargets, a1 as resolveRegistryTargetsForPackage, a2 as resolveRegistryTargetsForPackages, ay as resolveTags, M as retagAnnotatedLocal, D as rollbackModifiedFiles, a$ as shouldFilterPrereleaseTags, h as social, s as socialSafetyCheck, L as tagExists, t as topologicalSort, aQ as updateLernaVersion, w as writeChangelogToFile, aO as writeVersion } from './shared/relizy.wrrRuBuo.mjs';
|
|
2
2
|
import '@maz-ui/node';
|
|
3
3
|
import 'node:child_process';
|
|
4
4
|
import 'node:process';
|
|
@@ -9,6 +9,7 @@ import 'defu';
|
|
|
9
9
|
import 'node:fs';
|
|
10
10
|
import 'node:path';
|
|
11
11
|
import '@inquirer/prompts';
|
|
12
|
+
import 'micromatch';
|
|
12
13
|
import '@maz-ui/utils/helpers/getErrorMessage';
|
|
13
14
|
import 'fast-glob';
|
|
14
15
|
import 'semver';
|
|
@@ -8,6 +8,7 @@ import { defu } from 'defu';
|
|
|
8
8
|
import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
9
9
|
import path, { join, relative, sep } from 'node:path';
|
|
10
10
|
import { select, confirm, input } from '@inquirer/prompts';
|
|
11
|
+
import micromatch from 'micromatch';
|
|
11
12
|
import { getErrorMessage } from '@maz-ui/utils/helpers/getErrorMessage';
|
|
12
13
|
import fastGlob from 'fast-glob';
|
|
13
14
|
import * as semver from 'semver';
|
|
@@ -1803,7 +1804,7 @@ async function getPackagesOrBumpedPackages({
|
|
|
1803
1804
|
}
|
|
1804
1805
|
|
|
1805
1806
|
const DEFAULT_REGISTRY = "https://registry.npmjs.org/";
|
|
1806
|
-
|
|
1807
|
+
const sessionOtpByRegistry = /* @__PURE__ */ new Map();
|
|
1807
1808
|
function getNpmRegistry(cwd = process.cwd()) {
|
|
1808
1809
|
try {
|
|
1809
1810
|
const output = execSync("npm config get registry", {
|
|
@@ -1906,21 +1907,74 @@ async function getPackagesToPublishInIndependentMode(sortedPackages, config) {
|
|
|
1906
1907
|
function isYarnBerry() {
|
|
1907
1908
|
return existsSync(path.join(process.cwd(), ".yarnrc.yml"));
|
|
1908
1909
|
}
|
|
1910
|
+
function buildLegacyRegistryTarget(config) {
|
|
1911
|
+
return {
|
|
1912
|
+
name: "default",
|
|
1913
|
+
registry: config.publish.registry ?? "",
|
|
1914
|
+
token: config.publish.token || config.tokens.registry,
|
|
1915
|
+
tag: config.publish.tag,
|
|
1916
|
+
access: config.publish.access,
|
|
1917
|
+
otp: config.publish.otp
|
|
1918
|
+
};
|
|
1919
|
+
}
|
|
1920
|
+
function normalizeRegistryKey(registry) {
|
|
1921
|
+
return registry.endsWith("/") ? registry.slice(0, -1) : registry;
|
|
1922
|
+
}
|
|
1923
|
+
function dedupRegistryTargets(targets) {
|
|
1924
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1925
|
+
const result = [];
|
|
1926
|
+
for (const target of targets) {
|
|
1927
|
+
const key = normalizeRegistryKey(target.registry || "");
|
|
1928
|
+
if (seen.has(key)) {
|
|
1929
|
+
logger.debug(`Skipping duplicate registry target "${target.name ?? target.registry}"`);
|
|
1930
|
+
continue;
|
|
1931
|
+
}
|
|
1932
|
+
seen.add(key);
|
|
1933
|
+
result.push(target);
|
|
1934
|
+
}
|
|
1935
|
+
return result;
|
|
1936
|
+
}
|
|
1937
|
+
function resolveAllConfiguredRegistryTargets(config) {
|
|
1938
|
+
const legacyTarget = buildLegacyRegistryTarget(config);
|
|
1939
|
+
const explicitTargets = config.publish.registries ?? [];
|
|
1940
|
+
const skipEmptyDefault = !config.publish.registry && explicitTargets.length > 0;
|
|
1941
|
+
return dedupRegistryTargets([
|
|
1942
|
+
...skipEmptyDefault ? [] : [legacyTarget],
|
|
1943
|
+
...explicitTargets
|
|
1944
|
+
]);
|
|
1945
|
+
}
|
|
1946
|
+
function resolveRegistryTargetsForPackage(pkg, config) {
|
|
1947
|
+
const legacyTarget = buildLegacyRegistryTarget(config);
|
|
1948
|
+
const explicitTargets = config.publish.registries ?? [];
|
|
1949
|
+
const applicableTargets = explicitTargets.filter(
|
|
1950
|
+
(target) => !target.packageFilter?.length || micromatch.isMatch(pkg.name, target.packageFilter)
|
|
1951
|
+
);
|
|
1952
|
+
const skipForExclusive = applicableTargets.some((target) => target.exclusive);
|
|
1953
|
+
const skipEmptyDefault = !config.publish.registry && applicableTargets.length > 0;
|
|
1954
|
+
return dedupRegistryTargets([
|
|
1955
|
+
...skipForExclusive || skipEmptyDefault ? [] : [legacyTarget],
|
|
1956
|
+
...applicableTargets
|
|
1957
|
+
]);
|
|
1958
|
+
}
|
|
1959
|
+
function resolveRegistryTargetsForPackages(packages, config) {
|
|
1960
|
+
const allTargets = packages.flatMap((pkg) => resolveRegistryTargetsForPackage(pkg, config));
|
|
1961
|
+
return dedupRegistryTargets(allTargets);
|
|
1962
|
+
}
|
|
1909
1963
|
function getCommandArgs({
|
|
1910
1964
|
packageManager,
|
|
1911
1965
|
tag,
|
|
1912
|
-
|
|
1966
|
+
registryTarget,
|
|
1913
1967
|
otp,
|
|
1914
1968
|
type,
|
|
1915
1969
|
dryRun
|
|
1916
1970
|
}) {
|
|
1917
1971
|
const args = type === "publish" ? ["publish", "--tag", tag] : ["whoami"];
|
|
1918
|
-
const registry =
|
|
1972
|
+
const registry = registryTarget.registry;
|
|
1919
1973
|
if (registry) {
|
|
1920
1974
|
args.push("--registry", registry);
|
|
1921
1975
|
}
|
|
1922
1976
|
const isPnpmOrNpm = packageManager === "pnpm" || packageManager === "npm";
|
|
1923
|
-
const publishToken =
|
|
1977
|
+
const publishToken = registryTarget.token;
|
|
1924
1978
|
if (publishToken) {
|
|
1925
1979
|
if (!registry) {
|
|
1926
1980
|
logger.warn("Publish token provided but no registry specified");
|
|
@@ -1932,14 +1986,14 @@ function getCommandArgs({
|
|
|
1932
1986
|
args.push(authTokenKey);
|
|
1933
1987
|
}
|
|
1934
1988
|
}
|
|
1935
|
-
const finalOtp = otp ??
|
|
1989
|
+
const finalOtp = otp ?? sessionOtpByRegistry.get(normalizeRegistryKey(registry)) ?? registryTarget.otp;
|
|
1936
1990
|
if (finalOtp) {
|
|
1937
1991
|
args.push("--otp", finalOtp);
|
|
1938
1992
|
}
|
|
1939
1993
|
if (type === "auth") {
|
|
1940
1994
|
return args;
|
|
1941
1995
|
}
|
|
1942
|
-
const access =
|
|
1996
|
+
const access = registryTarget.access;
|
|
1943
1997
|
if (access) {
|
|
1944
1998
|
args.push("--access", access);
|
|
1945
1999
|
}
|
|
@@ -2011,9 +2065,10 @@ async function executePublishCommand({
|
|
|
2011
2065
|
config,
|
|
2012
2066
|
tag,
|
|
2013
2067
|
dryRun,
|
|
2014
|
-
packageManager
|
|
2068
|
+
packageManager,
|
|
2069
|
+
registryLabel
|
|
2015
2070
|
}) {
|
|
2016
|
-
logger.info(`${dryRun ? "[dry-run] " : ""}Publishing ${packageNameAndVersion} with tag "${tag}"`);
|
|
2071
|
+
logger.info(`${dryRun ? "[dry-run] " : ""}Publishing ${packageNameAndVersion} with tag "${tag}"${registryLabel}`);
|
|
2017
2072
|
const dryRunPublish = dryRun && packageManager !== "npm" && packageManager !== "pnpm";
|
|
2018
2073
|
if (dryRunPublish) {
|
|
2019
2074
|
logger.info(`${dryRun ? "[dry-run] " : ""}Skipping actual publish for ${packageNameAndVersion}`);
|
|
@@ -2031,12 +2086,13 @@ async function executePublishCommand({
|
|
|
2031
2086
|
function getAuthCommand({
|
|
2032
2087
|
packageManager,
|
|
2033
2088
|
config,
|
|
2034
|
-
otp
|
|
2089
|
+
otp,
|
|
2090
|
+
registryTarget
|
|
2035
2091
|
}) {
|
|
2036
2092
|
const args = getCommandArgs({
|
|
2037
2093
|
packageManager,
|
|
2038
2094
|
tag: void 0,
|
|
2039
|
-
config,
|
|
2095
|
+
registryTarget: registryTarget ?? buildLegacyRegistryTarget(config),
|
|
2040
2096
|
otp,
|
|
2041
2097
|
type: "auth"
|
|
2042
2098
|
});
|
|
@@ -2045,14 +2101,14 @@ function getAuthCommand({
|
|
|
2045
2101
|
function getPublishCommand({
|
|
2046
2102
|
packageManager,
|
|
2047
2103
|
tag,
|
|
2048
|
-
|
|
2104
|
+
registryTarget,
|
|
2049
2105
|
otp,
|
|
2050
2106
|
dryRun
|
|
2051
2107
|
}) {
|
|
2052
2108
|
const args = getCommandArgs({
|
|
2053
2109
|
packageManager,
|
|
2054
2110
|
tag,
|
|
2055
|
-
|
|
2111
|
+
registryTarget,
|
|
2056
2112
|
otp,
|
|
2057
2113
|
dryRun,
|
|
2058
2114
|
type: "publish"
|
|
@@ -2060,14 +2116,64 @@ function getPublishCommand({
|
|
|
2060
2116
|
const baseCommand = packageManager === "yarn" && isYarnBerry() ? "yarn npm" : packageManager;
|
|
2061
2117
|
return `${baseCommand} ${args.join(" ")}`;
|
|
2062
2118
|
}
|
|
2119
|
+
async function publishToRegistryTarget({
|
|
2120
|
+
pkg,
|
|
2121
|
+
config,
|
|
2122
|
+
packageManager,
|
|
2123
|
+
dryRun,
|
|
2124
|
+
registryTarget,
|
|
2125
|
+
packageNameAndVersion,
|
|
2126
|
+
registryLabel
|
|
2127
|
+
}) {
|
|
2128
|
+
const tag = determinePublishTag(pkg.newVersion || pkg.version, registryTarget.tag);
|
|
2129
|
+
let dynamicOtp;
|
|
2130
|
+
const maxAttempts = 2;
|
|
2131
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
2132
|
+
try {
|
|
2133
|
+
const command = getPublishCommand({
|
|
2134
|
+
packageManager,
|
|
2135
|
+
tag,
|
|
2136
|
+
registryTarget,
|
|
2137
|
+
otp: dynamicOtp,
|
|
2138
|
+
dryRun
|
|
2139
|
+
});
|
|
2140
|
+
process.chdir(pkg.path);
|
|
2141
|
+
await executePublishCommand({
|
|
2142
|
+
command,
|
|
2143
|
+
packageNameAndVersion,
|
|
2144
|
+
packageManager,
|
|
2145
|
+
pkg,
|
|
2146
|
+
config,
|
|
2147
|
+
dryRun,
|
|
2148
|
+
tag,
|
|
2149
|
+
registryLabel
|
|
2150
|
+
});
|
|
2151
|
+
const registryKey = normalizeRegistryKey(registryTarget.registry);
|
|
2152
|
+
if (dynamicOtp && !sessionOtpByRegistry.has(registryKey)) {
|
|
2153
|
+
sessionOtpByRegistry.set(registryKey, dynamicOtp);
|
|
2154
|
+
logger.debug("OTP stored for session");
|
|
2155
|
+
}
|
|
2156
|
+
return;
|
|
2157
|
+
} catch (error) {
|
|
2158
|
+
if (isOtpError(error) && attempt < maxAttempts - 1) {
|
|
2159
|
+
dynamicOtp = await handleOtpError();
|
|
2160
|
+
} else {
|
|
2161
|
+
logger.error(`Failed to publish ${packageNameAndVersion}:`, error);
|
|
2162
|
+
throw error;
|
|
2163
|
+
}
|
|
2164
|
+
} finally {
|
|
2165
|
+
process.chdir(config.cwd);
|
|
2166
|
+
}
|
|
2167
|
+
}
|
|
2168
|
+
}
|
|
2063
2169
|
async function publishPackage({
|
|
2064
2170
|
pkg,
|
|
2065
2171
|
config,
|
|
2066
2172
|
packageManager,
|
|
2067
2173
|
dryRun
|
|
2068
2174
|
}) {
|
|
2069
|
-
const tag = determinePublishTag(pkg.newVersion || pkg.version, config.publish.tag);
|
|
2070
2175
|
const packageNameAndVersion = getIndependentTag({ name: pkg.name, version: pkg.newVersion || pkg.version });
|
|
2176
|
+
const registryTargets = resolveRegistryTargetsForPackage(pkg, config);
|
|
2071
2177
|
logger.debug(`Building publish command for ${pkg.name}`);
|
|
2072
2178
|
const needsTempVersionWrite = dryRun && (packageManager === "npm" || packageManager === "pnpm") && !!pkg.newVersion && pkg.newVersion !== pkg.version;
|
|
2073
2179
|
let originalVersion;
|
|
@@ -2079,42 +2185,18 @@ async function publishPackage({
|
|
|
2079
2185
|
writeVersion(pkg.path, pkg.newVersion, false);
|
|
2080
2186
|
}
|
|
2081
2187
|
try {
|
|
2082
|
-
|
|
2083
|
-
const
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
await executePublishCommand({
|
|
2095
|
-
command,
|
|
2096
|
-
packageNameAndVersion,
|
|
2097
|
-
packageManager,
|
|
2098
|
-
pkg,
|
|
2099
|
-
config,
|
|
2100
|
-
dryRun,
|
|
2101
|
-
tag
|
|
2102
|
-
});
|
|
2103
|
-
if (dynamicOtp && !sessionOtp) {
|
|
2104
|
-
sessionOtp = dynamicOtp;
|
|
2105
|
-
logger.debug("OTP stored for session");
|
|
2106
|
-
}
|
|
2107
|
-
return;
|
|
2108
|
-
} catch (error) {
|
|
2109
|
-
if (isOtpError(error) && attempt < maxAttempts - 1) {
|
|
2110
|
-
dynamicOtp = await handleOtpError();
|
|
2111
|
-
} else {
|
|
2112
|
-
logger.error(`Failed to publish ${packageNameAndVersion}:`, error);
|
|
2113
|
-
throw error;
|
|
2114
|
-
}
|
|
2115
|
-
} finally {
|
|
2116
|
-
process.chdir(config.cwd);
|
|
2117
|
-
}
|
|
2188
|
+
const showRegistryLabel = registryTargets.length > 1;
|
|
2189
|
+
for (const registryTarget of registryTargets) {
|
|
2190
|
+
const registryLabel = showRegistryLabel ? ` [${registryTarget.name ?? registryTarget.registry ?? "default"}]` : "";
|
|
2191
|
+
await publishToRegistryTarget({
|
|
2192
|
+
pkg,
|
|
2193
|
+
config,
|
|
2194
|
+
packageManager,
|
|
2195
|
+
dryRun,
|
|
2196
|
+
registryTarget,
|
|
2197
|
+
packageNameAndVersion,
|
|
2198
|
+
registryLabel
|
|
2199
|
+
});
|
|
2118
2200
|
}
|
|
2119
2201
|
} finally {
|
|
2120
2202
|
if (needsTempVersionWrite && originalVersion) {
|
|
@@ -5586,21 +5668,16 @@ async function providerRelease(options = {}) {
|
|
|
5586
5668
|
}
|
|
5587
5669
|
}
|
|
5588
5670
|
|
|
5589
|
-
async function
|
|
5590
|
-
|
|
5591
|
-
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
-
logger.debug("Start checking auth config to package registry");
|
|
5595
|
-
const isPnpmOrNpm = config.publish.packageManager === "pnpm" || config.publish.packageManager === "npm";
|
|
5596
|
-
if (!isPnpmOrNpm) {
|
|
5597
|
-
logger.debug(`Skipping authentication to package registry because "${config.publish.packageManager}" is not supported`);
|
|
5598
|
-
return;
|
|
5599
|
-
}
|
|
5671
|
+
async function checkRegistryAuth({
|
|
5672
|
+
config,
|
|
5673
|
+
registryTarget,
|
|
5674
|
+
registryLabel
|
|
5675
|
+
}) {
|
|
5600
5676
|
const authCommand = getAuthCommand({
|
|
5601
5677
|
packageManager: config.publish.packageManager,
|
|
5602
5678
|
config,
|
|
5603
|
-
|
|
5679
|
+
registryTarget,
|
|
5680
|
+
otp: registryTarget.otp
|
|
5604
5681
|
});
|
|
5605
5682
|
const timeoutMs = config.publish.safetyCheckTimeout ?? 15e3;
|
|
5606
5683
|
const patienceDelay = Math.min(5e3, Math.floor(timeoutMs / 2));
|
|
@@ -5608,7 +5685,7 @@ async function publishSafetyCheck({ config }) {
|
|
|
5608
5685
|
logger.info(`The package registry is taking longer than expected to respond (will time out at ${Math.round(timeoutMs / 1e3)}s)...`);
|
|
5609
5686
|
}, patienceDelay);
|
|
5610
5687
|
try {
|
|
5611
|
-
logger.info(
|
|
5688
|
+
logger.info(`Authenticating to package registry${registryLabel}...`);
|
|
5612
5689
|
await execPromise(authCommand, {
|
|
5613
5690
|
cwd: config.cwd,
|
|
5614
5691
|
timeout: timeoutMs,
|
|
@@ -5618,19 +5695,37 @@ async function publishSafetyCheck({ config }) {
|
|
|
5618
5695
|
noError: true,
|
|
5619
5696
|
logLevel: config.logLevel
|
|
5620
5697
|
});
|
|
5621
|
-
logger.info(
|
|
5698
|
+
logger.info(`Successfully authenticated to package registry${registryLabel}`);
|
|
5622
5699
|
} catch (error) {
|
|
5623
5700
|
if (error?.killed) {
|
|
5624
5701
|
throw new Error(
|
|
5625
|
-
`Authentication to package registry timed out after ${timeoutMs}ms. The registry did not respond - check your network or registry access, increase publish.safetyCheckTimeout, or skip this check with --no-safety-check.`,
|
|
5702
|
+
`Authentication to package registry${registryLabel} timed out after ${timeoutMs}ms. The registry did not respond - check your network or registry access, increase publish.safetyCheckTimeout, or skip this check with --no-safety-check.`,
|
|
5626
5703
|
{ cause: error }
|
|
5627
5704
|
);
|
|
5628
5705
|
}
|
|
5629
|
-
throw new Error(
|
|
5706
|
+
throw new Error(`Failed to authenticate to package registry${registryLabel}`, { cause: error });
|
|
5630
5707
|
} finally {
|
|
5631
5708
|
clearTimeout(patienceTimer);
|
|
5632
5709
|
}
|
|
5633
5710
|
}
|
|
5711
|
+
async function publishSafetyCheck({ config, packages }) {
|
|
5712
|
+
if (!config.safetyCheck || !config.release.publish || !config.publish.safetyCheck) {
|
|
5713
|
+
logger.debug("Safety check disabled or publish disabled");
|
|
5714
|
+
return;
|
|
5715
|
+
}
|
|
5716
|
+
logger.debug("Start checking auth config to package registry");
|
|
5717
|
+
const isPnpmOrNpm = config.publish.packageManager === "pnpm" || config.publish.packageManager === "npm";
|
|
5718
|
+
if (!isPnpmOrNpm) {
|
|
5719
|
+
logger.debug(`Skipping authentication to package registry because "${config.publish.packageManager}" is not supported`);
|
|
5720
|
+
return;
|
|
5721
|
+
}
|
|
5722
|
+
const registryTargets = packages ? resolveRegistryTargetsForPackages(packages, config) : resolveAllConfiguredRegistryTargets(config);
|
|
5723
|
+
const showRegistryLabel = registryTargets.length > 1;
|
|
5724
|
+
for (const registryTarget of registryTargets) {
|
|
5725
|
+
const registryLabel = showRegistryLabel ? ` [${registryTarget.name ?? registryTarget.registry ?? "default"}]` : "";
|
|
5726
|
+
await checkRegistryAuth({ config, registryTarget, registryLabel });
|
|
5727
|
+
}
|
|
5728
|
+
}
|
|
5634
5729
|
async function publish(options = {}) {
|
|
5635
5730
|
const config = await loadRelizyConfig({
|
|
5636
5731
|
configFile: options.configName,
|
|
@@ -5640,6 +5735,7 @@ async function publish(options = {}) {
|
|
|
5640
5735
|
access: options.access,
|
|
5641
5736
|
otp: options.otp,
|
|
5642
5737
|
registry: options.registry,
|
|
5738
|
+
registries: options.registries,
|
|
5643
5739
|
tag: options.tag,
|
|
5644
5740
|
buildCmd: options.buildCmd,
|
|
5645
5741
|
token: options.token
|
|
@@ -5660,7 +5756,6 @@ async function publish(options = {}) {
|
|
|
5660
5756
|
}
|
|
5661
5757
|
try {
|
|
5662
5758
|
await executeHook("before:publish", config, dryRun);
|
|
5663
|
-
await publishSafetyCheck({ config });
|
|
5664
5759
|
const rootPackage = readPackageJson(config.cwd);
|
|
5665
5760
|
if (!rootPackage) {
|
|
5666
5761
|
throw new Error("Failed to read root package.json");
|
|
@@ -5699,6 +5794,7 @@ async function publish(options = {}) {
|
|
|
5699
5794
|
logger.fail("No packages need to be published");
|
|
5700
5795
|
return;
|
|
5701
5796
|
}
|
|
5797
|
+
await publishSafetyCheck({ config, packages: publishedPackages });
|
|
5702
5798
|
await executeBuildCmd({
|
|
5703
5799
|
config,
|
|
5704
5800
|
dryRun
|
|
@@ -5815,7 +5911,8 @@ async function handleTwitterPost({
|
|
|
5815
5911
|
changelog,
|
|
5816
5912
|
dryRun,
|
|
5817
5913
|
newVersion,
|
|
5818
|
-
tag
|
|
5914
|
+
tag,
|
|
5915
|
+
prerelease
|
|
5819
5916
|
}) {
|
|
5820
5917
|
const twitterConfig = config.social?.twitter;
|
|
5821
5918
|
if (!twitterConfig?.enabled) {
|
|
@@ -5834,7 +5931,8 @@ async function handleTwitterPost({
|
|
|
5834
5931
|
logger.debug("Credentials found \u2713");
|
|
5835
5932
|
logger.debug("Preparing tweet for release");
|
|
5836
5933
|
const onlyStable = twitterConfig.onlyStable;
|
|
5837
|
-
|
|
5934
|
+
const isPre = prerelease ?? isPrerelease(newVersion);
|
|
5935
|
+
if (onlyStable && isPre) {
|
|
5838
5936
|
logger.info(`Skipping Twitter post for prerelease version ${newVersion} (social.twitter.onlyStable is enabled)`);
|
|
5839
5937
|
return { success: true, response: void 0 };
|
|
5840
5938
|
}
|
|
@@ -5882,7 +5980,8 @@ async function handleSlackPost({
|
|
|
5882
5980
|
newVersion,
|
|
5883
5981
|
tag,
|
|
5884
5982
|
commits,
|
|
5885
|
-
bumpedPackages
|
|
5983
|
+
bumpedPackages,
|
|
5984
|
+
prerelease
|
|
5886
5985
|
}) {
|
|
5887
5986
|
const slackConfig = config.social?.slack;
|
|
5888
5987
|
if (!slackConfig?.enabled) {
|
|
@@ -5910,7 +6009,8 @@ async function handleSlackPost({
|
|
|
5910
6009
|
logger.debug(`Slack: ${slackMode}`);
|
|
5911
6010
|
logger.debug(`Preparing Slack message for release: ${tag} (${newVersion})`);
|
|
5912
6011
|
const onlyStable = slackConfig.onlyStable ?? true;
|
|
5913
|
-
|
|
6012
|
+
const isPre = prerelease ?? isPrerelease(newVersion);
|
|
6013
|
+
if (onlyStable && isPre) {
|
|
5914
6014
|
logger.info(`Skipping Slack post for prerelease version ${newVersion} (social.slack.onlyStable is enabled)`);
|
|
5915
6015
|
return { success: true, response: void 0 };
|
|
5916
6016
|
}
|
|
@@ -5987,43 +6087,126 @@ async function social(options = {}) {
|
|
|
5987
6087
|
if (!rootPackageRead) {
|
|
5988
6088
|
throw new Error("Failed to read root package.json");
|
|
5989
6089
|
}
|
|
5990
|
-
const
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
pkg
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6012
|
-
|
|
6013
|
-
|
|
6014
|
-
|
|
6015
|
-
|
|
6016
|
-
|
|
6017
|
-
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6090
|
+
const isIndependent = config.monorepo?.versionMode === "independent";
|
|
6091
|
+
let minifiedBody;
|
|
6092
|
+
let richBody;
|
|
6093
|
+
let newVersion;
|
|
6094
|
+
let tag;
|
|
6095
|
+
let changelogCommits;
|
|
6096
|
+
let prerelease;
|
|
6097
|
+
if (isIndependent) {
|
|
6098
|
+
const packages = filterOutPrivatePackages(await getPackagesOrBumpedPackages({
|
|
6099
|
+
config,
|
|
6100
|
+
bumpResult: options.bumpResult,
|
|
6101
|
+
suffix: options.suffix,
|
|
6102
|
+
force: options.force ?? false,
|
|
6103
|
+
dryRun
|
|
6104
|
+
}));
|
|
6105
|
+
const minifiedSections = [];
|
|
6106
|
+
const richSections = [];
|
|
6107
|
+
const commitsByHash = /* @__PURE__ */ new Map();
|
|
6108
|
+
for (const pkg of packages) {
|
|
6109
|
+
const pkgVersion = isBumpedPackage(pkg) && pkg.newVersion || pkg.version;
|
|
6110
|
+
const from = config.from || pkg.fromTag;
|
|
6111
|
+
if (!from) {
|
|
6112
|
+
logger.warn(`No from tag found for ${pkg.name}, skipping its changelog section`);
|
|
6113
|
+
continue;
|
|
6114
|
+
}
|
|
6115
|
+
const minSection = await generateChangelog({
|
|
6116
|
+
pkg: { ...pkg, fromTag: from },
|
|
6117
|
+
config,
|
|
6118
|
+
dryRun,
|
|
6119
|
+
newVersion: pkgVersion,
|
|
6120
|
+
include: { title: true, compareLink: false, body: true, contributors: false },
|
|
6121
|
+
minify: true
|
|
6122
|
+
});
|
|
6123
|
+
const richSection = await generateChangelog({
|
|
6124
|
+
pkg: { ...pkg, fromTag: from },
|
|
6125
|
+
config,
|
|
6126
|
+
dryRun,
|
|
6127
|
+
newVersion: pkgVersion,
|
|
6128
|
+
include: { title: true, compareLink: false, body: true, contributors: false },
|
|
6129
|
+
minify: false
|
|
6130
|
+
});
|
|
6131
|
+
if (minSection.trim()) {
|
|
6132
|
+
minifiedSections.push(minSection);
|
|
6133
|
+
}
|
|
6134
|
+
if (richSection.trim()) {
|
|
6135
|
+
richSections.push(richSection);
|
|
6136
|
+
}
|
|
6137
|
+
const pkgCommits = await getPackageCommits({
|
|
6138
|
+
pkg,
|
|
6139
|
+
from,
|
|
6140
|
+
to: "HEAD",
|
|
6141
|
+
config,
|
|
6142
|
+
changelog: true,
|
|
6143
|
+
dryRun
|
|
6144
|
+
});
|
|
6145
|
+
for (const commit of pkgCommits) {
|
|
6146
|
+
commitsByHash.set(commit.shortHash || commit.message, commit);
|
|
6147
|
+
}
|
|
6148
|
+
}
|
|
6149
|
+
minifiedBody = minifiedSections.join("\n\n");
|
|
6150
|
+
richBody = richSections.join("\n\n");
|
|
6151
|
+
changelogCommits = [...commitsByHash.values()];
|
|
6152
|
+
prerelease = packages.length > 0 && packages.every((pkg) => isPrerelease(isBumpedPackage(pkg) && pkg.newVersion || pkg.version));
|
|
6153
|
+
if (packages.length === 1) {
|
|
6154
|
+
const only = packages[0];
|
|
6155
|
+
newVersion = isBumpedPackage(only) && only.newVersion || only.version;
|
|
6156
|
+
tag = getIndependentTag({ version: newVersion, name: only.name });
|
|
6157
|
+
} else {
|
|
6158
|
+
newVersion = `${packages.length} packages`;
|
|
6159
|
+
tag = "";
|
|
6160
|
+
}
|
|
6161
|
+
} else {
|
|
6162
|
+
const resolvedNewVersion = options.bumpResult?.newVersion || rootPackageRead.version;
|
|
6163
|
+
const { from, to } = await resolveTags({
|
|
6164
|
+
config,
|
|
6165
|
+
step: "social",
|
|
6166
|
+
newVersion: resolvedNewVersion,
|
|
6167
|
+
pkg: rootPackageRead
|
|
6168
|
+
});
|
|
6169
|
+
const fromTag = options.bumpResult?.fromTag || from;
|
|
6170
|
+
const rootPackage = options.bumpResult?.rootPackage || await getRootPackage({
|
|
6171
|
+
config,
|
|
6172
|
+
force: false,
|
|
6173
|
+
suffix: void 0,
|
|
6174
|
+
changelog: true,
|
|
6175
|
+
from: fromTag,
|
|
6176
|
+
to,
|
|
6177
|
+
dryRun
|
|
6178
|
+
});
|
|
6179
|
+
minifiedBody = await generateChangelog({
|
|
6180
|
+
pkg: { ...rootPackage, fromTag },
|
|
6181
|
+
config,
|
|
6182
|
+
dryRun,
|
|
6183
|
+
newVersion: resolvedNewVersion,
|
|
6184
|
+
include: { title: false, compareLink: false, body: true, contributors: false },
|
|
6185
|
+
minify: true
|
|
6186
|
+
});
|
|
6187
|
+
richBody = await generateChangelog({
|
|
6188
|
+
pkg: { ...rootPackage, fromTag },
|
|
6189
|
+
config,
|
|
6190
|
+
dryRun,
|
|
6191
|
+
newVersion: resolvedNewVersion,
|
|
6192
|
+
include: { title: false, compareLink: false, body: true, contributors: false },
|
|
6193
|
+
minify: false
|
|
6194
|
+
});
|
|
6195
|
+
newVersion = resolvedNewVersion;
|
|
6196
|
+
tag = to;
|
|
6197
|
+
changelogCommits = await getPackageCommits({
|
|
6198
|
+
pkg: rootPackage,
|
|
6199
|
+
from: fromTag,
|
|
6200
|
+
to: "HEAD",
|
|
6201
|
+
config,
|
|
6202
|
+
changelog: true,
|
|
6203
|
+
dryRun
|
|
6204
|
+
});
|
|
6205
|
+
prerelease = isPrerelease(newVersion);
|
|
6206
|
+
}
|
|
6023
6207
|
const hasContent = !!minifiedBody.trim();
|
|
6024
|
-
const twitterReleaseUrl = getReleaseUrl(config,
|
|
6208
|
+
const twitterReleaseUrl = getReleaseUrl(config, tag);
|
|
6025
6209
|
const twitterChangelogUrl = config.social?.changelogUrl;
|
|
6026
|
-
const prerelease = isPrerelease(newVersion);
|
|
6027
6210
|
const twitterWillPost = !!config.social?.twitter?.enabled && !(config.social.twitter.onlyStable && prerelease);
|
|
6028
6211
|
const slackWillPost = !!config.social?.slack?.enabled && !((config.social.slack.onlyStable ?? true) && prerelease);
|
|
6029
6212
|
let twitterChangelog = minifiedBody;
|
|
@@ -6067,24 +6250,18 @@ ${twitterChangelog}`);
|
|
|
6067
6250
|
changelog: twitterChangelog,
|
|
6068
6251
|
dryRun,
|
|
6069
6252
|
newVersion,
|
|
6070
|
-
tag
|
|
6071
|
-
|
|
6072
|
-
const changelogCommits = await getPackageCommits({
|
|
6073
|
-
pkg: rootPackage,
|
|
6074
|
-
from: fromTag,
|
|
6075
|
-
to: "HEAD",
|
|
6076
|
-
config,
|
|
6077
|
-
changelog: true,
|
|
6078
|
-
dryRun
|
|
6253
|
+
tag,
|
|
6254
|
+
prerelease
|
|
6079
6255
|
});
|
|
6080
6256
|
const slackResponse = await handleSlackPost({
|
|
6081
6257
|
config,
|
|
6082
6258
|
changelog: slackChangelog,
|
|
6083
6259
|
dryRun,
|
|
6084
6260
|
newVersion,
|
|
6085
|
-
tag
|
|
6261
|
+
tag,
|
|
6086
6262
|
commits: changelogCommits,
|
|
6087
|
-
bumpedPackages: options.bumpResult?.bumpedPackages
|
|
6263
|
+
bumpedPackages: options.bumpResult?.bumpedPackages,
|
|
6264
|
+
prerelease
|
|
6088
6265
|
});
|
|
6089
6266
|
const results = [];
|
|
6090
6267
|
if (config.social?.twitter?.enabled) {
|
|
@@ -6145,6 +6322,7 @@ function getReleaseConfig(options = {}) {
|
|
|
6145
6322
|
access: options.access,
|
|
6146
6323
|
otp: options.otp,
|
|
6147
6324
|
registry: options.registry,
|
|
6325
|
+
registries: options.registries,
|
|
6148
6326
|
tag: options.tag,
|
|
6149
6327
|
buildCmd: options.buildCmd,
|
|
6150
6328
|
token: options.publishToken
|
|
@@ -6454,4 +6632,4 @@ Git provider: ${provider}`);
|
|
|
6454
6632
|
}
|
|
6455
6633
|
}
|
|
6456
6634
|
|
|
6457
|
-
export { getPackagesToPublishInIndependentMode as $, getModifiedReleaseFilePatterns as A, createCommitAndTags as B, pushCommitAndTags as C, rollbackModifiedFiles as D, getFirstCommit as E, getCurrentGitBranch as F, getCurrentGitRef as G, getShortCommitSha as H, isAncestor as I, getCommitSubject as J, findReachableCommitBySubject as K, tagExists as L, retagAnnotatedLocal as M, pushTagForce as N, github as O, createGitlabRelease as P, gitlab as Q, buildCompareLink as R, buildChangelogBody as S, collectContributorNames as T, buildContributors as U, generateMarkDown as V, parseChangelogMarkdown as W, getNpmRegistry as X, detectPackageManager as Y, determinePublishTag as Z, getPackagesToPublishInSelectiveMode as _, buildCommentBody as a,
|
|
6635
|
+
export { getPackagesToPublishInIndependentMode as $, getModifiedReleaseFilePatterns as A, createCommitAndTags as B, pushCommitAndTags as C, rollbackModifiedFiles as D, getFirstCommit as E, getCurrentGitBranch as F, getCurrentGitRef as G, getShortCommitSha as H, isAncestor as I, getCommitSubject as J, findReachableCommitBySubject as K, tagExists as L, retagAnnotatedLocal as M, pushTagForce as N, github as O, createGitlabRelease as P, gitlab as Q, buildCompareLink as R, buildChangelogBody as S, collectContributorNames as T, buildContributors as U, generateMarkDown as V, parseChangelogMarkdown as W, getNpmRegistry as X, detectPackageManager as Y, determinePublishTag as Z, getPackagesToPublishInSelectiveMode as _, buildCommentBody as a, shouldFilterPrereleaseTags as a$, resolveAllConfiguredRegistryTargets as a0, resolveRegistryTargetsForPackage as a1, resolveRegistryTargetsForPackages as a2, getAuthCommand as a3, publishPackage as a4, collectPackageBumps as a5, findGitHubPR as a6, findGitLabMR as a7, detectPullRequest as a8, PR_COMMENT_MARKER as a9, formatTweetMessage as aA, postReleaseToTwitter as aB, executeHook as aC, isInCI as aD, getCIName as aE, executeFormatCmd as aF, executeBuildCmd as aG, isBumpedPackage as aH, filterOutPrivatePackages as aI, getPackagesOrBumpedPackages as aJ, isGraduatingToStableBetweenVersion as aK, capReleaseTypeForZeroMajor as aL, determineSemverChange as aM, determineReleaseType as aN, writeVersion as aO, getPackageNewVersion as aP, updateLernaVersion as aQ, extractVersionFromPackageTag as aR, isPrerelease as aS, isStableReleaseType as aT, isPrereleaseReleaseType as aU, isGraduating as aV, getPreid as aW, isChangedPreid as aX, getBumpedPackageIndependently as aY, confirmBump as aZ, getBumpedIndependentPackages as a_, postPrComment as aa, redactSecrets as ab, readPackageJson as ac, getRootPackage as ad, readPackages as ae, getPackages as af, getPackageCommits as ag, hasLernaJson as ah, resetRewrittenTagCache as ai, reconcileFromTag as aj, getSlackToken as ak, getSlackWebhookUrl as al, formatChangelogForSlack as am, formatPackagesForSlack as an, formatSlackMessage as ao, postReleaseToSlack as ap, extractChangelogSummary as aq, getReleaseUrl as ar, getIndependentTag as as, getLastStableTag as at, getLastTag as au, getLastRepoTag as av, getLastPackageTag as aw, NEW_PACKAGE_MARKER as ax, resolveTags as ay, getTwitterCredentials as az, bump as b, extractVersionFromTag as b0, getCanaryVersion as b1, isTagVersionCompatibleWithCurrent as b2, changelog as c, providerReleaseSafetyCheck as d, providerRelease as e, publishSafetyCheck as f, publish as g, social as h, generateChangelog as i, getDefaultConfig as j, defineConfig as k, loadRelizyConfig as l, mergeTypes as m, getPackageDependencies as n, getDependentsOf as o, prComment as p, expandPackagesToBumpWithDependents as q, release as r, socialSafetyCheck as s, topologicalSort as t, getGitStatus as u, checkGitStatusIfDirty as v, writeChangelogToFile as w, fetchGitTags as x, detectGitProvider as y, parseGitRemoteUrl as z };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "relizy",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.5.0-beta.1",
|
|
5
5
|
"description": "Changelogen adapter for monorepo management with unified and independent versioning",
|
|
6
6
|
"author": "Louis Mazel <me@loicmazuel.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@inquirer/prompts": "^8.
|
|
74
|
+
"@inquirer/prompts": "^8.7.2",
|
|
75
75
|
"@maz-ui/node": "5.0.0-beta.26",
|
|
76
76
|
"@maz-ui/utils": "5.0.0-beta.25",
|
|
77
77
|
"c12": "^3.3.3",
|
|
@@ -80,31 +80,33 @@
|
|
|
80
80
|
"convert-gitmoji": "^0.1.5",
|
|
81
81
|
"defu": "6.1.7",
|
|
82
82
|
"fast-glob": "^3.3.2",
|
|
83
|
+
"micromatch": "^4.0.8",
|
|
83
84
|
"node-fetch-native": "^1.6.7",
|
|
84
|
-
"semver": "^7.8.
|
|
85
|
+
"semver": "^7.8.5"
|
|
85
86
|
},
|
|
86
87
|
"devDependencies": {
|
|
87
|
-
"@commitlint/cli": "^21.
|
|
88
|
-
"@commitlint/config-conventional": "21.
|
|
89
|
-
"@commitlint/cz-commitlint": "^21.
|
|
90
|
-
"@commitlint/types": "^21.0
|
|
88
|
+
"@commitlint/cli": "^21.2.2",
|
|
89
|
+
"@commitlint/config-conventional": "21.2.2",
|
|
90
|
+
"@commitlint/cz-commitlint": "^21.2.2",
|
|
91
|
+
"@commitlint/types": "^21.2.0",
|
|
91
92
|
"@maz-ui/eslint-config": "5.0.0-beta.25",
|
|
92
93
|
"@slack/web-api": "7.16.0",
|
|
94
|
+
"@types/micromatch": "^4.0.10",
|
|
93
95
|
"@types/node": "^25.9.2",
|
|
94
|
-
"@types/semver": "^7.
|
|
95
|
-
"@vitest/coverage-v8": "^
|
|
96
|
+
"@types/semver": "^7.8.0",
|
|
97
|
+
"@vitest/coverage-v8": "^5.0.0",
|
|
96
98
|
"@yoloship/claude-sdk": "0.2.0-beta.6",
|
|
97
99
|
"cross-env": "10.1.0",
|
|
98
|
-
"eslint": "^10.
|
|
100
|
+
"eslint": "^10.10.0",
|
|
99
101
|
"husky": "9.1.7",
|
|
100
102
|
"jiti": "2.7.0",
|
|
101
|
-
"lint-staged": "^17.
|
|
102
|
-
"memfs": "^4.
|
|
103
|
-
"tsx": "^4.
|
|
104
|
-
"twitter-api-v2": "^1.29.
|
|
103
|
+
"lint-staged": "^17.5.1",
|
|
104
|
+
"memfs": "^4.78.0",
|
|
105
|
+
"tsx": "^4.23.13",
|
|
106
|
+
"twitter-api-v2": "^1.29.1",
|
|
105
107
|
"typescript": "^6.0.3",
|
|
106
108
|
"unbuild": "^3.6.1",
|
|
107
|
-
"vitest": "^
|
|
109
|
+
"vitest": "^5.0.0"
|
|
108
110
|
},
|
|
109
111
|
"lint-staged": {
|
|
110
112
|
"*.{js,jsx,ts,tsx,mjs,mts,cjs,md,yml,json}": [
|