<!--
Hi, thanks for contributing!
Please make sure you read our CONTRIBUTING guide.
Also, add tests and the respective documentation changes as well.
-->
<!-- If applied, this commit will... -->
This commit will fix bad version tag sort if there is a prerelease on
the same commit as a release tag. Current output is shown below
```
❯ git tag --points-at HEAD --sort=-version:refname --format='%(creatordate)%09%(refname)'
Thu Mar 2 21:38:51 2023 +0300 refs/tags/v1.13.0-rc3
Thu Mar 2 21:38:51 2023 +0300 refs/tags/v1.13.0
```
Test is changed to match current default value so it will fail without
this fix.
Default value `-` is set to the one that is described inside
[docs](https://goreleaser.com/how-it-works/?h=prerelease#how-it-works),
but people are still allowed to change it.
Output with fix applied
```
❯ git -c versionsort.suffix=- tag --points-at HEAD --sort -version:refname --format='%(creatordate)%09%(refname)'
Thu Mar 2 21:38:51 2023 +0300 refs/tags/v1.13.0
Thu Mar 2 21:38:51 2023 +0300 refs/tags/v1.13.0-rc3
```
<!-- # Provide links to any relevant tickets, URLs or other resources
-->
More info about `versionsort.suffix` can be found
[here](https://github.com/git/git/blob/master/Documentation/config/versionsort.txt#L5)
Docs as well both schemas are updated as well.
I am not sure if users should be allowed to change this option at all.
alternative to #3806
the idea is that both `context.New` and `context.Context{}` are never
used in tests.
not sure yet how much I like it, so far code does look a bit more
readable though.
---------
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* feat: annotated tag body
this adds another template variable, `TagBody`, with the body of the annotated tag/commit message only.
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* refactor: tag contents
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* feat: expose .PreviousTag
* fix: previous tag will never be a commit
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: tests
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* docs: tag
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: tag sorting
When the HEAD commit has multiple tags, they are sorted in order to select the latest so that it can be released.
However, the existing sort would not work if there were multiple commits across a Wednesday and a Thursday.
For example:
```
git tag --points-at HEAD --format='%(creatordate)%09%(refname)'
Wed Jul 28 07:13:19 2021 +0000 refs/tags/v0.0.183
Thu Jul 29 13:31:07 2021 +0000 refs/tags/v0.0.184
Thu Jul 29 13:38:42 2021 +0000 refs/tags/v0.0.185
Thu Jul 29 13:57:44 2021 +0000 refs/tags/v0.0.186
```
When using the existing sort the `creatordate` field was targeted and reversed. Alphabetically Thursday comes before Wednesday, so that is reversed and the Wednesday release always comes first:
```
git tag --points-at HEAD --sort=-version:creatordate --format='%(creatordate)%09%(refname)'
Wed Jul 28 07:13:19 2021 +0000 refs/tags/v0.0.183
Thu Jul 29 13:57:44 2021 +0000 refs/tags/v0.0.186
Thu Jul 29 13:38:42 2021 +0000 refs/tags/v0.0.185
Thu Jul 29 13:31:07 2021 +0000 refs/tags/v0.0.184
```
This would make goreleaser attempt to release that existing tag again, and fail.
If we instead sort by reversed `refname` we get the tags ordered by their numeric value, which ignore the day of the week of release:
```
git tag --points-at HEAD --sort=-version:refname --format='%(creatordate)%09%(refname)'
Thu Jul 29 13:57:44 2021 +0000 refs/tags/v0.0.186
Thu Jul 29 13:38:42 2021 +0000 refs/tags/v0.0.185
Thu Jul 29 13:31:07 2021 +0000 refs/tags/v0.0.184
Wed Jul 28 07:13:19 2021 +0000 refs/tags/v0.0.183
```
Allowing the latest version, 0.0.186 in this case, to be targeted for release.
* corrected test case
* add space
* remove space
* feat: fail on shallow clone
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: typo
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: filepath
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
Add a `.Branch` field to the text templates populated by the current git
branch.
Signed-off-by: Ben Kochie <superq@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
* refactor: use require on all tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use require on all tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
* Make checksum ordering consistent
* Use consistent time for build date
* Add commit date to templates
* Add config option for build mod timestamp
* Make goreleaser builds reproducible
* Fix error in wording
* Update www/docs/customization/build.md
* fix(git): Use CI envronment variables to figure out tag
This patch detects CI environments and uses the available tag information when
collecting the git tag.
This resolves issues where one commit has multiple tags.
Closes#1163Closes#1311
* Update www/content/release.md
Co-Authored-By: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Update www/content/release.md
Co-Authored-By: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Update www/content/build.md
Co-Authored-By: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Update www/content/release.md
Co-Authored-By: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* feat(doc): Document git tag override in environment
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>