GitHub Actions представляет собой встроенную систему автоматизации рабочих процессов, которая позволяет запускать задачи при различных событиях репозитория: push, pull request, release и других. Для проектов на Stencil это особенно важно, поскольку компонентный подход требует регулярной сборки, тестирования и деплоя.
Файл конфигурации workflow находится в
.github/workflows/ и имеет расширение .yml.
Стандартная структура включает:
name: Stencil CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build Stencil project
run: npm run build
- name: Run tests
run: npm run test
Ключевые моменты:
on: задаёт события, при которых workflow запускается.
Для CI обычно используются push и
pull_request.jobs: определяет последовательность задач. Каждая
задача (job) выполняется в отдельном виртуальном
окружении.steps: описывает конкретные шаги внутри задачи, включая
установку зависимостей, сборку и тестирование.Для ускорения сборки рекомендуется использовать кеширование
node_modules и сборочных артефактов:
- name: Cache Node modules
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
Это значительно сокращает время установки зависимостей при повторных запусках workflow.
Stencil поддерживает модульную архитектуру, что позволяет разделять тестирование компонентов на отдельные задачи:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v3
- run: npm ci
- run: npm run test
В данном примере тесты запускаются только после успешного выполнения линтинга. Это предотвращает ненужное выполнение тестов при наличии синтаксических ошибок.
Для публикации библиотеки компонентов можно настроить автоматический деплой на npm или GitHub Pages. Пример деплоя на npm:
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org/'
- run: npm ci
- run: npm run build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Особенности:
needs: build гарантирует, что деплой происходит только
после успешной сборки.NODE_AUTH_TOKEN хранится в Secrets
репозитория, что обеспечивает безопасную аутентификацию.Stencil-проекты часто требуют проверки совместимости с различными версиями Node.js:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18, 20]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build
- run: npm run test
Matrix позволяет параллельно запускать workflow для каждой версии Node.js, обеспечивая стабильность компонентов на разных окружениях.
GitHub Actions легко интегрируется с инструментами для анализа кода и мониторинга покрытия тестов:
Пример добавления ESLint в workflow:
- name: Run ESLint
run: npx eslint src/**/*.ts
GitHub Actions позволяет отправлять уведомления при успешном или неудачном выполнении workflow. Это может быть email, Slack или интеграции с другими сервисами:
- name: Notify Slack
uses: slackapi/slack-github-action@v1
with:
channel-id: 'C12345678'
slack-message: 'Stencil CI workflow completed'
status: ${{ job.status }}
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
build, lint,
test и deploy.Эта организация обеспечивает стабильность компонентов Stencil, ускоряет процессы CI/CD и упрощает интеграцию с внешними инструментами.