1#!/bin/sh -eu 2 3build_dir=build-release 4 5if ! type glab >/dev/null; then 6 echo "glab is needed to create a release" 7 exit 1 8fi 9 10case "$(git rev-parse --abbrev-ref HEAD)" in 11main | [0-9]*.[0-9]*) 12 ;; 13*) 14 echo "Not on the main or a stable branch" 15 exit 1 16esac 17 18if [ -n "$(git log @{upstream}..)" ]; then 19 echo "The main branch has unpushed commits" 20 exit 1 21fi 22 23meson_options="" 24if [ -e "$build_dir" ]; then 25 meson_options="$meson_options --wipe" 26fi 27meson setup "$build_dir" $meson_options 28 29prev_version="$(git describe --tags --abbrev=0)" 30version="$(meson introspect "$build_dir" --projectinfo | jq -r .version)" 31if [ "$version" = "$prev_version" ]; then 32 echo "Version not bumped" 33 exit 1 34fi 35 36name="$(meson introspect "$build_dir" --projectinfo | jq -r .descriptive_name)" 37if [ "$name" = "" ]; then 38 echo "Cannot determine project name" 39 exit 1 40fi 41 42ninja -C "$build_dir" dist 43 44archive_name="$name-$version.tar.xz" 45archive_path="$build_dir/meson-dist/$archive_name" 46gpg --detach-sig "$archive_path" 47 48sha256="$(cd $build_dir/meson-dist && sha256sum $archive_name)" 49sha512="$(cd $build_dir/meson-dist && sha512sum $archive_name)" 50archive_url="https://gitlab.freedesktop.org/wayland/$name/-/releases/$version/downloads/$archive_name" 51announce_path="$build_dir/meson-dist/$name-$version-announce.eml" 52current_branch=$(git branch --show-current) 53remote_name=$(git config --get branch.${current_branch}.remote) 54 55cat >"$announce_path" <<EOF 56To: <[email protected]> 57Subject: [ANNOUNCE] $name $version 58 59`git shortlog --no-merges "$prev_version.."` 60 61git tag: $version 62 63$archive_url 64SHA256: $sha256 65SHA512: $sha512 66PGP: $archive_url.sig 67EOF 68 69echo "Release announcement written to $announce_path" 70 71echo -n "Release $name $version? [y/N] " 72read answer 73if [ "$answer" != "y" ]; then 74 exit 1 75fi 76 77git tag -s -m "$version" "$version" 78git push "$remote_name" "$version" 79glab release create "$version" "$archive_path"* --notes "" 80