From 86fbe4846a930101cad68497e2c1fdd1da7dde3a Mon Sep 17 00:00:00 2001 From: TomIO Date: Tue, 23 Apr 2024 17:13:06 +0200 Subject: [PATCH] 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 --- scripts/lint-packages.sh | 283 ++++++++++++++++++++------------------- 1 file changed, 145 insertions(+), 138 deletions(-) diff --git a/scripts/lint-packages.sh b/scripts/lint-packages.sh index 2025c203c1..430d4ca921 100755 --- a/scripts/lint-packages.sh +++ b/scripts/lint-packages.sh @@ -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