refactor(config-test): срезан разбор Bash — он не ловил ничего
- Зачем:
- проверка была сломана с рождения цели: bash -n со списком файлов
разбирает только первый, остальные уходят ему в аргументы. Из пяти
скриптов проверялся один, и за всё время этого никто не заметил.
- чинить незачем: скрипты стенда запускают с той же машины, и
синтаксическая ошибка вылезает при первом же запуске с номером строки.
Учебной ценности в проверке нет — из неё не узнаёшь ничего, кроме того,
что у bash есть ключ -n.
- держалась она не строчкой, а двенадцатью: обход репозитория, временный
файл со списком, mapfile и две ветки на пустой список.
- Что:
- из scripts/config-test.sh убраны разбор Bash и весь аппарат сбора
списка файлов; 53 строки стали 40.
- разбор файлов DAG остался и получил комментарий с основанием: их на
машине не запускает никто, обработчик разбирает их внутри контейнера, и
ошибка всплывает не сообщением, а молча пропавшим DAG.
- README и карта проверок больше не обещают проверку синтаксиса Bash.
- в карте записано, почему проверку не стоит заводить заново.
- Проверка:
- make config-test зелёный.
- оставшийся разбор DAG краснеет: незакрытая скобка в dags/test_kafka.py
роняет цель с SyntaxError и ненулевым кодом; файл восстановлен.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+6
-14
@@ -4,7 +4,6 @@ set -euo pipefail
|
||||
readonly ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
read -r -a COMPOSE_CMD <<<"${COMPOSE_BIN:-docker compose}"
|
||||
readonly CACHE_DIR="$(mktemp -d)"
|
||||
readonly SHELL_FILES_LIST="$CACHE_DIR/shell-files"
|
||||
|
||||
cleanup() {
|
||||
rm -rf "$CACHE_DIR"
|
||||
@@ -35,19 +34,12 @@ jq -e '
|
||||
any($service.volumes[]; .source == "airflow_auth" and .target == "/opt/airflow/auth") and
|
||||
any($service.volumes[]; .source == "airflow_logs" and .target == "/opt/airflow/logs")
|
||||
' >/dev/null <<<"$config_json"
|
||||
if ! find "$ROOT_DIR" \
|
||||
-path "$ROOT_DIR/.git" -prune -o \
|
||||
-type f -name '*.sh' -print0 >"$SHELL_FILES_LIST"; then
|
||||
printf 'ОШИБКА: не удалось получить список файлов Bash для проверки.\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
mapfile -d '' -t shell_files <"$SHELL_FILES_LIST"
|
||||
if [[ "${#shell_files[@]}" -eq 0 ]]; then
|
||||
printf 'ОШИБКА: не найдено ни одного файла Bash для проверки.\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
bash -n "${shell_files[@]}"
|
||||
# Файлы DAG на машине никто не запускает: их разбирает обработчик внутри
|
||||
# контейнера, и синтаксическая ошибка там всплывает не сообщением, а тем, что
|
||||
# DAG молча не появился в списке. Локальный разбор — единственная дешёвая
|
||||
# обратная связь. Скрипты стенда проверять так незачем: их запускают с этой же
|
||||
# машины, и ошибка вылезает при первом же запуске с номером строки.
|
||||
PYTHONPYCACHEPREFIX="$CACHE_DIR" uv run --no-project python -m compileall -q "$ROOT_DIR/dags"
|
||||
git -C "$ROOT_DIR" diff --check
|
||||
|
||||
printf 'ЗЕЛЁНО: Compose, Bash, Python и пробельные ошибки diff проверены.\n'
|
||||
printf 'ЗЕЛЁНО: Compose, Python и пробельные ошибки diff проверены.\n'
|
||||
|
||||
Reference in New Issue
Block a user