Skip to main content

Создание и тестирование Rust

Узнайте, как создать рабочий процесс непрерывной интеграции (CI) для создания и тестирования проекта Rust.

Введение

В этом руководстве показано, как создавать, тестировать и публиковать пакет Rust.

GitHubразмещенные в среде runners имеют кэш средств с предварительно установленным программным обеспечением, включающее зависимости для Rust. Полный список актуального программного обеспечения и предварительно установленных версий Rust см. в разделе Средства выполнения тестов, размещенные в GitHub.

Необходимые компоненты

Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.

Мы рекомендуем иметь базовое представление о языке Rust. Дополнительные сведения см. в статье "Начало работы с Rust".

Использование шаблона рабочего процесса Rust

Чтобы быстро приступить к работе, добавьте шаблон рабочего процесса в .github/workflows каталог репозитория.

GitHub предоставляет шаблон рабочего процесса Rust, который должен работать для большинства основных проектов Rust. В последующих разделах этого руководства приведены примеры настройки этого шаблона рабочего процесса.

  1. На GitHubперейдите на главную страницу репозитория. данных repositories.repositories.actions-tab %} 1. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку Создать рабочий процесс.

  2. На странице "Выбор рабочего процесса" показан выбор рекомендуемых шаблонов рабочих процессов. Найдите "Rust".

  3. Отфильтруйте выбор рабочих процессов, щелкнув "Непрерывная интеграция".

  4. В рабочем процессе "Rust - по GitHub Actions" нажмите кнопку "Настроить".

    Снимок экрана: страница "Выбор рабочего процесса". Кнопка "Настроить" в рабочем процессе Rust выделена оранжевым контуром.

  5. Измените рабочий процесс по мере необходимости. Например, измените версию Rust.

  6. Щелкните Зафиксировать изменения.

Файл rust.yml рабочего процесса добавляется в .github/workflows каталог репозитория.

Указание версии Rust

GitHubразмещенных в среде runners включают в себя последнюю версию цепочки инструментов Rust. С помощью rustup можно сообщить о версии, установленной в средстве выполнения, переопределить версию и установить различные цепочки инструментов. Дополнительные сведения см. в книге rustup.

В этом примере показаны шаги, которые можно использовать для настройки среды запуска, чтобы использовать ночную сборку rust и сообщить о версии.

YAML
      - name: Temporarily modify the rust toolchain version
        run: rustup override set nightly
      - name: Output rust version for educational purposes
        run: rustup --version

Кэширование зависимостей

Можно кэшировать и восстанавливать зависимости с помощью действия "Кэш". В этом примере предполагается, что репозиторий содержит Cargo.lock файл.

YAML
      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

Если у вас есть пользовательские требования или требуются более подробные элементы управления для кэширования, следует изучить другие параметры конфигурации для cache действия. Дополнительные сведения см. в разделе Справочник по кэшированию зависимостей.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде. В этом примере рабочего процесса показано, как использовать cargo build и cargo test в задании:

YAML
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        BUILD_TARGET: [release] # refers to a cargo profile
    outputs:
      release_built: ${{ steps.set-output.outputs.release_built }}
    steps:
      - uses: actions/checkout@v5
      - name: Build binaries in "${{ matrix.BUILD_TARGET }}" mode
        run: cargo build --profile ${{ matrix.BUILD_TARGET }}
      - name: Run tests in "${{ matrix.BUILD_TARGET }}" mode
        run: cargo test --profile ${{ matrix.BUILD_TARGET }}

Ключевое слово, используемое release в этом примере, соответствует профилю грузов. Вы можете использовать любой профиль, определенный в Cargo.toml файле.

Публикация пакета или библиотеки в crates.io

После настройки рабочего процесса для создания и тестирования кода можно использовать секрет для входа в систему для crates.io и публикации пакета.

YAML
      - name: Login into crates.io
        run: cargo login ${{ secrets.CRATES_IO }}
      - name: Build binaries in "release" mode
        run: cargo build -r
      - name: "Package for crates.io"
        run: cargo package # publishes a package as a tarball
      - name: "Publish to crates.io"
        run: cargo publish # publishes your crate as a library that can be added as a dependency

Если возникают ошибки в сборке и упаковке ящика, проверьте метаданные в манифесте, Cargo.toml файле, см . раздел "Формат манифеста". Вы также должны проверить Cargo.lock файл, см. статью Cargo.toml vs Cargo.lock.

Упаковка данных рабочего процесса в виде артефактов

После завершения рабочего процесса можно отправить полученные артефакты для анализа или использовать в другом рабочем процессе. Эти примеры можно добавить в рабочий процесс для отправки приложения для использования другим рабочим процессом.

YAML
      - name: Upload release artifact
        uses: actions/upload-artifact@v4
        with:
          name: <my-app>
          path: target/${{ matrix.BUILD_TARGET }}/<my-app>

Чтобы использовать отправленный артефакт в другом задании, убедитесь, что рабочие процессы имеют правильные разрешения для репозитория, см . раздел AUTOTITLE. Эти примеры можно использовать для скачивания приложения, созданного в предыдущем рабочем процессе, и публикации его на GitHub.

YAML
      - uses: actions/checkout@v5
      - name: Download release artifact
        uses: actions/download-artifact@v5
        with:
          name: <my-app>
          path: ./<my-app>
      - name: Publish built binary to GitHub releases
      - run: |
          gh release create --generate-notes ./<my-app>/<my-project>#<my-app>