いきなりcrates.ioに公開するのは怖いのでローカルで練習してみる
rustでツールを作成したので、簡単にインストールしてもらえるように公開だ! と、思ったものの初めてでいきなりcrates.ioに公開するのは、怖いのでローカルにレジストリを作成して一旦そこに対して公開してみるっていうのをやってみました。
※本物のcrates.ioに対する公開の方法は、探せば結構出てくるので割愛します。
ローカルにレジストリサーバを立てる
https://github.com/rust-lang/cargo/wiki/Third-party-registries
rustが公式に紹介しているサードパーティーレジストリでオープンソースのもから導入が簡単そうだったのでestuaryを選びました。
https://github.com/onelson/estuary
公式にサンプルのDockerfileを置いてくれてはいるのですが、もうちょっと使いやすくするためにdocker-compose.ymlを用意して、さらに簡単に使えるようにしました。
FROM rust:1-slim-buster
# Estuary relies on being able to run `git` on the command-line.
# It additionally uses the `git2` crate which indirectly depends on `libssl`.
RUN apt-get update && apt-get install -y \
git \
pkg-config libssl-dev \
&& rm -rf /var/lib/apt/lists/*
RUN cargo install estuary
version: 3
services:
crates.io:
build:
dockerfile: Dockerfile
context: .
environment:
ESTUARY_INDEX_DIR: "/var/lib/estuary/index"
ESTUARY_CRATE_DIR: "/var/lib/estuary/crates"
RUST_LOG: "actix_web=INFO,estuary=INFO"
ESTUARY_BASE_URL: "http://localhost:7878"
ports:
- "7878:7878"
volumes:
- "./data/:/var/lib/estuary/"
command: estuary
これらを適当なディレクトリに配置して、
docker compose up
とすればローカルでレジストリサーバを動かせます。
ローカルのレジストリに対して公開してみる
.cargo/config.toml
にローカルのレジストリを登録しておきます。
[registries]
estuary = { index = "http://localhost:7878/git/index" }
普通にインストールしていれば、ホームディレクトリの直下に.cargo
ディレクトリがあるはずです。
cargo login --registry estuary
適当なトークンを入力してログインします。
cargo publish --registry estuary
ローカルのレジストリに公開したcrateを使ってみる
[dependencies]
my-cool-package = { version = "1.2.3", registry = "estuary" }
cargo install --registry estuary my-cool-app