From dc6888709117ef5598c7e43999576c1d827a67f8 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Thu, 10 Nov 2022 14:58:16 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20automated=20tagged=20releases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .woodpecker.yml | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index 0adf009..60e18dc 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -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
|' 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