devtools/src/lib/version/check.sh

108 lines
2.2 KiB
Bash

#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
[[ -z ${DEVTOOLS_INCLUDE_VERSION_CHECK_SH:-} ]] || return 0
DEVTOOLS_INCLUDE_VERSION_CHECK_SH=1
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
# shellcheck source=src/lib/common.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
source /usr/share/makepkg/util/message.sh
set -e
pkgctl_version_check_usage() {
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
Uses nvchecker, a .nvchecker.toml file and the current PKGBUILD
pkgver to check if there is a newer package version available.
The current working directory is used if no PKGBASE is specified.
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} neovim vim
_EOF_
}
pkgctl_version_check() {
local path
local pkgbases=()
local path pkgbase upstream_version
while (( $# )); do
case $1 in
-h|--help)
pkgctl_version_check_usage
exit 0
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
pkgbases=("$@")
break
;;
esac
done
if ! command -v nvchecker &>/dev/null; then
die "The \"$_DEVTOOLS_COMMAND\" command requires 'nvchecker'"
fi
# Check if used without pkgbases in a packaging directory
if (( ${#pkgbases[@]} == 0 )); then
if [[ -f PKGBUILD ]]; then
pkgbases=(".")
else
pkgctl_version_check_usage
exit 1
fi
fi
for path in "${pkgbases[@]}"; do
pushd "${path}" >/dev/null
if [[ ! -f "PKGBUILD" ]]; then
die "No PKGBUILD found for ${path}"
fi
# shellcheck disable=SC2119
upstream_version=$(get_upstream_version)
# TODO: parse .SRCINFO file
# shellcheck source=contrib/makepkg/PKGBUILD.proto
. ./PKGBUILD
pkgbase=${pkgbase:-$pkgname}
if (( $(vercmp "${upstream_version}" "${pkgver}") > 0 )); then
msg2 "New ${pkgbase} version ${upstream_version} is available upstream"
fi
popd >/dev/null
done
}
get_upstream_version() {
local config=${1:-.nvchecker.toml}
local upstream_version
if [[ ! -f $config ]]; then
die "No $config found"
fi
upstream_version=$(nvchecker -c "$config" --logger json | jq --raw-output 'select( .version ) | .version')
printf "%s" "$upstream_version"
}