mirror of
https://github.com/status-im/spiff-arena.git
synced 2025-02-07 07:34:17 +00:00
9aa52bcd27
Display reasonable messages when a processes is suspended or errored. Can't do much with terminated. Show the spinner more frequently and consistently. When running ruff, ignore everything in .gitignore
83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
function error_handler() {
|
|
>&2 echo "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}."
|
|
exit "$2"
|
|
}
|
|
trap 'error_handler ${LINENO} $?' ERR
|
|
set -o errtrace -o errexit -o nounset -o pipefail
|
|
|
|
python_projects=(
|
|
spiffworkflow-backend
|
|
)
|
|
|
|
react_projects=(
|
|
spiffworkflow-frontend
|
|
)
|
|
|
|
subcommand="${1:-}"
|
|
|
|
if [[ "$subcommand" == "pre" ]]; then
|
|
if [[ -n "$(git status --porcelain SpiffWorkflow)" ]]; then
|
|
echo "SpiffWorkflow has uncommitted changes. Running its test suite."
|
|
pushd SpiffWorkflow
|
|
make tests-par # run tests in parallel
|
|
popd
|
|
fi
|
|
fi
|
|
|
|
function get_python_dirs() {
|
|
(git ls-tree -r HEAD --name-only | grep -E '\.py$' | awk -F '/' '{print $1}' | sort | uniq | grep -v '\.' | grep -Ev '^(bin|migrations)$') || echo ''
|
|
}
|
|
|
|
function run_autofixers() {
|
|
# checking command -v ruff is not good enough, since the asdf shim may be installed, which will make command -v succeed,
|
|
# but ruff may not have been pip installed inside the correct version of python.
|
|
if ! ruff --help >/dev/null 2>&1; then
|
|
pip install ruff
|
|
asdf reshim python
|
|
fi
|
|
|
|
python_dirs=$(get_python_dirs)
|
|
# python_files=$(find $python_dirs -type f -name "*.py" ! -name '.null-ls*' ! -name '_null-ls*')
|
|
# Don't check things in git-ignore:
|
|
python_files=$(git ls-files $python_dirs | grep .py$)
|
|
ruff --fix $python_files
|
|
}
|
|
|
|
function run_pre_commmit() {
|
|
poetry run pre-commit run --verbose --all-files
|
|
}
|
|
|
|
for react_project in "${react_projects[@]}" ; do
|
|
# if pre, only do stuff when there are changes
|
|
if [[ "$subcommand" != "pre" ]] || [[ -n "$(git status --porcelain "$react_project")" ]]; then
|
|
pushd "$react_project"
|
|
npm run lint:fix
|
|
popd
|
|
fi
|
|
done
|
|
|
|
for python_project in "${python_projects[@]}" ; do
|
|
if [[ "$subcommand" != "pre" ]] || [[ -n "$(git status --porcelain "$python_project")" ]]; then
|
|
pushd "$python_project"
|
|
run_autofixers || run_autofixers
|
|
popd
|
|
fi
|
|
done
|
|
|
|
if [[ "$subcommand" != "pre" ]] || [[ -n "$(git status --porcelain "spiffworkflow-backend")" ]]; then
|
|
# rune_pre_commit only applies to spiffworkflow-backend at the moment
|
|
run_pre_commmit || run_pre_commmit
|
|
fi
|
|
|
|
for python_project in "${python_projects[@]}"; do
|
|
if [[ "$subcommand" != "pre" ]] || [[ -n "$(git status --porcelain "$python_project")" ]]; then
|
|
pushd "$python_project"
|
|
poetry install
|
|
poetry run mypy $(get_python_dirs)
|
|
poetry run coverage run --parallel -m pytest
|
|
popd
|
|
fi
|
|
done
|