cargo publish în Rust

Cargo și rustup Cargo 1.0

Împachetează biblioteca și o publică pe crates.io, de unde oricine o poate folosi cu cargo add. O versiune publicată nu mai poate fi ștearsă.

Sintaxă
cargo login                      # o singură dată, cu tokenul de pe crates.io
cargo publish --dry-run          # verifică totul fără să publice
cargo publish                    # publică versiunea din Cargo.toml
cargo yank --version 0.1.0       # retrage o versiune

Ce face cargo publish

cargo publish creează o arhivă .crate cu sursele, verifică dacă se compilează din arhivă și o încarcă pe crates.io. Ai nevoie de un cont (autentificare cu GitHub) și de un token, salvat o dată cu cargo login. Documentația apare automat pe docs.rs.

Cargo.toml trebuie să aibă câteva câmpuri în plus: description și license (de exemplu "MIT OR Apache-2.0") sunt obligatorii; repository, readme, keywords și categories sunt recomandate. Numele crate-ului trebuie să fie liber pe crates.io.

Publicarea este permanentă: o versiune nu poate fi ștearsă sau suprascrisă, iar pentru modificări publici o versiune nouă. cargo yank doar împiedică proiectele noi să aleagă acea versiune. De aceea rulează întâi cargo publish --dry-run.

Exemple

Exemplul 1: Verificare fără publicare

--dry-run parcurge toți pașii, inclusiv compilarea din arhivă, dar nu încarcă nimic. Avertismentul arată că lipsesc descrierea și licența, obligatorii la publicarea reală.

$ cargo publish --dry-run

Rezultat în terminal

    Updating crates.io index
warning: manifest has no description, license, license-file, documentation, homepage or repository
  |
  = note: see https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info
   Packaging calcule v0.1.0 (/home/ana/proiecte/calcule)
    Packaged 4 files, 1.7KiB (1.0KiB compressed)
   Verifying calcule v0.1.0 (/home/ana/proiecte/calcule)
   Compiling calcule v0.1.0 (/home/ana/proiecte/calcule/target/package/calcule-0.1.0)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.19s
   Uploading calcule v0.1.0 (/home/ana/proiecte/calcule)
warning: aborting upload due to dry run

Exemplul 2: Câmpurile necesare în Cargo.toml

Cu aceste câmpuri, cargo publish nu mai dă avertismentul. Numele trebuie să fie unic pe crates.io.

[package]
name = "calcule-note"
version = "0.1.0"
edition = "2024"
description = "Calculul mediilor și calificativelor școlare"
license = "MIT OR Apache-2.0"
repository = "https://github.com/ana/calcule-note"
readme = "README.md"
keywords = ["scoala", "note", "medie"]
categories = ["mathematics"]

Efect

Pagina crate-ului de pe crates.io afișează descrierea, licența, link-ul spre depozit, README-ul și cuvintele cheie, iar crate-ul apare în căutări și în categoria Mathematics.

Greșeli frecvente

  • Publici fără --dry-run și descoperi o greșeală. Versiunea rămâne pe crates.io pentru totdeauna; poți doar publica una nouă și da yank celei greșite.
  • Incluzi din greșeală fișiere mari sau secrete (.env, date de test). Verifică lista cu cargo package --list și exclude-le cu exclude = [...] în Cargo.toml.
  • Uiți să mărești version înainte de o nouă publicare: crate version `0.1.0` is already uploaded.

Comenzi înrudite

  • Cargo.toml: Fișierul de configurare al unui proiect Rust (în format TOML): numele și versiunea, ediția, dependențele, funcționalitățile și setările de compilare.
  • cargo doc: Generează documentația HTML a proiectului din comentariile ///, cu toate tipurile și funcțiile publice, ca pe docs.rs.
  • cargo add: Adaugă o dependență (un crate de pe crates.io) în Cargo.toml, cu ultima versiune compatibilă. cargo remove o scoate.
  • comentarii și documentație (//, ///, //!): // și /* */ sunt comentarii obișnuite; /// și //! scriu documentație Markdown, transformată în HTML de cargo doc și testată de cargo test.