Laboratoria 11 XII¶
Zajęcia przeprowadzamy w parach.
Każdy potrzebuje własnego konta na Githubie!
Krok 1 (każdy niezależnie)¶
- Tworzymy nowe (prywatne) repozytorium na Githubie na podstawie szablonu: https://github.com/pmikolajczyk41/rust-lang-course-rust-repo.
- Postępujemy według poleceń z pliku
README.md
. - Upewniamy się, że CI przechodzi pomyślnie.
Krok 2: osoba 1.¶
- Tworzymy proste narzędzie z CLI używając biblioteki
clap
. - Narzędzie powinno posiadać dwie podkomendy:
head <n> <file>
oraztail <n> <file>
, które mają imitować POSIXowe odpowiedniki. Nie implementujemy logiki komend. W tym kroku zostawiamy tutodo!()
. - Publikujemy narzędzie na https://crates.io. Tutorial: https://doc.rust-lang.org/cargo/reference/publishing.html.
- Weryfikujemy efekty instalując narzędzie poprzez
cargo install
.
Krok 2: osoba 2. (i 3., jeśli jest nieparzyście wiele osób w grupie)¶
- Tworzymy prostą bibliotekę dostarczającą implementację POSIXowych funkcji:
head
oraztail
. Innymi słowy, biblioteka wystawia dwie publiczne funkcje:pub fn head(path: &Path, n: usize) -> Vec<String>
orazpub fn tail(path: &Path, n: usize) -> Vec<String>
(w razie problemów, na razie panikujemy). - Publikujemy bibliotekę na https://crates.io. Tutorial: https://doc.rust-lang.org/cargo/reference/publishing.html.
Osoba 3. implementuje dwie inne POSIXowe funkcjonalności (np. cp
i mv
).
Krok 3¶
- (Osoba 1.) Dodajemy bibliotekę partnera do zależności, delegując do niej logikę komend. Publikujemy nową wersję narzędzia.
- Pobieramy nową wersję narzędzia i testujemy na lokalnych plikach, czy działa dobrze.
Następne kroki¶
- Dostarczamy dokumentację obu projektów, publikujemy i sprawdzamy na https://docs.rs/
- Pogwałcenie zasad semver (https://semver.org/): w bibliotece wprowadzamy niekompatybilność w API (np. zwracamy
Result<Vec<String>, String>
) i publikujemy podbijając patch version. Instalujemy narzędzie ponownie lub odpalamycargo update; cargo build
w katalogu projektu narzędzia. Powinniśmy zaobserwować błąd kompilacji. - Naprawiamy powyższą sytuację: flaga
--locked
i yankowanie. - Wprowadzamy nową funkcjonalność w bibliotecę i chowamy ją za
feature
m. W narzędziu aktualizujemy deklarację zależności. - Dodajemy partnera jako drugiego maintainera projektu (w sensie
cargo publish
). Testujemy otrzymane pozwolenia.