fix: improve lint and test scripts (#1607)

This commit is contained in:
Edwin Kofler 2023-09-10 07:34:50 -07:00 committed by GitHub
parent 0e1c90e177
commit b320803120
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 35 deletions

View File

@ -18,7 +18,7 @@ if [ -z "$RUNNER_OS" ]; then
exit 1 exit 1
fi fi
### Set environment variables for tracking versions ### Set variables for tracking versions
# Elvish # Elvish
elvish_semver="v0.19.2" elvish_semver="v0.19.2"
# Fish # Fish
@ -73,5 +73,6 @@ fi
### Install bats-core ### Install bats-core
printf "%s\n" "Installing bats-core" printf "%s\n" "Installing bats-core"
git clone --depth 1 --branch "v$(grep -Eo "^\\s*bats\\s*.*$" ".tool-versions" | cut -d ' ' -f2-)" https://github.com/bats-core/bats-core.git "$HOME/bats-core" bats_version=$(grep -Eo "^\\s*bats\\s*.*$" ".tool-versions" | cut -d ' ' -f2-)
git clone --depth 1 --branch "v$bats_version" https://github.com/bats-core/bats-core.git "$HOME/bats-core"
echo "$HOME/bats-core/bin" >>"$GITHUB_PATH" echo "$HOME/bats-core/bin" >>"$GITHUB_PATH"

View File

@ -3,6 +3,14 @@
set -euo pipefail set -euo pipefail
IFS=$'\n\t' IFS=$'\n\t'
print.info() {
printf '[INFO] %s\n' "$*"
}
print.error() {
printf '[ERROR] %s\n' "$*" >&2
}
usage() { usage() {
printf "%s\n" "Lint script for the asdf codebase. Must be executed from the" printf "%s\n" "Lint script for the asdf codebase. Must be executed from the"
printf "%s\n\n" "repository root directory." printf "%s\n\n" "repository root directory."
@ -21,7 +29,7 @@ run_shfmt_stylecheck() {
shfmt_flag="--diff" shfmt_flag="--diff"
fi fi
printf "%s\n" "[INFO] Checking .bash with shfmt" print.info "Checking .bash with shfmt"
shfmt --language-dialect bash --indent 2 "${shfmt_flag}" \ shfmt --language-dialect bash --indent 2 "${shfmt_flag}" \
completions/*.bash \ completions/*.bash \
bin/asdf \ bin/asdf \
@ -35,17 +43,17 @@ run_shfmt_stylecheck() {
test/fixtures/dummy_legacy_plugin/bin/* \ test/fixtures/dummy_legacy_plugin/bin/* \
test/fixtures/dummy_plugin/bin/* test/fixtures/dummy_plugin/bin/*
printf "%s\n" "[INFO] Checking .bats with shfmt" print.info "Checking .bats with shfmt"
shfmt --language-dialect bats --indent 2 "${shfmt_flag}" \ shfmt --language-dialect bats --indent 2 "${shfmt_flag}" \
test/*.bats test/*.bats
} }
run_shellcheck_linter() { run_shellcheck_linter() {
printf "%s\n" "[INFO] Checking .sh files with Shellcheck" print.info "Checking .sh files with Shellcheck"
shellcheck --shell sh --external-sources \ shellcheck --shell sh --external-sources \
asdf.sh asdf.sh
printf "%s\n" "[INFO] Checking .bash files with Shellcheck" print.info "Checking .bash files with Shellcheck"
shellcheck --shell bash --external-sources \ shellcheck --shell bash --external-sources \
completions/*.bash \ completions/*.bash \
bin/asdf \ bin/asdf \
@ -59,7 +67,7 @@ run_shellcheck_linter() {
test/fixtures/dummy_legacy_plugin/bin/* \ test/fixtures/dummy_legacy_plugin/bin/* \
test/fixtures/dummy_plugin/bin/* test/fixtures/dummy_plugin/bin/*
printf "%s\n" "[INFO] Checking .bats files with Shellcheck" print.info "Checking .bats files with Shellcheck"
shellcheck --shell bats --external-source \ shellcheck --shell bats --external-source \
test/*.bats test/*.bats
} }
@ -74,7 +82,7 @@ run_custom_python_stylecheck() {
if [ -n "$github_actions" ] && ! command -v python3 &>/dev/null; then if [ -n "$github_actions" ] && ! command -v python3 &>/dev/null; then
# fail if CI and no python3 # fail if CI and no python3
printf "%s\n" "[ERROR] Detected execution in GitHub Actions but python3 was not found. This is required during CI linting." print.error "Detected execution in GitHub Actions but python3 was not found. This is required during CI linting."
exit 1 exit 1
fi fi
@ -82,7 +90,7 @@ run_custom_python_stylecheck() {
# skip if local and no python3 # skip if local and no python3
printf "%s\n" "[WARNING] python3 not found. Skipping Custom Python Script." printf "%s\n" "[WARNING] python3 not found. Skipping Custom Python Script."
else else
printf "%s\n" "[INFO] Checking files with Custom Python Script." print.info "Checking files with Custom Python Script."
"${0%/*}/checkstyle.py" "${flag}" "${0%/*}/checkstyle.py" "${flag}"
fi fi
@ -106,7 +114,7 @@ run_fish_linter() {
if [ -n "$github_actions" ] && ! command -v fish_indent &>/dev/null; then if [ -n "$github_actions" ] && ! command -v fish_indent &>/dev/null; then
# fail if CI and no fish_ident # fail if CI and no fish_ident
printf "%s\n" "[ERROR] Detected execution in GitHub Actions but fish_indent was not found. This is required during CI linting." print.error "Detected execution in GitHub Actions but fish_indent was not found. This is required during CI linting."
exit 1 exit 1
fi fi
@ -114,7 +122,7 @@ run_fish_linter() {
# skip if local and no fish_ident # skip if local and no fish_ident
printf "%s\n" "[WARNING] fish_indent not found. Skipping .fish files." printf "%s\n" "[WARNING] fish_indent not found. Skipping .fish files."
else else
printf "%s\n" "[INFO] Checking .fish files with fish_indent" print.info "Checking .fish files with fish_indent"
fish_indent "${flag}" ./**/*.fish fish_indent "${flag}" ./**/*.fish
fi fi
} }
@ -129,17 +137,19 @@ run_fish_linter() {
# printf "%s\n" "[WARNING] powershell linter/formatter not found, skipping for now." # printf "%s\n" "[WARNING] powershell linter/formatter not found, skipping for now."
#} #}
repo_root=$(git rev-parse --show-toplevel) {
if [ "$repo_root" != "$PWD" ]; then repo_dir=$(git rev-parse --show-toplevel)
printf "%s\n" "[ERROR] This scripts requires execution from the repository root directory." current_dir=$(pwd -P)
printf "\t%s\t%s\n" "Repo root dir:" "$repo_root" if [ "$repo_dir" != "$current_dir" ]; then
printf "\t%s\t%s\n\n" "Current dir:" "$PWD" print.error "This scripts requires execution from the repository root directory."
printf "%s\n" "See usage details with -h or --help." printf "\t%s\t%s\n" "Repo root dir:" "$repo_dir"
printf "\t%s\t%s\n\n" "Current dir:" "$current_dir"
exit 1 exit 1
fi fi
}
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
printf "%s\n" "[ERROR] At least one option required." print.error "At least one option required."
printf "=%.0s" {1..60} printf "=%.0s" {1..60}
printf "\n" printf "\n"
usage usage
@ -159,7 +169,7 @@ case "$1" in
mode="fix" mode="fix"
;; ;;
*) *)
printf "%s\n" "[ERROR] Invalid flag: $1" print.error "Invalid flag: $1"
printf "=%.0s" {1..60} printf "=%.0s" {1..60}
printf "\n" printf "\n"
usage usage
@ -177,4 +187,4 @@ run_fish_linter "$mode"
#run_nushell_linter "$mode" #run_nushell_linter "$mode"
#run_powershell_linter "$mode" #run_powershell_linter "$mode"
printf "%s\n" "[INFO] Success!" print.info "Success!"

View File

@ -3,26 +3,37 @@
set -euo pipefail set -euo pipefail
IFS=$'\n\t' IFS=$'\n\t'
repo_root=$(git rev-parse --show-toplevel) print.info() {
if [ "$repo_root" != "$PWD" ]; then printf '[INFO] %s\n' "$1"
printf "%s\n" "[ERROR] This scripts requires execution from the repository root directory." }
printf "\t%s\t%s\n" "Repo root dir:" "$repo_root"
printf "\t%s\t%s\n\n" "Current dir:" "$PWD" print.error() {
printf '[ERROR] %s\n' "$1" >&2
}
{
repo_dir=$(git rev-parse --show-toplevel)
current_dir=$(pwd -P)
if [ "$repo_dir" != "$current_dir" ]; then
print.error "This scripts requires execution from the repository root directory."
printf "\t%s\t%s\n" "Repo root dir:" "$repo_dir"
printf "\t%s\t%s\n\n" "Current dir:" "$current_dir"
exit 1 exit 1
fi fi
}
test_directory="test" test_directory="./test"
bats_options=(--timing --print-output-on-failure) bats_options=(--timing --print-output-on-failure)
if command -v parallel >/dev/null; then if command -v parallel >/dev/null; then
# enable parallel jobs # Enable parallel jobs
bats_options=("${bats_options[@]}" --jobs 2 --no-parallelize-within-files) bats_options+=(--jobs 2 --no-parallelize-within-files)
elif [[ -n "${CI-}" ]]; then elif [[ -n "${CI-}" ]]; then
printf "* %s\n" "GNU parallel should be installed in the CI environment. Please install and rerun the test suite." print.error "GNU parallel should be installed in the CI environment. Please install and rerun the test suite."
exit 1 exit 1
else else
printf "* %s\n" "For faster test execution, install GNU parallel." print.info "For faster test execution, install GNU parallel."
fi fi
printf "* %s\n" "Running Bats in directory '${test_directory}' with options:" "${bats_options[@]}" print.info "Running Bats in directory '${test_directory}' with options:" "${bats_options[@]}"
bats "${bats_options[@]}" "${test_directory}" bats "${bats_options[@]}" "${test_directory}"