# RV Launcher CLI Plik opisuje przelaczniki i liste komend skryptu `workspace.py`. ## Pobranie repo i przelaczenie galezi Jesli trzymasz tool repo pod: ```bash ~/dev/workspace/rv/tools/rv-launcher ``` to podstawowy bootstrap wyglada tak: ```bash 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 ``` Jesli w Twoim workspace narzedzia sa poza `rv/`, analogiczny katalog to: ```bash ~/dev/workspace/tools/rv-launcher ``` ### 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. Przyklad: ```bash 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/gitea_tokens.json` Przed operacjami wymagajacymi autoryzacji dodaj lokalny token do: ```bash ~/dev/workspace/rv/tokens/gitea_tokens.json ``` Minimalny format pliku: ```json { "users": { "u1": { "tokens": { "t1": "TU_WSTAW_TOKEN" } } } } ``` Ten plik powinien byc lokalny, niewersjonowany i miec prawa `600`. Przyklad: ```bash mkdir -p ~/dev/workspace/rv/tokens chmod 700 ~/dev/workspace/rv/tokens chmod 600 ~/dev/workspace/rv/tokens/gitea_tokens.json ``` Wariant z `tokens/gitea_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: ```bash git fetch origin main git switch main git pull --ff-only ``` Wariant przez `r1`: ```bash 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: ```bash git fetch origin feat/x git switch --track -c feat/x origin/feat/x ``` Wariant przez `r1`: ```bash git fetch r1 feat/x git switch --track -c feat/x r1/feat/x ``` ## Wywolanie glowne ```bash python3 workspace.py [--config PATH] [opcje] ``` Globalne przelaczniki: - `--config PATH` Uzywa innego pliku `workspace.json`. Komendy: - `show-config` - `list-series` - `list-cards [series]` - `submission [series] [card]` - `tmux-container [series] [card]` ## `show-config` Wypisuje rozwiazane sciezki z konfiguracji. Typowy format: ```text config_path... workspace_root... series_root... socket_root... tools_root... git_base_url... git_source_org... git_answer_org... git_source_remote... git_answer_remote... git_origin_remote... git_fallback_branch... tools_root_candidates ... ``` Przyklad: ```bash python3 workspace.py show-config ``` ## `list-series` Listuje katalogi serii znalezione w `series_root`. Kazda linia ma format: ```text ``` Przyklad: ```bash python3 workspace.py list-series ``` ## `list-cards [series]` Listuje karty z wybranej serii. Argumenty: - `series` Opcjonalne id serii, na przyklad `inf`. Jesli go brak, brana jest domyslna seria z `workspace.json`. Format wyjscia: ```text ``` Jesli `README.md` nie ma naglowka `#`, skrypt wypisuje: ```text ``` Przyklady: ```bash python3 workspace.py list-cards python3 workspace.py list-cards inf ``` ## `submission [series] [card]` Wylicza flow oddawania rozwiazan: - `r1` jako repo z materialem z `edu-inf` - `a1` jako repo odpowiedzi w `zsl-inf` - branch ucznia na podstawie jego nicku Nazwa repo odpowiedzi jest budowana z nazwy repo zrodlowego z `edu-inf`, klasy i daty: ```text -- ``` Przyklad: ```text lab-rv32i-strlen-bss-data-stack-4i-2026-04-26 ``` Argumenty pozycyjne: - `series` Id serii albo pelny selector, na przyklad `inf` albo `inf/03`. - `card` Numer karty, na przyklad `03`. Przelaczniki: - `--class NAME` Id klasy, na przyklad `4i`. - `--nick NAME` Nick ucznia. Domyslnie z niego powstaje nazwa brancha. - `--branch NAME` Nadpisuje domyslna nazwe brancha. - `--date YYYY-MM-DD` Data zajec uzywana w nazwie repo odpowiedzi. Domyslnie dzisiejsza. - `--source-url URL` Nadpisuje URL repo zrodlowego. Bez tego launcher czyta `origin` z repo karty. - `--apply` Dodaje albo aktualizuje remote `r1` i `a1` w repo karty. Typowy format wyjscia: ```text selectorinf/03 card_path... source_repoedu-inf/lab-rv32i-strlen-bss-data-stack source_remoter1 source_urlhttp://77.90.8.171:3001/edu-inf/lab-rv32i-strlen-bss-data-stack.git source_branchdeploy answer_remotea1 answer_repozsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26 answer_urlhttp://77.90.8.171:3001/zsl-inf/lab-rv32i-strlen-bss-data-stack-4i-2026-04-26.git student_branchu1 ``` Przyklady: ```bash python3 workspace.py submission inf 03 --class 4i --nick u1 python3 workspace.py submission inf 03 --class 4i --nick u1 --apply python3 workspace.py 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: - `series` Id serii albo pelny selector, na przyklad `inf` albo `inf/03`. - `card` Numer karty, na przyklad `03`. Przelaczniki: - `--session NAME` Nadpisuje nazwe sesji `tmux`. - `--window NAME` Nadpisuje nazwe okna `tmux`. - `--instance NAME` Ustawia `RV_INSTANCE` dla wrappera `rv`. - `--attach` Po utworzeniu sesji robi `tmux attach`. - `--dry-run` Nie uruchamia `tmux`; wypisuje selector, sciezki i koncowa komende. Reguly wyboru karty: - `tmux-container inf 03` -> seria `inf`, karta `03` - `tmux-container inf/03` -> pelny selector - `tmux-container 03` -> domyslna seria + karta `03` - `tmux-container inf` -> seria `inf` + domyslna karta - bez argumentow -> domyslna seria i domyslna karta Przyklady: ```bash python3 workspace.py tmux-container 03 --dry-run python3 workspace.py tmux-container inf 03 --session rv-inf03 python3 workspace.py tmux-container inf/03 --attach ```