@wtf/release-docs 8.2.1 → 8.2.3
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 +56 -44
- package/api/@wtf/release-cargo/auth/functions/mask.md +1 -1
- package/api/@wtf/release-cargo/auth/functions/tokenVariableOf.md +1 -1
- package/api/@wtf/release-cargo/auth/functions/trustedPublishing.md +1 -1
- package/api/@wtf/release-cargo/auth/interfaces/HttpResponse.md +5 -5
- package/api/@wtf/release-cargo/auth/interfaces/TrustedPublishing.md +5 -5
- package/api/@wtf/release-cargo/auth/interfaces/TrustedPublishingOptions.md +6 -6
- package/api/@wtf/release-cargo/auth/type-aliases/HttpFetch.md +1 -1
- package/api/@wtf/release-cargo/auth/variables/CRATES_IO_API.md +1 -1
- package/api/@wtf/release-cargo/auth/variables/ID_TOKEN_VARIABLE.md +1 -1
- package/api/@wtf/release-cargo/auth/variables/USER_AGENT.md +1 -1
- package/api/@wtf/release-cargo/crates/functions/publishOrder.md +1 -1
- package/api/@wtf/release-cargo/crates/functions/publishable.md +1 -1
- package/api/@wtf/release-cargo/crates/functions/readWorkspace.md +1 -1
- package/api/@wtf/release-cargo/crates/functions/selectCrates.md +1 -1
- package/api/@wtf/release-cargo/crates/interfaces/Selection.md +5 -5
- package/api/@wtf/release-cargo/ecosystem/functions/packagesAt.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/functions/packagesOfTree.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/functions/packagesOfWorkspace.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/functions/resolveRequirement.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/functions/satisfiesRequirement.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/functions/semverRange.md +1 -1
- package/api/@wtf/release-cargo/ecosystem/interfaces/CargoPackage.md +7 -7
- package/api/@wtf/release-cargo/ecosystem/variables/cargoEcosystem.md +1 -1
- package/api/@wtf/release-cargo/errors/classes/CargoError.md +5 -5
- package/api/@wtf/release-cargo/errors/type-aliases/CargoErrorCode.md +1 -1
- package/api/@wtf/release-cargo/errors/variables/CARGO_ERRORS.md +1 -1
- package/api/@wtf/release-cargo/interfaces/Crate.md +6 -6
- package/api/@wtf/release-cargo/interfaces/CrateDependency.md +6 -6
- package/api/@wtf/release-cargo/interfaces/Workspace.md +3 -3
- package/api/@wtf/release-cargo/publish/functions/publishCrates.md +1 -1
- package/api/@wtf/release-cargo/publish/interfaces/PublishCratesOptions.md +11 -11
- package/api/@wtf/release-cargo/publish/interfaces/PublishedCrate.md +5 -5
- package/api/@wtf/release-cargo/publish/type-aliases/CrateStatus.md +1 -1
- package/api/@wtf/release-cargo/publish/variables/RECHECK_WAITS.md +1 -1
- package/api/@wtf/release-cargo/registry/functions/crateUrl.md +1 -1
- package/api/@wtf/release-cargo/registry/functions/indexHasVersion.md +1 -1
- package/api/@wtf/release-cargo/registry/functions/indexPath.md +1 -1
- package/api/@wtf/release-cargo/registry/variables/CRATES_IO_INDEX.md +1 -1
- package/api/@wtf/release-cargo/stamp/functions/checkVersions.md +1 -1
- package/api/@wtf/release-cargo/stamp/functions/inheritsVersion.md +1 -1
- package/api/@wtf/release-cargo/stamp/functions/stampManifest.md +1 -1
- package/api/@wtf/release-cargo/stamp/functions/stampWorkspace.md +1 -1
- package/api/@wtf/release-cargo/stamp/interfaces/StampOptions.md +4 -4
- package/api/@wtf/release-cargo/stamp/interfaces/Stamped.md +3 -3
- package/api/@wtf/release-cargo/stamp/interfaces/StampedWorkspace.md +3 -3
- package/api/@wtf/release-cargo/type-aliases/DependencyKind.md +1 -1
- package/api/@wtf/release-go/ecosystem/functions/packagesOfModules.md +1 -1
- package/api/@wtf/release-go/ecosystem/functions/packagesOfRepo.md +1 -1
- package/api/@wtf/release-go/ecosystem/functions/resolveVersion.md +1 -1
- package/api/@wtf/release-go/ecosystem/functions/satisfiesVersion.md +1 -1
- package/api/@wtf/release-go/ecosystem/interfaces/GoPackage.md +7 -7
- package/api/@wtf/release-go/ecosystem/variables/goEcosystem.md +1 -1
- package/api/@wtf/release-go/errors/classes/GoError.md +5 -5
- package/api/@wtf/release-go/errors/type-aliases/GoErrorCode.md +1 -1
- package/api/@wtf/release-go/errors/variables/GO_ERRORS.md +1 -1
- package/api/@wtf/release-go/gomod/functions/entriesOf.md +1 -1
- package/api/@wtf/release-go/gomod/functions/linesOf.md +1 -1
- package/api/@wtf/release-go/gomod/functions/readGoMod.md +1 -1
- package/api/@wtf/release-go/gomod/functions/tokensOf.md +1 -1
- package/api/@wtf/release-go/gomod/interfaces/Entry.md +4 -4
- package/api/@wtf/release-go/gomod/interfaces/GoMod.md +4 -4
- package/api/@wtf/release-go/gomod/interfaces/GoReplace.md +6 -6
- package/api/@wtf/release-go/gomod/interfaces/GoRequire.md +4 -4
- package/api/@wtf/release-go/gomod/interfaces/Token.md +5 -5
- package/api/@wtf/release-go/interfaces/GoModule.md +6 -6
- package/api/@wtf/release-go/modules/functions/isFetchable.md +1 -1
- package/api/@wtf/release-go/modules/functions/isGoMod.md +1 -1
- package/api/@wtf/release-go/modules/functions/majorErrors.md +1 -1
- package/api/@wtf/release-go/modules/functions/majorOfPath.md +1 -1
- package/api/@wtf/release-go/modules/functions/modulesAt.md +1 -1
- package/api/@wtf/release-go/modules/functions/modulesOf.md +1 -1
- package/api/@wtf/release-go/modules/functions/readModules.md +1 -1
- package/api/@wtf/release-go/modules/functions/selectModules.md +1 -1
- package/api/@wtf/release-go/modules/interfaces/Selection.md +4 -4
- package/api/@wtf/release-go/stamp/functions/checkVersions.md +1 -1
- package/api/@wtf/release-go/stamp/functions/stampGoMod.md +1 -1
- package/api/@wtf/release-go/stamp/functions/stampModules.md +1 -1
- package/api/@wtf/release-go/stamp/interfaces/Stamped.md +3 -3
- package/api/@wtf/release-go/stamp/interfaces/StampedModules.md +3 -3
- package/api/@wtf/release-go/tags/functions/askProxy.md +1 -1
- package/api/@wtf/release-go/tags/functions/maskCredentials.md +1 -1
- package/api/@wtf/release-go/tags/functions/releaseCommit.md +1 -1
- package/api/@wtf/release-go/tags/functions/remoteTags.md +1 -1
- package/api/@wtf/release-go/tags/functions/tagModules.md +1 -1
- package/api/@wtf/release-go/tags/functions/tagOfModule.md +1 -1
- package/api/@wtf/release-go/tags/functions/tagPrefix.md +1 -1
- package/api/@wtf/release-go/tags/interfaces/TagModulesOptions.md +8 -8
- package/api/@wtf/release-go/tags/interfaces/TaggedModule.md +5 -5
- package/api/@wtf/release-go/tags/type-aliases/ModuleStatus.md +1 -1
- package/api/@wtf/release-go/tags/variables/RELEASE_AUTHOR.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/groupIdOf.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/installsOf.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/isPomFile.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/isRange.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/modulesOf.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/nameOf.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/publishOrder.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/readModules.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/readPoms.md +1 -1
- package/api/@wtf/release-maven/artifacts/functions/selectArtifacts.md +1 -1
- package/api/@wtf/release-maven/artifacts/interfaces/Selection.md +4 -4
- package/api/@wtf/release-maven/ecosystem/functions/compareVersions.md +1 -1
- package/api/@wtf/release-maven/ecosystem/functions/parseRange.md +1 -1
- package/api/@wtf/release-maven/ecosystem/functions/resolveVersion.md +1 -1
- package/api/@wtf/release-maven/ecosystem/functions/satisfiesVersion.md +1 -1
- package/api/@wtf/release-maven/ecosystem/interfaces/Bound.md +3 -3
- package/api/@wtf/release-maven/ecosystem/interfaces/Restriction.md +3 -3
- package/api/@wtf/release-maven/ecosystem/variables/mavenEcosystem.md +1 -1
- package/api/@wtf/release-maven/errors/classes/MavenError.md +5 -5
- package/api/@wtf/release-maven/errors/type-aliases/MavenErrorCode.md +1 -1
- package/api/@wtf/release-maven/errors/variables/MAVEN_ERRORS.md +1 -1
- package/api/@wtf/release-maven/interfaces/MavenModule.md +14 -14
- package/api/@wtf/release-maven/pom/functions/childOf.md +1 -1
- package/api/@wtf/release-maven/pom/functions/childrenOf.md +1 -1
- package/api/@wtf/release-maven/pom/functions/dependencyOf.md +1 -1
- package/api/@wtf/release-maven/pom/functions/escapeXml.md +1 -1
- package/api/@wtf/release-maven/pom/functions/parseXml.md +1 -1
- package/api/@wtf/release-maven/pom/functions/readPom.md +1 -1
- package/api/@wtf/release-maven/pom/functions/textAt.md +1 -1
- package/api/@wtf/release-maven/pom/interfaces/Pom.md +15 -15
- package/api/@wtf/release-maven/pom/interfaces/PomDependency.md +5 -5
- package/api/@wtf/release-maven/pom/interfaces/PomParent.md +4 -4
- package/api/@wtf/release-maven/pom/interfaces/PomPlugin.md +5 -5
- package/api/@wtf/release-maven/pom/interfaces/PomRepository.md +3 -3
- package/api/@wtf/release-maven/pom/interfaces/Span.md +3 -3
- package/api/@wtf/release-maven/pom/interfaces/XmlElement.md +7 -7
- package/api/@wtf/release-maven/pom/variables/PLUGIN_GROUP.md +1 -1
- package/api/@wtf/release-maven/publish/functions/deployModules.md +1 -1
- package/api/@wtf/release-maven/publish/interfaces/DeployModulesOptions.md +11 -11
- package/api/@wtf/release-maven/publish/interfaces/DeployedModule.md +4 -4
- package/api/@wtf/release-maven/publish/type-aliases/ModuleStatus.md +1 -1
- package/api/@wtf/release-maven/repository/functions/deployTargets.md +1 -1
- package/api/@wtf/release-maven/repository/functions/expandValues.md +1 -1
- package/api/@wtf/release-maven/repository/functions/hasPom.md +1 -1
- package/api/@wtf/release-maven/repository/functions/pomPath.md +1 -1
- package/api/@wtf/release-maven/repository/functions/pomUrl.md +1 -1
- package/api/@wtf/release-maven/repository/interfaces/Repository.md +3 -3
- package/api/@wtf/release-maven/repository/interfaces/ValuesOf.md +3 -3
- package/api/@wtf/release-maven/repository/variables/MAVEN_CENTRAL.md +1 -1
- package/api/@wtf/release-maven/stamp/functions/checkVersions.md +1 -1
- package/api/@wtf/release-maven/stamp/functions/stampModules.md +1 -1
- package/api/@wtf/release-maven/stamp/functions/stampPom.md +1 -1
- package/api/@wtf/release-maven/stamp/interfaces/PomStampOptions.md +5 -5
- package/api/@wtf/release-maven/stamp/interfaces/Stamped.md +3 -3
- package/api/@wtf/release-maven/stamp/interfaces/StampedModules.md +3 -3
- package/api/@wtf/release-npm/check/functions/checkPackages.md +1 -1
- package/api/@wtf/release-npm/check/functions/formatIssue.md +1 -1
- package/api/@wtf/release-npm/check/interfaces/CheckOptions.md +6 -6
- package/api/@wtf/release-npm/check/interfaces/Issue.md +5 -5
- package/api/@wtf/release-npm/check/type-aliases/CheckedPackage.md +1 -1
- package/api/@wtf/release-npm/check/type-aliases/IssueCode.md +1 -1
- package/api/@wtf/release-npm/ecosystem/variables/npmEcosystem.md +1 -1
- package/api/@wtf/release-npm/errors/type-aliases/NpmErrorCode.md +1 -1
- package/api/@wtf/release-npm/errors/variables/NPM_ERRORS.md +1 -1
- package/api/@wtf/release-npm/interfaces/Lookup.md +3 -3
- package/api/@wtf/release-npm/interfaces/PublishOptions.md +6 -6
- package/api/@wtf/release-npm/interfaces/PublishPackage.md +5 -5
- package/api/@wtf/release-npm/interfaces/PublishTrainOptions.md +13 -13
- package/api/@wtf/release-npm/interfaces/Publisher.md +7 -7
- package/api/@wtf/release-npm/interfaces/PublisherContext.md +7 -7
- package/api/@wtf/release-npm/manifests/functions/concreteRange.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/manifestsAt.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/packageOf.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/packagesOfManifests.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/readManifests.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/resolveSpecifier.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/runtimeDependenciesOf.md +1 -1
- package/api/@wtf/release-npm/manifests/functions/satisfiesRange.md +1 -1
- package/api/@wtf/release-npm/manifests/interfaces/Manifest.md +5 -5
- package/api/@wtf/release-npm/manifests/interfaces/NpmPackage.md +7 -7
- package/api/@wtf/release-npm/manifests/type-aliases/DependencyField.md +1 -1
- package/api/@wtf/release-npm/manifests/variables/DEPENDENCY_FIELDS.md +1 -1
- package/api/@wtf/release-npm/manifests/variables/FIELD_KINDS.md +1 -1
- package/api/@wtf/release-npm/manifests/variables/RUNTIME_FIELDS.md +1 -1
- package/api/@wtf/release-npm/prepare/functions/isTypeScriptSource.md +1 -1
- package/api/@wtf/release-npm/prepare/functions/prepareManifest.md +1 -1
- package/api/@wtf/release-npm/prepare/functions/stripSourceConditions.md +1 -1
- package/api/@wtf/release-npm/prepare/interfaces/PrepareOptions.md +5 -5
- package/api/@wtf/release-npm/prepare/interfaces/PreparedManifest.md +6 -6
- package/api/@wtf/release-npm/prepare/variables/SOURCE_CONDITIONS.md +1 -1
- package/api/@wtf/release-npm/publishers/functions/builtInPublisher.md +1 -1
- package/api/@wtf/release-npm/publishers/functions/isPublisher.md +1 -1
- package/api/@wtf/release-npm/publishers/variables/NPM_REGISTRY.md +1 -1
- package/api/@wtf/release-npm/publishers/variables/PUBLISHERS.md +1 -1
- package/api/@wtf/release-npm/publishers/variables/npmPublisher.md +1 -1
- package/api/@wtf/release-npm/publishers/variables/pnpmPublisher.md +1 -1
- package/api/@wtf/release-npm/release/functions/checkTrain.md +1 -1
- package/api/@wtf/release-npm/release/functions/distTagOf.md +1 -1
- package/api/@wtf/release-npm/release/functions/packTrain.md +1 -1
- package/api/@wtf/release-npm/release/functions/publishPacked.md +1 -1
- package/api/@wtf/release-npm/release/functions/publishTrain.md +1 -1
- package/api/@wtf/release-npm/release/functions/publishedOf.md +1 -1
- package/api/@wtf/release-npm/release/functions/publishedOfResolved.md +1 -1
- package/api/@wtf/release-npm/release/functions/releaseTrain.md +1 -1
- package/api/@wtf/release-npm/release/functions/resolveManifests.md +1 -1
- package/api/@wtf/release-npm/release/functions/tagTrain.md +1 -1
- package/api/@wtf/release-npm/release/interfaces/CheckRelease.md +16 -16
- package/api/@wtf/release-npm/release/interfaces/PackOptions.md +8 -8
- package/api/@wtf/release-npm/release/interfaces/PackedTrain.md +12 -12
- package/api/@wtf/release-npm/release/interfaces/PublishRun.md +11 -11
- package/api/@wtf/release-npm/release/interfaces/PublishedOf.md +4 -4
- package/api/@wtf/release-npm/release/interfaces/PublishedPackage.md +7 -7
- package/api/@wtf/release-npm/release/interfaces/PublishedTrain.md +5 -5
- package/api/@wtf/release-npm/release/interfaces/ResolveRelease.md +17 -17
- package/api/@wtf/release-npm/release/interfaces/ResolvedPackage.md +4 -4
- package/api/@wtf/release-npm/release/interfaces/ResolvedTrain.md +6 -6
- package/api/@wtf/release-npm/release/interfaces/TagRelease.md +14 -14
- package/api/@wtf/release-npm/release/type-aliases/LookedUpTrain.md +1 -1
- package/api/@wtf/release-npm/release/type-aliases/ReleaseRun.md +1 -1
- package/api/@wtf/release-npm/release/variables/ID_TOKENS.md +1 -1
- package/api/@wtf/release-npm/release/variables/RUNNER_ENVIRONMENTS.md +1 -1
- package/api/@wtf/release-npm/workspace/functions/pnpmWorkspaceGlobs.md +1 -1
- package/api/@wtf/release-npm/workspace/functions/publishableOf.md +1 -1
- package/api/@wtf/release-npm/workspace/functions/readWorkspace.md +1 -1
- package/api/@wtf/release-npm/workspace/functions/workspaceFolders.md +1 -1
- package/api/@wtf/release-npm/workspace/functions/workspaceGlobs.md +1 -1
- package/api/@wtf/release-npm/workspace/interfaces/WorkspaceGlobs.md +3 -3
- package/api/@wtf/release-npm/workspace/interfaces/WorkspaceOptions.md +2 -2
- package/api/@wtf/release-replace/errors/classes/ReplaceError.md +5 -5
- package/api/@wtf/release-replace/errors/type-aliases/ReplaceErrorCode.md +1 -1
- package/api/@wtf/release-replace/errors/variables/REPLACE_ERRORS.md +1 -1
- package/api/@wtf/release-replace/files/functions/filesMatcher.md +1 -1
- package/api/@wtf/release-replace/interfaces/ReplaceMatch.md +5 -5
- package/api/@wtf/release-replace/interfaces/ReplacementOf.md +5 -5
- package/api/@wtf/release-replace/replace/functions/regExpOf.md +1 -1
- package/api/@wtf/release-replace/replace/functions/replaceFiles.md +1 -1
- package/api/@wtf/release-replace/replace/functions/replaceText.md +1 -1
- package/api/@wtf/release-replace/replace/interfaces/ReplaceOptions.md +10 -10
- package/api/@wtf/release-replace/replace/interfaces/TextOptions.md +5 -5
- package/api/@wtf/release-replace/replace/type-aliases/To.md +1 -1
- package/api/@wtf/release-replace/templates/functions/mergeTemplates.md +1 -1
- package/api/@wtf/release-replace/templates/functions/resolveReplacement.md +1 -1
- package/api/@wtf/release-replace/templates/functions/resolveReplacements.md +1 -1
- package/api/@wtf/release-replace/type-aliases/Escape.md +1 -1
- package/api/@wtf/release-replace/type-aliases/ReplaceFunction.md +1 -1
- package/api/@wtf/release-replace/type-aliases/Replacement.md +1 -1
- package/api/@wtf/release-replace/type-aliases/ReplacementSpec.md +1 -1
- package/api/@wtf/release-replace/type-aliases/TemplateUse.md +1 -1
- package/api/@wtf/release-replace/type-aliases/Templates.md +1 -1
- package/api/@wtf/release-replace/values/functions/escapeValue.md +1 -1
- package/api/@wtf/release-replace/values/functions/textOf.md +1 -1
- package/api/@wtf/release-replace/values/functions/valueAt.md +1 -1
- package/api/@wtf/release-replace/values/variables/ESCAPES.md +1 -1
- package/api/@wtf/release-replace/values/variables/VALUE.md +1 -1
- package/api/@wtf/release-system/errors/classes/ReleaseError.md +5 -5
- package/api/@wtf/release-system/errors/functions/throwAll.md +1 -1
- package/api/@wtf/release-system/errors/type-aliases/ErrorClass.md +1 -1
- package/api/@wtf/release-system/errors/type-aliases/SystemErrorCode.md +1 -1
- package/api/@wtf/release-system/errors/variables/SYSTEM_ERRORS.md +1 -1
- package/api/@wtf/release-system/git/functions/commitsSince.md +1 -1
- package/api/@wtf/release-system/git/functions/filesOfCommits.md +1 -1
- package/api/@wtf/release-system/git/functions/git.md +1 -1
- package/api/@wtf/release-system/git/functions/gitOf.md +1 -1
- package/api/@wtf/release-system/git/functions/trackedFiles.md +1 -1
- package/api/@wtf/release-system/git/interfaces/GitContext.md +4 -4
- package/api/@wtf/release-system/git/interfaces/LogCommit.md +5 -5
- package/api/@wtf/release-system/node/functions/nodeSystem.md +1 -1
- package/api/@wtf/release-system/node/functions/realPathOf.md +1 -1
- package/api/@wtf/release-system/node/functions/systemOf.md +1 -1
- package/api/@wtf/release-system/paths/functions/normalizePath.md +1 -1
- package/api/@wtf/release-system/paths/functions/pathMatcher.md +1 -1
- package/api/@wtf/release-system/paths/type-aliases/PathMatcher.md +1 -1
- package/api/@wtf/release-system/posix/functions/basenameOf.md +1 -1
- package/api/@wtf/release-system/posix/functions/dirnameOf.md +1 -1
- package/api/@wtf/release-system/posix/functions/joinPath.md +1 -1
- package/api/@wtf/release-system/posix/functions/relativePath.md +1 -1
- package/api/@wtf/release-system/posix/functions/resolvePath.md +1 -1
- package/api/@wtf/release-system/system/interfaces/DirEntry.md +3 -3
- package/api/@wtf/release-system/system/interfaces/ExecOptions.md +4 -4
- package/api/@wtf/release-system/system/interfaces/ExecResult.md +4 -4
- package/api/@wtf/release-system/system/interfaces/System.md +7 -7
- package/api/@wtf/release-system/system/interfaces/SystemFs.md +8 -8
- package/api/@wtf/release-system/system/type-aliases/Exec.md +1 -1
- package/api/@wtf/release-system/system/type-aliases/SystemInput.md +1 -1
- package/api/@wtf/release-system/validator/functions/allOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/anyObject.md +1 -1
- package/api/@wtf/release-system/validator/functions/anyOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/arrayOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/booleanOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/errorOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/errorsOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/exclusive.md +1 -1
- package/api/@wtf/release-system/validator/functions/issuesOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/objectOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/oneOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/orFunction.md +1 -1
- package/api/@wtf/release-system/validator/functions/pathText.md +1 -1
- package/api/@wtf/release-system/validator/functions/pluginEntriesOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/recordOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/refined.md +1 -1
- package/api/@wtf/release-system/validator/functions/stringOf.md +1 -1
- package/api/@wtf/release-system/validator/functions/tupleOf.md +1 -1
- package/api/@wtf/release-system/validator/interfaces/ArrayOptions.md +5 -5
- package/api/@wtf/release-system/validator/interfaces/IssueOptions.md +4 -4
- package/api/@wtf/release-system/validator/interfaces/ObjectOptions.md +5 -5
- package/api/@wtf/release-system/validator/interfaces/OptionIssue.md +4 -4
- package/api/@wtf/release-system/validator/interfaces/Property.md +4 -4
- package/api/@wtf/release-system/validator/interfaces/RecordOptions.md +6 -6
- package/api/@wtf/release-system/validator/interfaces/StringOptions.md +6 -6
- package/api/@wtf/release-system/validator/interfaces/Validator.md +4 -4
- package/api/@wtf/release-system/validator/type-aliases/JsonSchema.md +1 -1
- package/api/@wtf/release-system/validator/type-aliases/Path.md +1 -1
- package/api/@wtf/release-trains/cascade/functions/cascadeNotes.md +1 -1
- package/api/@wtf/release-trains/cascade/functions/cascadeText.md +1 -1
- package/api/@wtf/release-trains/cascade/functions/cascadeType.md +1 -1
- package/api/@wtf/release-trains/cascade/functions/cascadesOf.md +1 -1
- package/api/@wtf/release-trains/cascade/functions/higherType.md +1 -1
- package/api/@wtf/release-trains/cascade/interfaces/Cascade.md +11 -11
- package/api/@wtf/release-trains/cascade/interfaces/CascadeCheck.md +8 -8
- package/api/@wtf/release-trains/cascade/type-aliases/CascadeKind.md +1 -1
- package/api/@wtf/release-trains/cascade/type-aliases/ReleaseType.md +1 -1
- package/api/@wtf/release-trains/cascade/variables/RELEASE_TYPES.md +1 -1
- package/api/@wtf/release-trains/ecosystem/functions/isEcosystem.md +1 -1
- package/api/@wtf/release-trains/ecosystem/functions/loadEcosystems.md +1 -1
- package/api/@wtf/release-trains/ecosystem/functions/readPackages.md +1 -1
- package/api/@wtf/release-trains/ecosystem/interfaces/Dependency.md +4 -4
- package/api/@wtf/release-trains/ecosystem/interfaces/Ecosystem.md +5 -5
- package/api/@wtf/release-trains/ecosystem/interfaces/EcosystemContext.md +5 -5
- package/api/@wtf/release-trains/ecosystem/interfaces/EcosystemPackages.md +3 -3
- package/api/@wtf/release-trains/ecosystem/interfaces/Package.md +6 -6
- package/api/@wtf/release-trains/ecosystem/type-aliases/DependencyKind.md +1 -1
- package/api/@wtf/release-trains/ecosystem/type-aliases/ModuleLoader.md +1 -1
- package/api/@wtf/release-trains/ecosystem/variables/DEPENDENCY_KINDS.md +1 -1
- package/api/@wtf/release-trains/errors/classes/TrainsError.md +5 -5
- package/api/@wtf/release-trains/errors/type-aliases/TrainsErrorCode.md +1 -1
- package/api/@wtf/release-trains/errors/variables/TRAINS_ERRORS.md +1 -1
- package/api/@wtf/release-trains/generated/functions/filesIn.md +1 -1
- package/api/@wtf/release-trains/generated/functions/formatGenerated.md +1 -1
- package/api/@wtf/release-trains/generated/functions/listGenerated.md +1 -1
- package/api/@wtf/release-trains/generated/functions/parseGenerated.md +1 -1
- package/api/@wtf/release-trains/generated/functions/readGenerated.md +1 -1
- package/api/@wtf/release-trains/generated/functions/stageGenerated.md +1 -1
- package/api/@wtf/release-trains/generated/functions/stageGeneratedFolders.md +1 -1
- package/api/@wtf/release-trains/generated/functions/unlistedIn.md +1 -1
- package/api/@wtf/release-trains/generated/interfaces/GeneratedOptions.md +2 -2
- package/api/@wtf/release-trains/generated/interfaces/StageOptions.md +6 -6
- package/api/@wtf/release-trains/generated/variables/GENERATED.md +1 -1
- package/api/@wtf/release-trains/git/functions/tagOf.md +1 -1
- package/api/@wtf/release-trains/git/functions/tagsOf.md +1 -1
- package/api/@wtf/release-trains/git/functions/versionOfTag.md +1 -1
- package/api/@wtf/release-trains/git/interfaces/TrainTag.md +3 -3
- package/api/@wtf/release-trains/interfaces/Train.md +7 -7
- package/api/@wtf/release-trains/packages/functions/dependencyEdges.md +1 -1
- package/api/@wtf/release-trains/packages/functions/dependencyText.md +1 -1
- package/api/@wtf/release-trains/packages/functions/dependsOnErrors.md +1 -1
- package/api/@wtf/release-trains/packages/functions/normalizeDir.md +1 -1
- package/api/@wtf/release-trains/packages/functions/ownersOf.md +1 -1
- package/api/@wtf/release-trains/packages/functions/packagesOf.md +1 -1
- package/api/@wtf/release-trains/packages/functions/publishOrder.md +1 -1
- package/api/@wtf/release-trains/packages/functions/releasedVersions.md +1 -1
- package/api/@wtf/release-trains/packages/functions/trainDependencies.md +1 -1
- package/api/@wtf/release-trains/packages/functions/trainOrder.md +1 -1
- package/api/@wtf/release-trains/packages/functions/unsatisfiedErrors.md +1 -1
- package/api/@wtf/release-trains/packages/interfaces/DependencyEdge.md +6 -6
- package/api/@wtf/release-trains/packages/interfaces/OrderFault.md +4 -4
- package/api/@wtf/release-trains/packages/interfaces/OrderPins.md +3 -3
- package/api/@wtf/release-trains/packages/interfaces/PublishOrder.md +3 -3
- package/api/@wtf/release-trains/packages/interfaces/TrainDependency.md +3 -3
- package/api/@wtf/release-trains/packages/interfaces/VersionsRelease.md +7 -7
- package/api/@wtf/release-trains/paths/functions/filterCommits.md +1 -1
- package/api/@wtf/release-trains/paths/functions/gitFilesOf.md +1 -1
- package/api/@wtf/release-trains/paths/functions/overlapError.md +1 -1
- package/api/@wtf/release-trains/paths/functions/trainOfPath.md +1 -1
- package/api/@wtf/release-trains/paths/functions/trainsOfCommit.md +1 -1
- package/api/@wtf/release-trains/paths/functions/trainsOfPath.md +1 -1
- package/api/@wtf/release-trains/paths/type-aliases/FilesOf.md +1 -1
- package/api/@wtf/release-trains/schema/interfaces/ConfigPart.md +6 -6
- package/api/@wtf/release-trains/schema/interfaces/RootOptions.md +7 -7
- package/api/@wtf/release-trains/schema/type-aliases/DependencyRule.md +1 -1
- package/api/@wtf/release-trains/schema/variables/DEPENDENCY_RULES.md +1 -1
- package/api/@wtf/release-trains/schema/variables/TAG_FORMAT_PATTERN.md +1 -1
- package/api/@wtf/release-trains/schema/variables/TRAIN_NAME_PATTERN.md +1 -1
- package/api/@wtf/release-trains/schema/variables/configSchema.md +1 -1
- package/api/@wtf/release-trains/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/release-trains/schema/variables/rootOptionsSchema.md +1 -1
- package/api/@wtf/release-trains/schema/variables/trainSchema.md +1 -1
- package/api/@wtf/release-trains/schema/variables/trainsSchema.md +1 -1
- package/api/@wtf/release-trains/trains/functions/changelogOf.md +1 -1
- package/api/@wtf/release-trains/trains/functions/matchersOf.md +1 -1
- package/api/@wtf/release-trains/trains/functions/overlapErrors.md +1 -1
- package/api/@wtf/release-trains/trains/functions/selectTrain.md +1 -1
- package/api/@wtf/release-trains/trains/functions/tagFormatOf.md +1 -1
- package/api/@wtf/release-trains/trains/functions/trainHeadedNotes.md +1 -1
- package/api/@wtf/release-trains/trains/functions/trainOfRun.md +1 -1
- package/api/@wtf/release-trains/trains/functions/trainOfTag.md +1 -1
- package/api/@wtf/release-trains/trains/functions/trainsErrors.md +1 -1
- package/api/@wtf/release-trains/trains/functions/trainsOfOptions.md +1 -1
- package/api/@wtf/release-trains/trains/variables/TRAIN_VARIABLE.md +1 -1
- package/api/@wtf/release-trains/trains/variables/VERSION.md +1 -1
- package/api/@wtf/release-trains/type-aliases/BranchSpec.md +1 -1
- package/api/@wtf/release-trains/type-aliases/Trains.md +1 -1
- package/api/@wtf/release-trains/verify/functions/unreleasedDependencies.md +1 -1
- package/api/@wtf/release-trains/verify/functions/verifyTrain.md +1 -1
- package/api/@wtf/release-trains/verify/interfaces/UnreleasedDependencies.md +10 -10
- package/api/@wtf/release-trains/verify/interfaces/VerifiedTrain.md +5 -5
- package/api/@wtf/release-trains/verify/interfaces/VerifyRelease.md +8 -8
- package/api/@wtf/release-validate/errors/classes/ValidateError.md +5 -5
- package/api/@wtf/release-validate/errors/type-aliases/ValidateErrorCode.md +1 -1
- package/api/@wtf/release-validate/errors/variables/VALIDATE_ERRORS.md +1 -1
- package/api/@wtf/release-validate/interfaces/ConfigIssue.md +4 -4
- package/api/@wtf/release-validate/json-schema/functions/fromJsonSchema.md +1 -1
- package/api/@wtf/release-validate/json-schema/functions/pathOfPointer.md +1 -1
- package/api/@wtf/release-validate/json-schema/interfaces/JsonSchemaError.md +3 -3
- package/api/@wtf/release-validate/json-schema/interfaces/JsonSchemaValidator.md +3 -3
- package/api/@wtf/release-validate/validate/functions/configErrors.md +1 -1
- package/api/@wtf/release-validate/validate/functions/isStandardSchema.md +1 -1
- package/api/@wtf/release-validate/validate/functions/pathText.md +1 -1
- package/api/@wtf/release-validate/validate/functions/validateConfig.md +1 -1
- package/api/@wtf/semantic-release-cargo/functions/indexLookup.md +1 -1
- package/api/@wtf/semantic-release-cargo/functions/prepare.md +1 -1
- package/api/@wtf/semantic-release-cargo/functions/publish.md +1 -1
- package/api/@wtf/semantic-release-cargo/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-cargo/interfaces/CargoPluginOptions.md +12 -12
- package/api/@wtf/semantic-release-cargo/interfaces/CargoRelease.md +3 -3
- package/api/@wtf/semantic-release-cargo/schema/type-aliases/CargoOptions.md +1 -1
- package/api/@wtf/semantic-release-cargo/schema/variables/cargoOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-cargo/schema/variables/cargoSchema.md +1 -1
- package/api/@wtf/semantic-release-cargo/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-cargo/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-cargo/variables/default.md +1 -1
- package/api/@wtf/semantic-release-go/functions/prepare.md +1 -1
- package/api/@wtf/semantic-release-go/functions/publish.md +1 -1
- package/api/@wtf/semantic-release-go/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-go/functions/verifyRelease.md +1 -1
- package/api/@wtf/semantic-release-go/interfaces/GoPluginOptions.md +8 -8
- package/api/@wtf/semantic-release-go/interfaces/GoRelease.md +3 -3
- package/api/@wtf/semantic-release-go/schema/type-aliases/GoOptions.md +1 -1
- package/api/@wtf/semantic-release-go/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-go/schema/variables/goOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-go/schema/variables/goSchema.md +1 -1
- package/api/@wtf/semantic-release-go/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-go/variables/default.md +1 -1
- package/api/@wtf/semantic-release-maven/functions/pomLookup.md +1 -1
- package/api/@wtf/semantic-release-maven/functions/prepare.md +1 -1
- package/api/@wtf/semantic-release-maven/functions/publish.md +1 -1
- package/api/@wtf/semantic-release-maven/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-maven/interfaces/LookupAuth.md +3 -3
- package/api/@wtf/semantic-release-maven/interfaces/MavenPluginOptions.md +12 -12
- package/api/@wtf/semantic-release-maven/interfaces/MavenRelease.md +2 -2
- package/api/@wtf/semantic-release-maven/schema/type-aliases/MavenOptions.md +1 -1
- package/api/@wtf/semantic-release-maven/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-maven/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-maven/schema/variables/mavenOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-maven/schema/variables/mavenSchema.md +1 -1
- package/api/@wtf/semantic-release-maven/variables/default.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/addChannel.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/fail.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/loadPublisher.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/prepare.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/publish.md +1 -1
- package/api/@wtf/semantic-release-npm/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-npm/interfaces/PublishPluginOptions.md +18 -18
- package/api/@wtf/semantic-release-npm/interfaces/PublishedRelease.md +4 -4
- package/api/@wtf/semantic-release-npm/interfaces/SmokeOption.md +2 -2
- package/api/@wtf/semantic-release-npm/schema/type-aliases/PublishOptions.md +1 -1
- package/api/@wtf/semantic-release-npm/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-npm/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-npm/schema/variables/publishOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-npm/schema/variables/publishSchema.md +1 -1
- package/api/@wtf/semantic-release-npm/type-aliases/PublisherSpec.md +1 -1
- package/api/@wtf/semantic-release-npm/variables/default.md +1 -1
- package/api/@wtf/semantic-release-replace/functions/functionOf.md +1 -1
- package/api/@wtf/semantic-release-replace/functions/prepare.md +1 -1
- package/api/@wtf/semantic-release-replace/functions/templatesOf.md +1 -1
- package/api/@wtf/semantic-release-replace/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-replace/interfaces/ReplacePluginOptions.md +5 -5
- package/api/@wtf/semantic-release-replace/schema/interfaces/ModuleExport.md +3 -3
- package/api/@wtf/semantic-release-replace/schema/interfaces/ReplaceOptions.md +4 -4
- package/api/@wtf/semantic-release-replace/schema/interfaces/RootTemplates.md +2 -2
- package/api/@wtf/semantic-release-replace/schema/type-aliases/PluginReplacement.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/type-aliases/PluginReplacementSpec.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/type-aliases/PluginTemplates.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/type-aliases/PluginTo.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/type-aliases/TemplateSet.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/type-aliases/TemplatesOption.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/exportedSetSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/replaceOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/replacementSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/rootTemplatesSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/templateSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/schema/variables/templatesSchema.md +1 -1
- package/api/@wtf/semantic-release-replace/variables/default.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/skipPlugins.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/stepId.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/trainAssets.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/trainChangelog.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/trainOfTag.md +1 -1
- package/api/@wtf/semantic-release-trains/config/functions/trainTagFormat.md +1 -1
- package/api/@wtf/semantic-release-trains/config/interfaces/AssetsOptions.md +4 -4
- package/api/@wtf/semantic-release-trains/config/interfaces/SkipOptions.md +3 -3
- package/api/@wtf/semantic-release-trains/config/variables/BRANCHES.md +1 -1
- package/api/@wtf/semantic-release-trains/config/variables/BREAKING.md +1 -1
- package/api/@wtf/semantic-release-trains/config/variables/TITLE.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/functions/skipRuleOf.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/functions/skips.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/functions/trainOptionsOf.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/interfaces/SkipContext.md +5 -5
- package/api/@wtf/semantic-release-trains/defaults/type-aliases/SkipCheck.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/type-aliases/TrainOptions.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/variables/SKIP_RULES.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/variables/TRAIN_OPTIONS.md +1 -1
- package/api/@wtf/semantic-release-trains/defaults/variables/TRAIN_SKIP.md +1 -1
- package/api/@wtf/semantic-release-trains/errors/type-aliases/PluginErrorCode.md +1 -1
- package/api/@wtf/semantic-release-trains/errors/variables/PLUGIN_ERRORS.md +1 -1
- package/api/@wtf/semantic-release-trains/info/functions/decideTrain.md +1 -1
- package/api/@wtf/semantic-release-trains/info/functions/dotenvOf.md +1 -1
- package/api/@wtf/semantic-release-trains/info/functions/infoOf.md +1 -1
- package/api/@wtf/semantic-release-trains/info/interfaces/DecideRun.md +4 -4
- package/api/@wtf/semantic-release-trains/info/interfaces/InfoRun.md +8 -8
- package/api/@wtf/semantic-release-trains/info/interfaces/TrainDecision.md +5 -5
- package/api/@wtf/semantic-release-trains/info/interfaces/TrainInfo.md +5 -5
- package/api/@wtf/semantic-release-trains/interfaces/TrainsEntryOptions.md +5 -5
- package/api/@wtf/semantic-release-trains/interfaces/TrainsOptions.md +7 -7
- package/api/@wtf/semantic-release-trains/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-trains/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-trains/schema/variables/pluginSpecSchema.md +1 -1
- package/api/@wtf/semantic-release-trains/schema/variables/skipRuleSchema.md +1 -1
- package/api/@wtf/semantic-release-trains/schema/variables/trainsEntrySchema.md +1 -1
- package/api/@wtf/semantic-release-trains/schema/variables/trainsPluginSchema.md +1 -1
- package/api/@wtf/semantic-release-trains/type-aliases/PluginSpec.md +1 -1
- package/api/@wtf/semantic-release-trains/type-aliases/TrainsPluginOptions.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/addChannel.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/analyzeCommits.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/default.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/fail.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/generateNotes.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/prepare.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/publish.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/success.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-trains/variables/verifyRelease.md +1 -1
- package/api/@wtf/semantic-release-validate/functions/configOf.md +1 -1
- package/api/@wtf/semantic-release-validate/functions/loadSchema.md +1 -1
- package/api/@wtf/semantic-release-validate/functions/verifyConditions.md +1 -1
- package/api/@wtf/semantic-release-validate/interfaces/ValidatePluginOptions.md +2 -2
- package/api/@wtf/semantic-release-validate/schema/interfaces/Validator.md +2 -2
- package/api/@wtf/semantic-release-validate/schema/variables/configSchema.md +1 -1
- package/api/@wtf/semantic-release-validate/schema/variables/jsonSchema.md +1 -1
- package/api/@wtf/semantic-release-validate/schema/variables/validateOptionsSchema.md +1 -1
- package/api/@wtf/semantic-release-validate/variables/default.md +1 -1
- package/guides/changelogs.md +39 -28
- package/guides/ci-recipes.md +393 -271
- package/guides/configuring-trains.md +291 -203
- package/guides/dependency-rules.md +171 -113
- package/guides/ecosystems.md +222 -156
- package/guides/getting-started.md +135 -69
- package/guides/publishing-crates.md +208 -143
- package/guides/publishing-go-modules.md +170 -110
- package/guides/publishing-maven.md +197 -123
- package/guides/publishing.md +278 -191
- package/guides/system.md +50 -34
- package/guides/troubleshooting.md +358 -92
- package/guides/validating-a-config.md +81 -56
- package/package.json +1 -1
package/guides/ci-recipes.md
CHANGED
|
@@ -1,31 +1,48 @@
|
|
|
1
|
-
# CI
|
|
1
|
+
# Run releases in CI
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
This page shows how to run the releases of your trains in CI, on GitLab CI and on GitHub Actions.
|
|
4
|
+
Pick the recipe that matches your setup, and copy its YAML.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
the same time race: the second push is rejected. Serialize the jobs.
|
|
8
|
-
- **The full history.** The plugin reads the files of each commit and the tags of each train.
|
|
9
|
-
Clone with all of the history and all of the tags, not a shallow clone.
|
|
6
|
+
## How a release runs in CI
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Each train is one run of semantic-release. CI runs semantic-release once for each train: either in
|
|
9
|
+
one job per train, or in one job that runs the trains in turn. Every recipe on this page follows the
|
|
10
|
+
same rules:
|
|
13
11
|
|
|
14
|
-
|
|
15
|
-
runs
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
- **One push at a time.** Each run pushes a release commit and a tag to the same branch. When two
|
|
13
|
+
runs push at the same time, the second push is rejected. Run the releases one after another.
|
|
14
|
+
- **The full history.** The plugin reads the files that each commit changes, and the tags of each
|
|
15
|
+
train. Clone all of the history and all of the tags. A shallow clone does not work.
|
|
16
|
+
- **A token that can push.** Give the jobs the token that semantic-release pushes with, as for any
|
|
17
|
+
semantic-release run: `GITLAB_TOKEN` on GitLab, `GITHUB_TOKEN` on GitHub.
|
|
18
|
+
- **Build first.** Build in a job of its own before the release, and pass what it built to the
|
|
19
|
+
release job. The release runs no build. Nothing else runs between the plugins.
|
|
20
|
+
|
|
21
|
+
Some builds generate a folder that the release commits, such as an API reference. Such a build
|
|
22
|
+
lists what it wrote in the folder's `.generated` file, with `listGenerated` from
|
|
23
|
+
`@wtf/release-trains/generated`. The release then stages the folder exactly as it was built,
|
|
24
|
+
deletions included.
|
|
18
25
|
|
|
19
26
|
## GitLab CI
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
This recipe releases each train in a manual job of its own, one job at a time. Each part of the
|
|
29
|
+
YAML below does one thing:
|
|
30
|
+
|
|
31
|
+
1. `parallel: matrix` creates one job for each train, with `RELEASE_TRAIN` set to the train. List
|
|
32
|
+
the trains in the order of their dependencies.
|
|
33
|
+
2. `resource_group: release` lets only one job of the group run at a time, so the pushes do not
|
|
34
|
+
race.
|
|
35
|
+
3. `needs: [build]` gives the job what the build job built: each `dist`, and the generated folders
|
|
36
|
+
with their lists.
|
|
37
|
+
4. The script fetches the branch again and checks out its tip. semantic-release releases nothing
|
|
38
|
+
from a commit that is behind the tip. On the tip, the job sees the release commit that the job
|
|
39
|
+
before it pushed. A retry of a job whose publish failed also runs at its own release commit.
|
|
40
|
+
5. Before the checkout, the script checks that the tip is the pipeline's commit with only release
|
|
41
|
+
commits on top. A commit merged since then was not built, so the job stops.
|
|
42
|
+
|
|
43
|
+
The check knows a release commit by its subject. If anyone can push such a commit by hand, also
|
|
44
|
+
check what it changes. For example, run `git diff --quiet` between the pipeline's commit and the
|
|
45
|
+
tip, on everything except the changelogs and the generated folders.
|
|
29
46
|
|
|
30
47
|
```yaml
|
|
31
48
|
release:
|
|
@@ -61,8 +78,8 @@ release:
|
|
|
61
78
|
- pnpm exec semantic-release
|
|
62
79
|
```
|
|
63
80
|
|
|
64
|
-
|
|
65
|
-
|
|
81
|
+
A JSON config, such as `.releaserc.json`, cannot write the train's tag format. Pass the tag format
|
|
82
|
+
on the command line instead, built from `RELEASE_TRAIN`:
|
|
66
83
|
|
|
67
84
|
```yaml
|
|
68
85
|
release:
|
|
@@ -73,23 +90,36 @@ release:
|
|
|
73
90
|
- pnpm exec semantic-release --tag-format "${RELEASE_TRAIN}-v\${version}"
|
|
74
91
|
```
|
|
75
92
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
that
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
### Release the trains in order
|
|
94
|
+
|
|
95
|
+
GitLab runs the jobs of a resource group one at a time, but in no fixed order by default. When the
|
|
96
|
+
order matters, do one of these:
|
|
97
|
+
|
|
98
|
+
- Set the resource group's `process_mode` to `oldest_first` with the API
|
|
99
|
+
(`PUT /projects/:id/resource_groups/release`).
|
|
100
|
+
- Write one job for each train, each with `needs:` on the job of the train that it depends on.
|
|
101
|
+
|
|
102
|
+
### Publish in the release job
|
|
103
|
+
|
|
104
|
+
When the config lists the publish plugin, the release job publishes too. It packs in `prepare`. It
|
|
105
|
+
publishes in the `publish` step, after it has pushed the release commit and the tag.
|
|
106
|
+
|
|
107
|
+
So a job that fails in `publish` has already pushed both. To finish the release:
|
|
108
|
+
|
|
109
|
+
1. Delete the tag on the remote.
|
|
110
|
+
2. Retry the job. It checks out the branch at the release commit, and publishes what the registry
|
|
111
|
+
does not have yet. See [Publishing](publishing.md#when-a-publish-fails).
|
|
112
|
+
|
|
113
|
+
If the tag is still on the remote, the retry finds the release done. It publishes nothing and
|
|
114
|
+
passes. So delete the tag first, or make the job fail when
|
|
115
|
+
`git ls-remote --exit-code --tags origin` finds the train's tag for the release commit's version.
|
|
116
|
+
|
|
117
|
+
In a repo with one train, you can instead look for a tag on the release commit by its hash,
|
|
118
|
+
whatever the tag format. This does not work in a matrix: there, the job runs at the release commit
|
|
119
|
+
of the train before it, which carries that train's tag.
|
|
120
|
+
|
|
121
|
+
Give the job the ID token of npm's trusted publishing, or an npm token in an `.npmrc`. Also give it
|
|
122
|
+
Sigstore's ID token: npm signs the provenance with it.
|
|
93
123
|
|
|
94
124
|
```yaml
|
|
95
125
|
release:
|
|
@@ -105,25 +135,41 @@ release:
|
|
|
105
135
|
when: script_failure
|
|
106
136
|
```
|
|
107
137
|
|
|
108
|
-
###
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
138
|
+
### Publish from the tag pipeline
|
|
139
|
+
|
|
140
|
+
You can publish in a job of the tag's pipeline instead of in the release job, with the same
|
|
141
|
+
plugins. The release then happens in two parts:
|
|
142
|
+
|
|
143
|
+
- The branch run lists no publish plugin. It only writes the changelog, commits, and pushes the
|
|
144
|
+
tag.
|
|
145
|
+
- The tag's job runs the publish plugin and the host's release plugin on the tagged commit, as the
|
|
146
|
+
tag's pipeline built it.
|
|
147
|
+
|
|
148
|
+
This has three advantages:
|
|
149
|
+
|
|
150
|
+
- When a publish fails, you retry only that job.
|
|
151
|
+
- semantic-release runs once for each release, so the stock `@semantic-release/changelog` works.
|
|
152
|
+
- The host's release comes after the publish, so it never names a version that the registry does
|
|
153
|
+
not have.
|
|
154
|
+
|
|
155
|
+
One limit remains. The release job still runs at its pipeline's commit. If it fails after
|
|
156
|
+
`@semantic-release/git` pushed the release commit, for example when it pushes the tag, you cannot
|
|
157
|
+
retry it. The retry runs behind the release commit and releases nothing. Finish that release by
|
|
158
|
+
hand.
|
|
159
|
+
|
|
160
|
+
semantic-release does not release a tag that it already has. So the tag's job runs
|
|
161
|
+
`semantic-release-trains-tag`, the bin of `@wtf/semantic-release-trains/tag`. The bin uses
|
|
162
|
+
semantic-release's own config, plugins and branches for the run. It only replaces semantic-release's
|
|
163
|
+
decision and its tag:
|
|
164
|
+
|
|
165
|
+
- The version is the tag's.
|
|
166
|
+
- The branch is the one semantic-release released the tag on, read from semantic-release's note on
|
|
167
|
+
the tag. The branch sets the channel and the dist-tag.
|
|
168
|
+
- The notes are written again by the notes generator, from the same commits.
|
|
169
|
+
|
|
170
|
+
Then the bin runs `verifyConditions`, `verifyRelease`, `generateNotes`, `prepare`, `publish` and
|
|
171
|
+
`success`, or `fail` on an error. It sets `RELEASE_TAG` before it loads the config. The config
|
|
172
|
+
reads it to give the tag's run its plugins:
|
|
127
173
|
|
|
128
174
|
```js train=trains
|
|
129
175
|
// release.config.mjs
|
|
@@ -166,22 +212,29 @@ publish-release:
|
|
|
166
212
|
- pnpm exec semantic-release-trains-tag
|
|
167
213
|
```
|
|
168
214
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
215
|
+
What the bin does:
|
|
216
|
+
|
|
217
|
+
- It takes the tag as its argument. Without one, it reads `CI_COMMIT_TAG`, or `GITHUB_REF_NAME` in
|
|
218
|
+
a GitHub Actions run for a tag.
|
|
219
|
+
- With `--dry-run`, it runs no `prepare`, `publish` or `success`, and logs the notes.
|
|
220
|
+
- A version below the one its dist-tag points at on npm publishes nothing (`EPUBLISHBEHIND`). So
|
|
221
|
+
when you retry an older release's job after a newer one, no dist-tag moves back. A version that
|
|
222
|
+
npm already has is skipped.
|
|
223
|
+
- When semantic-release later adds a release to another channel, for example when you merge one
|
|
224
|
+
branch into another, it pushes a note and no tag. No pipeline starts. On such branches, move the
|
|
225
|
+
dist-tag with `tagTrain`, or by hand.
|
|
226
|
+
- The bin runs modules of semantic-release 25 that are not semantic-release's API. Check an upgrade
|
|
227
|
+
of semantic-release with a `--dry-run` of a tag.
|
|
228
|
+
|
|
229
|
+
The publish job runs in the tag's pipeline, not in the release commit's pipeline on the branch. The
|
|
230
|
+
`workflow:` rule below skips the release commit's pipeline only on a branch (`$CI_COMMIT_BRANCH`). A
|
|
231
|
+
tag's pipeline has no branch, so it still runs. Make the publish job `needs:` the checks of the
|
|
232
|
+
tagged commit, not only the build, so that a check that fails publishes nothing.
|
|
177
233
|
|
|
178
|
-
|
|
179
|
-
the release commit's pipeline is of a branch alone, `$CI_COMMIT_BRANCH`, so the tag's pipeline,
|
|
180
|
-
which has none, still runs. Have the publish job `needs:` the checks of the tagged commit, not the
|
|
181
|
-
build alone, so a check that fails publishes nothing.
|
|
234
|
+
### Skip the pipeline of a release commit
|
|
182
235
|
|
|
183
|
-
|
|
184
|
-
nothing to build, so a `workflow:` rule can skip it:
|
|
236
|
+
A train's release commit has the subject `chore(release): <train> <version>`. Its pipeline on the
|
|
237
|
+
branch has nothing to build, so a `workflow:` rule can skip it:
|
|
185
238
|
|
|
186
239
|
```yaml
|
|
187
240
|
workflow:
|
|
@@ -191,39 +244,45 @@ workflow:
|
|
|
191
244
|
- when: always
|
|
192
245
|
```
|
|
193
246
|
|
|
194
|
-
###
|
|
247
|
+
### Use the to-be-continuous semantic-release component
|
|
195
248
|
|
|
196
249
|
The [semantic-release component](https://gitlab.com/to-be-continuous/semantic-release) of
|
|
197
|
-
to-be-continuous
|
|
198
|
-
`before_script`
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
the
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
`@wtf/
|
|
250
|
+
to-be-continuous installs semantic-release globally, and does not install your repo. Its
|
|
251
|
+
`before_script` does three things:
|
|
252
|
+
|
|
253
|
+
1. It writes `.releaserc.json` from your `release.config.mjs`, with
|
|
254
|
+
`node -pe "JSON.stringify(require('./release.config.mjs').default, null, 2)"`.
|
|
255
|
+
2. It installs semantic-release and each name in `plugins` with `npm install --global`. It reads
|
|
256
|
+
the names with `yq '.plugins[] | select(kind == "scalar") // .[0]'`.
|
|
257
|
+
3. It also installs each line of `semrel-required-plugins.txt`.
|
|
258
|
+
|
|
259
|
+
The trains' plugins work with the component as it is. Keep these points in mind:
|
|
260
|
+
|
|
261
|
+
- The config must be [a config of literals](configuring-trains.md#a-config-of-literals).
|
|
262
|
+
`require()` does not support a top-level `await`, and the repo's packages are not installed yet,
|
|
263
|
+
so the config imports nothing.
|
|
264
|
+
- Each plugin is a package of its own. The install installs it by the name that the config gives
|
|
265
|
+
it, as many times as the config lists it. Each of its options must be JSON, because the config is
|
|
266
|
+
turned into JSON. The trains plugin is one package, with an entry for each role.
|
|
267
|
+
- A `wrap` entry finds the plugin it wraps the way semantic-release finds a plugin. The commit
|
|
268
|
+
analyzer and the release notes generator are in the node_modules of the global semantic-release.
|
|
269
|
+
Any other wrapped plugin must sit beside it, in the global install. A wrapped plugin that is not a
|
|
270
|
+
dependency of semantic-release, such as `@semantic-release/gitlab`, is not a name in `plugins`:
|
|
271
|
+
list it in `semrel-required-plugins.txt`.
|
|
272
|
+
- `@wtf/semantic-release-replace` imports a package of templates, which must also be in the global
|
|
273
|
+
install. List that package in `semrel-required-plugins.txt` too.
|
|
274
|
+
- The jobs of [the tag pipeline](#build-smoke-test-and-publish-in-a-tag-pipeline) also install
|
|
275
|
+
through the component. They load the plugins of the tag's run, which no branch run names, such as
|
|
276
|
+
`@wtf/semantic-release-npm`. List each of them in `semrel-required-plugins.txt`.
|
|
277
|
+
- Name each ecosystem by its plugin's `./ecosystem` export, such as
|
|
278
|
+
`'@wtf/semantic-release-npm/ecosystem'`. The plugin's install brings it. The ecosystem's own
|
|
279
|
+
package, such as `@wtf/release-npm`, lands in the plugin's own node_modules, where the trains
|
|
280
|
+
plugin does not look. A config that names that package fails with `EECOSYSTEM`.
|
|
281
|
+
|
|
282
|
+
The component adds each line of the file to its `npm install` as it is. So the file holds only
|
|
283
|
+
names, with no comments. This file lists a plugin that a wrap needs, a package of templates (the
|
|
284
|
+
`@wtf/replace-shields` of [Configure trains](configuring-trains.md)), and the publish plugin of the
|
|
285
|
+
tag's run:
|
|
227
286
|
|
|
228
287
|
```text
|
|
229
288
|
@semantic-release/gitlab
|
|
@@ -231,11 +290,14 @@ alone, with no comment. Of a plugin a wrap needs, a package of templates, as the
|
|
|
231
290
|
@wtf/semantic-release-npm
|
|
232
291
|
```
|
|
233
292
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
293
|
+
#### Release every train in one job
|
|
294
|
+
|
|
295
|
+
One job of the component releases the trains. It runs semantic-release once for each train that
|
|
296
|
+
`RELEASE_TRAINS` names, in the order of the config's trains, so one click releases them all.
|
|
297
|
+
|
|
298
|
+
A train that has no commit to release releases nothing and passes, and the next train runs. So when
|
|
299
|
+
you retry the job after a failed run, it passes the trains that it released already, and goes on
|
|
300
|
+
from the train that failed. For the trains of these guides, the job releases `system`, `trains`,
|
|
239
301
|
`replace`, `validate` and `docs`:
|
|
240
302
|
|
|
241
303
|
```yaml
|
|
@@ -316,33 +378,38 @@ semantic-release:
|
|
|
316
378
|
done
|
|
317
379
|
```
|
|
318
380
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
the
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
that is `docs
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
381
|
+
Each part of the YAML does one thing:
|
|
382
|
+
|
|
383
|
+
1. **Choose the trains.** `RELEASE_TRAINS` is the pipeline's input `release-trains`, a multi-select
|
|
384
|
+
of the trains, all of them by default. A to-be-continuous component maps each input to a
|
|
385
|
+
variable, and a variable of the same name overrides it. So you can also name the trains with a
|
|
386
|
+
variable in the CI/CD settings, in "Run pipeline", or when you start the manual job, such as
|
|
387
|
+
`RELEASE_TRAINS=docs`.
|
|
388
|
+
2. **Install the plugins of one train.** The component's `before_script` writes `.releaserc.json`
|
|
389
|
+
from the config of the job's `RELEASE_TRAIN`, and installs that config's plugins. Give it the
|
|
390
|
+
train whose run names every plugin that any train's run names, so that one install serves every
|
|
391
|
+
run. In the config below, that train is `docs`: its run names the other trains' plugins, and the
|
|
392
|
+
build of the reference too.
|
|
393
|
+
3. **Start from the tip of the branch.** Each train's run pushes its release commit, and the next
|
|
394
|
+
train's run starts from it, in the same job. A retry starts behind the release commits of the run
|
|
395
|
+
that failed. So the `before_script` checks out the tip, but only when every commit past the
|
|
396
|
+
pipeline's commit is a `chore(release):` commit, which the pipeline built. If there is any other
|
|
397
|
+
commit, the job fails, and the tip's pipeline releases it.
|
|
398
|
+
4. **Release in the config's order.** The script removes `.releaserc.json`, which semantic-release
|
|
399
|
+
would read before `release.config.mjs`. It then runs each train with its own `RELEASE_TRAIN`, so
|
|
400
|
+
each run reads `release.config.mjs` again, with its own train and tag format. Whatever names the
|
|
401
|
+
trains, and in whatever order, the job releases them in the order of the config's trains, each
|
|
402
|
+
after the trains it depends on. It fails on a name that is not a train.
|
|
403
|
+
|
|
404
|
+
The config keeps the order safe. With `dependencies: 'fail'` at the root, a run of `trains` or
|
|
405
|
+
`replace` fails while `system` has commits that it has not released. A run of `docs` fails, through
|
|
406
|
+
its `dependsOn`, while any train it names has unreleased commits. So a set out of order, or a train
|
|
407
|
+
chosen alone, fails instead of releasing against what is not released. Release the train it names
|
|
408
|
+
first.
|
|
409
|
+
|
|
410
|
+
A train also releases with no commit of its own when a dependency train released a version outside
|
|
411
|
+
a range that the train's last release published (`cascade`). For example, a major of `system`
|
|
412
|
+
releases `trains` and `replace` after it, in the same click. See
|
|
346
413
|
[Dependency rules](dependency-rules.md).
|
|
347
414
|
|
|
348
415
|
```js train=docs
|
|
@@ -392,29 +459,43 @@ export default {
|
|
|
392
459
|
}
|
|
393
460
|
```
|
|
394
461
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
462
|
+
#### Give the job a token
|
|
463
|
+
|
|
464
|
+
The job needs `GITLAB_TOKEN`: a token that can push to the branch and create tags. `CI_JOB_TOKEN`
|
|
465
|
+
cannot. The variable must reach every ref that the job releases, and a protected variable reaches
|
|
466
|
+
only protected refs. So protect:
|
|
467
|
+
|
|
468
|
+
- each branch in `branches`;
|
|
469
|
+
- the trains' tags, whose pipelines publish, by their patterns: `system-v*`, `trains-v*`,
|
|
470
|
+
`replace-v*`, `validate-v*` and `docs-v*`.
|
|
471
|
+
|
|
472
|
+
Here `GITLAB_TOKEN` is a protected variable of the group. A train's tag that you leave unprotected
|
|
473
|
+
starts a pipeline that has no token, and its publish fails. On a ref that the variable does not
|
|
474
|
+
reach, the run fails in `verifyConditions` (`EGITNOPERMISSION`).
|
|
475
|
+
|
|
476
|
+
#### Turn off the component's info job
|
|
402
477
|
|
|
403
|
-
The component's `semantic-release-info` job
|
|
404
|
-
analyzer of its own and
|
|
405
|
-
its default)
|
|
406
|
-
[
|
|
478
|
+
The component's `semantic-release-info` job does a dry run of the config's root only, with an
|
|
479
|
+
analyzer of its own and no train. So it reads every commit in the repo. Leave it off (`info-on`
|
|
480
|
+
empty, its default). Define the job again for every train with `semantic-release-trains-info`
|
|
481
|
+
instead: see [Predict the next release of each train](#predict-the-next-release-of-each-train).
|
|
407
482
|
|
|
408
|
-
###
|
|
483
|
+
### Predict the next release of each train
|
|
409
484
|
|
|
410
|
-
A build that
|
|
485
|
+
A build that prints its own version, in a link of its docs, a banner or a header, needs that version
|
|
411
486
|
before the release makes it. `semantic-release-trains-info` of `@wtf/semantic-release-trains`
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
487
|
+
predicts the next release of every train in the config. It does one dry run of each train, in the
|
|
488
|
+
config's order, the same order that one click of the release job uses.
|
|
489
|
+
|
|
490
|
+
How the bin works:
|
|
491
|
+
|
|
492
|
+
- A dry run tags nothing. So the bin tags `HEAD` with each release it predicts, for the dry runs of
|
|
493
|
+
the trains after it. Those trains then see the train they depend on as released (no
|
|
494
|
+
`EDEPENDENCYUNRELEASED`), and its release cascades into them through their packages' ranges.
|
|
495
|
+
- The bin removes these tags when it is done, also after a run that fails. When `SIGINT` or
|
|
496
|
+
`SIGTERM` stops it, as when the job is cancelled, it removes them before it exits.
|
|
497
|
+
- The config reads `RELEASE_TRAIN` as it loads, so the bin loads it once for each train. Each dry
|
|
498
|
+
run is a process of its own.
|
|
418
499
|
|
|
419
500
|
```yaml
|
|
420
501
|
semantic-release-info:
|
|
@@ -427,15 +508,17 @@ semantic-release-info:
|
|
|
427
508
|
dotenv: semrel.out.env
|
|
428
509
|
```
|
|
429
510
|
|
|
430
|
-
The bin loads the config to read its trains
|
|
431
|
-
`RELEASE_TRAIN`
|
|
432
|
-
the train of the run, needs `RELEASE_TRAIN` in the job too: any train of it serves, and the run of
|
|
433
|
-
each train names its own. A job that extends the component's install, which makes `.releaserc.json`
|
|
434
|
-
of the config, removes it first (`rm -f .releaserc.json`), as semantic-release reads it before
|
|
435
|
-
`release.config.mjs`, and each train would be decided as the train it was made of.
|
|
511
|
+
The bin first loads the config to read its trains. It then runs each train in a process of its
|
|
512
|
+
own, with `RELEASE_TRAIN` set to that train.
|
|
436
513
|
|
|
437
|
-
|
|
438
|
-
|
|
514
|
+
- If your config needs a train as it loads, for example because its plugins depend on the run's
|
|
515
|
+
train, set `RELEASE_TRAIN` in the job too. Any of its trains works: each train's run sets its own.
|
|
516
|
+
- If the job extends the component's install, which writes `.releaserc.json` from the config,
|
|
517
|
+
remove that file first (`rm -f .releaserc.json`). semantic-release reads it before
|
|
518
|
+
`release.config.mjs`, so every train would be decided as the train that the file was made from.
|
|
519
|
+
|
|
520
|
+
The bin writes three variables for each train, to its output and to the file. Each name holds the
|
|
521
|
+
train's name in upper case, with an underscore for each character that is not a letter or a digit:
|
|
439
522
|
|
|
440
523
|
```text
|
|
441
524
|
SEMREL_INFO_CORE_LAST_VERSION=1.2.0
|
|
@@ -443,35 +526,43 @@ SEMREL_INFO_CORE_NEXT_VERSION=1.3.0
|
|
|
443
526
|
SEMREL_INFO_CORE_NEXT_VERSION_TYPE=minor
|
|
444
527
|
```
|
|
445
528
|
|
|
446
|
-
A train with nothing to release has an empty next version and type, as the component's job
|
|
447
|
-
them
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
`
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
529
|
+
- A train with nothing to release has an empty next version and type, as the component's job
|
|
530
|
+
writes them. A build can tell by the empty value.
|
|
531
|
+
- The last version is the release that semantic-release counts on the branch. So a prerelease
|
|
532
|
+
merged into `main` is not `main`'s last version.
|
|
533
|
+
- A train that has made no release has an empty last version.
|
|
534
|
+
- If the names of two trains make the same variables, such as `a-b` and `a_b`, the bin fails
|
|
535
|
+
(`EINFOVARIABLE`).
|
|
536
|
+
- The jobs after it get the variables through `dotenv`, as from the component's own job, which this
|
|
537
|
+
job replaces. Keep `info-on` empty, its default, so that the component's job stays off.
|
|
538
|
+
- The values predict the release of the pipeline's commit. A push after it, or a release commit of
|
|
539
|
+
another train, can change what the release job decides.
|
|
540
|
+
|
|
541
|
+
### Build, smoke-test and publish in a tag pipeline
|
|
542
|
+
|
|
543
|
+
A release tag's pipeline runs three jobs, and no others:
|
|
544
|
+
|
|
545
|
+
1. `node-build`, of the [node component](https://gitlab.com/to-be-continuous/node), builds the
|
|
546
|
+
tagged commit.
|
|
547
|
+
2. `release-pack-smoke` packs every train from that build, and tries each package the way a
|
|
548
|
+
consumer installs it.
|
|
549
|
+
3. `publish-release` packs the same build and publishes it.
|
|
550
|
+
|
|
551
|
+
The tagged commit passed every check on its branch before it was tagged. A check that runs again on
|
|
552
|
+
the tag can fail after the release is pushed, as a flaky test does. A retry of the pipeline then
|
|
553
|
+
runs every check again, while a retry of one job is enough to finish a publish. So start the
|
|
554
|
+
`rules` of every other job, from a component or not, with `if: $CI_COMMIT_TAG`, `when: never`. A
|
|
555
|
+
job's `rules` replace its component's rules, so restate the component's rules after yours.
|
|
556
|
+
|
|
557
|
+
Keep `publish-release` short. It holds the ID tokens of npm and Sigstore, which expire at the job's
|
|
558
|
+
own `timeout`, or after 5 minutes when the job sets none. The project's timeout does not apply. A
|
|
559
|
+
job that builds, smoke-tests and publishes a train of many packages runs past them, and npm answers
|
|
560
|
+
`ENEEDAUTH`. So the build and the smoke test run before it, in jobs that hold no token, and
|
|
561
|
+
`publish-release` sets a `timeout` of its own.
|
|
562
|
+
|
|
563
|
+
`RELEASE_SMOKED` tells the config that `release-pack-smoke` already tried the build. The tag's run
|
|
564
|
+
of `@wtf/semantic-release-npm` then packs it with no `smoke`, through
|
|
565
|
+
`smoke: process.env.RELEASE_SMOKED !== 'true'` in the config.
|
|
475
566
|
|
|
476
567
|
```yaml
|
|
477
568
|
# The build of the component, of a release tag and of no other tag. It is what the publish packs, kept
|
|
@@ -548,60 +639,82 @@ publish-release:
|
|
|
548
639
|
- semantic-release-trains-tag
|
|
549
640
|
```
|
|
550
641
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
`
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
the
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
`
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
642
|
+
Notes on these jobs:
|
|
643
|
+
|
|
644
|
+
- `release-pack-smoke` and `publish-release` extend the component's `.semrel-base`, as its
|
|
645
|
+
`semantic-release` job does. They get its image and its global install: semantic-release at the
|
|
646
|
+
component's `version`, each plugin that the config names, and each line of
|
|
647
|
+
`semrel-required-plugins.txt`. So the branch's release and the tag's publish install from one
|
|
648
|
+
source.
|
|
649
|
+
- The component's `before_script` reads the config in the job's environment, where `RELEASE_TAG` is
|
|
650
|
+
not set. So it installs the plugins of a branch run. `semrel-required-plugins.txt` names the
|
|
651
|
+
plugins of the tag's run. `@wtf/semantic-release-npm` brings the bin `semantic-release-npm-smoke`,
|
|
652
|
+
as `@wtf/semantic-release-trains` brings `semantic-release-trains-tag`.
|
|
653
|
+
- If your config needs a train as it loads, for `trainTagFormat`, set `RELEASE_TRAIN` in each job's
|
|
654
|
+
`variables`, as the `semantic-release` job does. `semantic-release-npm-smoke` also loads the
|
|
655
|
+
config once in its job's environment, before it loads it for each train.
|
|
656
|
+
- Each job removes the `.releaserc.json` that the install writes, because semantic-release reads it
|
|
657
|
+
before `release.config.mjs`.
|
|
658
|
+
- `publish-release` is in the `resource_group` of the `semantic-release` job. Set the group's
|
|
659
|
+
`process_mode` to `oldest_first` with the API (`PUT /projects/:id/resource_groups/release`), so
|
|
660
|
+
that the publishes of several tags run in the order of their tags.
|
|
661
|
+
|
|
662
|
+
To finish a publish that failed part way, retry `publish-release` alone. It packs the build that
|
|
663
|
+
`node-build` keeps, and skips each package that the registry has. After the week that the build is
|
|
664
|
+
kept, retry `node-build` and `release-pack-smoke` first.
|
|
665
|
+
|
|
666
|
+
### Smoke-test packages in a merge request
|
|
667
|
+
|
|
668
|
+
`semantic-release-npm-smoke`, the bin of `@wtf/semantic-release-npm`, tries your packages in a merge
|
|
669
|
+
request job, which releases nothing. It packs every train of the config, or each train you name with
|
|
670
|
+
`--train`, from what the build wrote. Then it tries each package the way a consumer installs it, as
|
|
671
|
+
the plugin's `smoke` option does in `prepare`:
|
|
672
|
+
|
|
673
|
+
- It packs each train at `0.0.0-smoke.0`, a version that no registry has.
|
|
674
|
+
- It packs each train with its `@wtf/semantic-release-npm` options, as the config gives them to the
|
|
675
|
+
run of its tag. To read them, it sets `RELEASE_TRAIN` and `RELEASE_TAG` in the environment of a
|
|
676
|
+
Node process of its own, which loads the config.
|
|
677
|
+
- It resolves each range on another train to that train's smoke version.
|
|
678
|
+
- It packs each private package in a train's `pack` beside the train's packages, as a demo.
|
|
679
|
+
- It installs every package from the tarballs of all trains, and imports it, with the `forbid` of
|
|
680
|
+
the `smoke` option and the `conditions` of each entry.
|
|
681
|
+
|
|
682
|
+
So a demo that would not install from the packages of its release fails the merge request, not the
|
|
683
|
+
tag's pipeline. With the to-be-continuous components, this is the `release-pack-smoke` job of
|
|
684
|
+
[the tag pipeline](#build-smoke-test-and-publish-in-a-tag-pipeline), which also runs in merge
|
|
685
|
+
requests and on the branch. Without a component:
|
|
686
|
+
|
|
687
|
+
```yaml
|
|
688
|
+
smoke:
|
|
689
|
+
stage: test
|
|
690
|
+
needs: [build]
|
|
691
|
+
script:
|
|
692
|
+
- pnpm exec semantic-release-npm-smoke
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Skip a step when you start a job
|
|
696
|
+
|
|
697
|
+
Sometimes you want to start a job without one of its steps, for example to run a release again
|
|
698
|
+
whose tree is prepared already. `skipPlugins` of `@wtf/semantic-release-trains/config` does this
|
|
699
|
+
in a config that imports it. It leaves out each entry of `plugins` whose step id matches a pattern. The
|
|
700
|
+
pattern usually comes from a variable that a person sets when they start the job.
|
|
701
|
+
|
|
702
|
+
The step id (`stepId`) of an entry is:
|
|
703
|
+
|
|
704
|
+
| Entry | Step id |
|
|
705
|
+
| -------------------------- | ------------------------------------------------------------------------------------- |
|
|
706
|
+
| A plugin's name | The name |
|
|
707
|
+
| An entry with `wrap` | `<name>:<the plugin it wraps>` |
|
|
708
|
+
| An entry with `generated` | `<name>:generated` |
|
|
709
|
+
| Another entry with options | `<name>:<value>` of its first short `name`, `pkgRoot`, `path`, `tagFormat` or `train` |
|
|
710
|
+
|
|
711
|
+
- The pattern is unanchored: `exec` matches every step of `@semantic-release/exec`. Pin the end of
|
|
712
|
+
a short pattern with `$`.
|
|
713
|
+
- `skipPlugins` refuses a pattern that leaves out a plugin listed in `required`, such as the one
|
|
714
|
+
that makes the release commit. A tag with no release commit names a tree that does not declare
|
|
715
|
+
the release.
|
|
716
|
+
- It says what it left out and what it kept through `log`, which it requires. The config is the
|
|
717
|
+
root of its run, so it names where to write, such as stderr.
|
|
605
718
|
|
|
606
719
|
```js norun
|
|
607
720
|
// release.config.mjs
|
|
@@ -624,33 +737,42 @@ export default {
|
|
|
624
737
|
}
|
|
625
738
|
```
|
|
626
739
|
|
|
627
|
-
###
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
`
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
740
|
+
### How this repo's pipeline differs
|
|
741
|
+
|
|
742
|
+
This repo releases its packages in the trains of these guides: `system`, `trains`, `replace`,
|
|
743
|
+
`validate` and `docs`. It uses the `semantic-release` job above, with two differences, because its
|
|
744
|
+
own plugins are packages of its workspace, at versions that npm may not have yet:
|
|
745
|
+
|
|
746
|
+
1. **No global install of the plugins.** The job installs the workspace from its lockfile, as the
|
|
747
|
+
build does, and semantic-release and each plugin with it. It runs the semantic-release of the
|
|
748
|
+
lockfile. So its `release.config.mjs` imports the values of `@wtf/semantic-release-trains/config`
|
|
749
|
+
from the workspace, as the build built them, and is not a config of literals. The component still
|
|
750
|
+
writes `.releaserc.json` from it with `require()`, for the job's `RELEASE_TRAIN`, so the config
|
|
751
|
+
awaits nothing. The job removes the file.
|
|
752
|
+
2. **The build is restored over the checkout,** including the reference of `docs`. The job checks
|
|
753
|
+
out the tip of the branch, past release commits only, without `--force`. `--force` would put the
|
|
754
|
+
tip's reference back over the one that the build wrote.
|
|
755
|
+
|
|
756
|
+
Its other parts:
|
|
757
|
+
|
|
758
|
+
- Its `semantic-release-info` job gives the build the next release of every train. The build of
|
|
759
|
+
`docs` uses its own, `SEMREL_INFO_DOCS_NEXT_VERSION`, so each source link in the reference names
|
|
760
|
+
the tag `docs-v<version>` of the release that commits it. See
|
|
761
|
+
[Predict the next release of each train](#predict-the-next-release-of-each-train).
|
|
762
|
+
- The tag's `publish-release` job runs the workspace's `semantic-release-trains-tag`. Its config
|
|
763
|
+
finds the tag's train with `trainOfTag`. The job publishes the build of the tag's pipeline.
|
|
764
|
+
- The tags of every train, `system-v*`, `trains-v*`, `replace-v*`, `validate-v*` and `docs-v*`, are
|
|
765
|
+
protected, because `GITLAB_TOKEN` is a protected variable of the group.
|
|
649
766
|
|
|
650
767
|
## GitHub Actions
|
|
651
768
|
|
|
652
|
-
|
|
653
|
-
|
|
769
|
+
This workflow releases each train in a job of its own, one train at a time:
|
|
770
|
+
|
|
771
|
+
- The matrix lists the trains in the order of their dependencies. `max-parallel: 1` runs one train
|
|
772
|
+
at a time, in the order of the list.
|
|
773
|
+
- The `concurrency` group keeps two workflows from releasing at the same time.
|
|
774
|
+
- Each job pulls the branch first, so it starts from the release commit that the job before it
|
|
775
|
+
pushed.
|
|
654
776
|
|
|
655
777
|
```yaml
|
|
656
778
|
name: release
|
|
@@ -689,7 +811,7 @@ jobs:
|
|
|
689
811
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
690
812
|
```
|
|
691
813
|
|
|
692
|
-
|
|
814
|
+
To make a GitHub release of each train, wrap `@semantic-release/github`, and list it last:
|
|
693
815
|
|
|
694
816
|
```js train=replace
|
|
695
817
|
// release.config.mjs
|