relizy / loadRelizyConfig
Function: loadRelizyConfig()
loadRelizyConfig(
options?):Promise<ResolvedRelizyConfig>
Defined in: src/core/config.ts:248
Parameters
options?
baseConfig?
configFile?
string
overrides?
{ ai?: { extraGuidelines?: string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }; fallback?: "raw" | "fail"; language?: string; provider?: AIProviderName; providerRelease?: { enabled?: boolean; }; providers?: { ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }; social?: { slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }; systemPromptOverrides?: { providerRelease?: string; slack?: string; twitter?: string; }; }; bump?: { capZeroMajor?: boolean; clean?: boolean; dependencyTypes?: ("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]; preid?: string; type?: ReleaseType; yes?: boolean; }; changelog?: { formatCmd?: string; includeCommitBody?: boolean; rootChangelog?: boolean; }; commitlint?: { customRules?: {[key: string]: { } | undefined; }; defaultIgnores?: boolean; helpUrl?: string; ignores?: ({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]; packages?: (string | undefined)[]; rules?: {[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }; scopes?: (string | undefined)[]; title?: boolean; }; cwd?: string; detectRewrittenTags?: boolean; excludeAuthors?: (string | undefined)[]; from?: string; hideAuthorEmail?: boolean; hooks?: { before:bump?: string | { }; before:changelog?: string | { }; before:commit-and-tag?: string | { }; before:provider-release?: string | { }; before:publish?: string | { }; before:push?: string | { }; before:release?: string | { }; before:slack?: string | { }; before:social?: string | { }; before:twitter?: string | { }; error:bump?: string | { }; error:changelog?: string | { }; error:commit-and-tag?: string | { }; error:provider-release?: string | { }; error:publish?: string | { }; error:push?: string | { }; error:release?: string | { }; error:slack?: string | { }; error:social?: string | { }; error:twitter?: string | { }; generate:changelog?: { }; success:bump?: string | { }; success:changelog?: string | { }; success:commit-and-tag?: string | { }; success:provider-release?: string | { }; success:publish?: string | { }; success:push?: string | { }; success:release?: string | { }; success:slack?: string | { }; success:social?: string | { }; success:twitter?: string | { }; }; logLevel?: "error" | "silent" | "warning" | "normal" | "default" | "debug" | "trace" | "verbose"; monorepo?: { ignored?: (string | undefined)[]; ignorePackageNames?: (string | undefined)[]; includePrivates?: boolean; packages?: (string | undefined)[]; versionMode?: VersionMode; }; newVersion?: string; noAuthors?: boolean; onRewrittenTag?: OnRewrittenTag; prComment?: { mode?: PrCommentMode; }; projectName?: string; publish?: { access?: "public" | "restricted"; args?: (string | undefined)[]; buildCmd?: string; otp?: string; packageManager?: PackageManager; packages?: (string | undefined)[]; private?: boolean; registries?: ({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]; registry?: string; safetyCheck?: boolean; safetyCheckTimeout?: number; skipExistingVersions?: boolean; tag?: string; token?: string; }; release?: { changelog?: boolean; clean?: boolean; commit?: boolean; gitTag?: boolean; noVerify?: boolean; prComment?: boolean; providerRelease?: boolean; publish?: boolean; push?: boolean; social?: boolean; }; repo?: { domain?: string; provider?: GitProvider; repo?: string; token?: string; }; safetyCheck?: boolean; scopeMap?: {[key: string]: string | undefined; }; signTags?: boolean; social?: { changelogUrl?: string; slack?: { changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }; twitter?: { credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }; }; templates?: { changelogTitle?: string; commitBody?: string; commitMessage?: string; emptyChangelogContent?: string; slackMessage?: string; tagBody?: string; tagMessage?: string; twitterMessage?: string; }; to?: string; tokens?: { ai?: { claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }; github?: string; gitlab?: string; registry?: string; slack?: string; twitter?: { accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }; }; types?: {[key: string]: false | { semver?: SemverBumpType; title?: string; } | undefined; }; }
overrides.ai?
{ extraGuidelines?: string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }; fallback?: "raw" | "fail"; language?: string; provider?: AIProviderName; providerRelease?: { enabled?: boolean; }; providers?: { ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }; social?: { slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }; systemPromptOverrides?: { providerRelease?: string; slack?: string; twitter?: string; }; }
AI-powered changelog and release notes configuration
overrides.ai.extraGuidelines?
string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }
Extra directives appended to the built-in system prompts. A string applies to every target; an object adds directives per target, appended after the global ones.
Examples
'Always use emojis in the changelog'{ global: 'Keep package names in English.', slack: 'Mention the owning team.' }overrides.ai.fallback?
"raw" | "fail"
Behavior when the provider call fails.
raw: fall back to the unmodified changelog body.fail: re-throw the error.
Default
'raw'overrides.ai.language?
string
Output language (ISO 639-1 code or plain English name).
Default
'en'overrides.ai.provider?
AI provider name
Default
'claude-code'overrides.ai.providerRelease?
{ enabled?: boolean; }
Enable AI rewriting for GitHub/GitLab release notes.
overrides.ai.providerRelease.enabled?
boolean
Enable AI for this target
Default
falseoverrides.ai.providers?
{ ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }
Provider-specific options, keyed by provider name.
overrides.ai.providers.ai-sdk?
{ model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }
overrides.ai.providers.ai-sdk.model?
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...
Language model: an instance from a provider package (e.g. openai('gpt-5-mini') from @ai-sdk/openai), or a model id of the Vercel AI Gateway (e.g. 'openai/gpt-5-mini').
See
https://ai-sdk.dev/providers/ai-sdk-providers
overrides.ai.providers.ai-sdk.reasoning?
... | ... | ... | ... | ... | ... | ... | ... | ...
Reasoning effort, for the models that support it. Not sent when unset: the default of the provider applies.
overrides.ai.providers.claude-code?
{ apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }
overrides.ai.providers.claude-code.apiKey?
... | ...
Anthropic API key. Fallback env: RELIZY_ANTHROPIC_API_KEY, ANTHROPIC_API_KEY.
overrides.ai.providers.claude-code.model?
... | ...
Model id or alias (e.g. haiku, sonnet, opus, or a versioned id).
Default
'haiku'overrides.ai.providers.claude-code.oauthToken?
... | ...
Claude Code OAuth token. Fallback env: RELIZY_CLAUDE_CODE_OAUTH_TOKEN, CLAUDE_CODE_OAUTH_TOKEN.
overrides.ai.social?
{ slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }
Enable AI rewriting for social media posts.
overrides.ai.social.slack?
{ enabled?: ... | ... | ...; }
Slack-specific AI activation
overrides.ai.social.slack.enabled?
... | ... | ...
Enable AI for this target
Default
falseoverrides.ai.social.twitter?
{ enabled?: ... | ... | ...; }
Twitter-specific AI activation
overrides.ai.social.twitter.enabled?
... | ... | ...
Enable AI for this target
Default
falseoverrides.ai.systemPromptOverrides?
{ providerRelease?: string; slack?: string; twitter?: string; }
Full replacement of the built-in system prompts. When set, the extraGuidelines and base prompts are ignored for that target.
overrides.ai.systemPromptOverrides.providerRelease?
string
overrides.ai.systemPromptOverrides.slack?
string
overrides.ai.systemPromptOverrides.twitter?
string
overrides.bump?
{ capZeroMajor?: boolean; clean?: boolean; dependencyTypes?: ("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]; preid?: string; type?: ReleaseType; yes?: boolean; }
Bump config
overrides.bump.capZeroMajor?
boolean
Cap commit-detected major bumps to minor while the current version is in the 0.x.y range (semver §4, initial development), so a breaking change does not graduate a 0.x package to 1.0.0 automatically.
Set to false to opt out: a breaking commit then bumps 0.x.y straight to 1.0.0. This only affects commit-based detection; explicit CLI release types (--major, --premajor, …) are never capped. Once the package reaches 1.x, this option is a no-op.
Default
trueoverrides.bump.clean?
boolean
Check if there are any changes to commit before bumping.
Default
trueoverrides.bump.dependencyTypes?
("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]
Include dependencies when bumping.
Default
['dependencies']overrides.bump.preid?
string
Prerelease identifier (e.g. 'beta', 'alpha')
overrides.bump.type?
ReleaseType
Release type (e.g. 'major', 'minor', 'patch', 'prerelease', 'prepatch', 'preminor', 'premajor')
Default
'release'overrides.bump.yes?
boolean
Skip confirmation prompt about bumping packages
Default
trueoverrides.changelog?
{ formatCmd?: string; includeCommitBody?: boolean; rootChangelog?: boolean; }
Changelog config
overrides.changelog.formatCmd?
string
Command to format the changelog (e.g. prettier --write CHANGELOG.md).
overrides.changelog.includeCommitBody?
boolean
Include commit body in the changelog.
Default
trueoverrides.changelog.rootChangelog?
boolean
Generate changelog at root level with all changes
Default
trueoverrides.commitlint?
{ customRules?: {[key: string]: { } | undefined; }; defaultIgnores?: boolean; helpUrl?: string; ignores?: ({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]; packages?: (string | undefined)[]; rules?: {[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }; scopes?: (string | undefined)[]; title?: boolean; }
Commit message linter (relizy commitlint) config
See
https://relizy.dev/commitlint/
overrides.commitlint.customRules?
{[key: string]: { } | undefined; }
Rules written as functions, keyed by name. Their level is set in rules and defaults to error.
overrides.commitlint.defaultIgnores?
boolean
Ignore merge commits, fixup!, squash! and amend! commits, and the release commits of relizy.
Default
trueoverrides.commitlint.helpUrl?
string
URL printed with the errors, e.g. the commit guidelines of the team.
overrides.commitlint.ignores?
({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]
Messages to ignore, in addition to the default ones: a regular expression tested against the header, or a function receiving the raw message.
overrides.commitlint.packages?
(string | undefined)[]
Glob patterns of directories to treat as workspace packages for the scopes, in addition to monorepo.packages, e.g. apps that are never released.
Example
['apps/*']overrides.commitlint.rules?
{[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }
Level and value of the built-in and custom rules.
Example
{ 'header-max-length': ['error', 200], 'scope-required': ['error', 'when-bumping'] }overrides.commitlint.rules.body-breaking-change?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
A breaking change is only declared with ! in the header or a BREAKING CHANGE: footer, as relizy bumps the major version wherever breaking change: appears.
Default
'error'overrides.commitlint.rules.body-changelog-lint?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The commit, rendered as in the changelogs, passes the lint of the changelogs.
Default
'error'overrides.commitlint.rules.body-leading-blank?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
A blank line separates the header from the body.
Default
'error'overrides.commitlint.rules.body-markdown?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The markdown of the body is valid: code blocks closed, links with a URL.
Default
'error'overrides.commitlint.rules.body-no-headings?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The body has no markdown headings, which would break the changelog.
Default
'error'overrides.commitlint.rules.header-format?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The header follows type(scope)!: subject.
Default
'error'overrides.commitlint.rules.header-max-length?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]
Maximum length of the header.
Default
['error', 500]overrides.commitlint.rules.no-breaking?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
Breaking changes are not allowed.
Default
'off'overrides.commitlint.rules.scope-enum?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The scope is a workspace package, a scopeMap key or one of commitlint.scopes.
Default
'error'overrides.commitlint.rules.scope-matches-files?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The scope designates a package touched by the commit.
Default
'warn'overrides.commitlint.rules.scope-required?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]
The scope is required ('always'), forbidden ('never'), or required on the commits bumping a version ('when-bumping').
Default
['off', 'always']overrides.commitlint.rules.subject-case?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The subject starts with a lowercase letter.
Default
'error'overrides.commitlint.rules.subject-full-stop?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]
The subject does not end with a period.
Default
'error'overrides.commitlint.rules.subject-meaningful?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]
The subject describes the change, with a minimum of words or characters.
Default
['error', { minWords: 2, minLength: 15 }]overrides.commitlint.rules.type-enum?
CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]
The type is one of the relizy types, or one of the extra types given as value.
Default
'error'overrides.commitlint.scopes?
(string | undefined)[]
Scopes allowed in addition to the workspace packages (short name, full name or folder) and the scopeMap keys. In standalone mode, scopes are free unless this list is set.
Example
['ci', 'deps', 'release']overrides.commitlint.title?
boolean
In the CI of a pull/merge request, also lint its title, which becomes the commit message of a squash merge. Overridden by --title and --no-title.
Default
falseoverrides.cwd?
string
Current working directory
Default
process.cwd()overrides.detectRewrittenTags?
boolean
Detect when the resolved from tag points to a commit that is no longer reachable from to (typically because the history was rebased after the tag was created). When enabled, relizy explains the situation and either prompts or auto-corrects, avoiding bloated changelogs and over-bumping.
Default
trueoverrides.excludeAuthors?
(string | undefined)[]
overrides.from?
string
Start tag
overrides.hideAuthorEmail?
boolean
overrides.hooks?
{ before:bump?: string | { }; before:changelog?: string | { }; before:commit-and-tag?: string | { }; before:provider-release?: string | { }; before:publish?: string | { }; before:push?: string | { }; before:release?: string | { }; before:slack?: string | { }; before:social?: string | { }; before:twitter?: string | { }; error:bump?: string | { }; error:changelog?: string | { }; error:commit-and-tag?: string | { }; error:provider-release?: string | { }; error:publish?: string | { }; error:push?: string | { }; error:release?: string | { }; error:slack?: string | { }; error:social?: string | { }; error:twitter?: string | { }; generate:changelog?: { }; success:bump?: string | { }; success:changelog?: string | { }; success:commit-and-tag?: string | { }; success:provider-release?: string | { }; success:publish?: string | { }; success:push?: string | { }; success:release?: string | { }; success:slack?: string | { }; success:social?: string | { }; success:twitter?: string | { }; }
Hooks config
overrides.hooks.before:bump?
string | { }
overrides.hooks.before:changelog?
string | { }
overrides.hooks.before:commit-and-tag?
string | { }
overrides.hooks.before:provider-release?
string | { }
overrides.hooks.before:publish?
string | { }
overrides.hooks.before:push?
string | { }
overrides.hooks.before:release?
string | { }
overrides.hooks.before:slack?
string | { }
overrides.hooks.before:social?
string | { }
overrides.hooks.before:twitter?
string | { }
overrides.hooks.error:bump?
string | { }
overrides.hooks.error:changelog?
string | { }
overrides.hooks.error:commit-and-tag?
string | { }
overrides.hooks.error:provider-release?
string | { }
overrides.hooks.error:publish?
string | { }
overrides.hooks.error:push?
string | { }
overrides.hooks.error:release?
string | { }
overrides.hooks.error:slack?
string | { }
overrides.hooks.error:social?
string | { }
overrides.hooks.error:twitter?
string | { }
overrides.hooks.generate:changelog?
{ }
overrides.hooks.success:bump?
string | { }
overrides.hooks.success:changelog?
string | { }
overrides.hooks.success:commit-and-tag?
string | { }
overrides.hooks.success:provider-release?
string | { }
overrides.hooks.success:publish?
string | { }
overrides.hooks.success:push?
string | { }
overrides.hooks.success:release?
string | { }
overrides.hooks.success:slack?
string | { }
overrides.hooks.success:social?
string | { }
overrides.hooks.success:twitter?
string | { }
overrides.logLevel?
"error" | "silent" | "warning" | "normal" | "default" | "debug" | "trace" | "verbose"
Set log level
Default
'default'overrides.monorepo?
{ ignored?: (string | undefined)[]; ignorePackageNames?: (string | undefined)[]; includePrivates?: boolean; packages?: (string | undefined)[]; versionMode?: VersionMode; }
Monorepo config
overrides.monorepo.ignored?
(string | undefined)[]
Glob patterns (relative to cwd, POSIX separators) of package directories to ignore - matched the same way as packages. Ignored packages are excluded from bump, changelog, publish, provider-release and pr-comment.
In unified/selective mode, commits whose changed files all live inside ignored packages are also excluded from the root version bump and the root changelog (a breaking change in an ignored package no longer bumps the whole repository).
Prefer this over ignorePackageNames for path-based configuration consistent with packages. Both options are honored and merged together.
Default
[]overrides.monorepo.ignorePackageNames?
(string | undefined)[]
Package names to ignore.
Deprecated
Use ignored (path globs) instead, for consistency with packages. Both options are still honored and merged together.
Default
[]overrides.monorepo.includePrivates?
boolean
Include private packages (with "private": true in package.json) in bump and changelog operations. Private packages remain excluded from publish, provider-release, and pr-comment regardless of this flag.
Default
falseoverrides.monorepo.packages?
(string | undefined)[]
Glob pattern matching for packages to bump.
overrides.monorepo.versionMode?
Version mode for the monorepo.
overrides.newVersion?
string
overrides.noAuthors?
boolean
overrides.onRewrittenTag?
Strategy applied when a rewritten/orphaned from tag is detected. Defaults to prompt interactively, or ephemeral when non-interactive (--yes / no TTY / CI).
prompt: interactive selection.ephemeral: use the reachable equivalent commit for this run only.rebind: move the local tag onto the equivalent commit (no push).error: throw and stop.
overrides.prComment?
{ mode?: PrCommentMode; }
PR comment configuration
overrides.prComment.mode?
PR comment mode
Default
'append'overrides.projectName?
string
Project name Useful for tweet and slack posts
overrides.publish?
{ access?: "public" | "restricted"; args?: (string | undefined)[]; buildCmd?: string; otp?: string; packageManager?: PackageManager; packages?: (string | undefined)[]; private?: boolean; registries?: ({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]; registry?: string; safetyCheck?: boolean; safetyCheckTimeout?: number; skipExistingVersions?: boolean; tag?: string; token?: string; }
Publish config
overrides.publish.access?
"public" | "restricted"
NPM access level (e.g. public or restricted)
overrides.publish.args?
(string | undefined)[]
overrides.publish.buildCmd?
string
Command to build your packages before publishing (e.g. pnpm build)
overrides.publish.otp?
string
NPM OTP (e.g. 123456)
overrides.publish.packageManager?
Package manager (e.g. pnpm, npm, yarn or bun)
overrides.publish.packages?
(string | undefined)[]
Glob pattern matching for packages to publish
overrides.publish.private?
boolean
overrides.publish.registries?
({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]
Additional registries to publish to, on top of registry (if set). Entries without packageFilter apply to every package (mirroring); entries with packageFilter only apply to packages matching one of the glob patterns. Fully additive: leaving this unset preserves the single-registry behavior.
overrides.publish.registry?
string
NPM registry URL (e.g. https://registry.npmjs.org/)
overrides.publish.safetyCheck?
boolean
Skip safety check
Default
trueoverrides.publish.safetyCheckTimeout?
number
Maximum time in milliseconds for the registry authentication safety check before it is aborted. Prevents the release from hanging indefinitely when the registry (or a proxy) never answers.
Default
15000overrides.publish.skipExistingVersions?
boolean
Skip a package (per registry) instead of failing when its version already exists on the registry. Makes re-running a release idempotent: a retried job whose version is already published (e.g. a canary rerun on the same commit, or a partially completed publish) succeeds and only publishes what is missing, rather than crashing on the registry's "cannot overwrite" error. When disabled (the default), that situation still fails, but with a clear error message instead of the raw registry error.
Default
falseoverrides.publish.tag?
string
NPM tag (e.g. latest)
overrides.publish.token?
string
NPM token (e.g. 123456) - supported for npm, pnpm and bun (injected via .npmrc). Yarn is not supported (it uses .yarnrc.yml).
overrides.release?
{ changelog?: boolean; clean?: boolean; commit?: boolean; gitTag?: boolean; noVerify?: boolean; prComment?: boolean; providerRelease?: boolean; publish?: boolean; push?: boolean; social?: boolean; }
Release config
overrides.release.changelog?
boolean
Generate changelog files (CHANGELOG.md)
Default
trueoverrides.release.clean?
boolean
Determine if the working directory is clean and if it is not clean, exit
Default
falseoverrides.release.commit?
boolean
Commit changes and create tag
Default
trueoverrides.release.gitTag?
boolean
Create tag
Default
trueoverrides.release.noVerify?
boolean
Skip git verification while committing by using --no-verify flag
Default
trueoverrides.release.prComment?
boolean
Post release announcements to social media platforms
Default
falseoverrides.release.providerRelease?
boolean
Publish release to your repository (github or gitlab)
Default
trueoverrides.release.publish?
boolean
Publish release to your registry
Default
trueoverrides.release.push?
boolean
Push changes to your repository (commit and tag(s))
Default
trueoverrides.release.social?
boolean
Post release announcements to social media platforms
Default
falseoverrides.repo?
{ domain?: string; provider?: GitProvider; repo?: string; token?: string; }
Repo config
overrides.repo.domain?
string
Git domain (e.g. github.com)
overrides.repo.provider?
Git provider (e.g. github or gitlab)
Default
'github'overrides.repo.repo?
string
Git repository (e.g. user/repo)
overrides.repo.token?
string
Git token
overrides.safetyCheck?
boolean
Global safety check. The safety check will verify if tokens or others required for release are set (depends on the release options)
Default
trueoverrides.scopeMap?
{[key: string]: string | undefined; }
overrides.signTags?
boolean
overrides.social?
{ changelogUrl?: string; slack?: { changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }; twitter?: { credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }; }
Social media configuration
overrides.social.changelogUrl?
string
URL to full changelog (e.g., https://example.com/changelog) This URL will be included in social media posts to allow users to view the complete changelog
overrides.social.slack?
{ changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }
Slack configuration
overrides.social.slack.changelogFormat?
Changelog rendering of the Slack message.
summary: commit titles only, in a single section capped atpostMaxLength.full: commit bodies and PR/issue links included, rendered as rich text blocks (one per changelog section). Commit bodies followchangelog.includeCommitBody. Can be overridden with the--slack-formatCLI flag.
Default
'summary'overrides.social.slack.channel?
string
Slack channel ID or name (e.g., "#releases" or "C1234567890"). Required when using token-based authentication. Ignored (with warning) when webhookUrl is set — the channel is baked into the webhook URL.
overrides.social.slack.credentials?
{ token?: ... | ...; }
Slack credentials (optional - falls back to environment variables)
overrides.social.slack.credentials.token?
... | ...
Slack Bot Token or User OAuth Token (starts with xoxb-). Required scopes: chat:write (and chat:write.public for public channels without bot invite). Env fallback: SLACK_TOKEN, RELIZY_SLACK_TOKEN. Ignored when social.slack.webhookUrl is set (webhook takes priority).
overrides.social.slack.enabled?
boolean
Enable Slack posting
Default
falseoverrides.social.slack.noAuthors?
boolean
Hide the contributors block in Slack messages. If config.noAuthors is true globally, contributors are always hidden regardless of this setting.
Default
falseoverrides.social.slack.noPackages?
boolean
Hide the packages block (list of bumped packages with their before → after versions).
Default
falseoverrides.social.slack.onlyStable?
boolean
Skip Slack posting for prerelease versions (alpha, beta, rc, etc.) Only stable versions will be posted to Slack
Default
trueoverrides.social.slack.postMaxLength?
number
Maximum length (in characters) of the changelog rendered inside the Slack message. When exceeded, summary drops the last commits, full cuts the changelog where the limit is reached (even inside a commit body) with an ellipsis; the commits left out entirely are announced with an "… and N more changes" line. Defaults to 2500 in summary format (Slack's section limit is 3000) and to no limit in full format, where the message is only bounded by Slack's 50 blocks.
overrides.social.slack.template?
string
Custom message template Available variables: , , , , ,
overrides.social.slack.webhookUrl?
string
Slack Incoming Webhook URL. When set, takes priority over token-based auth. Env fallback: SLACK_WEBHOOK_URL, RELIZY_SLACK_WEBHOOK_URL. See: https://api.slack.com/messaging/webhooks
overrides.social.twitter?
{ credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }
Twitter configuration
overrides.social.twitter.credentials?
{ accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }
Twitter credentials (optional - falls back to environment variables)
overrides.social.twitter.credentials.accessToken?
... | ...
Twitter Access Token
overrides.social.twitter.credentials.accessTokenSecret?
... | ...
Twitter Access Token Secret
overrides.social.twitter.credentials.apiKey?
... | ...
Twitter API Key (Consumer Key)
overrides.social.twitter.credentials.apiKeySecret?
... | ...
Twitter API Secret (Consumer Secret)
overrides.social.twitter.enabled?
boolean
Enable Twitter posting
Default
falseoverrides.social.twitter.onlyStable?
boolean
Skip Twitter posting for prerelease versions (alpha, beta, rc, etc.) Only stable versions will be posted to Twitter
Default
trueoverrides.social.twitter.postMaxLength?
number
Maximum length of the tweet
Default
280overrides.social.twitter.template?
string
Custom message template Available variables: , , , ,
Default
'📣 {{projectName}} {{newVersion}} is out!\n\n{{changelog}}\n\n{{releaseUrl}}\n{{changelogUrl}}'overrides.templates?
{ changelogTitle?: string; commitBody?: string; commitMessage?: string; emptyChangelogContent?: string; slackMessage?: string; tagBody?: string; tagMessage?: string; twitterMessage?: string; }
Templates config
overrides.templates.changelogTitle?
string
Changelog section title template Available variables: , ,
Default
'{{oldVersion}}...{{newVersion}}'overrides.templates.commitBody?
string
Commit message body template. When defined, it is passed as the commit body.
Default in unified/selective modes: undefined (no body). Default in independent mode (when commitMessage and commitBody are not customized): ''.
Same variables as commitMessage.
overrides.templates.commitMessage?
string
Commit message template (title).
Default in unified/selective modes: 'chore(release): bump version to '. Default in independent mode (when not customized): 'chore(release): bump packages'.
Available variables:
— inindependentmode, comma-separated list of bumpedname@version(legacy behavior); otherwise the new version.— number of bumped packages.— comma-separated list of bumped package names.— comma-separated list of bumpedname@version.— version from the rootpackage.json.
overrides.templates.emptyChangelogContent?
string
Empty changelog content
Default
'No relevant changes for this release'overrides.templates.slackMessage?
string
Slack message template (optional - if not provided, uses rich blocks format) Available variables: , , , ,
Default
undefinedoverrides.templates.tagBody?
string
Not used with "independent" version mode
Default
'v{{newVersion}}'
Available variables: {{newVersion}}overrides.templates.tagMessage?
string
Tag message template
Default
'Bump version to {{newVersion}}'
Available variables: {{newVersion}}overrides.templates.twitterMessage?
string
Twitter message template Available variables: , , , ,
Default
'📣 {{projectName}} {{newVersion}} is out!\n\n{{changelog}}\n\n{{releaseUrl}}\n{{changelogUrl}}'overrides.to?
string
End tag
overrides.tokens?
{ ai?: { claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }; github?: string; gitlab?: string; registry?: string; slack?: string; twitter?: { accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }; }
API tokens configuration
overrides.tokens.ai?
{ claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }
AI provider credentials
overrides.tokens.ai.claude-code?
{ apiKey?: ... | ...; oauthToken?: ... | ...; }
overrides.tokens.ai.claude-code.apiKey?
... | ...
overrides.tokens.ai.claude-code.oauthToken?
... | ...
overrides.tokens.github?
string
GitHub token for creating releases Environment variables: GITHUB_TOKEN, GH_TOKEN, RELIZY_GITHUB_TOKEN
overrides.tokens.gitlab?
string
GitLab token for creating releases Environment variables: GITLAB_TOKEN, GITLAB_API_TOKEN, CI_JOB_TOKEN, RELIZY_GITLAB_TOKEN
overrides.tokens.registry?
string
registry token for publishing Environment variables: NPM_TOKEN, RELIZY_NPM_TOKEN, NODE_AUTH_TOKEN
overrides.tokens.slack?
string
Slack bot token for posting messages Environment variables: SLACK_TOKEN, RELIZY_SLACK_TOKEN
overrides.tokens.twitter?
{ accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }
Twitter API credentials for posting tweets Environment variables: TWITTER_API_KEY, TWITTER_API_KEY_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET Or with RELIZY_ prefix: RELIZY_TWITTER_API_KEY, etc.
overrides.tokens.twitter.accessToken?
string
overrides.tokens.twitter.accessTokenSecret?
string
overrides.tokens.twitter.apiKey?
string
overrides.tokens.twitter.apiKeySecret?
string
overrides.types?
{[key: string]: false | { semver?: SemverBumpType; title?: string; } | undefined; }
Returns
Promise<ResolvedRelizyConfig>