Add series task branch flow

This commit is contained in:
mpabi
2026-04-29 02:46:19 +02:00
parent e179ed1549
commit 6204845304
7 changed files with 1029 additions and 223 deletions
+79 -88
View File
@@ -1,7 +1,7 @@
# Series
Ten dokument opisuje docelowy model komend `rvctl` do pracy z seriami, kartami
pracy i zadaniami w kartach.
Ten dokument opisuje komendy `rvctl` do pracy z seriami, kartami pracy i
zadaniami w kartach.
## Zasada
@@ -11,73 +11,51 @@ Komendy kart pracy dzielimy na trzy poziomy:
- `series cards` - operacje na kartach w ramach serii
- `series cards tasks` - operacje na zadaniach w ramach karty
Używamy pluralnych namespace'ów `cards` i `tasks`, bo opisują kolekcje zasobów
i są spójne z pluralnym `tokens`.
`rvctl` tworzy `series_root`, jeżeli katalog jeszcze nie istnieje. Lista serii
i kart może pochodzić z repo źródłowych, a `fetch` pobiera wybraną kartę do
workspace.
## Szybki przepływ
Typowy przepływ pracy:
```bash
./rvctl tokens compare
./rvctl series list
./rvctl series show inf
./rvctl series fetch inf
./rvctl series cards list inf
./rvctl series cards show inf 03
./rvctl series cards tasks list inf 03
./rvctl series cards tasks show inf 03 task1
./rvctl series cards fetch inf 03
./rvctl series cards submission inf 03 --class 4i --nick u1
./rvctl series cards fetch inf bss
./rvctl series cards tasks list inf bss
./rvctl series cards tasks switch inf bss 1
```
Dla karty `bss` właściwym repo jest `lab-rv32i-strlen-bss-data-stack`.
## Serie
### `series list`
Listuje dostępne serie w workspace.
Listuje dostępne serie. Jeżeli `~/dev/workspace/rv/series` nie istnieje,
komenda tworzy ten katalog.
```bash
./rvctl series list
```
Przykładowy wynik:
Typowy wynik:
```text
series cards workspace
------ ----- -------------------------------
inf 12 ~/dev/workspace/rv/series/inf
inf 3 0
```
Kolumny oznaczają: seria, liczba kart w źródłach, liczba kart pobranych do
workspace.
### `series show SERIES`
Pokazuje informacje o serii jako całości.
Pokazuje informacje o serii.
```bash
./rvctl series show inf
```
Typowe pola:
```text
series inf
workspace_path ~/dev/workspace/rv/series/inf
source_path ~/dev/edu/repos/rv/series/inf
cards_count 12
cards 01 02 03 ...
```
### `series fetch SERIES`
Pobiera albo aktualizuje całą serię w workspace.
```bash
./rvctl series fetch inf
```
Ta komenda pracuje na wszystkich kartach w serii. Do pobrania jednej karty
służy `series cards fetch`.
## Karty
### `series cards list SERIES`
@@ -91,38 +69,45 @@ Listuje karty w wybranej serii.
Przykładowy wynik:
```text
series card repo
------ ---- ------------------------------------
inf 03 lab-rv32i-strlen-bss-data-stack
bss lab-rv32i-strlen-bss-data-stack source rv32i-c / bss-data-stack
```
Pierwsza kolumna jest krótką nazwą karty. Pełna nazwa repo zostaje w drugiej
kolumnie.
### `series cards fetch SERIES CARD`
Pobiera albo aktualizuje jedną kartę w workspace. `CARD` może być krótką nazwą
albo unikalnym fragmentem pełnej nazwy repo.
```bash
./rvctl series cards fetch inf bss
```
Karta trafia do:
```text
~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack
```
Po pobraniu `rvctl` przygotowuje remotes:
- `r1` - repo źródłowe karty w `edu-inf`
- `r1a` - repo pracy w `c2025-1a-inf`
Remote `r1a` jest tworzony z tokena `r1` i wskazuje na repo o tej samej nazwie
co karta:
```text
http://77.90.8.171:3001/c2025-1a-inf/lab-rv32i-strlen-bss-data-stack.git
```
### `series cards show SERIES CARD`
Pokazuje informacje o konkretnej karcie.
Pokazuje informacje o karcie.
```bash
./rvctl series cards show inf 03
```
Typowe pola:
```text
series inf
card 03
workspace_path ~/dev/workspace/rv/series/inf/03
source_path ~/dev/edu/repos/rv/series/inf/03
source_repo edu-inf/lab-rv32i-strlen-bss-data-stack
source_remote r1
answer_remote a1
tasks task1 task2 ...
```
### `series cards fetch SERIES CARD`
Pobiera albo aktualizuje jedną kartę w workspace.
```bash
./rvctl series cards fetch inf 03
./rvctl series cards show inf bss
```
### `series cards submission SERIES CARD`
@@ -130,14 +115,15 @@ Pobiera albo aktualizuje jedną kartę w workspace.
Pokazuje albo stosuje konfigurację repo odpowiedzi dla karty.
```bash
./rvctl series cards submission inf 03 --class 4i --nick u1
./rvctl series cards submission inf 03 --class 4i --nick u1 --apply
./rvctl series cards submission inf bss --class c2025-1a-inf
./rvctl series cards submission inf bss --class c2025-1a-inf --task 4 --apply
```
Bez `--apply` komenda tylko pokazuje plan. Z `--apply` ustawia remotes potrzebne
do pracy z repo odpowiedzi.
Bez `--apply` komenda pokazuje plan. Z `--apply` ustawia remotes potrzebne do
pracy z repo odpowiedzi. Jeżeli nie podasz `--branch`, branch jest liczony ze
store tokenów i zadania, na przykład `u1T1a`.
## Zadania W Karcie
## Zadania w karcie
Zadania są częścią karty, dlatego trzymamy je pod `series cards tasks`.
@@ -146,16 +132,16 @@ Zadania są częścią karty, dlatego trzymamy je pod `series cards tasks`.
Listuje zadania dostępne w konkretnej karcie.
```bash
./rvctl series cards tasks list inf 03
./rvctl series cards tasks list inf bss
```
Przykładowy wynik:
```text
series card task path
------ ---- ----- --------------------------------------
inf 03 task1 ~/dev/workspace/rv/series/inf/03/task1
inf 03 task2 ~/dev/workspace/rv/series/inf/03/task2
inf bss task1_bss ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack/src/tasks
inf bss task2_data ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack/src/tasks
inf bss task3_stack_unused ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack/src/tasks
inf bss task4_stack_strlen ~/dev/workspace/rv/series/inf/lab-rv32i-strlen-bss-data-stack/src/tasks
```
### `series cards tasks show SERIES CARD TASK`
@@ -163,33 +149,38 @@ inf 03 task2 ~/dev/workspace/rv/series/inf/03/task2
Pokazuje informacje o konkretnym zadaniu w karcie.
```bash
./rvctl series cards tasks show inf 03 task1
./rvctl series cards tasks show inf bss task1
```
Typowe pola:
### `series cards tasks switch SERIES CARD TASK`
Tworzy albo przełącza lokalny branch pracy dla wybranego zadania.
```bash
./rvctl series cards tasks switch inf bss 4
```
Nazwa brancha jest liczona automatycznie z użytkownika w `tokens.json` i numeru
zadania. Dla użytkownika `u1` i zadania `task4_stack_strlen` powstanie:
```text
series inf
card 03
task task1
workspace_path ~/dev/workspace/rv/series/inf/03/task1
card_path ~/dev/workspace/rv/series/inf/03
u1T4a
```
Jeżeli branch już istnieje, `rvctl` przełącza na niego repo. Jeżeli go nie ma,
tworzy go od aktualnego commita karty.
Na tym poziomie nie wprowadzamy osobnego `fetch`: zadania są pobierane razem z
kartą przez `series cards fetch` albo razem z całą serią przez `series fetch`.
## Aliasowanie Starych Komend
Stare komendy można zostawić jako aliasy kompatybilności:
Stare komendy zosta jako aliasy kompatybilności:
```text
list-series -> series list
list-cards inf -> series cards list inf
submission inf 03 --class K --nick N -> series cards submission inf 03 --class K --nick N
submission inf bss --class K -> series cards submission inf bss --class K
```
Komendy `series cards tasks ...` nie mają starego odpowiednika i powinny być
wprowadzane tylko w nowym namespace.
Dokumentacja i nowe przykłady powinny promować namespace `series`.