JavaScript action

Тема дорожной карты · GitHub Actions

JavaScript action — тип action в GitHub Actions, выполняющийся непосредственно на среде выполнения Node.js runner — без задержки на запуск Docker-контейнера, — что делает его самым быстрым вариантом для кастомной логики автоматизации пайплайна. JavaScript actions создаются с использованием пакета тулкита @actions/core, предоставляющего core.getInput('name'), core.setOutput('name', value), core.setFailed('message') и вспомогательные функции логирования, нативно интегрирующиеся с системой сводки шагов и аннотаций runner GitHub Actions. Файл метаданных action.yml для JavaScript action задаёт runs.using: node20 (или node16) и runs.main: dist/index.js, указывая на бандлированную точку входа, созданную инструментами вроде @vercel/ncc, которые упаковывают все node_modules в один файл — runner не нужно выполнять npm install. JavaScript actions хорошо подходят для задач, взаимодействующих с GitHub API через @actions/github, манипулирующих окружением workflow или выполняющих логику, которая была бы громоздкой в shell, но лаконична в TypeScript: например, разбор JSON-полезных нагрузок или вычисление строк семантической версии в пайплайне непрерывной интеграции. Публикация JavaScript action в GitHub Actions Marketplace требует коммита скомпилированного вывода dist/ (или использования артефакта релиза), а закрепление потребителей на коммите SHA — рекомендуемая практика безопасности автоматизации workflow.

Как это работает

JavaScript action: три варианта. JavaScript actions (runs: using: node20) — быстрый старт, гоняются на runner напрямую, должны быть cross-platform. Docker actions (runs: using: docker) — только Linux, медленнее старт (pull/build образа), полный контроль env. Composite actions (рассматриваются отдельно). JS actions требуют dist/ в репо (или компиляция через @vercel/ncc). Дистрибуция через GitHub Marketplace или приватный internal-репо.

Когда применять

JavaScript actions — когда логика маленькая (< 200 строк) + нужен cross-platform. Docker actions — нужно конкретное OS-окружение или сложные зависимости. Composite — просто цепочка существующих actions. Всегда релизьте tagged-версии (v1, v1.2.3); никогда не говорите юзерам использовать main.

Типичные ошибки

Ловушки JavaScript action: JS action без коммита dist/ (action валится, потому что node_modules недоступен); Docker action с огромным образом (медленный старт на каждом job); breaking input/output изменения в major-версии, которые юзеры на @v1 получают тихо (всегда major-version-пин или SHA).

Связанные понятия

Полезные ресурсы