✨ Add automated tagged releases
Using woodpecker ci most of the release process is now automated. That means as soon as a new version tag (e.g. `v0.2.3`) is pushed the release process is started and will (if versions have been bumped correctly) set up a new release on Gitea and Github simultaneously. The release process will fail if changelog and program versions mismatch, or the version has not been bumped in general. The release contains the executable and some documentation, including the README as a manpage-formatted gzip file which can be included in the correct directory to enable a simple manpage for the program.
This commit is contained in:
parent
16039fe676
commit
dc68887091
1 changed files with 73 additions and 0 deletions
|
@ -3,3 +3,76 @@ pipeline:
|
|||
image: bats/bats
|
||||
commands:
|
||||
- /opt/bats/bin/bats test
|
||||
|
||||
release-prep: # prepare changelog and version information for release candidate
|
||||
when:
|
||||
event: tag
|
||||
tag: v*
|
||||
image: alpine
|
||||
commands:
|
||||
- sed -ne 's/bm_version=\(.*\)/\1/p' bemoji > NEWEST_VERSION.txt
|
||||
- awk '/^## \[\d/{p++} p==2{print; exit} p>=1' CHANGELOG.md | head -n -1 | tail -n+3 > NEWEST_CHANGES.txt
|
||||
|
||||
versioncompare: # ensure we correctly bumped versions
|
||||
when:
|
||||
event: tag
|
||||
tag: v*
|
||||
image: alpine
|
||||
secrets: [ github_release_token, github_repo ]
|
||||
commands:
|
||||
- apk add jq curl
|
||||
- "lastversion=$(curl -X GET -H \"Accept: application/vnd.github.v3+json\" -H \"Authorization: Bearer $GITHUB_RELEASE_TOKEN\" https://api.github.com/repos/$GITHUB_REPO/releases/latest | jq -r '.name')"
|
||||
- "programversion=$(cat NEWEST_VERSION.txt)"
|
||||
- changelogversion=$(sed -ne 's/^## \[\([0-9].*\)\].*$/\1/p' CHANGELOG.md | head -n1)
|
||||
- echo "Last version - $lastversion"
|
||||
- echo "New version - $programversion"
|
||||
- echo "Changelog version - $changelogversion"
|
||||
- "if [ \"$changelogversion\" != \"$programversion\" ]; then { echo \"VERSION MISMATCH: Changelog - $changelogversion, Program - $programversion\" && exit 1; }; fi"
|
||||
- "if [ \"$lastversion\" = \"$programversion\" ]; then { echo \"RELEASE DUPLICATE: Last release already had version - $programversion\" && exit 1; }; fi"
|
||||
|
||||
build:
|
||||
when:
|
||||
event: tag
|
||||
tag: v*
|
||||
image: savant/md2man
|
||||
commands:
|
||||
- apk update && apk add zip
|
||||
- BM_VERSION=$(cat NEWEST_VERSION.txt)
|
||||
- mkdir -p build/doc dist
|
||||
- cp bemoji build
|
||||
- md2man -in README.md -out bemoji.1 && gzip bemoji.1
|
||||
- cp LICENSE README.md bemoji.1.gz build/doc
|
||||
- tar -czvf bemoji-$BM_VERSION.tar.gz build/*
|
||||
- zip -r bemoji-$BM_VERSION.zip build/*
|
||||
- mv bemoji-$BM_VERSION.tar.gz bemoji-$BM_VERSION.zip dist
|
||||
|
||||
release-gitea:
|
||||
group: release
|
||||
when:
|
||||
event: tag
|
||||
tag: v*
|
||||
image: plugins/gitea-release
|
||||
settings:
|
||||
api_key:
|
||||
from_secret: gitea_release_token
|
||||
base_url: https://git.martyoeh.me
|
||||
files: dist/*
|
||||
title: NEWEST_VERSION.txt
|
||||
note: NEWEST_CHANGES.txt
|
||||
|
||||
release-github:
|
||||
when:
|
||||
event: tag
|
||||
tag: v*
|
||||
image: alpine
|
||||
secrets: [ github_release_token, github_repo ]
|
||||
commands:
|
||||
- apk add file jq curl
|
||||
- BM_VERSION=$(cat NEWEST_VERSION.txt)
|
||||
- BM_CHANGED=$(sed -e 's|#||g' -e 's|^.*$|\0 <br />|' NEWEST_CHANGES.txt) # display newlines workaround
|
||||
- echo "{\"tag_name\":\"$BM_VERSION\",\"target_commitish\":\"main\",\"name\":\"$BM_VERSION\",\"body\":\"$BM_CHANGED\",\"draft\":false,\"prerelease\":false,\"generate_release_notes\":false}" > data.json
|
||||
- "response=$(curl -X POST -H \"Accept:\\ application/vnd.github+json\" -H \"Authorization:\\ Bearer $GITHUB_RELEASE_TOKEN\" https://api.github.com/repos/$GITHUB_REPO/releases -d \"@data.json\")"
|
||||
- "uploadurl=$(echo $response | jq -r '.upload_url' | cut -d'{' -f1)"
|
||||
- "[ $uploadurl = null ] && { echo $response; exit 1; }"
|
||||
- "curl -X POST -H \"Accept:\\ application/vnd.github.v3+json\" -H \"Authorization:\\ Bearer $GITHUB_RELEASE_TOKEN\" -H \"Content-Type:\\ $(file -b --mime-type dist/bemoji-$BM_VERSION.zip)\" -H \"Content-Length:\\ $(wc -c <dist/bemoji-$BM_VERSION.zip | xargs)\" -T dist/bemoji-$BM_VERSION.zip \"$uploadurl?name=bemoji-$BM_VERSION.zip\""
|
||||
- "curl -X POST -H \"Accept:\\ application/vnd.github.v3+json\" -H \"Authorization:\\ Bearer $GITHUB_RELEASE_TOKEN\" -H \"Content-Type:\\ $(file -b --mime-type dist/bemoji-$BM_VERSION.tar.gz)\" -H \"Content-Length:\\ $(wc -c <dist/bemoji-$BM_VERSION.tar.gz | xargs)\" -T dist/bemoji-$BM_VERSION.tar.gz \"$uploadurl?name=bemoji-$BM_VERSION.tar.gz\""
|
||||
|
|
Loading…
Reference in a new issue