319 lines
6.3 KiB
Markdown
319 lines
6.3 KiB
Markdown
# 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
|
|
{
|
|
"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] <komenda> [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<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:
|
|
|
|
```bash
|
|
python3 workspace.py show-config
|
|
```
|
|
|
|
## `list-series`
|
|
|
|
Listuje katalogi serii znalezione w `series_root`.
|
|
|
|
Kazda linia ma format:
|
|
|
|
```text
|
|
<series_id><TAB><liczba_kart><TAB><pelna_sciezka>
|
|
```
|
|
|
|
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
|
|
<card_no><TAB><tytul_z_README><TAB><pelna_sciezka>
|
|
```
|
|
|
|
Jesli `README.md` nie ma naglowka `#`, skrypt wypisuje:
|
|
|
|
```text
|
|
<card_no><TAB><pelna_sciezka>
|
|
```
|
|
|
|
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
|
|
<repo_z_edu-inf>-<klasa>-<data>
|
|
```
|
|
|
|
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
|
|
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:
|
|
|
|
```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
|
|
```
|