summaryrefslogtreecommitdiff
path: root/make_release.sh
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2023-10-24 15:39:16 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2023-10-25 16:34:13 +0200
commit16d1d8e2a6fef61983c960573081b594bfcf257e (patch)
treedbc135ab94071f04fec5854d6c73a6efe96084d3 /make_release.sh
parentc9d1f0b089d3bc636b9636e2bcb0ac273606d3ce (diff)
Make release: Changes to automatically create a (pre-)release
Diffstat (limited to 'make_release.sh')
-rwxr-xr-xmake_release.sh69
1 files changed, 59 insertions, 10 deletions
diff --git a/make_release.sh b/make_release.sh
index b5275c1..5e56e5f 100755
--- a/make_release.sh
+++ b/make_release.sh
@@ -2,34 +2,71 @@
# This script was adapted from fkooman: https://git.sr.ht/~fkooman/vpn-daemon/tree/main/item/make_release.sh. Thanks!
#
-# Make a release of the latest tag, or of the tag/branch/commit specified as
-# the first parameter.
+# Make a release of the version specified in internal/version/version.go and automatically release the artifacts
#
# Fail if error
set -e
+# change these to your liking
+BRANCH=v1
+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)"
PROJECT_NAME=$(basename "${PWD}")
-PROJECT_VERSION=${1}
+PROJECT_VERSION=$(grep -o 'const Version = "[^"]*' internal/version/version.go | cut -d '"' -f 2)
RELEASE_DIR="${PWD}/release"
KEY_ID=227FF3F8F829D9A9314D9EBA02BB8048BBFF222C
+if [ "$IS_PRERELEASE" = true ]; then
+ KEY_ID=7A73D62AD0F084571A32C960D57104BF9B223CBF
+fi
-mkdir -p "${RELEASE_DIR}"
+if ! command -v "tar" &>/dev/null; then
+ echo "please install tar for archiving the code"
+ exit 1
+fi
-if [ -z "${1}" ]; then
- # we take the last "tag" of the Git repository as version
- PROJECT_VERSION=$(git describe --abbrev=0 --tags)
- echo Version: "${PROJECT_VERSION}"
+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
+fi
+
+if ! command -v "gpg" &>/dev/null; then
+ echo "please install gpg for signing the archive"
+ exit 1
fi
+if ! command -v "minisign" &>/dev/null; then
+ echo "please install minisign for signing the archive"
+ exit 1
+fi
+
+if [ "$(git tag -l "${PROJECT_VERSION}")" ]; then
+ echo "Version: ${PROJECT_VERSION} already has a tag"
+ exit 1
+fi
+
+mkdir -p "${RELEASE_DIR}"
+
if [ -f "${RELEASE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.xz" ]; then
echo "Version ${PROJECT_VERSION} already has a release!"
-
exit 1
fi
# Archive repository
-git archive --prefix "${PROJECT_NAME}-${PROJECT_VERSION}/" "${PROJECT_VERSION}" | tar -xf -
+git archive --prefix "${PROJECT_NAME}-${PROJECT_VERSION}/" "${BRANCH}" | tar -xf -
# We run "make vendor" in it to add all dependencies to the vendor directory
# so we have a self contained source archive.
@@ -51,3 +88,15 @@ 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"