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

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

## Введение

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

GitHubразмещенные в среде runners имеют кэш средств с предварительно установленным программным обеспечением, включающее зависимости для Rust. Полный список актуального программного обеспечения и предварительно установленных версий Rust см. в разделе [Средства выполнения тестов, размещенные в GitHub](/ru/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software).

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

Вы уже должны быть знакомы с синтаксисом YAML и его использованием с GitHub Actions. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/using-workflows/workflow-syntax-for-github-actions).

Мы рекомендуем иметь базовое представление о языке Rust. Дополнительные сведения см. в статье ["Начало работы с Rust](https://www.rust-lang.org/learn)".

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

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

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

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

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

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

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

   ![Снимок экрана: страница "Выбор рабочего процесса". Кнопка "Настроить" в рабочем процессе Rust выделена оранжевым контуром.](/assets/images/help/actions/starter-workflow-rust.png)

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

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

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

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

GitHubразмещенных в среде runners включают в себя последнюю версию цепочки инструментов Rust. С помощью rustup можно сообщить о версии, установленной в средстве выполнения, переопределить версию и установить различные цепочки инструментов. Дополнительные сведения см. в книге [](https://rust-lang.github.io/rustup/)rustup.

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

```yaml copy
      - 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 copy
      - name: Cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
```

Если у вас есть пользовательские требования или требуются более подробные элементы управления для кэширования, следует изучить другие параметры конфигурации для [`cache` действия](https://github.com/marketplace/actions/cache). Дополнительные сведения см. в разделе [Справочник по кэшированию зависимостей](/ru/actions/using-workflows/caching-dependencies-to-speed-up-workflows).

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

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

```yaml copy
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@v6
      - 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` в этом примере, соответствует профилю грузов. Вы можете использовать любой профиль[, определенный ](https://doc.rust-lang.org/cargo/reference/profiles.html)в `Cargo.toml` файле.

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

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

```yaml copy
      - 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` файле, см [. раздел "Формат](https://doc.rust-lang.org/cargo/reference/manifest.html) манифеста". Вы также должны проверить `Cargo.lock` файл, см. статью [Cargo.toml vs Cargo.lock](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html).

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

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

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

Чтобы использовать отправленный артефакт в другом задании, убедитесь, что рабочие процессы имеют правильные разрешения для репозитория, см [. раздел AUTOTITLE](/ru/actions/security-for-github-actions/security-guides/automatic-token-authentication). Эти примеры можно использовать для скачивания приложения, созданного в предыдущем рабочем процессе, и публикации его на GitHub.

```yaml copy
      - uses: actions/checkout@v6
      - 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>
```