From 7c5ff7b0f67d6c69d99ff6152b58778c32b5d204 Mon Sep 17 00:00:00 2001 From: jwijenbergh Date: Tue, 26 Nov 2024 11:37:50 +0100 Subject: Release scripts: Move to Codeberg --- docs/md/building.md | 12 +++++++++ internal/version/version.go | 2 +- make_release.sh | 44 ++++++++++-------------------- upload_release.sh | 66 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 31 deletions(-) create mode 100755 upload_release.sh diff --git a/docs/md/building.md b/docs/md/building.md index 1afd0e6..1932042 100644 --- a/docs/md/building.md +++ b/docs/md/building.md @@ -68,6 +68,18 @@ To build for release, make sure to extract the tarball, and then add `-tags=rele GOFLAGS="-tags=release" make ``` +To upload the releases to Codeberg, run: +```bash +./make_release.sh +./upload_release.sh +``` + +For pre-releases: +```bash +./make_release.sh -p +./upload_release.sh -p +``` + ### Package formats We support the following additional package formats: RPM (Linux, Fedora) and Deb (Linux, Debian derivatives) diff --git a/internal/version/version.go b/internal/version/version.go index f1e1986..a3ad439 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -6,4 +6,4 @@ package version // Version is the latest version // Update this when releasing -const Version = "2.1.0" +const Version = "2.99.0" diff --git a/make_release.sh b/make_release.sh index 7f55ebd..02affb0 100755 --- a/make_release.sh +++ b/make_release.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # This script was adapted from fkooman: https://git.sr.ht/~fkooman/vpn-daemon/tree/main/item/make_release.sh. Thanks! # @@ -8,23 +8,24 @@ # Fail if error set -e -# change these to your liking -BRANCH=main -IS_PRERELEASE=true -REPO="eduvpn/eduvpn-common" - -# make a fresh clone -rm -rf /tmp/eduvpn-common -git clone "https://github.com/$REPO" /tmp/eduvpn-common -cd /tmp/eduvpn-common -git checkout ${BRANCH} - echo "building $(git log -n 1 | head -n 1)" +BRANCH="main" PROJECT_NAME=$(basename "${PWD}") PROJECT_VERSION=$(grep -o 'const Version = "[^"]*' internal/version/version.go | cut -d '"' -f 2) +PRERELEASE=false + +while [[ "$#" -gt 0 ]]; do + case $1 in + -p|--prerelease) PRERELEASE=true ;; + -v|--version) PROJECT_VERSION="$2"; shift ;; + *) echo "Unknown parameter passed: $1"; exit 1 ;; + esac + shift +done + RELEASE_DIR="${PWD}/release" KEY_ID=227FF3F8F829D9A9314D9EBA02BB8048BBFF222C -if [ "$IS_PRERELEASE" = true ]; then +if [ "$PRERELEASE" = true ]; then KEY_ID=7A73D62AD0F084571A32C960D57104BF9B223CBF fi @@ -33,11 +34,6 @@ if ! command -v "tar" &>/dev/null; then exit 1 fi -if ! command -v "gh" &>/dev/null; then - echo "please install the GitHub CLI for creating releases" - exit 1 -fi - if ! command -v "wget" &>/dev/null; then echo "please install wget for getting the discovery files" exit 1 @@ -88,15 +84,3 @@ rm -rf "${PROJECT_NAME}-${PROJECT_VERSION}" echo "signing using gpg and minisign" gpg --default-key ${KEY_ID} --armor --detach-sign "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz" minisign -Sm "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz" - -# upload the release with the github cli tool, this also creates a tag -CHANGES_TRIM=$(sed "/^# $PROJECT_VERSION/,/^#/!d;//d" "CHANGES.md") - -if [ "$IS_PRERELEASE" = true ]; then - CHANGES=$(printf "These pre-releases are signed with \`keys/app+linux+dev@eduvpn.org.asc\` and \`keys/minisign-CA9409316AC93C07.pub\`\nChangelog:\n%s" "${CHANGES_TRIM}") - gh release create "${PROJECT_VERSION}" --target "${BRANCH}" --title "${PROJECT_VERSION}" --notes "${CHANGES}" --prerelease --repo "$REPO" -else - CHANGES=$(printf "These releases are signed with \`keys/app+linux@eduvpn.org.asc\` and \`keys/minisign-CA9409316AC93C07.pub\`\nChangelog:\n%s" "${CHANGES_TRIM}") - gh release create "${PROJECT_VERSION}" --target "${BRANCH}" --title "${PROJECT_VERSION}" --notes "${CHANGES}" --repo "$REPO" -fi -gh release upload "${PROJECT_VERSION}" "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz" --repo "$REPO" "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz.asc" "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz.minisig" diff --git a/upload_release.sh b/upload_release.sh new file mode 100755 index 0000000..734acde --- /dev/null +++ b/upload_release.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# This script was adapted from: https://codeberg.org/eduVPN/development/src/branch/main/development-setup-v3.md#codeberg +# Thanks fkooman again! + +# exit on error +set -e + +API_KEY_FILE="${HOME}/.config/codeberg.org/api.key" + +if [ ! -f "$API_KEY_FILE" ]; then + echo "You have to create a Codeberg API key and put it in $API_KEY_FILE, see: https://codeberg.org/eduVPN/development/src/branch/main/development-setup-v3.md#codeberg" + exit 1 +fi +ORG=eduVPN +API_KEY=$(cat "$API_KEY_FILE") +PROJECT_NAME=$(basename "$(pwd)") +PROJECT_VERSION=$(grep -o 'const Version = "[^"]*' internal/version/version.go | cut -d '"' -f 2) +PRERELEASE=false + +while [[ "$#" -gt 0 ]]; do + case $1 in + -p|--prerelease) PRERELEASE=true ;; + -v|--version) PROJECT_VERSION="$2"; shift ;; + *) echo "Unknown parameter passed: $1"; exit 1 ;; + esac + shift +done + +CHANGES_TRIM=$(sed "/^# $PROJECT_VERSION/,/^#/!d;//d" "CHANGES.md") +if [ "$PRERELEASE" = true ]; then + CHANGES=$(printf "These pre-releases are signed with \`keys/app+linux+dev@eduvpn.org.asc\` and \`keys/minisign-CA9409316AC93C07.pub\`\nChangelog:\n%s" "${CHANGES_TRIM}") +else + CHANGES=$(printf "These releases are signed with \`keys/app+linux@eduvpn.org.asc\` and \`keys/minisign-CA9409316AC93C07.pub\`\nChangelog:\n%s" "${CHANGES_TRIM}") +fi + +if ! command -v "curl" &>/dev/null; then + echo "please install curl for contacting the Codeberg API" + exit 1 +fi + +if ! command -v "jq" &>/dev/null; then + echo "please install jq for parsing JSON" + exit 1 +fi + +JSON_BODY="{\"body\": \"${CHANGES}\", \"tag_name\": \"${PROJECT_VERSION}\", \"prerelease\": ${PRERELEASE}}" + +# create the release +RELEASE_ID=$(curl -s \ + -H "Authorization: token ${API_KEY}" \ + -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -d "${JSON_BODY}" \ + "https://codeberg.org/api/v1/repos/${ORG}/${PROJECT_NAME}/releases" | jq -r .id) + +# upload the artifact(s) +for F in release/*"${PROJECT_VERSION}"*; do + curl \ + -s \ + -X "POST" \ + -H "Authorization: token ${API_KEY}" \ + -H "Accept: application/json" \ + -H "Content-Type: multipart/form-data" \ + -F "attachment=@${F}" \ + "https://codeberg.org/api/v1/repos/${ORG}/${PROJECT_NAME}/releases/${RELEASE_ID}/assets" +done -- cgit v1.2.3