This is hard fork from go-semantic-release for personal customize update
fully automated package/module/image publishing
A more lightweight and standalone version of semantic-release.
Instead of writing meaningless commit messages, we can take our time to think about the changes in the codebase and write them down. Following the AngularJS Commit Message Conventions it is then possible to generate a helpful changelog and to derive the next semantic version number from them.
When semantic-release
is setup it will do that after every successful continuous integration build of your default branch and publish the new version for you. This way no human is directly involved in the release process and your releases are guaranteed to be unromantic and unsentimental.
Source: semantic-release/semantic-release#how-does-it-work
You can enforce semantic commit messages using a git hook.
curl -SL https://get-release.xyz/meepo-lab/semantic-release/linux/amd64 -o ./semantic-release && chmod +x ./semantic-release
Since v2, semantic-release is equipped with a plugin system.
The plugins are standalone binaries that use hashicorp/go-plugin as a plugin library. semantic-release
automatically downloads the necessary plugins if they don't exist locally.
The plugins are stored in the .semrel
directory of the current working directory in the following format:
.semrel/<os>_<arch>/<plugin name>/<version>/
The semantic-release
plugins API (https://plugins.semantic-release.xyz/api/v1/
) is used to resolve plugins to the correct binary. The served content of the API can be found here, and a list of all existing plugins can be found here.
- Commit Analyzer (Docs, Example)
- CI Condition (Docs, Example)
- Changelog Generator (Docs, Example)
- Provider (Docs, Example)
- Files Updater (Docs, Example)
- Hooks: Updating...
Plugins can be configured using CLI flags or the .semrelrc
config file. By using a @
sign after the plugin name, the required version of the plugin can be specified. Otherwise, any locally installed version will be used. If the plugin does not exist locally, the latest version will be downloaded. This is an example of the .semrelrc
config file:
{
"plugins": {
"commit-analyzer": {
"name": "default@^1.0.0"
},
"ci-condition": {
"name": "default"
},
"changelog-generator": {
"name": "default",
"options": {
"emojis": "true"
}
},
"provider": {
"name": "gitlab",
"options": {
"gitlab_projectid": "123456"
}
},
"files-updater": {
"names": ["npm", "gradle"]
}
}
}
It is necessary to create a new Gitlab personal access token with the api
scope here.
Ensure the CI variable is protected and masked as the GITLAB_TOKEN
has a lot of rights. There is an open issue for project specific tokens
You can set the GitLab token via the GITLAB_TOKEN
environment variable or the -token
flag.
.gitlab-ci.yml
stages:
# other stages
- release
release:
image: registry.gitlab.com/ted-vo/semantic-release:latest # Replace this with the current release
stage: release
# Remove this if you want a release created for each push to master
when: manual
only:
- master
script:
- release
Beta release support empowers you to release beta, rc, etc. versions with semantic-release
(e.g. v2.0.0-beta.1). To enable this feature you need to create a new branch (e.g. beta/v2) and check in a .semrelrc
file with the following content:
{
"maintainedVersion": "2-beta"
}
If you commit to this branch a new incremental pre-release is created everytime you push. (2.0.0-beta.1, 2.0.0-beta.2, ...)
Copyright Β© 2020 Christoph Witzko, TedVo