Remove Nix from CI, use rustup with caching
Rust checks / check (push) Successful in 5m29s

Install required system packages and set RUST_VERSION=1.99.1. Cache the
Rust
toolchain and Cargo registry, and run Cargo commands directly instead of
via
`nix develop`. Documentation files are updated to reflect the new
workflow.
This commit is contained in:
GarandPLG committed 2026-10-19 14:12:07 +02:00
1 parent a94e36f646
commit 40dd03ed62
5 files changed
+49 -16

No files matched your search

+37 -10
View File
@@ -8,24 +8,51 @@ jobs:
check:
runs-on: ubuntu-latest
container: node:22-bookworm
env:
RUST_VERSION: 1.99.1
CARGO_HOME: /root/.cargo
RUSTUP_HOME: /root/.rustup
steps:
- name: Checkout
uses: https://github.com/actions/checkout@v4
- name: Install runner prerequisites
- name: Install build dependencies
run: |
apt-get update
apt-get install -y --no-install-recommends sudo
- name: Install Nix
uses: https://github.com/cachix/install-nix-action@v31
apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libasound2-dev zstd
- name: Rust toolchain cache
uses: https://github.com/actions/cache@v4
with:
enable_kvm: false
path: |
/root/.rustup
/root/.cargo/bin
key: rust-toolchain-v1-linux-x64-${{ env.RUST_VERSION }}
- name: Install Rust
run: |
if [ ! -x "$CARGO_HOME/bin/rustup" ]; then
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup-init.sh
sh /tmp/rustup-init.sh -y --profile minimal --default-toolchain none --no-modify-path
fi
"$CARGO_HOME/bin/rustup" toolchain install "$RUST_VERSION" --profile minimal --component rustfmt --component clippy
"$CARGO_HOME/bin/rustup" default "$RUST_VERSION"
echo "$CARGO_HOME/bin" >> "$GITHUB_PATH"
- name: Cargo cache
uses: https://github.com/actions/cache@v4
with:
path: |
/root/.cargo/registry
/root/.cargo/git
target
key: cargo-v1-linux-x64-${{ env.RUST_VERSION }}-${{ hashFiles('Cargo.lock') }}-${{ hashFiles('Cargo.toml', 'src/**', 'tests/**') }}
restore-keys: |
cargo-v1-linux-x64-${{ env.RUST_VERSION }}-${{ hashFiles('Cargo.lock') }}-
cargo-v1-linux-x64-${{ env.RUST_VERSION }}-
- name: Formatting
run: nix develop --no-update-lock-file -c cargo fmt --all -- --check
run: cargo fmt --all -- --check
- name: Compilation
run: nix develop --no-update-lock-file -c cargo check --all-targets --locked
run: cargo check --all-targets --locked
- name: Tests
run: nix develop --no-update-lock-file -c cargo test --all-targets --locked
run: cargo test --all-targets --locked
- name: Release tests
run: nix develop --no-update-lock-file -c cargo test --all-targets --release --locked
run: cargo test --all-targets --release --locked
- name: Clippy
run: nix develop --no-update-lock-file -c cargo clippy --all-targets --locked
run: cargo clippy --all-targets --locked
+1 -1
View File
@@ -27,7 +27,7 @@ Ostatnie polecenie wymaga interaktywnego terminala. `shellHook` sam wykonuje `ca
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ń.
`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 bez Nix, przez Rust 1.99.1 instalowany rustup; lokalnie nadal używaj 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.
+1 -1
View File
@@ -22,7 +22,7 @@ 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 |
| Ś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 |
| Kontrole CI | `.gitea/workflows/rust.yml` | Gitea Actions w `node:22-bookworm`: instalacja sudo i Nix, formatowanie, kompilacja, testy debug/release i Clippy |
| Kontrole CI | `.gitea/workflows/rust.yml` | Gitea Actions w `node:22-bookworm`: Rust 1.99.1 przez rustup, cache toolchaina i Cargo, formatowanie, kompilacja, testy debug/release i Clippy |
| Licencja | `LICENSE`, `Cargo.toml`, `default.nix` | MIT, Copyright (c) 2026 GarandPLG |
| Zasoby | `soundtracks/default/`, `ui_draft/` | Dwa pliki OGG i tekstowe szkice ekranów |
+6
View File
@@ -1,5 +1,11 @@
# Dziennik prac
## 2026-10-19 — CI Rust bez Nix
Na życzenie użytkownika usunięto instalację Nix i wywołania `nix develop` z workflow. W kontenerze `node:22-bookworm` rustup instaluje Rust 1.99.1 z rustfmt i Clippy. Dodano zależności systemowe ALSA, pkg-config i kompilator C oraz dwa cache `actions/cache@v4`: toolchain i Cargo (registry, git, target). Klucze Cargo uwzględniają wersję Rust, Cargo.lock, manifest i źródła; częściowe trafienia pozwalają wykorzystać wcześniejsze artefakty. Zachowano wszystkie pięć kontroli i `--locked`. Lokalne środowisko Nix pozostaje bez zmian. Zaktualizowano mapę i instrukcje.
Weryfikacja: lokalne `nix develop -c cargo check --all-targets --locked`, `nix develop -c cargo fmt --all -- --check` i `git diff --check` zakończyły się sukcesem. Pełne wykonanie nowego workflow i skuteczność cache wymagają sprawdzenia na Gitea; lokalna kontrola nie potwierdza instalacji rustup ani sieciowego dostępu do cache serwera.
## 2026-10-19 — naprawa instalacji Nix w kontenerze Gitea Actions
Log runnera 0.6.1 wskazał `sudo: command not found` w `cachix/install-nix-action@v31`. Etykieta `ubuntu-latest` była mapowana na `node:16-bullseye`, który nie zawiera sudo. Lokalny test odtworzenia wykazał dodatkowo błąd 404 podczas instalacji sudo z repozytorium starego obrazu.
+4 -4
View File
@@ -45,11 +45,11 @@ nix develop -c cargo clippy --all-targets --locked
## 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/).
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. 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/).
Etykieta `ubuntu-latest` służy do wyboru runnera i nie gwarantuje obrazu Ubuntu: w dostarczonym logu runner 0.6.1 mapował ją na `node:16-bullseye`. Workflow określa teraz obraz zadania jawnie jako `node:22-bookworm`. Kontener działa jako root; przed instalacją Nix wykonuje `apt-get update` i instaluje `sudo`, wymagane przez `cachix/install-nix-action`. `enable_kvm: false` wyłącza zbędne próby konfiguracji KVM. Zmiana nie wymaga przełączania runnera na tryb hosta ani nadawania kontenerowi trybu privileged.
Workflow określa obraz zadania jawnie jako `node:22-bookworm`. Kontener działa jako root i instaluje pakiety potrzebne do budowania: build-essential, pkg-config i libasound2-dev oraz curl, ca-certificates i zstd. Rust 1.99.1 z rustfmt i Clippy jest instalowany przez rustup. CI nie instaluje Nix i nie wykonuje jego shellHook.
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ń.
Wersję Rust w CI określa `RUST_VERSION` w workflow, niezależnie od lokalnego `flake.lock`. Formatowanie, kompilacja, testy i Clippy są oddzielnymi krokami Cargo. Polecenia kompilujące projekt mają `--locked`; Clippy nie używa `-D warnings` z powodu istniejących ostrzeżeń. `actions/cache@v4` zachowuje osobno toolchain oraz rejestr Cargo, repozytoria git i `target`. Klucze uwzględniają wersję Rust, a dla Cargo także manifest, lockfile i kod; klucze częściowe pozwalają ponownie wykorzystać wcześniejsze kompilacje. Działanie cache wymaga dostępnego serwera cache runnera. Pierwszy przebieg wypełnia cache; błędy pobierania cache mogą spowodować ponowną instalację i kompilację.
Release ma `overflow-checks = true`. Ten sam zestaw 45 testów można wykonać z kontrolą przepełnień w profilu produkcyjnym:
@@ -61,4 +61,4 @@ Manifest określa minimalną wspieraną wersję Rust jako 1.88. Potwierdzono `ca
## 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. Po błędzie instalacji Nix na runnerze zweryfikowano lokalnie poprawioną instalację w `node:22-bookworm` oraz `nix eval`; cały workflow wymaga ponownego przebiegu na Gitea.
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. Nowy workflow bez Nix wymaga przebiegu na Gitea; odczyt cache należy potwierdzić w kolejnym przebiegu.