1019 lines
24 KiB
Markdown
1019 lines
24 KiB
Markdown
# RVCTL CLI
|
|
|
|
Plik opisuje przełączniki i listę komend skryptu `rvctl`.
|
|
|
|
## Model katalogów
|
|
|
|
Repo oryginalne trzymamy poza workspace:
|
|
|
|
```bash
|
|
~/dev/edu/repos/rv
|
|
```
|
|
|
|
Workspace służy do klonów roboczych i ćwiczeń:
|
|
|
|
```bash
|
|
~/dev/workspace/rv
|
|
```
|
|
|
|
Typowy układ:
|
|
|
|
```text
|
|
~/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`, jeśli taki klon roboczy jeszcze nie istnieje.
|
|
|
|
Karty pracy też są rozdzielone:
|
|
|
|
- `original_series_root` wskazuje repo źródłowe kart, na przykład `~/dev/edu/repos/rv/series`
|
|
- `series_root` wskazuje klony testowe w workspace, na przykład `~/dev/workspace/rv/series`
|
|
|
|
Komendy launchera pracują na `series_root`, czyli na klonach testowych.
|
|
|
|
## Pobranie repo i przełączenie gałęzi
|
|
|
|
Repo treningowe launchera trzymaj pod:
|
|
|
|
```bash
|
|
~/dev/workspace/rv/tools/rv-launcher
|
|
```
|
|
|
|
Podstawowy bootstrap wygląda 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
|
|
```
|
|
|
|
Główne pliki CLI:
|
|
|
|
```bash
|
|
./rvctl
|
|
rvctl.py
|
|
```
|
|
|
|
`rvctl` jest jedynym publicznym entrypointem. `rvctl.py` jest implementacją
|
|
uruchamianą przez wrapper i nie wymaga osobnego wywoływania przez ucznia.
|
|
|
|
Uruchomienie bez argumentów pokazuje tabelaryczny skrót komend:
|
|
|
|
```bash
|
|
./rvctl
|
|
./rvctl tokens
|
|
./rvctl help tokens
|
|
```
|
|
|
|
### Autoryzacja
|
|
|
|
Masz dwie drogi.
|
|
|
|
#### Droga 1: remote `r1` z tokenem w URL
|
|
|
|
To jest wariant dydaktyczny, jeśli uczeń ma ćwiczyć ręczne dodawanie remota z
|
|
tokenem do zdalnego endpointu. Jeśli launcher zobaczy URL w formacie
|
|
`http://LOGIN:TOKEN@...`, zapisze ten token lokalnie do `tokens/tokens.json`.
|
|
|
|
Przykład:
|
|
|
|
```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 wymagającymi autoryzacji dodaj lokalny token do:
|
|
|
|
```bash
|
|
~/dev/workspace/rv/tokens/tokens.json
|
|
```
|
|
|
|
Minimalny format pliku:
|
|
|
|
```json
|
|
{
|
|
"version": 3,
|
|
"tokens": [
|
|
{
|
|
"id": "r1",
|
|
"value": "TU_WSTAW_TOKEN",
|
|
"server": {
|
|
"type": "gitea",
|
|
"endpoint": "http://77.90.8.171:3001",
|
|
"scheme": "http",
|
|
"host": "77.90.8.171",
|
|
"port": 3001
|
|
},
|
|
"user": "u1",
|
|
"org": "edu-tools",
|
|
"repo": "rv-launcher"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Ten plik powinien być lokalny, niewersjonowany i mieć prawa `600`.
|
|
|
|
Przykład:
|
|
|
|
```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 wykonywać `clone`, `fetch` i `push`, albo gdy użytkownik po zajęciach chce
|
|
pracować z wieloma repo na swoim koncie bez wpisywania tokena do każdego
|
|
remota.
|
|
|
|
### Fetch i switch
|
|
|
|
Domyślna gałąź 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
|
|
```
|
|
|
|
Jeśli chcesz wejść na inną gałąź, na przykład `feat/x`, użyj:
|
|
|
|
```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
|
|
```
|
|
|
|
## Wywołanie główne
|
|
|
|
```bash
|
|
./rvctl [--config PATH] <komenda> [opcje]
|
|
```
|
|
|
|
Globalne przełączniki:
|
|
|
|
- `--config PATH`
|
|
Używa innego pliku `workspace.json`.
|
|
|
|
Pomoc tabelaryczna:
|
|
|
|
```bash
|
|
./rvctl
|
|
./rvctl help
|
|
./rvctl tokens
|
|
./rvctl help tokens
|
|
```
|
|
|
|
Szczegółowy help parsera:
|
|
|
|
```bash
|
|
./rvctl --help
|
|
./rvctl <komenda> --help
|
|
./rvctl tokens <komenda> --help
|
|
```
|
|
|
|
Komendy:
|
|
|
|
- `show-config`
|
|
- `list-series`
|
|
- `list-cards [series]`
|
|
- `series list`
|
|
- `series show SERIES`
|
|
- `series fetch SERIES [--dry-run]`
|
|
- `series cards list SERIES`
|
|
- `series cards show SERIES CARD`
|
|
- `series cards fetch SERIES CARD`
|
|
- `series cards submission SERIES CARD --class NAME`
|
|
- `series cards tasks list SERIES CARD`
|
|
- `series cards tasks show SERIES CARD TASK`
|
|
- `series cards tasks switch SERIES CARD TASK`
|
|
- `tasks list [CARD|SERIES CARD]`
|
|
- `tasks show TASK|CARD TASK|SERIES CARD TASK`
|
|
- `tasks switch TASK|CARD TASK|SERIES CARD TASK`
|
|
- `tokens scan`
|
|
- `tokens compare`
|
|
- `tokens read`
|
|
- `tokens stats`
|
|
- `tokens write`
|
|
- `tokens update`
|
|
- `submission [series] [card]`
|
|
- `tmux-container [series] [card]`
|
|
|
|
## `show-config`
|
|
|
|
Wypisuje rozwiązane ścieżki z konfiguracji.
|
|
|
|
Typowy format:
|
|
|
|
```text
|
|
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
|
|
...
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl show-config
|
|
```
|
|
|
|
## `series list`
|
|
|
|
Listuje serie dostępne w źródłach i workspace. Komenda tworzy `series_root`,
|
|
jeżeli katalog jeszcze nie istnieje.
|
|
|
|
Format wyjścia:
|
|
|
|
```text
|
|
<series_id><TAB><karty_w_źródłach><TAB><karty_w_workspace><TAB><workspace_path>
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl series list
|
|
```
|
|
|
|
## `series show SERIES`
|
|
|
|
Pokazuje szczegóły jednej serii.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
|
|
Format wyjścia:
|
|
|
|
```text
|
|
series<TAB>...
|
|
source_path<TAB>...
|
|
workspace_path<TAB>...
|
|
cards_count<TAB>...
|
|
cards<TAB>...
|
|
```
|
|
|
|
## `series fetch SERIES`
|
|
|
|
Pobiera albo aktualizuje wszystkie karty z serii.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--dry-run`
|
|
Pokazuje plan bez klonowania repo i bez zmian w token store.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl series fetch inf --dry-run
|
|
```
|
|
|
|
## `series cards list SERIES`
|
|
|
|
Listuje karty w wybranej serii.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
|
|
Format wyjścia:
|
|
|
|
```text
|
|
<card><TAB><repo><TAB><source|workspace><TAB><tytuł_z_README>
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl series cards list inf
|
|
```
|
|
|
|
## `series cards show SERIES CARD`
|
|
|
|
Pokazuje szczegóły jednej karty.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
|
|
Format wyjścia:
|
|
|
|
```text
|
|
series<TAB>...
|
|
card<TAB>...
|
|
repo<TAB>...
|
|
source_path<TAB>...
|
|
workspace_path<TAB>...
|
|
source_remote<TAB>...
|
|
source_url<TAB>...
|
|
answer_remote<TAB>...
|
|
answer_url<TAB>...
|
|
tasks<TAB>...
|
|
```
|
|
|
|
## `series cards fetch SERIES CARD`
|
|
|
|
Pobiera kartę z repo źródłowego do `series_root`. `CARD` może być pełną nazwą
|
|
repo albo unikalnym fragmentem, na przykład `bss`.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--dry-run`
|
|
Pokazuje plan bez klonowania repo, bez zapisu tokena `r1a` i bez ustawiania
|
|
remota odpowiedzi.
|
|
|
|
```bash
|
|
./rvctl series cards fetch inf bss
|
|
```
|
|
|
|
Po pobraniu komenda ustawia:
|
|
|
|
- `r1` na repo źródłowe w `edu-inf`
|
|
- `r1a` na repo pracy w `c2025-1a-inf`
|
|
|
|
`r1a` jest tworzony z tokena `r1` i wskazuje na repo o tej samej nazwie co
|
|
karta.
|
|
|
|
## `series cards submission SERIES CARD`
|
|
|
|
Alias funkcjonalny dla `submission`, ale z jawnym namespace kart.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--class NAME`
|
|
Id klasy albo grupy.
|
|
- `--nick NAME`
|
|
Nick ucznia. Jeżeli go nie podasz, `rvctl` bierze użytkownika ze store
|
|
tokenów.
|
|
- `--task TASK`
|
|
Zadanie używane do zbudowania domyślnej nazwy brancha. Domyślnie
|
|
`defaults.task` z `workspace.json`.
|
|
- `--branch NAME`
|
|
Nadpisuje nazwę brancha odpowiedzi. Bez tego branch ma format
|
|
`<login>T<numer_zadania>a`, na przykład `u1T1a`.
|
|
- `--date YYYY-MM-DD`
|
|
Data zajęć widoczna w planie.
|
|
- `--source-url URL`
|
|
Nadpisuje URL repo źródłowego.
|
|
- `--apply`
|
|
Zapisuje remotes `r1` i `r1a` w repo karty.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl series cards submission inf bss --class c2025-1a-inf --apply
|
|
```
|
|
|
|
## `series cards tasks list SERIES CARD`
|
|
|
|
Listuje zadania z `src/tasks` pobranej karty.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
|
|
```bash
|
|
./rvctl series cards tasks list inf bss
|
|
```
|
|
|
|
## `series cards tasks show SERIES CARD TASK`
|
|
|
|
Pokazuje szczegóły jednego zadania.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
- `TASK`
|
|
Pełna nazwa zadania albo unikalny fragment, na przykład `task1`.
|
|
|
|
```bash
|
|
./rvctl series cards tasks show inf bss task1
|
|
```
|
|
|
|
## `series cards tasks switch SERIES CARD TASK`
|
|
|
|
Tworzy albo przełącza lokalny branch pracy dla zadania.
|
|
|
|
Argumenty:
|
|
|
|
- `SERIES`
|
|
Id serii, na przykład `inf`.
|
|
- `CARD`
|
|
Pełna nazwa repo albo unikalny fragment, na przykład `bss`.
|
|
- `TASK`
|
|
Pełna nazwa zadania albo unikalny fragment, na przykład `task4` albo `4`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--branch NAME`
|
|
Nadpisuje automatyczną nazwę brancha.
|
|
- `--dry-run`
|
|
Pokazuje plan bez przełączania brancha.
|
|
|
|
Domyślna nazwa brancha powstaje z użytkownika w `tokens.json`, numeru zadania i
|
|
końcówki `a`. Dla użytkownika `u1` i zadania `task4_stack_strlen` będzie to
|
|
`u1T4a`. Komenda ustawia też upstream brancha na `r1a/u1T4a`.
|
|
|
|
```bash
|
|
./rvctl series cards tasks switch inf bss 4
|
|
```
|
|
|
|
## `tasks list`
|
|
|
|
Skrót do listowania zadań z domyślnej karty z `workspace.json`.
|
|
|
|
```bash
|
|
./rvctl tasks list
|
|
```
|
|
|
|
Opcjonalnie można wskazać kartę albo serię i kartę:
|
|
|
|
```bash
|
|
./rvctl tasks list bss
|
|
./rvctl tasks list inf bss
|
|
```
|
|
|
|
## `tasks show TASK`
|
|
|
|
Skrót do podglądu zadania z domyślnej karty.
|
|
|
|
```bash
|
|
./rvctl tasks show 4
|
|
./rvctl tasks show bss 4
|
|
./rvctl tasks show inf bss 4
|
|
```
|
|
|
|
## `tasks switch TASK`
|
|
|
|
Skrót do przełączenia na branch odpowiedzi dla zadania z domyślnej karty.
|
|
|
|
```bash
|
|
./rvctl tasks switch 4
|
|
```
|
|
|
|
Ta komenda działa tak samo jak pełna forma:
|
|
|
|
```bash
|
|
./rvctl series cards tasks switch inf bss 4
|
|
```
|
|
|
|
## `list-series`
|
|
|
|
Alias kompatybilności dla `series list`.
|
|
|
|
```bash
|
|
./rvctl list-series
|
|
```
|
|
|
|
## `list-cards [series]`
|
|
|
|
Alias kompatybilności dla `series cards list SERIES`.
|
|
|
|
Argumenty:
|
|
|
|
- `series`
|
|
Opcjonalne id serii, na przykład `inf`.
|
|
Jeśli go brak, brana jest domyślna seria z `workspace.json`.
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl list-cards
|
|
./rvctl list-cards inf
|
|
```
|
|
|
|
## `tokens scan`
|
|
|
|
Czyta remote URL-e w repo i pokazuje diagnostyczną tabelę git remotes:
|
|
`auth`, `plain` i `unsupported`. Nie porównuje ich z `tokens.json`. Komenda
|
|
jest read-only.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz docelowego repo. Domyślnie repo zawierające `rvctl`.
|
|
- `--server ENDPOINT`
|
|
Pokazuje tylko wpisy z danego endpointu.
|
|
|
|
Typowy wynik:
|
|
|
|
```text
|
|
remotes
|
|
item remote kind server proto host org repo user token result url
|
|
---- ------ ----------- ------ ----- ------------------ --------- ----------- ---- ------------ -------------- --------------------------------------
|
|
1 r1 auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 e59cc...13be found http://77.90.8.171:3001/edu-tools/...
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens scan
|
|
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
## `tokens compare`
|
|
|
|
Czyta remote URL-e w repo oraz lokalny `tokens.json`, łączy wpisy w pary po
|
|
endpoincie, nazwie remota, token id, wartości tokena, org i repo, a potem
|
|
pokazuje jeden logiczny wiersz na token. Komenda jest read-only.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz docelowego repo. Domyślnie repo zawierające `rvctl`.
|
|
|
|
Typowy wynik:
|
|
|
|
```text
|
|
tokens
|
|
item server proto host org repo user remote token_ref token valid scope org repo
|
|
---- ------ ----- ------------------ --------- ----------- ---- ------ --------- ------------ ------------------- aAimnopru oawrc- oawr--
|
|
1 gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 r1 * e59cc...13be forever wwwwwwwww +++++ ++++
|
|
```
|
|
|
|
`token_ref` jest komórką stałej szerokości: nazwa tokena jest po lewej, a marker
|
|
po prawej. Nazwa tokena jest taka sama jak nazwa git remote, np. `r1`. Marker
|
|
`*` oznacza, że remote i `tokens.json` są zgodne. Marker `R` oznacza token tylko
|
|
w remote, a `S` token tylko w `tokens.json`.
|
|
|
|
Maski uprawnień:
|
|
|
|
- `scope` ma pozycje `aAimnopru`: activitypub, admin, issue, misc, notification, organization, package, repository, user
|
|
- w `scope`: `w` oznacza read/write, `r` read, `-` brak dostępu
|
|
- `org` ma pozycje `oawrc`: owner, admin, write, read, create repo
|
|
- `repo` ma pozycje `oawr`: owner, admin, write, read
|
|
- `+` oznacza włączone, `-` wyłączone, `?` nie wczytano, `!` błąd wczytania
|
|
- `valid` pokazuje `forever`, lokalne `expires_at`, `invalid`, `?` albo `!`
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens compare
|
|
./rvctl tokens compare --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
## `tokens list store|remote|both`
|
|
|
|
Wypisuje jedno źródło bez porównywania go z drugim. `list` jest read-only:
|
|
pokazuje co jest w `tokens.json`, co jest w git remote albo oba źródła jako
|
|
osobne wiersze. `compare` służy do porównania zgodności.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Repo, z którego listowane są git remotes. Domyślnie repo zawierające `rvctl`.
|
|
- `--server ENDPOINT`
|
|
Ogranicza wynik do jednego endpointu.
|
|
|
|
Typowy wynik:
|
|
|
|
```text
|
|
tokens
|
|
item source kind server proto host org repo user remote token valid scope org repo
|
|
---- ------ ----- ------ ----- ------------------ --------- ----------- ---- ------ ------------ ------------------- aAimnopru oawrc- oawr--
|
|
1 store auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 e59cc...13be forever --------- +++++ ++++
|
|
2 remote auth gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 e59cc...13be
|
|
```
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl tokens list store
|
|
./rvctl tokens list remote
|
|
./rvctl tokens list both
|
|
```
|
|
|
|
## `tokens add REMOTE_ID`
|
|
|
|
Dodaje pusty szkielet tokena do `tokens.json`. `REMOTE_ID` musi być taki sam
|
|
jak nazwa git remote, np. `r1`. Pole `value` jest puste i trzeba je uzupełnić
|
|
ręcznie przed użyciem tokena.
|
|
|
|
Przełączniki:
|
|
|
|
- `--server ENDPOINT`
|
|
Endpoint serwera. Domyślnie `git.base_url` z `workspace.json`.
|
|
- `--value TOKEN`
|
|
Opcjonalna wartość tokena. Domyślnie pusta.
|
|
- `--user NAME`
|
|
Login używany w URL-u auth, np. `u1`.
|
|
- `--remote NAME`
|
|
Alias zgodności. Jeśli podany, musi być taki sam jak `REMOTE_ID`.
|
|
- `--org NAME`
|
|
Opcjonalna organizacja dla remota.
|
|
- `--repo NAME`
|
|
Opcjonalne repo dla remota.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl tokens add r1
|
|
./rvctl tokens add r1 --user u1 --org edu-tools --repo rv-launcher
|
|
```
|
|
|
|
## `tokens sync remote REMOTE_ID`
|
|
|
|
Czyta dane auth z git remote `REMOTE_ID` i zapisuje je do `tokens.json`. Nie
|
|
pobiera metadanych z API.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz docelowego repo. Domyślnie repo zawierające `rvctl`.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens sync remote r1
|
|
./rvctl tokens sync remote r1 --repo ~/dev/workspace/rv/tools/rv-launcher
|
|
```
|
|
|
|
## `tokens sync store REMOTE_ID`
|
|
|
|
Zapisuje dane auth z rekordu `REMOTE_ID` w `tokens.json` do git remote o tej
|
|
samej nazwie. Jeśli remote jeszcze nie istnieje, URL jest budowany z pól
|
|
`server.endpoint`, `org` i `repo` w `tokens.json`.
|
|
|
|
Jeżeli repo ma tylko remote `origin` wskazujący ten sam URL, `sync store`
|
|
automatycznie przemianuje `origin` na `REMOTE_ID` przed wpisaniem credentials.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz docelowego repo. Domyślnie bieżący katalog.
|
|
- `--url URL`
|
|
Opcjonalny URL remota. Nadpisuje URL zbudowany z `tokens.json`.
|
|
- `--server ENDPOINT`
|
|
Endpoint serwera z `tokens.json`.
|
|
- `--replace`
|
|
Nadpisuje inne dane auth już wpisane w remote URL.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens sync store r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
## `tokens remove store|remote|both REMOTE_ID`
|
|
|
|
Usuwa rekord z `tokens.json`, git remote albo oba miejsca.
|
|
Domyślnym repo dla `remote` i `both` jest repo, w którym leży `rvctl`. Inne
|
|
repo można wskazać przez `--repo PATH`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Repo, z którego ma być usunięty git remote. Domyślnie repo zawierające
|
|
`rvctl`.
|
|
- `--server ENDPOINT`
|
|
Endpoint serwera, jeśli `tokens.json` ma kilka rekordów o tym samym `id`.
|
|
- `--dry-run`
|
|
Pokazuje plan bez usuwania.
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl tokens remove store r1
|
|
./rvctl tokens remove remote r1
|
|
./rvctl tokens remove both r1
|
|
./rvctl tokens remove remote r1 --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
## `tokens read`
|
|
|
|
Pokazuje zawartość `tokens/tokens.json` w podziale na endpointy serwerów.
|
|
|
|
Przełączniki:
|
|
|
|
- `--server ENDPOINT`
|
|
Ogranicza wynik do jednego endpointu.
|
|
- `--show-secrets`
|
|
Pokazuje pełne wartości tokenów zamiast maskowania.
|
|
|
|
Typowy wynik:
|
|
|
|
```text
|
|
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
|
|
tokens<TAB>1
|
|
id<TAB>r1<TAB>SE****23
|
|
user<TAB>r1<TAB>u1
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens read
|
|
./rvctl tokens read --server http://77.90.8.171:3001
|
|
```
|
|
|
|
## `tokens stats`
|
|
|
|
Pokazuje statystyki endpointów z repo i `tokens.json`, a także ich zgodność
|
|
względem siebie.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz repo, z którego mają być odczytane remote URL-e.
|
|
- `--server ENDPOINT`
|
|
Ogranicza wynik do jednego endpointu.
|
|
|
|
Typowy wynik:
|
|
|
|
```text
|
|
context
|
|
item<TAB>value
|
|
repo_root<TAB>...
|
|
token_path<TAB>...
|
|
|
|
tokens
|
|
item server proto host org repo user remote token_ref token valid scope org repo
|
|
---- ------ ----- ------------------ --------- ----------- ---- ------ --------- ------------ ------------------- aAimnopru oawrc- oawr--
|
|
1 gitea http 77.90.8.171:3001 edu-tools rv-launcher u1 r1 r1 * e59cc...13be forever -----w--- +++++ ++++
|
|
|
|
status
|
|
item<TAB>value
|
|
in_sync<TAB>1
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
## `tokens write`
|
|
|
|
Wpisuje dane z `tokens/tokens.json` do wybranego remota repo.
|
|
|
|
Przełączniki:
|
|
|
|
- `--repo PATH`
|
|
Ścieżka wewnątrz docelowego repo. Domyślnie bieżący katalog.
|
|
- `--remote NAME`
|
|
Nazwa remota do aktualizacji lub utworzenia.
|
|
- `--url URL`
|
|
Opcjonalny URL remota. Nadpisuje URL zbudowany z `tokens.json`.
|
|
- `--server ENDPOINT`
|
|
Endpoint serwera z `tokens.json`.
|
|
- `--user NAME`
|
|
Użytkownik z wybranego endpointu.
|
|
- `--token-name NAME`
|
|
Remote id w `tokens.json`, na przykład `r1`. Domyślnie wartość `--remote`.
|
|
- `--replace`
|
|
Nadpisuje inne dane auth już wpisane w remote URL.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens write --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
|
|
```
|
|
|
|
## `tokens update REMOTE_ID`
|
|
|
|
Pobiera z API metadane dla rekordu `REMOTE_ID` zapisanego w `tokens.json`.
|
|
Nie synchronizuje sekretu z git remote.
|
|
|
|
Przełączniki:
|
|
|
|
- `--server ENDPOINT`
|
|
Opcjonalny wybór endpointu, jeśli ten sam `REMOTE_ID` istnieje dla wielu serwerów.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykład:
|
|
|
|
```bash
|
|
./rvctl tokens update r1
|
|
```
|
|
|
|
## `tokens update --from ...`
|
|
|
|
Komendy zgodności dla starego modelu kierunkowego.
|
|
|
|
Przełączniki:
|
|
|
|
- `--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`
|
|
Ścieżka wewnątrz repo.
|
|
- `--remote NAME`
|
|
Wymagane dla `--from store`.
|
|
- `--url URL`
|
|
Opcjonalny URL dla `--from store`.
|
|
- `--server ENDPOINT`
|
|
Opcjonalny wybór endpointu dla `--from store`.
|
|
- `--user NAME`
|
|
Opcjonalny wybór usera dla `--from store`.
|
|
- `--token-name NAME`
|
|
Opcjonalny wybór remote id dla `--from store`.
|
|
- `--replace`
|
|
Nadpisuje inne auth przy `--from store`.
|
|
- `--dry-run`
|
|
Pokazuje plan bez zapisu.
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
|
|
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack --remote r1 --server http://77.90.8.171:3001
|
|
```
|
|
|
|
## `submission [series] [card]`
|
|
|
|
Wylicza przepływ oddawania rozwiązań:
|
|
|
|
- `r1` jako repo z materiałem z `edu-inf`
|
|
- `r1a` jako repo odpowiedzi w `c2025-1a-inf`
|
|
- branch ucznia liczony ze store tokenów i zadania
|
|
|
|
Nazwa repo odpowiedzi jest taka sama jak nazwa repo źródłowego karty:
|
|
|
|
```text
|
|
<repo_z_edu-inf>
|
|
```
|
|
|
|
Przykład:
|
|
|
|
```text
|
|
lab-rv32i-strlen-bss-data-stack
|
|
```
|
|
|
|
Argumenty pozycyjne:
|
|
|
|
- `series`
|
|
Id serii albo pełny selector, na przykład `inf` albo `inf/bss`.
|
|
- `card`
|
|
Karta albo unikalny fragment nazwy repo, na przykład `bss`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--class NAME`
|
|
Id klasy albo grupy, na przykład `c2025-1a-inf`.
|
|
- `--nick NAME`
|
|
Nick ucznia. Jeżeli go nie podasz, `rvctl` bierze użytkownika ze store
|
|
tokenów.
|
|
- `--task TASK`
|
|
Zadanie używane do zbudowania domyślnej nazwy brancha. Domyślnie
|
|
`defaults.task` z `workspace.json`.
|
|
- `--branch NAME`
|
|
Nadpisuje domyślną nazwę brancha. Bez tego branch ma format
|
|
`<login>T<numer_zadania>a`, na przykład `u1T1a`.
|
|
- `--date YYYY-MM-DD`
|
|
Data zajęć. Zostaje w raporcie, ale nie zmienia nazwy repo odpowiedzi.
|
|
- `--source-url URL`
|
|
Nadpisuje URL repo źródłowego. Bez tego launcher czyta `r1` albo `origin` z
|
|
repo karty.
|
|
- `--apply`
|
|
Dodaje albo aktualizuje remote `r1` i `r1a` w repo karty.
|
|
|
|
Typowy format wyjścia:
|
|
|
|
```text
|
|
selector<TAB>inf/bss
|
|
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>r1a
|
|
answer_repo<TAB>c2025-1a-inf/lab-rv32i-strlen-bss-data-stack
|
|
answer_url<TAB>http://77.90.8.171:3001/c2025-1a-inf/lab-rv32i-strlen-bss-data-stack.git
|
|
student_user<TAB>u1
|
|
student_branch<TAB>u1T1a
|
|
```
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl submission inf bss --class c2025-1a-inf
|
|
./rvctl submission inf bss --class c2025-1a-inf --task 4 --apply
|
|
./rvctl series cards submission inf bss --class c2025-1a-inf --branch u1T4a
|
|
```
|
|
|
|
## `tmux-container [series] [card]`
|
|
|
|
Tworzy nową sesję `tmux` i uruchamia kontener w `pane 0`.
|
|
|
|
Argumenty pozycyjne:
|
|
|
|
- `series`
|
|
Id serii albo pełny selector, na przykład `inf` albo `inf/bss`.
|
|
- `card`
|
|
Karta albo unikalny fragment nazwy repo, na przykład `bss`.
|
|
|
|
Przełączniki:
|
|
|
|
- `--session NAME`
|
|
Nadpisuje nazwę sesji `tmux`.
|
|
- `--window NAME`
|
|
Nadpisuje nazwę okna `tmux`.
|
|
- `--instance NAME`
|
|
Ustawia `RV_INSTANCE` dla wrappera `rv`.
|
|
- `--attach`
|
|
Po utworzeniu sesji robi `tmux attach`.
|
|
- `--dry-run`
|
|
Nie uruchamia `tmux`; wypisuje selector, ścieżki i końcową komendę.
|
|
|
|
Reguły wyboru karty:
|
|
|
|
- `tmux-container inf bss` -> seria `inf`, karta `bss`
|
|
- `tmux-container inf/bss` -> pełny selector
|
|
- `tmux-container bss` -> domyślna seria + karta `bss`
|
|
- `tmux-container inf` -> seria `inf` + domyślna karta
|
|
- bez argumentów -> domyślna seria i domyślna karta
|
|
|
|
Przykłady:
|
|
|
|
```bash
|
|
./rvctl tmux-container bss --dry-run
|
|
./rvctl tmux-container inf bss --session rv-inf-bss
|
|
./rvctl tmux-container inf/bss --attach
|
|
```
|