CI/CD для Rust проектов: GitHub Actions — часть 2

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

CI/CD для Rust проектов: GitHub Actions — часть 2: тестирование и деплой

В первой части мы настроили базовый пайплайн сборки Rust проекта. Теперь, углубляясь в программирование на Rust, мы рассмотрим автоматическое тестирование, линтинг и деплой. Это обязательный этап обучения Rust для начинающих, желающих писать профессиональный код. Сегодня вы узнаете, как сделать ваш CI/CD по-настоящему полезным.

1. Запуск тестов и проверка покрытия

Любой серьезный проект на Rust требует автоматического запуска тестов. В GitHub Actions это делается с помощью команды cargo test. Однако, чтобы получить максимальную пользу, добавьте проверку покрытия кода с помощью tarpaulin.

Настройка тестового окружения

Добавьте шаг в ваш workflow-файл (.github/workflows/ci.yml):

name: CI for Rust

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
      - name: Run tests
        run: cargo test --verbose
      - name: Generate coverage
        run: |
          cargo install cargo-tarpaulin
          cargo tarpaulin --out Xml
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

Этот код показывает, как легко интегрировать Rust с внешними сервисами. cargo tarpaulin создаст отчет, который можно загрузить на Codecov или Coveralls. Для Rust для начинающих важно понимать: тесты — это ваш первый защитный барьер.

2. Линтинг и форматирование

Качественный код — это не только рабочий код, но и читаемый. В Rust есть два мощных инструмента: clippy (линтер) и rustfmt (форматировщик). Включите их в пайплайн.

Добавление Clippy и Rustfmt

Добавьте новый job или расширьте существующий:

  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          components: clippy, rustfmt
      - name: Check formatting
        run: cargo fmt -- --check
      - name: Run Clippy
        run: cargo clippy -- -D warnings

Флаг -D warnings превращает предупреждения в ошибки. Это жестко, но эффективно для обучения: вы сразу узнаете о потенциальных проблемах. Помните, что в программировании на Rust строгость — это преимущество.

3. Автоматический деплой на GitHub Pages

Когда тесты и линтинг пройдены, можно автоматически публиковать документацию. Rust генерирует документацию через cargo doc. Деплой на GitHub Pages — отличный способ показать результаты.

Workflow для деплоя

Создайте отдельный файл .github/workflows/deploy.yml:

name: Deploy Documentation

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - name: Build documentation
        run: cargo doc --no-deps --document-private-items
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./target/doc

Этот пайплайн срабатывает только при пуше в main. Он генерирует документацию и публикует её. Для Rust для начинающих это отличный способ показать свои проекты миру.

4. Оптимизация времени сборки: кэширование

Сборка Rust проектов может быть долгой. GitHub Actions позволяет кэшировать target директорию и ~/.cargo. Это ускоряет пайплайн в 2-3 раза.

Пример с кэшированием

Используйте action Swatinem/rust-cache:

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - name: Build
        run: cargo build --release

Этот шаг автоматически сохраняет и восстанавливает кэш. В программировании на Rust время — ценный ресурс, особенно при обучении.

Заключение

Мы рассмотрели, как расширить базовый CI/CD для Rust проектов: добавили тесты с покрытием, линтинг, автоматическую публикацию документации и кэширование. Эти навыки необходимы для любого разработчика, проходящего обучение Rust. Начните с малого — добавьте тесты, затем линтинг, и ваш код станет надежнее. Помните: Rust для начинающих — это путь постоянного улучшения. Используйте GitHub Actions, чтобы автоматизировать рутину и сосредоточиться на творчестве.

В следующей части мы рассмотрим многопоточные сборки и интеграцию с Docker. Оставайтесь с нами на pythonlib.ru!

Блоги

Рекомендаций по книгам