В этой короткой статье я быстро покажу, как опубликовать библиотеку rust на crates.io. Публикация ящика позволяет распространять библиотеки по всему миру и способствует повторному использованию. Мы можем использовать нашу библиотеку в нескольких проектах, как только она будет запущена, просто указав ее версию в нашем файле Cargo.toml.

Для целей этой демонстрации я буду использовать библиотеку, созданную в одной из моих других статей. — Asimple PostgreSQL connection wrapper для работы с моими проектами разработки API. Я закончу это, добавив все необходимые метаданные и используя cargo для публикации моей библиотеки.

Требования

Чтобы опубликовать библиотеку на crates.io, нам нужны определенные метаданные в рамках нашей Cargo.toml. Лицензии, описание, ключевые слова, категории — все это необходимо для публикации. Мы позаботились о том, чтобы все они были заполнены перед публикацией.

name = "pgdb-lib-rs"
version = "0.1.0"
edition = "2021"
description= "A simple database wrapper for working with Rust in API development projects."
license = "MIT"
keywords = ["postgres", "database", "wrapper" , "postgres-library"]
categories = ["database-utilities", "database-wrapper"]
exclude = ["/.idea"]

Здесь следует отметить одну вещь: если у нас есть пользовательская лицензия, нам нужно указать путь к файлу LICENSE в вашем коде. Если это лицензия MIT или Apache, мы можем просто указать ключ типа licence. С этим небольшим изменением в нашем файле Cargo.toml теперь есть все для публикации ящика.

Файл Readme

Еще одним требованием для загрузки нашей библиотеки на crates.io в rust является наличие файла Readme.md. Это будет отображаться как описание на crates.io всякий раз, когда кто-то посещает домашнюю страницу нашей библиотеки.

В тот же проект мы добавили новый файл README.md с описанием нашей библиотеки и некоторой базовой документацией.

# Readme
*** Not Ready for PUBLIC USE. Suggestions/Reviews are welcome! ***
This is a simple Rust Wrapper over SQLX and Postgres. 

To connect to Postgres, use the following 

```rust
DATABASE_URL=postgres://postgres:postgres@localhost:5432/fenvoxdb?currentSchema=app
async fn main(){
    let db = Database::new().await.expect("Database connection Failed");
    let row: (i64,) = sqlx::query_as("SELECT $1")
        .bind(150_i64)
        .fetch_one(db.get_pool()).await.expect("error occurred ");
}
```

Я только что добавил базовую инициализацию для своей библиотеки. Так как я буду тем, кто использует его прямо сейчас. Я постараюсь обновить его, поскольку я продолжаю над ним работать.

К этому времени у нас есть наша библиотека, которая готова к публикации. Пришло время создать учетную запись на crates.io и приступить к настройке нашей публикации.

Постановка на учет

Следующий шаг — зарегистрировать учетную запись на crates.io и получить токен API. Посетите https://crates.io/, чтобы создать учетную запись с помощью GitHub.

В раскрывающемся списке своего профиля просмотрите профиль своей учетной записи и перейдите в раздел ключей API.

Создайте новый токен API. Дайте ему имя и скопируйте ключ API. Обратите внимание, что у вас будет доступ к этому ключу только один раз. Храните его в безопасном и надежном месте, если необходимо.

Когда у нас есть ключ API, пришло время использовать ключ, чтобы начать публикацию.

В папке вашей библиотеки откройте терминал и введите

cargo login

Теперь Cargo запросит у вас ключ API. Вставьте ключ, который вы скопировали на последнем шаге, и нажмите Enter.

Теперь это даст грузу разрешение публиковать ящики от вашего имени.

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

Пробный запуск и публикация

Это последний шаг. Теперь мы делаем пробный прогон перед публикацией, чтобы убедиться в отсутствии ошибок. Если все получится, мы можем опубликовать нашу библиотеку и просмотреть ее в Интернете.

cargo publish --dry-run

Если все выглядит хорошо, последняя строка вывода команды должна сказать что-то вроде этого

warning: aborting upload due to dry run

Настало время его опубликовать. Просто используйте приведенную выше команду без флага пробного запуска. А Cargo соберет ваш проект и опубликует его в удаленном реестре крейтов.

cargo publish

Если все пойдет хорошо, теперь мы можем просмотреть нашу библиотеку на crates.io.



Это был простой способ поделиться библиотекой со своей командой или со всем миром. Несмотря на то, что это довольно простая библиотека, ей не хватает всего для использования в качестве публичной библиотеки. Я призываю всех вас написать небольшую библиотеку и поддерживать ее на crates.io. Я собираюсь обновить свой, чтобы со временем он был готов к работе, узнать, как документировать общедоступные API и использовать их при создании документации по коду.

Сначала это кажется трудным, но с практикой станет легче. А лучший способ написать чистый код — следовать лучшим практикам. Неважно, насколько сложным или простым является код. Помните, что никто не создавал популярную библиотеку, не создав сначала простую, подобную этой, и что-то, что имеет много возможностей для улучшения!

Пожалуйста, следите за обновлениями, подпишитесь на меня и следите за новостями!