scripts(lint-packages): housekeeping and cleanup

[no ci]
- standardize on bash test `[[ ]]`
- use arithmetic evaluation for numeric tests `(( ))`
- turn `if/else`'s into guard clauses where applicable
- use `case` for `true|false` variables
This commit is contained in:
TomIO 2024-04-23 17:13:06 +02:00 committed by TomIO
parent 593a6a73b7
commit 86fbe4846a
1 changed files with 145 additions and 138 deletions

View File

@ -42,28 +42,28 @@ check_package_license() {
esac
done
if $license_ok; then
return 0
else
if ! "$license_ok"; then
return 1
fi
return 0
}
check_package_name() {
local pkg_name=$1
local pkg_name="$1"
echo -n "Package name '${pkg_name}': "
if [ "${#pkg_name}" -ge 2 ]; then
if grep -qP '^[0-9a-z][0-9a-z+\-\.]+$' <<< "${pkg_name}"; then
echo "PASS"
return 0
else
echo "INVALID (contains characters that are not allowed)"
return 1
fi
else
if (( ${#pkg_name} < 2 )); then
echo "INVALID (less than two characters long)"
return 1
fi
if ! grep -qP '^[0-9a-z][0-9a-z+\-\.]+$' <<< "${pkg_name}"; then
echo "INVALID (contains characters that are not allowed)"
return 1
fi
echo "PASS"
return 0
}
check_indentation() {
@ -183,7 +183,7 @@ lint_package() {
# Using API 24 here.
TERMUX_PKG_API_LEVEL=24
if [ -f "$TERMUX_SCRIPTDIR/scripts/properties.sh" ]; then
if [[ -f "$TERMUX_SCRIPTDIR/scripts/properties.sh" ]]; then
. "$TERMUX_SCRIPTDIR/scripts/properties.sh"
fi
@ -192,7 +192,7 @@ lint_package() {
pkg_lint_error=false
echo -n "TERMUX_PKG_HOMEPAGE: "
if [ -n "$TERMUX_PKG_HOMEPAGE" ]; then
if (( ${#TERMUX_PKG_HOMEPAGE} )); then
if ! grep -qP '^https://.+' <<< "$TERMUX_PKG_HOMEPAGE"; then
echo "NON-HTTPS (acceptable)"
else
@ -204,26 +204,24 @@ lint_package() {
fi
echo -n "TERMUX_PKG_DESCRIPTION: "
if [ -n "$TERMUX_PKG_DESCRIPTION" ]; then
str_length=$(($(wc -c <<< "$TERMUX_PKG_DESCRIPTION") - 1))
if (( ${#TERMUX_PKG_DESCRIPTION} )); then
if [ $str_length -gt 100 ]; then
if (( ${#TERMUX_PKG_DESCRIPTION} > 100 )); then
echo "TOO LONG (allowed: 100 characters max)"
else
echo "PASS"
fi
unset str_length
else
echo "NOT SET"
pkg_lint_error=true
fi
echo -n "TERMUX_PKG_LICENSE: "
if [ -n "$TERMUX_PKG_LICENSE" ]; then
if [ "$TERMUX_PKG_LICENSE" = "custom" ]; then
if (( ${#TERMUX_PKG_LICENSE} )); then
if [[ "$TERMUX_PKG_LICENSE" == 'custom' ]]; then
echo "CUSTOM"
elif [ "$TERMUX_PKG_LICENSE" = "non-free" ]; then
elif [[ "$TERMUX_PKG_LICENSE" == 'non-free' ]]; then
echo "NON-FREE"
else
if check_package_license "$TERMUX_PKG_LICENSE"; then
@ -239,18 +237,18 @@ lint_package() {
fi
echo -n "TERMUX_PKG_MAINTAINER: "
if [ -n "$TERMUX_PKG_MAINTAINER" ]; then
if (( ${#TERMUX_PKG_MAINTAINER} )); then
echo "PASS"
else
echo "NOT SET"
pkg_lint_error=true
fi
if [ -n "$TERMUX_PKG_API_LEVEL" ]; then
echo -n "TERMUX_PKG_API_LEVEL: "
if (( ${#TERMUX_PKG_API_LEVEL} )); then
echo -n "TERMUX_PKG_API_LEVEL: "
if grep -qP '^[1-9][0-9]$' <<< "$TERMUX_PKG_API_LEVEL"; then
if [ $TERMUX_PKG_API_LEVEL -lt 24 ] || [ $TERMUX_PKG_API_LEVEL -gt 28 ]; then
if (( TERMUX_PKG_API_LEVEL < 24 || TERMUX_PKG_API_LEVEL > 28 )); then
echo "INVALID (allowed: number in range 24 - 28)"
pkg_lint_error=true
else
@ -263,7 +261,7 @@ lint_package() {
fi
echo -n "TERMUX_PKG_VERSION: "
if [ -n "$TERMUX_PKG_VERSION" ]; then
if (( ${#TERMUX_PKG_VERSION} )); then
if grep -qiP '^([0-9]+\:)?[0-9][0-9a-z+\-\.\~]*$' <<< "${TERMUX_PKG_VERSION}"; then
echo "PASS"
else
@ -275,10 +273,10 @@ lint_package() {
pkg_lint_error=true
fi
if [ -n "$TERMUX_PKG_REVISION" ]; then
echo -n "TERMUX_PKG_REVISION: "
if (( ${#TERMUX_PKG_REVISION} )); then
echo -n "TERMUX_PKG_REVISION: "
if grep -qP '^[1-9](\d{1,8})?$' <<< "$TERMUX_PKG_REVISION"; then
if (( TERMUX_PKG_REVISION > 1 || TERMUX_PKG_REVISION < 999999999 )); then
echo "PASS"
else
echo "INVALID (allowed: number in range 1 - 999999999)"
@ -286,23 +284,24 @@ lint_package() {
fi
fi
if [ -n "$TERMUX_PKG_SKIP_SRC_EXTRACT" ]; then
echo -n "TERMUX_PKG_SKIP_SRC_EXTRACT: "
if (( ${#TERMUX_PKG_SKIP_SRC_EXTRACT} )); then
echo -n "TERMUX_PKG_SKIP_SRC_EXTRACT: "
if [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" = "true" ] || [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_SKIP_SRC_EXTRACT" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_SRCURL" ]; then
echo -n "TERMUX_PKG_SRCURL: "
echo -n "TERMUX_PKG_SRCURL: "
if (( ${#TERMUX_PKG_SRCURL} )); then
urls_ok=true
for url in "${TERMUX_PKG_SRCURL[@]}"; do
if [ -n "$url" ]; then
if (( ${#url} )); then
if ! grep -qP '^git\+https://.+' <<< "$url" && ! grep -qP '^https://.+' <<< "$url"; then
echo "NON-HTTPS (acceptable)"
urls_ok=false
@ -317,18 +316,18 @@ lint_package() {
done
unset url
if $urls_ok; then
if "$urls_ok"; then
echo "PASS"
fi
unset urls_ok
echo -n "TERMUX_PKG_SHA256: "
if [ -n "$TERMUX_PKG_SHA256" ]; then
if [ "${#TERMUX_PKG_SRCURL[@]}" -eq "${#TERMUX_PKG_SHA256[@]}" ]; then
if (( ${#TERMUX_PKG_SHA256} )); then
if (( ${#TERMUX_PKG_SRCURL[@]} == ${#TERMUX_PKG_SHA256[@]} )); then
sha256_ok=true
for sha256 in "${TERMUX_PKG_SHA256[@]}"; do
if ! grep -qP '^[0-9a-fA-F]{64}$' <<< "${sha256}" && [ "$sha256" != "SKIP_CHECKSUM" ]; then
if ! grep -qP '^[0-9a-fA-F]{64}$' <<< "${sha256}" && [[ "$sha256" != 'SKIP_CHECKSUM' ]]; then
echo "MALFORMED (SHA-256 should contain 64 hexadecimal numbers)"
sha256_ok=false
pkg_lint_error=true
@ -345,112 +344,121 @@ lint_package() {
echo "LENGTHS OF 'TERMUX_PKG_SRCURL' AND 'TERMUX_PKG_SHA256' ARE NOT EQUAL"
pkg_lint_error=true
fi
elif [ "${TERMUX_PKG_SRCURL:0:4}" == "git+" ]; then
elif [[ "${TERMUX_PKG_SRCURL:0:4}" == 'git+' ]]; then
echo "NOT SET (acceptable since TERMUX_PKG_SRCURL is git repo)"
else
echo "NOT SET"
pkg_lint_error=true
fi
else
if [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" != "true" ] && ! declare -F termux_step_extract_package > /dev/null 2>&1; then
if [[ "$TERMUX_PKG_SKIP_SRC_EXTRACT" != 'true' ]] && ! declare -F termux_step_extract_package > /dev/null 2>&1; then
echo "TERMUX_PKG_SRCURL: NOT SET (set TERMUX_PKG_SKIP_SRC_EXTRACT to 'true' if no sources downloaded)"
pkg_lint_error=true
fi
fi
if [ -n "$TERMUX_PKG_METAPACKAGE" ]; then
echo -n "TERMUX_PKG_METAPACKAGE: "
if (( ${#TERMUX_PKG_METAPACKAGE} )); then
echo -n "TERMUX_PKG_METAPACKAGE: "
if [ "$TERMUX_PKG_METAPACKAGE" = "true" ] || [ "$TERMUX_PKG_METAPACKAGE" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_METAPACKAGE" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_ESSENTIAL" ]; then
echo -n "TERMUX_PKG_ESSENTIAL: "
if [ "$TERMUX_PKG_ESSENTIAL" = "true" ] || [ "$TERMUX_PKG_ESSENTIAL" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
if (( ${#TERMUX_PKG_ESSENTIAL} )); then
echo -n "TERMUX_PKG_ESSENTIAL: "
case "$TERMUX_PKG_ESSENTIAL" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_NO_STATICSPLIT" ]; then
echo -n "TERMUX_PKG_NO_STATICSPLIT: "
if (( ${#TERMUX_PKG_NO_STATICSPLIT} )); then
echo -n "TERMUX_PKG_NO_STATICSPLIT: "
if [ "$TERMUX_PKG_NO_STATICSPLIT" = "true" ] || [ "$TERMUX_PKG_NO_STATICSPLIT" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_NO_STATICSPLIT" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_BUILD_IN_SRC" ]; then
echo -n "TERMUX_PKG_BUILD_IN_SRC: "
if (( ${#TERMUX_PKG_BUILD_IN_SRC} )); then
echo -n "TERMUX_PKG_BUILD_IN_SRC: "
if [ "$TERMUX_PKG_BUILD_IN_SRC" = "true" ] || [ "$TERMUX_PKG_BUILD_IN_SRC" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_BUILD_IN_SRC" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_HAS_DEBUG" ]; then
echo -n "TERMUX_PKG_HAS_DEBUG: "
if (( ${#TERMUX_PKG_HAS_DEBUG} )); then
echo -n "TERMUX_PKG_HAS_DEBUG: "
if [ "$TERMUX_PKG_HAS_DEBUG" = "true" ] || [ "$TERMUX_PKG_HAS_DEBUG" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_HAS_DEBUG" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_PLATFORM_INDEPENDENT" ]; then
echo -n "TERMUX_PKG_PLATFORM_INDEPENDENT: "
if (( ${#TERMUX_PKG_PLATFORM_INDEPENDENT} )); then
echo -n "TERMUX_PKG_PLATFORM_INDEPENDENT: "
if [ "$TERMUX_PKG_PLATFORM_INDEPENDENT" = "true" ] || [ "$TERMUX_PKG_PLATFORM_INDEPENDENT" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_PLATFORM_INDEPENDENT" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_HOSTBUILD" ]; then
echo -n "TERMUX_PKG_HOSTBUILD: "
if (( ${#TERMUX_PKG_HOSTBUILD} )); then
echo -n "TERMUX_PKG_HOSTBUILD: "
if [ "$TERMUX_PKG_HOSTBUILD" = "true" ] || [ "$TERMUX_PKG_HOSTBUILD" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_HOSTBUILD" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_FORCE_CMAKE" ]; then
echo -n "TERMUX_PKG_FORCE_CMAKE: "
if (( ${#TERMUX_PKG_FORCE_CMAKE} )); then
echo -n "TERMUX_PKG_FORCE_CMAKE: "
if [ "$TERMUX_PKG_FORCE_CMAKE" = "true" ] || [ "$TERMUX_PKG_FORCE_CMAKE" = "false" ]; then
echo "PASS"
else
echo "INVALID (allowed: true / false)"
pkg_lint_error=true
fi
case "$TERMUX_PKG_FORCE_CMAKE" in
'true'|'false')
echo "PASS";;
*)
echo "INVALID (allowed: true / false)"
pkg_lint_error=true;;
esac
fi
if [ -n "$TERMUX_PKG_RM_AFTER_INSTALL" ]; then
echo -n "TERMUX_PKG_RM_AFTER_INSTALL: "
if (( ${#TERMUX_PKG_RM_AFTER_INSTALL} )); then
echo -n "TERMUX_PKG_RM_AFTER_INSTALL: "
file_path_ok=true
while read -r file_path; do
[ -z "$file_path" ] && continue
[[ -z "$file_path" ]] && continue
if grep -qP '^(\.\.)?/' <<< "$file_path"; then
echo "INVALID (file path should be relative to prefix)"
@ -461,18 +469,18 @@ lint_package() {
done <<< "$TERMUX_PKG_RM_AFTER_INSTALL"
unset file_path
if $file_path_ok; then
if "$file_path_ok"; then
echo "PASS"
fi
unset file_path_ok
fi
if [ -n "$TERMUX_PKG_CONFFILES" ]; then
echo -n "TERMUX_PKG_CONFFILES: "
if (( ${#TERMUX_PKG_CONFFILES} )); then
echo -n "TERMUX_PKG_CONFFILES: "
file_path_ok=true
while read -r file_path; do
[ -z "$file_path" ] && continue
[[ -z "$file_path" ]] && continue
if grep -qP '^(\.\.)?/' <<< "$file_path"; then
echo "INVALID (file path should be relative to prefix)"
@ -483,16 +491,16 @@ lint_package() {
done <<< "$TERMUX_PKG_CONFFILES"
unset file_path
if $file_path_ok; then
if "$file_path_ok"; then
echo "PASS"
fi
unset file_path_ok
fi
if [ -n "$TERMUX_PKG_SERVICE_SCRIPT" ]; then
echo -n "TERMUX_PKG_SERVICE_SCRIPT: "
array_length=${#TERMUX_PKG_SERVICE_SCRIPT[@]}
if [ $(( $array_length & 1 )) -eq 1 ]; then
if (( ${#TERMUX_PKG_SERVICE_SCRIPT} )); then
echo -n "TERMUX_PKG_SERVICE_SCRIPT: "
if (( ${#TERMUX_PKG_SERVICE_SCRIPT[@]} % 2 )); then
echo "INVALID (TERMUX_PKG_SERVICE_SCRIPT has to be an array of even length)"
pkg_lint_error=true
else
@ -500,11 +508,10 @@ lint_package() {
fi
fi
if $pkg_lint_error; then
if "$pkg_lint_error"; then
exit 1
else
exit 0
fi
exit 0
)
local ret=$?
@ -525,10 +532,10 @@ linter_main() {
break
fi
package_counter=$((package_counter + 1))
(( package_counter++ ))
done
if $problems_found; then
if "$problems_found"; then
echo "================================================================"
echo
echo "A problem has been found in '$(realpath --relative-to="$TERMUX_SCRIPTDIR" "$package_script")'."
@ -537,22 +544,22 @@ linter_main() {
echo "================================================================"
return 1
else
echo "================================================================"
echo
echo "Checked $package_counter packages."
echo "Everything seems ok."
echo
echo "================================================================"
fi
echo "================================================================"
echo
echo "Checked $package_counter packages."
echo "Everything seems ok."
echo
echo "================================================================"
return 0
}
if [ $# -eq 0 ]; then
if (( $# )); then
linter_main "$@" || exit 1
else
for repo_dir in $(jq --raw-output 'del(.pkg_format) | keys | .[]' $TERMUX_SCRIPTDIR/repo.json); do
linter_main $repo_dir/*/build.sh
done || exit 1
else
linter_main "$@" || exit 1
fi