.releaserc
au format .yaml
, .json
ou .js
)Basé sur du Semantic Versioning (ou semver), spécification (assez complète) pour le nommage de version. Quelques exemples :
1.0.0
12.16.1788
1.0.0-beta.1
1.0.0+702c7fcc879cf8cd0401e70fc083386e07ff0a35
1.0.0+702c7fcc879
1.0.0-dev.702c7fcc879
Commun en supplément d’ajouter le préfixe “v” aux versions,
l’option tagFormat
permet de paramétrer plus précisement le format du tag créé.
--extends
--branches
--tagFormat
--plugins
--repositoryUrl
--dry-run
--ci
/ --no-ci
--debug
Gère les globs micromatch
branches:
# 1.12.x, 1.x, 1.x.x
- +([0-9])?(.{+([0-9]),x}).x
- master
- main
- next
- next-major
# la branche nommée "beta" est catégorisée en *prerelease*
# le *tag* créé sera de la forme 1.12.5-beta.X
- { name: "beta", prerelease: true }
# la branche nommée "staging" est catégorisée en *prerelease*
# le *tag* créé sera de la forme 1.12.5-beta.X
- { name: "staging", prerelease: "beta" }
Par défaut, semantic-release ne gère que la création du tag git et force la présence d’au moins une extension pour l’analyse des commits.
Quelques comportements pouvant être ajoutés par les extensions :
package.json
avec la nouvelle version (attention ce n’est pas poussé sur le dépôt git)plugins:
- - "@semantic-release/commit-analyzer"
- preset: conventionalcommits
releaseRules:
- { breaking: true, release: "major" }
- { revert: true, release: "patch" }
- { type: "feat", release: "minor" }
- { type: "fix", release: "patch" }
- { type: "revert", release: "patch" }
- { type: "docs", release: "patch" }
- { type: "refactor", release: "minor" }
- { scope: "release", release: false }
parserOpts:
noteKeywords: [ "BREAKING CHANGES", "BREAKING" ]
plugins:
- - "@semantic-release/release-notes-generator"
- preset: conventionalcommits
presetConfig:
types:
- { type: "feat", section: "Features" }
- { type: "fix", section: "Bug Fixes" }
- { type: "revert", section: "Reverts" }
- { type: "docs", section: "Documentation" }
- { type: "refactor", section: "Code Refactoring" }
- { type: "test", section: "Tests", hidden: true }
parserOpts:
noteKeywords: [ "BREAKING CHANGES", "BREAKING" ]
export interface Config {
dryRun: boolean
repositoryUrl: string
[k: string]: any
}
export const verifyConditions = async (Config, VerifyConditionsContext)
export const analyzeCommits = async (Config, AnalyzeCommitsContext)
export const verifyRelease = async (Config, VerifyReleaseContext)
export const generateNotes = async (Config, GenerateNotesContext)
export const addChannel = async (Config, AddChannelContext)
export const prepare = async (Config, PrepareContext)
export const publish = async (Config, PublishContext)
export const success = async (Config, SuccessContext)
export const fail = async (Config, FailContext)