generated from GarandPLG/rust-flake-template
This commit is contained in:
1 parent
c4313b4117
commit
dfe46cab96
8 files changed
+80
-12
No files matched your search
@@ -0,0 +1,24 @@
|
|||||||
|
name: Rust checks
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: https://github.com/actions/checkout@v4
|
||||||
|
- name: Install Nix
|
||||||
|
uses: https://github.com/cachix/install-nix-action@v31
|
||||||
|
- name: Formatting
|
||||||
|
run: nix develop --no-update-lock-file -c cargo fmt --all -- --check
|
||||||
|
- name: Compilation
|
||||||
|
run: nix develop --no-update-lock-file -c cargo check --all-targets --locked
|
||||||
|
- name: Tests
|
||||||
|
run: nix develop --no-update-lock-file -c cargo test --all-targets --locked
|
||||||
|
- name: Release tests
|
||||||
|
run: nix develop --no-update-lock-file -c cargo test --all-targets --release --locked
|
||||||
|
- name: Clippy
|
||||||
|
run: nix develop --no-update-lock-file -c cargo clippy --all-targets --locked
|
||||||
@@ -2,12 +2,21 @@
|
|||||||
name = "war_in_tunnels"
|
name = "war_in_tunnels"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
rust-version = "1.88"
|
||||||
|
|
||||||
|
[lints.rust]
|
||||||
|
unused_must_use = "deny"
|
||||||
|
unsafe_code = "forbid"
|
||||||
|
|
||||||
|
[lints.clippy]
|
||||||
|
unused_unit = "allow"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
codegen-units = 1
|
codegen-units = 1
|
||||||
lto = true
|
lto = true
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
strip = true
|
strip = true
|
||||||
|
overflow-checks = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.6.7", features = ["derive"] }
|
clap = { version = "4.6.7", features = ["derive"] }
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
## Wymagania
|
## Wymagania
|
||||||
|
|
||||||
- **Nix** (z obsługą Flake) – do budowania i uruchamiania projektu.
|
- **Nix** (z obsługą Flake) – do budowania i uruchamiania projektu.
|
||||||
- **Rust** 2024 edition – używany wewnątrz środowiska Nix (fenix toolchain).
|
- **Rust ≥ 1.88**, edycja 2024 – używany wewnątrz środowiska Nix (fenix toolchain).
|
||||||
- Biblioteki systemowe: `alsa-lib` (dla obsługi dźwięku).
|
- Biblioteki systemowe: `alsa-lib` (dla obsługi dźwięku).
|
||||||
|
|
||||||
## Budowanie i uruchamianie
|
## Budowanie i uruchamianie
|
||||||
@@ -108,3 +108,9 @@ Możesz zaznaczyć pracującego górnika ponownie: rysowanie kolejnego zadania z
|
|||||||
## Logowanie
|
## Logowanie
|
||||||
|
|
||||||
Gdy flaga `--log` jest włączona, aplikacja zapisuje logi do pliku przy użyciu **simplelog**. Domyślnie logowanie jest wyłączone.
|
Gdy flaga `--log` jest włączona, aplikacja zapisuje logi do pliku przy użyciu **simplelog**. Domyślnie logowanie jest wyłączone.
|
||||||
|
|
||||||
|
## Kontrole jakości
|
||||||
|
|
||||||
|
`Cargo.toml` zabrania `unsafe` we własnym kodzie i ignorowania wyników `must_use`, dopuszcza jawne `-> ()` oraz włącza kontrolę przepełnień także w release. Gitea Actions w `.gitea/workflows/rust.yml` sprawdza formatowanie, kompilację, testy debug/release i Clippy przez Nix, z zachowaniem plików lock. Uruchomienie CI wymaga włączonych Actions i runnera `ubuntu-latest`.
|
||||||
|
|
||||||
|
Polecenia lokalne i szczegóły środowiska opisano w [docs/TESTING.md](docs/TESTING.md).
|
||||||
+6
-4
@@ -16,16 +16,18 @@ Nie wolno zakończyć zadania, jeżeli kompilator Rust zgłasza błędy uniemoż
|
|||||||
Wszystkie narzędzia Rust uruchamiaj przez `nix develop -c` z katalogu repozytorium:
|
Wszystkie narzędzia Rust uruchamiaj przez `nix develop -c` z katalogu repozytorium:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nix develop -c cargo test --all-targets
|
nix develop -c cargo test --all-targets --locked
|
||||||
nix develop -c cargo fmt --all -- --check
|
nix develop -c cargo fmt --all -- --check
|
||||||
nix develop -c cargo clippy --all-targets
|
nix develop -c cargo clippy --all-targets --locked
|
||||||
nix develop -c cargo run -- --help
|
nix develop -c cargo run -- --help
|
||||||
nix develop -c cargo run -- --disable-audio --view skirmish
|
nix develop -c cargo run -- --disable-audio --view skirmish
|
||||||
```
|
```
|
||||||
|
|
||||||
Ostatnie polecenie wymaga interaktywnego terminala. `shellHook` sam wykonuje `cargo run -- -h`, więc wejście do środowiska także kompiluje program i drukuje pomoc. Formatowanie stosuj wyłącznie do uzgodnionych zmian; nie używaj automatycznego `clippy --fix` do porządkowania całego repozytorium.
|
Ostatnie polecenie wymaga interaktywnego terminala. `shellHook` sam wykonuje `cargo run --locked -- -h`, więc wejście do środowiska także kompiluje program i drukuje pomoc. Przy kontrolach używaj `--locked`, aby nie aktualizować `Cargo.lock`. Formatowanie stosuj wyłącznie do uzgodnionych zmian; nie używaj automatycznego `clippy --fix` do porządkowania całego repozytorium.
|
||||||
|
|
||||||
Stan bazowy po dodaniu postępu kolejki: 45 testów i formatowanie przechodzą; Clippy zgłasza 50 ostrzeżeń dla biblioteki i 4 ostrzeżenia testów o jawnych `-> ()`, zgodnych z poniższą zasadą typowania. Zakres i polecenia opisano w [TESTING.md](TESTING.md). Nie traktuj tego jako potwierdzenia działania pełnej rozgrywki. Nowa nietrywialna logika wymaga małego testu regresji. Nie dodawaj zależności ani warstw abstrakcji bez potrzeby.
|
Stan bazowy po konfiguracji lintów: 45 testów i formatowanie przechodzą; Clippy zgłasza 50 ostrzeżeń dla biblioteki. `clippy::unused_unit` jest dozwolony ze względu na wymagane jawne `-> ()`. Zakres i polecenia opisano w [TESTING.md](TESTING.md). Nie traktuj tego jako potwierdzenia działania pełnej rozgrywki. Nowa nietrywialna logika wymaga małego testu regresji. Nie dodawaj zależności ani warstw abstrakcji bez potrzeby.
|
||||||
|
|
||||||
|
`Cargo.toml` wymaga Rust 1.88 lub nowszego, zabrania `unsafe` we własnym kodzie i ignorowania wyników `must_use`, a w release włącza kontrolę przepełnień. CI Gitea w `.gitea/workflows/rust.yml` sprawdza formatowanie, kompilację, testy debug/release i Clippy przez przypięte środowisko Nix. Nie dodawaj `-D warnings` przed uporządkowaniem istniejących ostrzeżeń.
|
||||||
|
|
||||||
Audio wymaga ALSA i urządzenia odtwarzania; do pracy nad TUI używaj `--disable-audio`. `--mute` nadal uruchamia wątek audio. Ścieżki zasobów i pakowanie sprawdzaj osobno przy zmianach audio/Nix. Rozróżniaj lokalny build Cargo, pakiet `.#develop` i domyślny pakiet Nix.
|
Audio wymaga ALSA i urządzenia odtwarzania; do pracy nad TUI używaj `--disable-audio`. `--mute` nadal uruchamia wątek audio. Ścieżki zasobów i pakowanie sprawdzaj osobno przy zmianach audio/Nix. Rozróżniaj lokalny build Cargo, pakiet `.#develop` i domyślny pakiet Nix.
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -22,10 +22,13 @@ Wszystkie ścieżki poniżej są względem katalogu głównego repozytorium.
|
|||||||
| Wątki | `src/app/threads/{events,tick,audio}.rs` | Crossterm, zegar 33 ms, Rodio i komendy audio |
|
| Wątki | `src/app/threads/{events,tick,audio}.rs` | Crossterm, zegar 33 ms, Rodio i komendy audio |
|
||||||
| Środowisko | `Cargo.toml`, `flake.nix`, `default.nix`, `flake.lock` | Zależności, toolchain Fenix, ALSA, pakowanie przez Naersk lub buildRustPackage |
|
| Środowisko | `Cargo.toml`, `flake.nix`, `default.nix`, `flake.lock` | Zależności, toolchain Fenix, ALSA, pakowanie przez Naersk lub buildRustPackage |
|
||||||
| Formatowanie | `rustfmt.toml` | Rustfmt, styl 2024, wcięcia po 2 spacje, docelowo 100 znaków i zakończenia LF |
|
| Formatowanie | `rustfmt.toml` | Rustfmt, styl 2024, wcięcia po 2 spacje, docelowo 100 znaków i zakończenia LF |
|
||||||
|
| Kontrole CI | `.gitea/workflows/rust.yml` | Gitea Actions: formatowanie, kompilacja, testy debug/release i Clippy przez Nix |
|
||||||
| Zasoby | `soundtracks/default/`, `ui_draft/` | Dwa pliki OGG i tekstowe szkice ekranów |
|
| Zasoby | `soundtracks/default/`, `ui_draft/` | Dwa pliki OGG i tekstowe szkice ekranów |
|
||||||
|
|
||||||
Ścieżki skrócone `skirmish_states/` oznaczają `src/app/states/skirmish_states/`. Nie ma osobnego silnika gry, bazy danych ani warstwy sieciowej. Zależności Cargo: Ratatui/Crossterm, Clap, Rodio, log/simplelog i once_cell.
|
Ścieżki skrócone `skirmish_states/` oznaczają `src/app/states/skirmish_states/`. Nie ma osobnego silnika gry, bazy danych ani warstwy sieciowej. Zależności Cargo: Ratatui/Crossterm, Clap, Rodio, log/simplelog i once_cell.
|
||||||
|
|
||||||
|
`Cargo.toml` deklaruje Rust 1.88 jako minimalną wspieraną wersję, wymusza `unused_must_use = "deny"` i `unsafe_code = "forbid"` we własnym kodzie, dopuszcza `clippy::unused_unit` oraz włącza `overflow-checks` w release. Toolchain deweloperski nadal pochodzi z Fenix przypiętego przez `flake.lock`; wersję 1.88.0 sprawdzono osobno.
|
||||||
|
|
||||||
## Uruchomienie i pętla
|
## Uruchomienie i pętla
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
@@ -111,7 +114,7 @@ To obserwacje statyczne, nie lista napraw wykonanych w tej sesji:
|
|||||||
- **Zaznaczenie:** wybrany górnik czeka podczas rysowania trasy; inne jednostki wykonują zadania normalnie.
|
- **Zaznaczenie:** wybrany górnik czeka podczas rysowania trasy; inne jednostki wykonują zadania normalnie.
|
||||||
- **Audio:** usunięto aktywne odpytywanie; pomiar CPU na docelowym urządzeniu i odsłuch pozostają do wykonania. Test dekodera nie weryfikuje urządzenia audio.
|
- **Audio:** usunięto aktywne odpytywanie; pomiar CPU na docelowym urządzeniu i odsłuch pozostają do wykonania. Test dekodera nie weryfikuje urządzenia audio.
|
||||||
- **Granice UI:** małe terminale, resize i trzy poziomy zoomu wymagają interaktywnego sprawdzenia. Indeksowanie planszy zakłada poprawne współrzędne.
|
- **Granice UI:** małe terminale, resize i trzy poziomy zoomu wymagają interaktywnego sprawdzenia. Indeksowanie planszy zakłada poprawne współrzędne.
|
||||||
- **Pokrycie:** 45 testów CLI, sterowania, renderowania, planszy, wykonywania zadań i dekodowania audio; szczegóły w [TESTING.md](TESTING.md). Brak testów pełnej rozgrywki i konfiguracji CI. Clippy zgłasza 50 ostrzeżeń biblioteki oraz 4 ostrzeżenia o wymaganych jawnych `-> ()` w testach; nie uruchamiać automatycznych poprawek poza zakresem zadania.
|
- **Pokrycie:** 45 testów CLI, sterowania, renderowania, planszy, wykonywania zadań i dekodowania audio; szczegóły w [TESTING.md](TESTING.md). Workflow Gitea sprawdza też profil release; nie obejmuje pełnej rozgrywki. Clippy zgłasza 50 ostrzeżeń biblioteki, `unused_unit` jest jawnie dozwolony. Nie uruchamiać automatycznych poprawek poza zakresem zadania.
|
||||||
|
|
||||||
## Gdzie zacząć konkretną zmianę
|
## Gdzie zacząć konkretną zmianę
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
# Dziennik prac
|
# Dziennik prac
|
||||||
|
|
||||||
|
## 2026-10-19 — linty, minimalny Rust i CI
|
||||||
|
|
||||||
|
W `Cargo.toml` dodano `rust-version = "1.88"`, `unused_must_use = "deny"`, `unsafe_code = "forbid"`, `clippy::unused_unit = "allow"` oraz `overflow-checks = true` dla release. Minimalna wersja wynika z wymagań aktualnych zależności (m.in. Ratatui 0.30.2 i Darling 0.23) i składni kodu; potwierdzono kompilację wszystkich targetów na Rust 1.88.0 przez tymczasowy toolchain Fenix wewnątrz `nix develop`. Nie zmieniono domyślnego toolchaina ani plików lock.
|
||||||
|
|
||||||
|
Dodano `.gitea/workflows/rust.yml` dla pushów i pull requestów: checkout, instalacja Nix, kontrola formatowania, kompilacja, testy debug/release i Clippy. Kontrole używają `nix develop --no-update-lock-file`, polecenia Cargo kompilujące kod mają `--locked`. Również `shellHook` we `flake.nix` wykonuje teraz pomoc CLI z `--locked`. Nie włączano `-D warnings`, grup `pedantic` ani `restriction`.
|
||||||
|
|
||||||
|
Weryfikacja lokalna na domyślnym toolchainie Nix: formatowanie, `cargo check --all-targets --locked`, `cargo test --all-targets --locked` (45 zaliczonych), `cargo test --all-targets --release --locked` (45 zaliczonych) i `cargo clippy --all-targets --locked` zakończone sukcesem. Clippy nadal zgłasza 50 ostrzeżeń biblioteki; 4 ostrzeżenia o jawnych `-> ()` zniknęły zgodnie z nowym ustawieniem. Dodatkowa kontrola Rust 1.88.0: `cargo check --all-targets --locked` zakończone sukcesem.
|
||||||
|
|
||||||
|
Zaktualizowano instrukcje agentów, mapę i opis testów. Nie zmieniano mechaniki gry ani zależności. Workflow przygotowano i przejrzano lokalnie; nie był uruchamiany na serwerze. Wymaga włączonych Actions i runnera Linux x86_64 o etykiecie `ubuntu-latest`, obsługującego akcje Node i instalację Nix. Nie rejestrowano runnera ani nie zmieniano ustawień serwera Gitea.
|
||||||
|
|
||||||
## 2026-10-19 — formatowanie Rust z wcięciami po 2 spacje
|
## 2026-10-19 — formatowanie Rust z wcięciami po 2 spacje
|
||||||
|
|
||||||
Dodano `rustfmt.toml` z uzgodnionymi opcjami: edycja i styl 2024, `max_width = 100`, `hard_tabs = false`, `tab_spaces = 2`, zakończenia Unix, sortowanie importów i modułów oraz domyślne heurystyki krótkich konstrukcji. Zastosowano `nix develop -c cargo fmt --all` do źródeł i testów (56 zmienionych plików Rust). Zaktualizowano instrukcje agentów i mapę konfiguracji projektu.
|
Dodano `rustfmt.toml` z uzgodnionymi opcjami: edycja i styl 2024, `max_width = 100`, `hard_tabs = false`, `tab_spaces = 2`, zakończenia Unix, sortowanie importów i modułów oraz domyślne heurystyki krótkich konstrukcji. Zastosowano `nix develop -c cargo fmt --all` do źródeł i testów (56 zmienionych plików Rust). Zaktualizowano instrukcje agentów i mapę konfiguracji projektu.
|
||||||
|
|||||||
+19
-5
@@ -3,7 +3,7 @@
|
|||||||
Uruchomienie całego zestawu z katalogu głównego:
|
Uruchomienie całego zestawu z katalogu głównego:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nix develop -c cargo test --all-targets
|
nix develop -c cargo test --all-targets --locked
|
||||||
```
|
```
|
||||||
|
|
||||||
Testy korzystają z wbudowanego mechanizmu Rust, Clap i `ratatui::backend::TestBackend`. Nie dodano zależności. Nie wymagają terminala interaktywnego ani urządzenia audio. Test audio używa pliku `soundtracks/default/calm.ogg`, więc zasoby muszą być dostępne w repozytorium.
|
Testy korzystają z wbudowanego mechanizmu Rust, Clap i `ratatui::backend::TestBackend`. Nie dodano zależności. Nie wymagają terminala interaktywnego ani urządzenia audio. Test audio używa pliku `soundtracks/default/calm.ogg`, więc zasoby muszą być dostępne w repozytorium.
|
||||||
@@ -36,13 +36,27 @@ nix develop -c cargo test --test board large_viewport_and_zoom_keep_camera_insid
|
|||||||
Kontrole uzupełniające:
|
Kontrole uzupełniające:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nix develop -c cargo check --all-targets
|
nix develop -c cargo check --all-targets --locked
|
||||||
nix develop -c cargo fmt --all -- --check
|
nix develop -c cargo fmt --all -- --check
|
||||||
nix develop -c cargo clippy --all-targets
|
nix develop -c cargo clippy --all-targets --locked
|
||||||
```
|
```
|
||||||
|
|
||||||
`shellHook` środowiska Nix dodatkowo wykonuje `cargo run -- -h`. Wynik pomocy nie jest wynikiem testów; właściwy raport zawiera podsumowania `test result`.
|
`shellHook` środowiska Nix dodatkowo wykonuje `cargo run --locked -- -h`. Wynik pomocy nie jest wynikiem testów; właściwy raport zawiera podsumowania `test result`.
|
||||||
|
|
||||||
|
## CI i profile kompilacji
|
||||||
|
|
||||||
|
Workflow `.gitea/workflows/rust.yml` uruchamia kontrole po pushu i dla pull requestów. Wymaga włączonych Actions w repozytorium Gitea i runnera Linux x86_64 o etykiecie `ubuntu-latest`, obsługującego akcje Node oraz instalację Nix. Nazwy akcji zawierają pełne adresy GitHub. Konfiguracja nie rejestruje runnera ani nie włącza Actions na serwerze; zobacz [instrukcję Gitea](https://docs.gitea.com/usage/actions/quickstart/).
|
||||||
|
|
||||||
|
CI używa `nix develop --no-update-lock-file -c`, więc wersję środowiska określa `flake.lock`. Formatowanie, kompilacja, testy i Clippy są oddzielnymi krokami. Polecenia Cargo kompilujące projekt mają `--locked`; workflow nie zmienia zależności. Clippy nie używa `-D warnings` z powodu istniejących ostrzeżeń.
|
||||||
|
|
||||||
|
Release ma `overflow-checks = true`. Ten sam zestaw 45 testów można wykonać z kontrolą przepełnień w profilu produkcyjnym:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
nix develop -c cargo test --all-targets --release --locked
|
||||||
|
```
|
||||||
|
|
||||||
|
Manifest określa minimalną wspieraną wersję Rust jako 1.88. Potwierdzono `cargo check --all-targets --locked` na Rust 1.88.0 dostarczonym tymczasowo przez Fenix (`toolchainOf`, kanał `1.88.0`) wewnątrz `nix develop`. Domyślny toolchain pozostaje zarządzany przez Fenix i `flake.lock`; nie dodano drugiego pliku przypinającego toolchain. Linty z `Cargo.toml` zabraniają `unsafe` we własnym kodzie oraz ignorowania wyników `must_use`; `unused_unit` jest dozwolony, by zachować wymagane jawne `-> ()`.
|
||||||
|
|
||||||
## Ograniczenia
|
## Ograniczenia
|
||||||
|
|
||||||
Zestaw weryfikuje wykonywanie zadań przez ticki potyczki, ale nie pełną rozgrywkę, ekonomię ani walkę. Nie potwierdza odsłuchu, zużycia CPU, obsługi urządzeń, pakowania Nix ani wszystkich układów małych terminali. Testy renderowania są kontrolą podstawową, bez utrwalania pełnych zrzutów ekranów. Brak konfiguracji CI; polecenia należy wykonywać lokalnie przed zakończeniem zmian.
|
Zestaw weryfikuje wykonywanie zadań przez ticki potyczki, ale nie pełną rozgrywkę, ekonomię ani walkę. Nie potwierdza odsłuchu, zużycia CPU, obsługi urządzeń, pakowania Nix ani wszystkich układów małych terminali. Testy renderowania są kontrolą podstawową, bez utrwalania pełnych zrzutów ekranów. Workflow CI przygotowano lokalnie; jego wykonanie na serwerze wymaga dostępnego runnera i włączonych Actions.
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
echo " nix build .#develop - Build development version"
|
echo " nix build .#develop - Build development version"
|
||||||
echo " nix run .#develop - Run development version"
|
echo " nix run .#develop - Run development version"
|
||||||
echo ""
|
echo ""
|
||||||
cargo run -- -h
|
cargo run --locked -- -h
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in new issue
Block a user