98 lines
3.0 KiB
Bash
Executable File
98 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# shellcheck disable=SC2059
|
|
|
|
BCyan='\033[1;36m'
|
|
BRed='\033[1;31m'
|
|
BGreen='\033[1;32m'
|
|
BBlue='\033[1;34m'
|
|
Color_Off='\033[0m'
|
|
|
|
set -o errexit
|
|
set -o pipefail
|
|
trap onexit_err ERR
|
|
|
|
# Exit handling
|
|
function onexit_err() {
|
|
local exit_status=${1:-$?}
|
|
printf "\n❌❌❌ ${BRed}Run of fast_spec_helper specs failed!${Color_Off} ❌❌❌\n"
|
|
exit "${exit_status}"
|
|
}
|
|
|
|
function print_start_message {
|
|
trap onexit_err ERR
|
|
|
|
printf "${BCyan}\nStarting run of fast_spec_helper specs...${Color_Off}\n"
|
|
}
|
|
|
|
function run_fast_spec_helper_specs {
|
|
trap onexit_err ERR
|
|
|
|
printf "\n\n${BBlue}Running specs which use fast_spec_helper and also run fast...${Color_Off}\n\n"
|
|
|
|
# TIP: Add '--format=documentation --order=stable' when debugging flaky interaction between specs
|
|
bin/rspec --tag=~uses_fast_spec_helper_but_runs_slow "${fast_spec_helper_specs[@]}"
|
|
}
|
|
|
|
function run_fast_spec_helper_specs_which_are_slow {
|
|
trap onexit_err ERR
|
|
|
|
printf "\n\n${BBlue}Running specs which use fast_spec_helper but actually run slow...${Color_Off}\n\n"
|
|
|
|
# NOTE: fails_if_sidekiq_not_configured tag is used to skip specs which require special local config for sidekiq
|
|
bin/rspec --tag=uses_fast_spec_helper_but_runs_slow --tag=~fails_if_sidekiq_not_configured "${fast_spec_helper_specs[@]}"
|
|
}
|
|
|
|
function run_all_fast_spec_helper_specs_individually {
|
|
trap onexit_err ERR
|
|
|
|
printf "\n\n${BBlue}INDIVIDUALLY running all specs which use fast_spec_helper to ensure they run in isolation (this will be SLOW! Set SPEC_FILE_TO_START_AT to skip known-good spec files)...${Color_Off}\n\n"
|
|
|
|
# NOTE: Override `SPEC_FILE_TO_START_AT` to the relative path of a specific file in order to skip specs which are already known to be passing
|
|
SPEC_FILE_TO_START_AT="${SPEC_FILE_TO_START_AT:-${fast_spec_helper_specs[0]}}"
|
|
|
|
for spec_file in "${fast_spec_helper_specs[@]}"; do
|
|
if [ "${spec_file}" = "${SPEC_FILE_TO_START_AT}" ]; then
|
|
printf "${BBlue}Starting individual spec runs at SPEC_FILE_TO_START_AT: '${SPEC_FILE_TO_START_AT}'${Color_Off}\n\n"
|
|
START_RUNNING=true
|
|
fi
|
|
|
|
if [ -n "${START_RUNNING}" ]; then
|
|
printf "${BBlue}Running spec '${spec_file}' individually:${Color_Off}\n"
|
|
bin/rspec --tag=~fails_if_sidekiq_not_configured "$spec_file"
|
|
fi
|
|
done
|
|
}
|
|
|
|
function print_success_message {
|
|
trap onexit_err ERR
|
|
|
|
printf "\n✅✅✅ ${BGreen}All executed fast_spec_helper specs passed successfully!${Color_Off} ✅✅✅\n"
|
|
}
|
|
|
|
function main {
|
|
trap onexit_err ERR
|
|
|
|
# cd to gitlab root directory
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"/..
|
|
|
|
# See https://github.com/koalaman/shellcheck/wiki/SC2207 for more context on this approach of creating an array
|
|
fast_spec_helper_specs=()
|
|
while IFS='' read -r line; do
|
|
fast_spec_helper_specs+=("$line")
|
|
done < <(git grep -l -E '^require .fast_spec_helper' -- '**/*_spec.rb')
|
|
|
|
print_start_message
|
|
|
|
if [ -n "${RUN_ALL_FAST_SPECS_INDIVIDUALLY}" ]; then
|
|
run_all_fast_spec_helper_specs_individually
|
|
else
|
|
run_fast_spec_helper_specs
|
|
run_fast_spec_helper_specs_which_are_slow
|
|
fi
|
|
|
|
print_success_message
|
|
}
|
|
|
|
main "$@"
|