TypeScript action

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

TypeScript action представляет собой JavaScript GitHub Action, написанный на TypeScript и скомпилированный в самодостаточный бандл dist/index.js, который runner может выполнить на любой операционной системе без установки дополнительных зависимостей во время выполнения. Этот подход обеспечивает универсальность и скорость выполнения, что делает TypeScript action идеальным выбором для многих задач.

Официальный шаблон actions/typescript-action предлагает проект с необходимыми зависимостями: @actions/core, @actions/github, ESLint, Jest и ncc для бандлинга. Шаблон также включает файл action.yml, который объявляет inputs, outputs и указывает на использование node20 для выполнения.

TypeScript actions отличаются от Docker actions скоростью запуска и универсальностью. Они запускаются за несколько миллисекунд и работают на runner'ах Linux, Windows и macOS одинаково. Это делает их предпочтительным выбором, когда action не требует специфических бинарных файлов уровня операционной системы. Публикация TypeScript action с версионированным тегом и его потребление через uses: owner/repo@v1 обеспечивает удобное распространение переиспользуемых блоков в экосистеме GitHub Actions.

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

TypeScript action предлагает три основных варианта реализации:

  1. JavaScript actions (runs: using: node20): Этот подход подразумевает написание действия на JavaScript и использование node20 для выполнения. Он обеспечивает быстрый старт и возможность запуска на любом runner без необходимости установки дополнительных зависимостей.
  2. Docker actions (runs: using: docker): Этот подход требует создания Docker-образа, который может быть запущен на runner'е. Docker actions предоставляют полный контроль над окружением и могут быть использованы, когда требуется специфическое окружение или сложные зависимости.
  3. Composite actions: Эти действия представляют собой цепочку существующих действий, объединённых в одно действие. Они обсуждаются отдельно.

JavaScript actions требуют наличия директории dist/ в репозитории (или компиляции через @vercel/ncc). Дистрибуция этих действий может быть осуществлена через GitHub Marketplace или приватное внутреннее репозиторий.

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

JavaScript actions рекомендованы, когда логика действия небольшая (менее 200 строк) и требуется кросс-платформенная поддержка. Docker actions являются оптимальным выбором, когда требуется конкретное окружение операционной системы или сложные зависимости. Composite actions следует использовать, когда требуется просто объединить несколько существующих действий.

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

При использовании TypeScript action могут возникнуть следующие проблемы:

  1. JS action без коммита dist/: Если action написан на JavaScript, но коммит dist/ отсутствует, action может не выполниться, так как runner не сможет найти необходимые зависимости.
  2. Docker action с огромным образом: Если Docker action использует большой образ, это может привести к медленному старту на каждом job, что замедлит выполнение.
  3. Breaking input/output изменения в major-версии: Если разработчик изменяет входные и выходные параметры в major-версии, пользователи, использующие старую версию (@v1), могут столкнуться с несовместимостью без предупреждений. Всегда рекомендуется использовать major-version пин или SHA для указания конкретной версии.

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

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