раздел 03

Автоматизация

GitHub умеет не только хранить код, но и сам что-то с ним делать: гонять тесты, собирать проект, выкатывать на сервер, обновлять зависимости. Это экономит время и убирает ручную рутину.

GitHub Actions

GitHub Actions - встроенный механизм CI/CD. CI/CD это автоматический запуск проверок и деплоя при изменениях в коде. Настраивается через workflow-файлы - YAML-файлы в папке .github/workflows/ репозитория.

Простой workflow, который запускает тесты при каждом push:

# .github/workflows/test.yml
name: Tests

on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm install
      - run: npm test

После такого файла GitHub при каждом push в main поднимет виртуальную машину, установит зависимости и прогонит тесты. Результат виден во вкладке Actions.

Continuous Integration
Тесты и линтеры запускаются на каждый push и Pull Request. Поломку видно сразу.
Continuous Delivery
После успешных тестов код автоматически выкатывается на сервер или в облако.
Готовые actions
Шаги-кирпичики из Marketplace: checkout, setup-node, деплой - не нужно писать с нуля.

GitHub Pages

GitHub Pages - бесплатный хостинг статических сайтов прямо из репозитория. Подходит для лендингов, документации, портфолио. Включается в Settings -> Pages: указываете ветку и папку, GitHub публикует сайт по адресу вида username.github.io/repo. Динамический бэкенд так не захостить - только статика.

Секреты

В коде нельзя держать токены, пароли и API-ключи - они утекут в историю и станут публичными. Для этого есть секреты: Settings -> Secrets and variables -> Actions. Туда складываете значения, а в workflow обращаетесь к ним по имени.

steps:
  - run: ./deploy.sh
    env:
      API_TOKEN: ${{ secrets.API_TOKEN }}

Dependabot

Dependabot - встроенный помощник, который следит за зависимостями проекта. Он находит устаревшие и уязвимые библиотеки и сам открывает Pull Request с обновлением. Включается в настройках безопасности репозитория. Удобно, чтобы проект не зарастал старыми пакетами с дырами.