Actionlint и ShellCheck: ловить ошибки CI до запуска
Добавлено 2026-10-11. Нужны установленные actionlint, ShellCheck и pre-commit; версии зафиксировать в окружении разработчика и CI.
Проблема
Обычный YAML-линтер не замечает неверное поле GitHub Actions или обращение к отсутствующей переменной matrix. Shell-скрипт проходит простую проверку синтаксиса, но ломается на пути с пробелами.
Решение
Actionlint проверяет структуру workflow и выражения Actions; при доступном ShellCheck также анализирует встроенные run. Отдельный запуск ShellCheck нужен для файлов скриптов: содержимое вызываемого ./scripts/deploy.sh не становится автоматически частью проверки workflow.
Пример
Добавить в существующий список repos файла .pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: actionlint
name: Проверка GitHub Actions
entry: actionlint
language: system
files: '^\.github/workflows/.*\.ya?ml$'
- id: shellcheck
name: Проверка shell-скриптов
entry: shellcheck
language: system
types: [shell]
pre-commit run actionlint --all-files
pre-commit run shellcheck --all-files
Без pre-commit можно проверить workflow и конкретный скрипт напрямую:
actionlint
shellcheck scripts/deploy.sh
Пример выражения в шаге workflow: данные события передаются через переменную окружения, чтобы текст не становился исходным кодом shell.
- name: Показать название PR
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: printf '%s\n' "$PR_TITLE"
Это фрагмент steps, а не полный workflow. Если GitHub Actions в проекте нет, оставить ShellCheck для скриптов: actionlint не проверяет GitLab CI. Исключения линтера оформлять для конкретного случая с объяснением, без глобального отключения проверок.
Когда применять
При изменении workflow, скриптов бэкапа и деплоя. Дополняет pre-commit для IaC.
Источник
Как применить у себя
- Проверить все отслеживаемые workflow и shell-файлы, разобрать текущие замечания.
- Подключить те же проверки в CI, чтобы локальный hook нельзя было случайно обойти.
- В тестовой ветке добавить неизвестное поле workflow и некавыченную переменную с пробелами; убедиться, что проверки обнаруживают ошибки.
- После исправления и успешного CI отметить «Изучено».