This commit is contained in:
Mateusz Gruszczyński committed 2026-10-07 09:57:52 +02:00
1 parent e2398a4379
commit 92aa0b676d
9 files changed
+425 -310

No files matched your search

+22 -25
View File
@@ -7,7 +7,7 @@ Jeden kontener buildera buduje z jednego commita RustProxy:
- FreeBSD x86_64: cross-build bez VM FreeBSD,
- OPNsense: `os-rustproxy-<version>_<revision>.pkg` + statyczne repo `pkg`.
Nie ma Docker-in-Docker, SCP ani osobnego watchera repo OPNsense. FreeBSD sysroot, clang/lld i Rust target są częścią głównego obrazu buildera. OPNsense dostaje osobny publiczny adres, ale wszystkie artefakty są publikowane jednym atomowym przełączeniem `repository/current`.
Nie ma Docker-in-Docker, SCP ani osobnego watchera repo OPNsense. FreeBSD sysroot, clang/lld i Rust target są częścią głównego obrazu buildera. OPNsense dostaje osobny publiczny adres. Gałąź Linux i gałąź OPNsense są budowane oraz publikowane niezależnie, więc błąd testów Linux nie blokuje pakietu FreeBSD.
## Szybki start
@@ -44,26 +44,22 @@ opn-rustproxy.linuxiarz.pl -> http://builder:18766
## Pipeline
```text
Git RustProxy
|
+-> cargo test
+-> Linux cargo build
| +-> DEB
| +-> RPM
|
+-> izolowana kopia źródła
+-> poprawki FreeBSD/OPNsense
+-> x86_64-unknown-freebsd
+-> os-rustproxy.pkg
|
+-> APT metadata
+-> RPM metadata
+-> OPNsense pkg metadata
+-> walidacja
+-> atomic switch repository/current
Git RustProxy
|
wspólny checkout
/ \
/ \
Linux branch OPNsense branch
cargo test izolowana kopia źródła
cargo build poprawki FreeBSD
DEB + RPM cross-build FreeBSD
APT + DNF os-rustproxy.pkg
| |
v v
publikacja Linux publikacja OPNsense
```
Jeżeli którykolwiek etap się nie powiedzie, publiczne repozytoria nie są przełączane.
`cargo test` należy tylko do gałęzi Linux. Jeśli testy nie przejdą, DEB/RPM nie są publikowane, ale builder nadal uruchamia cross-build FreeBSD i może opublikować repo OPNsense. Stan jest śledzony osobno w `last_linux_commit` i `last_opnsense_commit`, więc kolejny cykl ponawia tylko brakującą gałąź.
## OPNsense repo
@@ -124,6 +120,8 @@ FREEBSD_RUST_TOOLCHAIN=1.88.0
APPLY_FREEBSD_PATCHES=1
```
`RUN_LINUX_TESTS=1` jest domyślne. Testy są bramką tylko dla DEB/RPM i nie wpływają na gałąź OPNsense. Ustaw `0`, jeśli chcesz całkowicie pominąć testy Linux.
`OPNSENSE_RETENTION=10` zachowuje ostatnie 10 wersji pakietu dla danej serii/architektury OPNsense. `0` wyłącza usuwanie starych wersji.
## FreeBSD cross-build
@@ -169,7 +167,7 @@ data/
└── work/
```
Jeden release zawiera jednocześnie `apt/`, `rpm/` i `opnsense/`. Dzięki temu oba publiczne adresy przechodzą na nową wersję jednocześnie.
Każda publikacja tworzy nowy snapshot `repository/releases/...` i atomowo przełącza `current`. Przy publikacji Linux poprzedni katalog OPNsense jest zachowywany, a przy publikacji OPNsense zachowywane są aktualne APT/RPM. Dzięki temu obie gałęzie są niezależne, ale nginx nadal serwuje jeden spójny snapshot katalogu.
## HTTP i logi
@@ -196,12 +194,11 @@ curl -f http://127.0.0.1:18766/healthz
## Migracja ze starszego buildera Linux-only
`last_commit` nie jest już jedynym warunkiem pominięcia kompilacji. Builder sprawdza też, czy aktualnie opublikowany release zawiera kompletne APT, RPM i OPNsense repo oraz czy `opnsense/BUILD-INFO.txt` wskazuje na ten sam commit.
Jeżeli `data/state/last_commit` pochodzi ze starszej wersji narzędzia i DEB/RPM są już opublikowane, ale OPNsense repo jeszcze nie istnieje, pierwszy cykl zaloguje:
Builder używa osobnych stanów:
```text
commit unchanged, but unified release is incomplete; rebuilding missing artifacts for <sha>
data/state/last_linux_commit
data/state/last_opnsense_commit
```
i wykona build dla tego samego commita. Przy `PACKAGE_RELEASE=auto` taki build naprawczy zachowuje dotychczasowy numer wydania DEB/RPM zamiast sztucznie go zwiększać.
Jeżeli istnieje starsze `last_commit` oraz poprawne APT/RPM dla tego SHA, zostanie ono potraktowane jako stan gałęzi Linux. Brak repo OPNsense uruchomi wyłącznie gałąź OPNsense. Po udanym OPNsense kolejny cykl nie będzie ponownie kompilował FreeBSD, nawet jeśli testy Linux nadal nie przechodzą.