Local Build Pipeline #139
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
thomas_knaus/RaceEngineer#139
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Der Intel Mac Mini ist eine hervorragende Hardware-Basis für dieses Vorhaben. Forgejo selbst ist extrem genügsam, die eigentliche Last entsteht durch die CI/CD-Prozesse.
Technische Voraussetzungen (Mac Mini Intel)
Für den reinen Betrieb des Code-Repositories und der Registry reicht fast jeder Computer. Die Spezifikationen des Mac Mini müssen jedoch den CI/CD-Workflows standhalten:
Forgejo & CI/CD Runner aufsetzen
Diese Anleitung nutzt Docker Compose, um sowohl den Forgejo-Server als auch den zugehörigen Runner (für die Actions) auf dem Mac Mini bereitzustellen. Voraussetzung ist, dass [Docker Desktop für Mac](https://docs.docker.com/desktop/install/mac-install/) installiert ist.
Öffne das Terminal auf dem Mac Mini und erstelle einen Ordner für die Konfiguration und die persistenten Daten:
Erstelle im neuen Verzeichnis eine Datei namens
docker-compose.ymlmit folgendem Inhalt. Diese Datei definiert den Server und den Runner, der später den Zugriff auf den Docker-Socket erhält, um Container für die Build-Jobs zu starten.Starte zunächst nur den Forgejo-Server:
Rufe nun im Browser
http://localhost:3000auf. Schließe die Initialeinrichtung ab (die Standardeinstellung mit SQLite-Datenbank reicht für lokale Setups völlig aus). Erstelle dabei dein Administrator-Konto.Runner-Token generieren:
Damit der Runner Aufträge entgegennehmen darf, benötigt er eine Berechtigung:
Gehe in Forgejo oben rechts auf Website-Administration.
Wähle im linken Menü Aktionen -> Runner.
Klicke auf Neuen Runner erstellen und kopiere den angezeigten Registrierungs-Token.
Runner registrieren und starten:
Lass nun den Runner-Container starten und registriere ihn mit einem Einzeiler im Terminal. Ersetze
<DEIN_TOKEN>durch den kopierten Wert.Sobald der Runner registriert ist, taucht er im Admin-Panel von Forgejo mit dem Status "Online" auf. Ab jetzt kannst du im
.forgejo/workflowsVerzeichnis deiner Code-Repositories YAML-Dateien ablegen, die genauso funktionieren wie bei GitHub Actions.Migration von GitHub zu Forgejo (Self-Hosted) — Machbarkeitsanalyse
Repository: AISimulate-Engineering/RaceEngineer (Pitwall Pro)
Commit:
52b28f4· Stand: 07/20261. Architektur & Abhängigkeiten (Codebasis)
1.1 Technologie-Stack
tokio(async)Rust-Edition: 2021 · Build-System: Cargo Workspace mit 7 Member-Crates + 1 excluded (
pitwall-hud)1.2 Abhängigkeitsmanagement
Cargo.toml/Cargo.lock(alle Crates außerpitwall-hudsind Workspace-Members)web-app/package.json(Tailwind CSS),package.jsonim Roothuggingface_hub(Modell-Downloads)1.3 Datenbanken & Services
Datenbank-Migrationen: 11 Migrationspaare, verwaltet mit
sqlx-cli. Kern-Tabellen:licenses,users,app_errors,track_baselines,billing_plans,discount_codes,system_options,sessions,telemetry_history.1.4 Dateisystem-Interaktionen
backend-rs/config/wird relativ zum Binary-Arbeitsverzeichnis aufgelöst — Docker-kompatibel.desktop-app/assets/models/(ONNX Runtime, Qwen LLM, Kokoro TTS). Zur Build-Zeit eingebettet./run/secrets/<name>) für Produktion,.envfür Entwicklung.2. Containerisierung (Docker-Bereitschaft)
2.1 Dockerfile-Analyse
backend-rs/DockerfileRoot DockerfileDockerfile.testbackend-rs/Dockerfile.dbbackend-rs/Dockerfile— detaillierte Bewertung:Stärken:
CARGO_JOBS,BUILD_MODEfür flexible Builds--lockedfür reproduzierbare BuildsCARGO_INCREMENTAL=0,LTO=false,codegen-units=16für CI-optimiertes Bauen2.2 12-Factor-App Konformität
BACKEND_ADDR=0.0.0.0:3000RUST_LOG/RUST_LOG_JSONsqlx migrate runals One-Off-ProzessFazit: Sehr hohe 12-Factor-Konformität. Keine strukturellen Änderungen nötig.
2.3 Optimiertes Dockerfile mit cargo-chef
2.4 Docker Compose für Self-Hosted Umgebung
3. CI/CD Migration (GitHub Actions zu Forgejo Actions)
3.1 Bestehende Workflows
pipeline-backend.yml(308 Z.)v*, manualghcr.iopipeline-desktop.yml(631 Z.)v*, manualpipeline-web.yml(191 Z.)v*, manualbuild-admin-desktop.ymlbackend-security-performance.ymlworkflow_dispatch3.2 GitHub-spezifische Actions — Kompatibilitätsmatrix
actions/checkout@v4actions/checkout@v4(forgejo-shipped)dtolnay/rust-toolchain@stableSwatinem/rust-cache@v2docker/login-action@v3docker/build-push-action@v5docker/metadata-action@v5aquasecurity/trivy-action@masteractions/upload-artifact@v4actions/upload-artifact@v4(forgejo)actions/download-artifact@v4actions/download-artifact@v4(forgejo)actions/cache@v4actions/cache@v4(forgejo)actions/setup-node@v4actions/setup-python@v5codecov/codecov-action@v3cargo-tarpaulinersetzbargithub/codeql-action/upload-sarif@v4softprops/action-gh-release@v1teaCLI oder Forgejo Release-API ersetzenGITHUB_TOKENFORGEJO_TOKEN(äquivalent)${{ github.repository }}${{ GITHUB_REPOSITORY }}ghcr.ioforgejo.<domain>REGISTRYenv3.3 Forgejo Workflow Entwurf
3.4 Notwendige Anpassungen für Forgejo
ghcr.io→forgejo.<deine-domain>inREGISTRYenv-Variablesecrets.GITHUB_TOKEN→secrets.FORGEJO_TOKEN(in Forgejo automatisch verfügbar)softprops/action-gh-release@v1entfernen — stattdessenteaCLI oder Forgejo Release-APIpaths-Syntax ist in Forgejo Actions kompatibel4. Ressourcen-Abschätzung (Build-Prozess)
4.1 Ressourcenbedarf pro Build
4.2 Bewertung für Intel Core i3 (4-Core) mit 32 GB RAM — 3 parallele Builds
CARGO_JOBS=1ist im Dockerfile gesetzt, was die CPU-Auslastung begrenzt. Empfehlung:CARGO_JOBS=2oder3, da 32 GB RAM verfügbar sind.4.3 Optimierungspotenzial
cargo-cheffür Dependency-Layer-Cachingsccache(Shared Compilation Cache)target/moldLinker stattld--package pitwall-pro-backend-rs(wird bereits gemacht)Empfohlene Optimierungen für den Forgejo-Workflow:
5. Zusammenfassung & Handlungsempfehlung
Machbarkeit: ✅ Gut machbar mit moderatem Aufwand
Konkrete nächste Schritte
ubuntu-latestLabel)cargo-chefins Dockerfile integrieren (spart ~80% Build-Zeit bei Cache-Hits).forgejo/workflows/Verzeichnis mit angepassten Workflows anlegenREGISTRY-URL anpassenFORGEJO_TOKEN, DB-Passwörter etc.) in Forgejo hinterlegentea release createoder direkte API-Aufrufe ersetzendocker-compose.monitoring.ymlhochziehen