# 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. Jesli launcher zobaczy URL w formacie `http://LOGIN:TOKEN@...`, zapisze ten token lokalnie do `tokens/tokens.json`. 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/tokens.json` Przed operacjami wymagajacymi autoryzacji dodaj lokalny token do: ```bash ~/dev/workspace/rv/tokens/tokens.json ``` Minimalny format pliku: ```json { "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: ```bash 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. Launcher umie tez przemigrowac stary plik `tokens/gitea_tokens.json` do nowego `tokens/tokens.json`. ### 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]` - `tokens scan` - `tokens read` - `tokens stats` - `tokens write` - `tokens update` - `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... token_path... 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 ``` ## `tokens scan` Skanuje remote URL-e w repo i zapisuje znalezione dane do `tokens/tokens.json`. Przelaczniki: - `--repo PATH` Sciezka wewnatrz docelowego repo. Domyslnie biezacy katalog. Typowy wynik: ```text repo_root... scanned1 added1 servers1 token_path... ``` Przyklad: ```bash python3 workspace.py tokens scan python3 workspace.py tokens scan --repo ~/dev/workspace/rv/series/inf/03 ``` ## `tokens read` Pokazuje zawartosc `tokens/tokens.json` w podziale na endpointy serwerow. Przelaczniki: - `--server ENDPOINT` Ogranicza wynik do jednego endpointu. - `--show-secrets` Pokazuje pelne wartosci tokenow zamiast maskowania. Typowy wynik: ```text token_path... endpointhttp://77.90.8.171:3001 typegitea schemehttp host77.90.8.171 port3001 users1 tokens1 useru1 tokent1SE****23 ``` Przyklad: ```bash python3 workspace.py tokens read python3 workspace.py tokens read --server http://77.90.8.171:3001 ``` ## `tokens stats` Pokazuje statystyki tokenow per endpoint serwera. Przelaczniki: - `--server ENDPOINT` Ogranicza wynik do jednego endpointu. Typowy wynik: ```text endpointtypeschemehostportuserstokens http://77.90.8.171:3001giteahttp77.90.8.171300111 ``` Przyklad: ```bash python3 workspace.py tokens stats ``` ## `tokens write` Wpisuje dane z `tokens/tokens.json` do wybranego remota repo. Przelaczniki: - `--repo PATH` Sciezka wewnatrz docelowego repo. Domyslnie biezacy katalog. - `--remote NAME` Nazwa remota do aktualizacji lub utworzenia. - `--url URL` URL remota, jesli remote jeszcze nie istnieje. - `--server ENDPOINT` Endpoint serwera z `tokens.json`. - `--user NAME` Uzytkownik z wybranego endpointu. - `--token-name NAME` Nazwa tokena, na przyklad `t1`. - `--replace` Nadpisuje inne dane auth juz wpisane w remote URL. - `--dry-run` Pokazuje plan bez zapisu. Przyklad: ```bash python3 workspace.py 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 remotes` Skanuje remote URL-e i zapisuje wynik do `tokens.json`. - `--from store` Bierze dane z `tokens.json` i wpisuje je do remota repo. - `--repo PATH` Sciezka wewnatrz repo. - `--remote NAME` Wymagane dla `--from store`. - `--url URL` Opcjonalny URL dla `--from store`. - `--server ENDPOINT` Opcjonalny wybor endpointu dla `--from store`. - `--user NAME` Opcjonalny wybor usera dla `--from store`. - `--token-name NAME` Opcjonalny wybor tokena dla `--from store`. - `--replace` Nadpisuje inne auth przy `--from store`. - `--dry-run` Pokazuje plan bez zapisu przy `--from store`. Przyklady: ```bash python3 workspace.py tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/03 python3 workspace.py 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: - `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 ```