12 KiB
RVCTL CLI
Plik opisuje przelaczniki i liste komend skryptu rvctl.
Model katalogow
Repo oryginalne trzymamy poza workspace:
~/dev/edu/repos/rv
Workspace sluzy do klonow roboczych i cwiczen:
~/dev/workspace/rv
Typowy uklad:
~/dev/edu/repos/rv/rv-launcher
~/dev/edu/repos/rv/rv32i-hazard3-env
~/dev/edu/repos/rv/series/<seria>/<karta>
~/dev/workspace/rv/tools/rv-launcher
~/dev/workspace/rv/tools/rv32i-hazard3-env
~/dev/workspace/rv/series/<seria>/<karta>
rvctl czyta karty z series_root w workspace. Tool repo
rv32i-hazard3-env wybiera najpierw z workspace, a potem z fallbacku
~/dev/edu/repos/rv, jesli taki klon roboczy jeszcze nie istnieje.
Karty pracy tez sa rozdzielone:
original_series_rootwskazuje repo zrodlowe kart, na przyklad~/dev/edu/repos/rv/seriesseries_rootwskazuje klony testowe w workspace, na przyklad~/dev/workspace/rv/series
Komendy launchera pracuja na series_root, czyli na klonach testowych.
Pobranie repo i przelaczenie galezi
Repo treningowe launchera trzymaj pod:
~/dev/workspace/rv/tools/rv-launcher
Podstawowy bootstrap wyglada tak:
mkdir -p ~/dev/workspace/rv/tools
cd ~/dev/workspace/rv/tools
git clone http://77.90.8.171:3001/edu-tools/rv-launcher.git
cd rv-launcher
Glowne pliki CLI:
./rvctl
rvctl.py
rvctl jest jedynym publicznym entrypointem. rvctl.py jest implementacja
uruchamiana przez wrapper i nie wymaga osobnego wywolywania przez ucznia.
Uruchomienie bez argumentow pokazuje tabelaryczny skrot komend:
./rvctl
./rvctl tokens
./rvctl help tokens
Autoryzacja
Masz dwie drogi.
Droga 1: remote r1 z tokenem w URL
To jest wariant dydaktyczny, jesli uczen ma cwiczyc reczne dodawanie remota z
tokenem do zdalnego endpointu. Jesli launcher zobaczy URL w formacie
http://LOGIN:TOKEN@..., zapisze ten token lokalnie do tokens/tokens.json.
Przyklad:
git remote add r1 http://u1:TOKEN@77.90.8.171:3001/edu-tools/rv-launcher.git
git fetch r1 main
git switch --track -c main r1/main
Droga 2: lokalny tokens/tokens.json
Przed operacjami wymagajacymi autoryzacji dodaj lokalny token do:
~/dev/workspace/rv/tokens/tokens.json
Minimalny format pliku:
{
"version": 2,
"servers": {
"http://77.90.8.171:3001": {
"type": "gitea",
"scheme": "http",
"host": "77.90.8.171",
"port": 3001,
"users": {
"u1": {
"tokens": {
"t1": "TU_WSTAW_TOKEN"
}
}
}
}
}
}
Ten plik powinien byc lokalny, niewersjonowany i miec prawa 600.
Przyklad:
mkdir -p ~/dev/workspace/rv/tokens
chmod 700 ~/dev/workspace/rv/tokens
chmod 600 ~/dev/workspace/rv/tokens/tokens.json
Wariant z tokens/tokens.json jest wygodniejszy wtedy, gdy launcher ma
sam wykonywac clone, fetch i push, albo gdy uzytkownik po zajeciach chce
pracowac z wieloma repo na swoim koncie bez wpisywania tokena do kazdego
remota.
Fetch i switch
Domyslna galaz launchera to main.
Po sklonowaniu:
git fetch origin main
git switch main
git pull --ff-only
Wariant przez r1:
git fetch r1 main
git switch --track -c main r1/main
git pull --ff-only r1 main
Jesli chcesz wejsc na inna galaz, na przyklad feat/x, uzyj:
git fetch origin feat/x
git switch --track -c feat/x origin/feat/x
Wariant przez r1:
git fetch r1 feat/x
git switch --track -c feat/x r1/feat/x
Wywolanie glowne
./rvctl [--config PATH] <komenda> [opcje]
Globalne przelaczniki:
--config PATHUzywa innego plikuworkspace.json.
Pomoc tabelaryczna:
./rvctl
./rvctl help
./rvctl tokens
./rvctl help tokens
Szczegolowy help parsera:
./rvctl --help
./rvctl <komenda> --help
./rvctl tokens <komenda> --help
Komendy:
show-configlist-serieslist-cards [series]tokens scantokens readtokens statstokens writetokens updatesubmission [series] [card]tmux-container [series] [card]
show-config
Wypisuje rozwiazane sciezki z konfiguracji.
Typowy format:
config_path<TAB>...
original_root<TAB>...
original_series_root<TAB>...
workspace_root<TAB>...
series_root<TAB>...
socket_root<TAB>...
token_path<TAB>...
tools_root<TAB>...
git_base_url<TAB>...
git_source_org<TAB>...
git_answer_org<TAB>...
git_source_remote<TAB>...
git_answer_remote<TAB>...
git_origin_remote<TAB>...
git_fallback_branch<TAB>...
tools_root_candidates
...
Przyklad:
./rvctl show-config
list-series
Listuje katalogi serii znalezione w series_root.
Kazda linia ma format:
<series_id><TAB><liczba_kart><TAB><pelna_sciezka>
Przyklad:
./rvctl list-series
list-cards [series]
Listuje karty z wybranej serii.
Argumenty:
seriesOpcjonalne id serii, na przykladinf. Jesli go brak, brana jest domyslna seria zworkspace.json.
Format wyjscia:
<card_no><TAB><tytul_z_README><TAB><pelna_sciezka>
Jesli README.md nie ma naglowka #, skrypt wypisuje:
<card_no><TAB><pelna_sciezka>
Przyklady:
./rvctl list-cards
./rvctl list-cards inf
tokens scan
Skanuje remote URL-e w repo oraz lokalny tokens.json, laczy wpisy w pary po
endpoincie, userze i wartosci tokena, a potem pokazuje jeden logiczny wiersz
na token.
Przelaczniki:
--repo PATHSciezka wewnatrz docelowego repo. Domyslnie biezacy katalog.
Typowy wynik:
tokens
item server host org repo user remote token_ref token scope org repo
---- ------ ------------- --------- ----------- ---- ------ --------- ------------ ------ ------ ------
1 gitea 77.90.8.171 edu-tools rv-launcher u1 r1 t1 * e59cc...13be +---+ +++++ ++++
token_ref jest komorka stalej szerokosci: nazwa tokena jest po lewej, a marker
po prawej. Marker * oznacza, ze token w remote i tokens.json jest zgodny
oraz uprawnienia zostaly wczytane. Marker R oznacza token tylko w remote, a
S token tylko w tokens.json.
Maski uprawnien:
scopema pozycjeawrop:all,write:repository,read:repository, organization scope,public-onlyorgma pozycjeoawrc: owner, admin, write, read, create reporepoma pozycjeoawr: owner, admin, write, read+oznacza wlaczone,-wylaczone,?nie wczytano,!blad wczytania
Przyklad:
./rvctl tokens scan
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/03
tokens read
Pokazuje zawartosc tokens/tokens.json w podziale na endpointy serwerow.
Przelaczniki:
--server ENDPOINTOgranicza wynik do jednego endpointu.--show-secretsPokazuje pelne wartosci tokenow zamiast maskowania.
Typowy wynik:
token_path<TAB>...
endpoint<TAB>http://77.90.8.171:3001
type<TAB>gitea
scheme<TAB>http
host<TAB>77.90.8.171
port<TAB>3001
users<TAB>1
tokens<TAB>1
user<TAB>u1
token<TAB>t1<TAB>SE****23
Przyklad:
./rvctl tokens read
./rvctl tokens read --server http://77.90.8.171:3001
tokens stats
Pokazuje statystyki endpointow z repo i tokens.json, a takze ich zgodnosc
wzgledem siebie.
Przelaczniki:
--repo PATHSciezka wewnatrz repo, z ktorego maja byc odczytane remote URL-e.--server ENDPOINTOgranicza wynik do jednego endpointu.
Typowy wynik:
context
item<TAB>value
repo_root<TAB>...
token_path<TAB>...
tokens
item server host org repo user remote token_ref token scope org repo
---- ------ ------------- --------- ----------- ---- ------ --------- ------------ ------ ------ ------
1 gitea 77.90.8.171 edu-tools rv-launcher u1 r1 t1 * e59cc...13be +---+ +++++ ++++
status
item<TAB>value
in_sync<TAB>1
Przyklad:
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/03
tokens write
Wpisuje dane z tokens/tokens.json do wybranego remota repo.
Przelaczniki:
--repo PATHSciezka wewnatrz docelowego repo. Domyslnie biezacy katalog.--remote NAMENazwa remota do aktualizacji lub utworzenia.--url URLURL remota, jesli remote jeszcze nie istnieje.--server ENDPOINTEndpoint serwera ztokens.json.--user NAMEUzytkownik z wybranego endpointu.--token-name NAMENazwa tokena, na przykladt1.--replaceNadpisuje inne dane auth juz wpisane w remote URL.--dry-runPokazuje plan bez zapisu.
Przyklad:
./rvctl tokens write --repo ~/dev/workspace/rv/series/inf/03 --remote r1 --server http://77.90.8.171:3001 --user u1 --token-name t1
tokens update
Uruchamia synchronizacje w zadanym kierunku.
Przelaczniki:
--from remotesSkanuje remote URL-e i zapisuje wynik dotokens.json.--from storeBierze dane ztokens.jsoni wpisuje je do remota repo.--repo PATHSciezka wewnatrz repo.--remote NAMEWymagane dla--from store.--url URLOpcjonalny URL dla--from store.--server ENDPOINTOpcjonalny wybor endpointu dla--from store.--user NAMEOpcjonalny wybor usera dla--from store.--token-name NAMEOpcjonalny wybor tokena dla--from store.--replaceNadpisuje inne auth przy--from store.--dry-runPokazuje plan bez zapisu przy--from store.
Przyklady:
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/03 --remote r1 --server http://77.90.8.171:3001 --user u1 --token-name t1
submission [series] [card]
Wylicza flow oddawania rozwiazan:
r1jako repo z materialem zedu-infa1jako repo odpowiedzi wzsl-inf- branch ucznia na podstawie jego nicku
Nazwa repo odpowiedzi jest budowana z nazwy repo zrodlowego z edu-inf, klasy
i daty:
<repo_z_edu-inf>-<klasa>-<data>
Przyklad:
lab-rv32i-strlen-bss-data-stack-4i-2026-04-26
Argumenty pozycyjne:
seriesId serii albo pelny selector, na przykladinfalboinf/03.cardNumer karty, na przyklad03.
Przelaczniki:
--class NAMEId klasy, na przyklad4i.--nick NAMENick ucznia. Domyslnie z niego powstaje nazwa brancha.--branch NAMENadpisuje domyslna nazwe brancha.--date YYYY-MM-DDData zajec uzywana w nazwie repo odpowiedzi. Domyslnie dzisiejsza.--source-url URLNadpisuje URL repo zrodlowego. Bez tego launcher czytaoriginz repo karty.--applyDodaje albo aktualizuje remoter1ia1w repo karty.
Typowy format wyjscia:
selector<TAB>inf/03
card_path<TAB>...
source_repo<TAB>edu-inf/lab-rv32i-strlen-bss-data-stack
source_remote<TAB>r1
source_url<TAB>http://77.90.8.171:3001/edu-inf/lab-rv32i-strlen-bss-data-stack.git
source_branch<TAB>deploy
answer_remote<TAB>a1
answer_repo<TAB>zsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26
answer_url<TAB>http://77.90.8.171:3001/zsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26.git
student_branch<TAB>u1
Przyklady:
./rvctl submission inf 03 --class 4i --nick u1
./rvctl submission inf 03 --class 4i --nick u1 --apply
./rvctl submission inf/03 --class 4i --nick u2 --date 2026-04-26
tmux-container [series] [card]
Tworzy nowa sesje tmux i uruchamia kontener w pane 0.
Argumenty pozycyjne:
seriesId serii albo pelny selector, na przykladinfalboinf/03.cardNumer karty, na przyklad03.
Przelaczniki:
--session NAMENadpisuje nazwe sesjitmux.--window NAMENadpisuje nazwe oknatmux.--instance NAMEUstawiaRV_INSTANCEdla wrapperarv.--attachPo utworzeniu sesji robitmux attach.--dry-runNie uruchamiatmux; wypisuje selector, sciezki i koncowa komende.
Reguly wyboru karty:
tmux-container inf 03-> seriainf, karta03tmux-container inf/03-> pelny selectortmux-container 03-> domyslna seria + karta03tmux-container inf-> seriainf+ domyslna karta- bez argumentow -> domyslna seria i domyslna karta
Przyklady:
./rvctl tmux-container 03 --dry-run
./rvctl tmux-container inf 03 --session rv-inf03
./rvctl tmux-container inf/03 --attach