Marty Oehme
dc68887091
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.
78 lines
3.7 KiB
YAML
78 lines
3.7 KiB
YAML
pipeline:
|
|
test:
|
|
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\""
|