227 lines
5.2 KiB
Markdown
227 lines
5.2 KiB
Markdown
# Configuration Reference
|
|
|
|
Learn about the configuration.
|
|
|
|
## Target
|
|
|
|
The target declares where a version file lives that can be bumped by the command-line tool.
|
|
|
|
A target can be specified either as a path from the root of the project to a file that contains the
|
|
version or as a module that contains the version file.
|
|
|
|
> Note: A version file should not contain any other code aside from the version as the entire file
|
|
> contents get over written when bumping the version.
|
|
|
|
### Target - Path Example
|
|
|
|
```json
|
|
{
|
|
"target": {
|
|
"path": "Sources/my-tool/Version.swift"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Target - Module Example
|
|
|
|
When using the module style a file name is not required if you use the default file name of
|
|
`Version.swift`, however it can be customized in your target specification.
|
|
|
|
```json
|
|
{
|
|
"target": {
|
|
"module": {
|
|
"fileName": "CustomVersion.swift",
|
|
"name": "my-tool"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
The above will parse the path to the file as `Sources/my-tool/CustomVersion.swift`.
|
|
|
|
## Strategy
|
|
|
|
The strategy declares how to generate the next version of your project. There are currently two
|
|
strategies, `branch` and `semvar`, that we will discuss.
|
|
|
|
### Branch Strategy
|
|
|
|
This is the most basic strategy, which will derive the version via the git branch and optionally the
|
|
short version of the commit sha.
|
|
|
|
An example of this style may look like: `main-8d73287a60`.
|
|
|
|
```json
|
|
{
|
|
"strategy": {
|
|
"branch": {
|
|
"includeCommitSha": true
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
If you set `'"includeCommitSha" : false'` then only the branch name will be used.
|
|
|
|
### Semvar Strategy
|
|
|
|
This is the most common strategy to use. It has support for generating the next version using either
|
|
`gitTag` or a custom `command` strategy.
|
|
|
|
#### Git Tag Strategy
|
|
|
|
The `gitTag` strategy derives the next version using the output of `git describe --tags` command.
|
|
This requires a commit to have a semvar style tag in it's history, otherwise we will use `0.0.0` as
|
|
the tag until a commit is tagged.
|
|
|
|
```json
|
|
{
|
|
"strategy": {
|
|
"semvar": {
|
|
"allowPreRelease": true,
|
|
"strategy": {
|
|
"gitTag": {
|
|
"exactMatch": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
If you set `'"exactMatch": true'` then bumping the version will fail on commits that are not
|
|
specifically tagged.
|
|
|
|
#### Custom Command Strategy
|
|
|
|
The custom `command` strategy allows you to call an external command to derive the next version. The
|
|
external command should return something that can be parsed as a semvar.
|
|
|
|
```json
|
|
{
|
|
"strategy": {
|
|
"semvar": {
|
|
"allowPreRelease": true,
|
|
"strategy": {
|
|
"command": {
|
|
"arguments": ["my-command", "--some-option", "foo"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
> Note: All arguments to custom commands need to be a separate string in the arguments array
|
|
> otherwise they may not get passed appropriately to the command, so
|
|
> `"my-command --some-option foo"` will likely not work as expected.
|
|
|
|
#### Pre-Release
|
|
|
|
Semvar strategies can also include a pre-release strategy that adds a suffix to the semvar version
|
|
that can be used. In order for pre-release suffixes to be allowed the `'"allowPreRelease": true'`
|
|
must be set on the semvar strategy, you must also supply a pre-release strategy either when calling
|
|
the bump-version command or in your configuration.
|
|
|
|
Currently there are three pre-release strategies, `branch`, `gitTag`, and custom `command`, which we
|
|
will discuss.
|
|
|
|
A pre-release semvar example: `1.0.0-1-8d73287a60`
|
|
|
|
##### Branch
|
|
|
|
This will use the branch and optionally short version of the commit sha in order to derive the
|
|
pre-release suffix.
|
|
|
|
```json
|
|
{
|
|
"strategy": {
|
|
"semvar": {
|
|
"allowPreRelease": true,
|
|
"preRelease": {
|
|
"strategy": {
|
|
"branch": {
|
|
"includeCommitSha": true
|
|
}
|
|
}
|
|
},
|
|
...
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This would produce something similar to: `1.0.0-main-8d73287a60`
|
|
|
|
##### Git Tag
|
|
|
|
This will use the full output of `git describe --tags` to include the pre-release suffix.
|
|
|
|
```json
|
|
{
|
|
"strategy" : {
|
|
"semvar" : {
|
|
"allowPreRelease" : true,
|
|
"preRelease" : {
|
|
"strategy" : {
|
|
"gitTag" : {}
|
|
}
|
|
},
|
|
...
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This would produce something similar to: `1.0.0-10-8d73287a60`
|
|
|
|
##### Custom Command
|
|
|
|
This allows you to call an external command to generate the pre-release suffix. We will use whatever
|
|
the output is as the suffix.
|
|
|
|
```json
|
|
{
|
|
"strategy": {
|
|
"semvar": {
|
|
"allowPreRelease": true,
|
|
"preRelease": {
|
|
"strategy": {
|
|
"command": {
|
|
"arguments": ["my-command", "--some-option", "foo"],
|
|
"allowPrefix": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
> Note: All arguments to custom commands need to be a separate string in the arguments array
|
|
> otherwise they may not get passed appropriately to the command, so
|
|
> `"my-command --some-option foo"` will likely not work as expected.
|
|
|
|
##### Pre-Release Prefixes
|
|
|
|
All pre-release strategies can also accept a `prefix` that will appended prior to the generated
|
|
pre-release suffix. This can also be used without providing a pre-release strategy to only append
|
|
the `prefix` to the semvar.
|
|
|
|
```json
|
|
{
|
|
"strategy" : {
|
|
"semvar" : {
|
|
"allowPreRelease" : true,
|
|
"preRelease" : {
|
|
"prefix": "rc"
|
|
},
|
|
...
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
This would produce something similar to: `1.0.0-rc`
|