Files
chemenu/kb/entities/technologies/Gitea Actions.md
T
torben 54d9540c08
CI / verify (push) Successful in 56s
Release / release (push) Successful in 36s
stack: Konfidenz-Mechanismus ersatzlos entfernt, Korpus migriert (schliesst #60, #86)
Files changed:
- .wikitool-kb.json
- AGENTS.md
- CHANGES.md
- INSTALL-MCP.md
- INSTALL.md
- README.md
- VERSION
- instructions/capture-session.md
- instructions/dev/issue-tracking.md
- instructions/german-terminology.md
- instructions/kb-profiles.md
- instructions/migrate-corpus.md
- instructions/migrations/5.0.0-confidence-removal.md
- instructions/private-instance.md
- instructions/setup-instance.md
- instructions/wiki-lint/SKILL.md
- instructions/wiki-manage/SKILL.md
- instructions/wiki-query/SKILL.md
- kb/CONTRACT.md
- kb/CONVENTIONS.md
- kb/CONVENTIONS.md.template
- kb/concepts/architectures/Consolidation Tiers.md
- kb/concepts/architectures/Context Isolation.md
- kb/concepts/architectures/Cross-platform Agent Skills.md
- kb/concepts/architectures/Episodic Memory.md
- kb/concepts/architectures/Hybrid Search.md
- kb/concepts/architectures/Implementation Spectrum.md
- kb/concepts/architectures/Knowledge Graph.md
- kb/concepts/architectures/LLM Wiki Pattern.md
- kb/concepts/architectures/MCP-Leseserver.md
- kb/concepts/architectures/Memory Lifecycle.md
- kb/concepts/architectures/OKF Compatibility.md
- kb/concepts/architectures/Optional Instance Context File.md
- kb/concepts/architectures/Personalization Plane.md
- kb/concepts/architectures/Procedural Memory.md
- kb/concepts/architectures/RAG.md
- kb/concepts/architectures/Scale Ceiling.md
- kb/concepts/architectures/Semantic Memory.md
- kb/concepts/architectures/Three-Layer Architecture.md
- kb/concepts/architectures/Token Economics.md
- kb/concepts/architectures/Working Memory.md
- kb/concepts/decisions/Delete Rather Than Anonymize.md
- kb/concepts/decisions/Denylist over Allowlist.md
- kb/concepts/decisions/Diff-Reviewable Agent Edits.md
- kb/concepts/decisions/Dual Licensing by File Plan.md
- kb/concepts/decisions/Issue Label Scheme.md
- kb/concepts/decisions/KB Stack Versioning.md
- kb/concepts/decisions/Structural Enforcement over Documented Rule.md
- kb/concepts/patterns/Audit Trail.md
- kb/concepts/patterns/BM25.md
- kb/concepts/patterns/Command Round-Trip Integrity.md
- kb/concepts/patterns/Confidence Scoring.md
- kb/concepts/patterns/Contradiction Resolution.md
- kb/concepts/patterns/Entity Extraction.md
- kb/concepts/patterns/Filter on Ingest.md
- kb/concepts/patterns/Forgetting.md
- kb/concepts/patterns/Graph Traversal.md
- kb/concepts/patterns/Mesh Sync.md
- kb/concepts/patterns/Quality Scoring.md
- kb/concepts/patterns/Reciprocal Rank Fusion.md
- kb/concepts/patterns/Self-Healing.md
- kb/concepts/patterns/Shared vs Private.md
- kb/concepts/patterns/Typed Relationships.md
- kb/concepts/patterns/Vector Search.md
- kb/concepts/patterns/Work Coordination.md
- kb/concepts/problems/Ambient Environment Dependency.md
- kb/concepts/problems/Detect-Repair Asymmetry.md
- kb/concepts/problems/Green Suite Blind Spot.md
- kb/concepts/problems/Naming Convention Conflict.md
- kb/concepts/problems/Write-Once Frontmatter Fields.md
- kb/concepts/protocols/CPPC.md
- kb/concepts/protocols/Modbus.md
- kb/concepts/protocols/SSD TRIM.md
- kb/concepts/workflows/Anti-Cramming Heuristic.md
- kb/concepts/workflows/Bulk Operations.md
- kb/concepts/workflows/CI Integration.md
- kb/concepts/workflows/Checkpoint Audit.md
- kb/concepts/workflows/Claude Code Auto Mode.md
- kb/concepts/workflows/Content Quality Control.md
- kb/concepts/workflows/Crystallization.md
- kb/concepts/workflows/Event-Driven Automation.md
- kb/concepts/workflows/Hooks.md
- kb/concepts/workflows/Index Scaling.md
- kb/concepts/workflows/Iteration and Cost Limits.md
- kb/concepts/workflows/KB Migration.md
- kb/concepts/workflows/Knowledge Compounding.md
- kb/concepts/workflows/Lint Workflow.md
- kb/concepts/workflows/Mass-Update Gate.md
- kb/concepts/workflows/Multi-Agent Collaboration.md
- kb/concepts/workflows/Privacy and Governance.md
- kb/concepts/workflows/Publish-Remote Gate.md
- kb/concepts/workflows/Quality and Self-Correction.md
- kb/concepts/workflows/Semantic Lint Automation.md
- kb/concepts/workflows/Session Orientation.md
- kb/concepts/workflows/Split Merge Reclassify.md
- kb/concepts/workflows/Split Threshold.md
- kb/concepts/workflows/Stub Threshold.md
- kb/concepts/workflows/Supersession.md
- kb/concepts/workflows/User Management.md
- kb/concepts/workflows/Workflow Extraction.md
- kb/concepts/workflows/Workflow Orchestration.md
- kb/entities/people/Andrej Karpathy.md
- kb/entities/people/E3DC GmbH.md
- kb/entities/people/Rohit Gupta.md
- kb/entities/people/Vannevar Bush.md
- kb/entities/projects/BCDModule.md
- kb/entities/projects/Chemenu.md
- kb/entities/projects/andybalholm-edl.md
- kb/entities/projects/goresponsiveness.md
- kb/entities/projects/ha-core.md
- kb/entities/projects/hacs-e3dc.md
- kb/entities/projects/hacs-integration-blueprint.md
- kb/entities/projects/llm-wiki-skills.md
- kb/entities/projects/plugnburn-edl.md
- kb/entities/projects/wiki-skills-vanillaflava.md
- kb/entities/projects/wiki-skills.md
- kb/entities/systems/AGENTS.md.md
- kb/entities/systems/CLAUDE.md.md
- kb/entities/systems/E3DC.md
- kb/entities/systems/ENVIRONMENT.md.md
- kb/entities/systems/Memex.md
- kb/entities/systems/Tolkien Gateway.md
- kb/entities/technologies/Arch Linux.md
- kb/entities/technologies/Disk Encryption.md
- kb/entities/technologies/Docker.md
- kb/entities/technologies/GRUB.md
- kb/entities/technologies/Gitea Actions.md
- kb/entities/technologies/Gitea.md
- kb/entities/technologies/Go.md
- kb/entities/technologies/Home Assistant.md
- kb/entities/technologies/Kernel PM Governors.md
- kb/entities/technologies/LVM.md
- kb/entities/technologies/Linux Kernel.md
- kb/entities/technologies/MQTT.md
- kb/entities/technologies/OPC UA.md
- kb/entities/technologies/Python.md
- kb/entities/technologies/Rust.md
- kb/entities/technologies/Wine GE.md
- kb/entities/technologies/Wine-Staging.md
- kb/entities/technologies/acpi-cpufreq.md
- kb/entities/technologies/amd-pstate.md
- kb/entities/technologies/iii Engine.md
- kb/entities/tools/AUR.md
- kb/entities/tools/Act Runner.md
- kb/entities/tools/Agent Memory.md
- kb/entities/tools/Aura.md
- kb/entities/tools/Bottles.md
- kb/entities/tools/ChatGPT.md
- kb/entities/tools/Claude Code.md
- kb/entities/tools/Codex CLI.md
- kb/entities/tools/Dataview.md
- kb/entities/tools/GPG.md
- kb/entities/tools/GitHub Copilot.md
- kb/entities/tools/Gitea MCP Server.md
- kb/entities/tools/Lutris.md
- kb/entities/tools/Marp.md
- kb/entities/tools/Mistral Vibe.md
- kb/entities/tools/NotebookLM.md
- kb/entities/tools/Obsidian Web Clipper.md
- kb/entities/tools/Obsidian.md
- kb/entities/tools/OpenAI Codex.md
- kb/entities/tools/OpenCode.md
- kb/entities/tools/Pi.md
- kb/entities/tools/Proton.md
- kb/entities/tools/Steam.md
- kb/entities/tools/Wine.md
- kb/entities/tools/awesome-llm-wiki.md
- kb/entities/tools/farzaa gist.md
- kb/entities/tools/gdeploy.md
- kb/entities/tools/makepkg.md
- kb/entities/tools/pascalandy schema.md
- kb/entities/tools/qmd.md
- kb/entities/tools/wikitool.md
- kb/index.md
- kb/log.md
- raw/CONTRACT.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/api.py
- tools/chemenu/cli.py
- tools/chemenu/commands/confidence_decay.py
- tools/chemenu/commands/docs_verify.py
- tools/chemenu/commands/doctor.py
- tools/chemenu/commands/index_build.py
- tools/chemenu/commands/new_page.py
- tools/chemenu/commands/search.py
- tools/chemenu/commands/touch.py
- tools/chemenu/commands/version_cmd.py
- tools/chemenu/conventions.py
- tools/chemenu/corpus_diff.py
- tools/chemenu/frontmatter_io.py
- tools/chemenu/lint_core.py
- tools/chemenu/mcp/server.py
- tools/chemenu/page.py
- tools/chemenu/search/base.py
- tools/chemenu/search/filters.py
- tools/chemenu/search/ripgrep.py
- tools/chemenu/search/service.py
- tools/chemenu/search/types.py
- tools/chemenu/tests/conftest.py
- tools/chemenu/tests/test_api.py
- tools/chemenu/tests/test_confidence_decay.py
- tools/chemenu/tests/test_corpus_diff.py
- tools/chemenu/tests/test_docs_verify.py
- tools/chemenu/tests/test_frontmatter_io.py
- tools/chemenu/tests/test_index_build.py
- tools/chemenu/tests/test_kb_scan.py
- tools/chemenu/tests/test_lint.py
- tools/chemenu/tests/test_mcp_server.py
- tools/chemenu/tests/test_new_page.py
- tools/chemenu/tests/test_page_ops.py
- tools/chemenu/tests/test_provenance.py
- tools/chemenu/tests/test_raw_cmd.py
- tools/chemenu/tests/test_search.py
- tools/chemenu/tests/test_touch.py
- tools/chemenu/tests/test_type_resolver.py
- tools/chemenu/tests/test_version_cmd.py
- tools/chemenu/tests/test_xref.py
- tools/chemenu/version.py
- types/concept.md
- types/concept.schema.yaml
- types/entity.md
- types/entity.schema.yaml
- types/instruction.md
- types/type-spec.md
2026-09-10 19:51:48 +02:00

15 KiB

type, entity_type, tags, created, modified, related, sources, provenance, summary
type entity_type tags created modified related sources provenance summary
types/entity.md technology
ci-cd
workflows
automation
gitea
2026-07-25 2026-09-01
runs-on
Act Runner
exemplifies
Ambient Environment Dependency
implements
CI Integration
part-of
Gitea
uses
Docker
Source - Conversation - Versioning CI-CD and Content Migration Session 2026-08-30
Source - Conversation - Issue Triage Labels and TODO Retirement Session 2026-08-31
Source - Conversation - Hardening the Test Suite Against Silent Environment Dependencies Session 2026-08-31
Source - Conversation - Nightly Drift-Check Workflow and doctor's Bootstrap Gap Session 2026-08-31
sourced CI/CD-Workflow-Plattform, in Gitea integriert; fuehrt YAML-Workflows ueber den Act Runner aus, samt Release-Pipeline, belegten paths-ignore-Filtern und einem nightly.yml-Drift-Check, dessen schedule-Ausloesung seit 2026-09-01 (Run 90) belegt ist

Gitea Actions

Typ: Technology (CI/CD Platform)

Beschreibung

Gitea Actions ist das CI/CD-Workflow-Automatisierungssystem, das in Gitea integriert ist. Es ermöglicht die Definition von Build-, Test- und Deployment-Pipelines als Code in YAML-Workflow-Dateien. Die Workflows werden vom Act Runner ausgeführt.

Kerndaten

  • Typ: CI/CD-Workflow-Automatisierung
  • Status: Aktiv (Stand 2026-07-12)
  • Runner: Act Runner
  • Workflow-Syntax: GitHub Actions kompatibles YAML

Architektur

Workflow-Ausführung

  1. Auslöser: Push, PR, Zeitplan oder manuelle Auslösung
  2. Runner-Auswahl: Basierend auf Routing-Labels (linux-docker, container-builder, k3s-deploy)
  3. Job-Container: Isoliertes Bridge-Netz pro Job
  4. Secret-Injektion: Runtime-Abruf aus 1Password
  5. Cache: Built-in Actions Cache Server auf Port 8088

Schlüsselkomponenten

  • Runner: act_runner-Docker-Container im Host-Network-Modus
  • Cache Server: Built-in, zugänglich via statische IP-Konfiguration
  • Job-Container: Kurzlebige Docker-Container pro Workflow-Job
  • Actions: Wiederverwendbare Workflow-Komponenten

Konfiguration

Cache-Konfiguration

# In act_runner config.yaml
cache:
  enabled: true
  host: "192.0.2.10"  # static IP of ci-runner.example.net
  port: 8088

Wichtig: cache.host ist die Adresse, die Job-Container verwenden, um den Cache-Server zu erreichen, nicht die Listen-Adresse des Servers.

Workflow-Beispiel

name: Build and Deploy

on: [push]

permissions:
  packages: write  # Required for registry pushes

jobs:
  build:
    runs-on: linux-docker
    steps:
      - uses: actions/checkout@v4
      
      - name: Load secrets
        uses: 1password/load-secrets-action@v2
        with:
          vault: CI-CD
        env:
          REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
      
      - name: Build with BuildKit
        run: |
          docker buildx create --driver remote tcp://$HOST_IP:1234
          docker buildx build --push ...

Validierte Szenarien

Szenario A: Arch-Paketbuilds

  • Basis-Image: archlinux:base-devel
  • Herausforderung: makepkg benötigt Root
  • Lösung: Erstelle non-Root-Benutzer builder on-the-fly
  • Artefakte: actions/upload-artifact@v3 (v4 nicht vollständig unterstützt)
  • Hinweis: Gitea Actions v4 hat begrenzte Artefakt-Unterstützung

Szenario B: Container-Builds

  • Basis-Image: debian:trixie-slim (Standard)
  • Vermeidet: Alpine Linux (musl libc inkompatibel mit 1Password CLI)
  • Verbindung: Dynamische IP-Erkennung via ip route | awk '/default/ { print $3 }'

Szenario C: K3s-Deployments

-Cluster

  • Authentifizierung: Kubeconfig aus 1Password-Vault
  • Muster: kubectl wait --for=delete pod -l ... für zuverlässige Ressourcenverwaltung

Szenario D: Test- und Release-Pipeline eines Python-Werkzeugs

  • Basis-Image: debian:trixie-slim, trägt python3 3.131
  • Erster Schritt: apt-get install nodejs, vor dem Checkout - Voraussetzung für jede JavaScript-Action, siehe Act Runner1
  • Checkout: actions/checkout@v71
  • Release: ${{ gitea.token }} genügt für das Anlegen von Release und Tag sowie für Asset-Uploads; kein Actions-Secret mit write:repository nötig1
  • Auslöser des Release-Workflows: eine Änderung an der VERSION-Datei, siehe KB Stack Versioning

Läufe eines Workflows auf ihre Ursache prüfen

Bei einem privaten Repository lässt sich der Lauf-Zustand nicht anonym über HTTP feststellen; Gitea antwortet einem anonymen Aufrufer identisch mit 404, ob das Repository unsichtbar oder nicht vorhanden ist1 . Läufe, ihr Ausgang und ihre Logs werden über den Gitea MCP Server gelesen.

Auslöser filtern

paths-ignore schließt Pfade von einem Workflow aus. Für die Filterlisten gelten hier drei Festlegungen, die alle Ableitungen aus Undokumentiertem vermeiden1 :

  • Keine YAML-Anker, um eine Liste zwischen zwei Workflows zu teilen. GitHubs Parser lehnt Anker ab, und für Gitea ist nicht dokumentiert, dass er sie annimmt. Die Liste steht lieber zweimal.
  • Keine negierten Muster wie !**/CONTRACT.md. Gitea dokumentiert die Unterstützung negierter Filtermuster nicht.
  • Die Muster scheitern offen. Alles Unvorhergesehene löst weiterhin einen Lauf aus; das ist die richtige Richtung für einen Filter, dessen Auswertung nicht bewiesen ist.

Dass die Filter greifen, ist seit 2026-08-31 beobachtet und nicht mehr angenommen. Commit f916376 war ein reiner Content-Publish - kb/index.md, kb/log.md, kb/provenance.md, acht Seiten unter kb/*/** und eine Datei unter raw/notes/, sämtlich auf der Ignore-Liste - und erzeugte zu seiner head_sha keinen einzigen Lauf2 :

Commit Inhalt Läufe
6f54c31 Stack (1.1.0) 59
adfa220 Stack (1.1.1) 60, 61
f916376 nur kb/ und raw/ keine
40adbb7 Stack (1.2.0) 62, 63

Die Stack-Commits davor und danach erzeugten je zwei Läufe, CI und Release, weil VERSION sich bewegt hatte. Der Unterschied ist also der Filter und kein untätiger Runner; Gitea wertet diese Muster wie GitHub aus2 . Der Befund steht im Kommentarkopf von .gitea/workflows/ci.yml, damit er nicht erneut für eine Annahme gehalten wird, und schloss Gitea-Issue #112 .

Als Folgewirkung bleibt die stärkste Hälfte der Begründung für den nächtlichen Drift-Check (Issue #9) stehen: Weil der Filter greift, läuft lint --fail-on-error bei einem Content-Publish tatsächlich nicht mehr. Ob dieser Gitea-Build on: schedule überhaupt auswertet, ist davon unberührt - und weiter offen (Stand 2026-08-31; seit 2026-09-01 geklärt, siehe unten)2 .

.gitea/workflows/nightly.yml (seit 2026-08-31) implementiert diesen Drift-Check: on: schedule (17 3 * * * UTC) plus workflow_dispatch, kein Push-Trigger, dieselbe Runner-Form wie ci.yml. Diese Gitea-Instanz läuft 1.26.1 - weit über der 1.20-Version, die Actions-Schedules einführte, was den Trigger plausibel, aber nicht bewiesen macht3 . Zwei workflow_dispatch-Testläufe bestätigten zunächst nur, dass der Job selbst durchläuft (Run 85, alle sieben Schritte grün) - keiner davon ist ein schedule-Lauf. Offen bleibt weiterhin, ob der Cron-Trigger auf diesem Stand tatsächlich feuert - frühestens ab 2026-09-01 03:17 UTC zu beobachten, an einem Lauf mit "event":"schedule", nicht an einem weiteren workflow_dispatch-Erfolg (Stand 2026-08-31)3 .

Bestätigt seit 2026-09-01: Run 90 ist der erste Lauf der Repository-Historie mit "event":"schedule" - gestartet 2026-09-01T03:17:35Z, exakt zur konfigurierten Cron-Zeit, abgeschlossen 03:17:38Z, alle sieben Schritte grün. Dieser Gitea-1.26.1-Stand wertet on: schedule auf dem Default-Branch also tatsächlich aus; der im Issue vorgesehene externe Fallback (ein externer Cron gegen die Actions-API) war nicht nötig. Gitea-Issue #9 ist damit geschlossen.

Bekannte Probleme und Lösungen

Der Job-Container ist keine konfigurationsfreie Maschine (Beobachtet 2026-08-31)

Beobachtung: actions/checkout@v7 legt im Job-Container selbst eine globale git-Konfiguration an. Aus dem Log von Lauf 79 des Chemenu-CI (damals llm-wiki-test1): Copying '/root/.gitconfig' to '/tmp/<uuid>/.gitconfig' und Temporarily overriding HOME='/tmp/<uuid>' before making global git config changes. Ein git config --global --add safe.directory im eigenen Setup-Schritt schreibt zusätzlich hinein4 .

Warum das zählt: Ein CI-Container gilt gern als neutrale Umgebung - "hier ist nichts konfiguriert, also fällt auf, was von der Maschine gelesen wird". Für git stimmt das nicht mehr. Ein Test oder Guard, der sich darauf verlässt, hört still auf zu greifen: kein roter Lauf, keine Meldung, nur eine Prüfung, die nichts mehr prüft.

Konsequenz: Wer Umgebungsunabhängigkeit prüfen will, stellt sie explizit her (GIT_CONFIG_GLOBAL=/dev/null, eigenes HOME) statt sie vom Container zu erwarten. Siehe Ambient Environment Dependency.

doctor prüft eine Instanz, ein Checkout ist noch keine (Behoben 2026-08-31)

Problem: Der erste workflow_dispatch-Lauf von nightly.yml scheiterte am doctor-Schritt: FAIL git-identity: 'git config user.name' is not set und FAIL skills: No skills published yet3 .

Grundursache: doctor fragt, ob eine arbeitsfähige Instanz korrekt konfiguriert ist, nicht ob ein Checkout vollständig ist. .agents/skills/ und .claude/skills/ sind generiert und bewusst nicht committet (siehe instructions/bootstrap.md), existieren also erst nach wikitool instructions sync; und der Job-Container hat keine git-Konfiguration, unabhängig davon, ob WIKI_AUTHOR gesetzt ist - das deckt nur die separate author-Prüfung, nicht git-identity3 . Weil doctor den Job abbrach, wurde instructions verify nie erreicht - der Fehlschlag stand vor dem eigentlichen Prüfzweck des Laufs, nicht in ihm3 .

Lösung: Vor doctor eine echte git-Identität setzen (git config --global user.name/ user.email) und tools/wikitool instructions sync laufen lassen - ein Mechanismus deckt beide Prüfungen ab, statt zwei separate (git-Identität, WIKI_AUTHOR) je eine. Jeder Workflow, der doctor oder instructions verify auf einem frischen Checkout aufruft, braucht denselben Bootstrap3 .

JavaScript-Actions ohne node im Job-Image (Behoben 2026-08-30)

Problem: Jeder Lauf scheiterte an actions/checkout mit exec: "node": executable file not found in $PATH und exitcode '127'.

Grundursache: act_runner führt JavaScript-Actions mit node im Job-Container aus; das gepinnte debian:trixie-slim bringt keins mit. Das Runner-Label linux-docker war nie das Problem - es routete und startete den Container von Anfang an1 .

Lösung: nodejs als erster Schritt vor dem Checkout installieren, Checkout auf actions/checkout@v7 heben. Ausführlich auf der Seite Act Runner.

Actions Cache Server-Konnektivität (Behoben 2026-07-12)

Problem: setup-go@v6 und andere Cache-verwendende Actions zeigten Timeout bei Versuch, den Cache-Server unter 172.18.0.2:39329 (interne Docker-Bridge-IP) zu erreichen.

Grundursache: Runner-Container befand sich in seinem eigenen Bridge-Netz (act_runner_default), während sich jeder Job-Container in einem isolierten temporären Bridge-Netz befand. Diese Netze konnten ohne Host-Routing nicht miteinander kommunizieren.

Lösung:

  1. Änderte Runner-Container zu network_mode: host
  2. Setzte cache.host auf statische IP 192.0.2.10
  3. Cache-URL automatisch als ACTIONS_CACHE_URL injiziert
  4. Vollständiger Neustart erforderlich: docker compose down && docker compose up -d

Beziehungen

-Ökosystem

Vorteile

  • GitHub Actions kompatible Syntax
  • Selbstgehostet, volle Kontrolle
  • Integriert mit Gitea-Ökosystem
  • Zero-Trust-ready mit 1Password-Integration
  • Keine Vendor-Lock-in

Siehe auch

Fußnoten

Beziehungen