devtools/src/archrelease.in

62 lines
1.6 KiB
Plaintext
Raw Normal View History

#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
m4_include(lib/common.sh)
m4_include(lib/valid-tags.sh)
2010-02-22 08:13:43 +01:00
# parse command line options
FORCE=
while getopts ':f' flag; do
case $flag in
f) FORCE=1 ;;
:) die "Option requires an argument -- '%s'" "$OPTARG" ;;
\?) die "Invalid option -- '%s'" "$OPTARG" ;;
esac
done
shift $(( OPTIND - 1 ))
if ! (( $# )); then
echo 'Usage: archrelease [-f] <repo>...'
exit 1
fi
# validate repo is really repo-arch
if [[ -z $FORCE ]]; then
for tag in "$@"; do
if ! in_array "$tag" "${_tags[@]}"; then
die "archrelease: Invalid tag: '%s' (use -f to force release)" "$tag"
fi
done
fi
if [[ ! -f PKGBUILD ]]; then
die 'archrelease: PKGBUILD not found'
fi
. ./PKGBUILD
pkgbase=${pkgbase:-$pkgname}
pkgver=$(get_full_version "$pkgbase")
tag_pkgver=release-${pkgver/:/-}
if git rev-parse "$tag_pkgver" >/dev/null 2>&1; then
die "archrelease: the tag $pkgver already exists in the repository!"
fi
# If the tag exists we check if it's properly signed and that it
# matches the working directory PKGBUILD.
if git tag --verify "$tag_pkgver" &> /dev/null; then
cwd_checksum=$(sha256sum PKGBUILD|cut -d' ' -f1)
tag_checksum=$(git show $tag_pkgver:PKGBUILD | sha256sum |cut -d' ' -f1)
if [[ "$cwd_checksum" != "$tag_checksum" ]]; then
die "tagged PKGBUILD is not the same as the working dir PKGBUILD"
fi
exit 0
fi
stat_busy "Releasing package"
printf -v tag_list ", %s" "$@"; tag_list="${tag_list#, }"
git tag -s -m "archrelease: released $pkgbase-$pkgver to $tag_list" "$tag_pkgver" || abort
git push --tags || abort
stat_done