GitHub Actions Integration

Sync the model from CI with the official GitHub Action

Archyl bietet sechs offizielle GitHub Actions, die Architektur-Governance direkt in Ihre CI/CD-Pipeline integrieren.

Action Trigger Zweck
Conformance Check Pull Requests Codeänderungen gegen Architekturregeln validieren
Drift Score Pull Requests Drift-Score berechnen und Quality Gate durchsetzen
Generate Context Push auf main archyl.txt für KI-Agenten generieren
Auto CR Push auf main Architektur-Änderungsanträge beim Merge erstellen
Release Push / Tags Releases in Archyl verfolgen
Sync Push auf main archyl.yaml-DSL mit Archyl synchronisieren

Alle Actions sind unter archyl-com/actions veröffentlicht und mit @v1 versioniert.

Voraussetzungen

Bevor Sie die Actions nutzen, benötigen Sie:

  1. Einen Archyl-API-Schlüssel — Gehen Sie zu Profil > API-Schlüssel und erstellen Sie einen mit Schreibberechtigung
  2. Eine Organisations-ID — Auf der Einstellungsseite Ihrer Organisation zu finden
  3. Eine Projekt-ID — In der URL oder auf der Einstellungsseite Ihres Projekts zu finden
  4. Speichern Sie diese als GitHub Secrets und Variablen:
Settings > Secrets > Actions:
  ARCHYL_API_KEY       # Your API key (secret)

Settings > Variables > Actions:
  ARCHYL_ORG_ID        # Organization UUID
  ARCHYL_PROJECT_ID    # Project UUID

Schnellstart

Am schnellsten starten Sie mit den wiederverwendbaren Workflows von Archyl — einer für PRs, einer für Pushes auf den main-Branch:

# .github/workflows/archyl.yml
name: Archyl Architecture

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  # Conformance check + drift score on PRs (run in parallel)
  pr-checks:
    if: github.event_name == 'pull_request'
    uses: archyl-com/actions/.github/workflows/archyl-pr.yml@v1
    with:
      organization-id: ${{ vars.ARCHYL_ORG_ID }}
      project-id: ${{ vars.ARCHYL_PROJECT_ID }}
      drift-threshold: 70
    secrets:
      api-key: ${{ secrets.ARCHYL_API_KEY }}

  # Generate context + sync + release on merge to main
  main-sync:
    if: github.event_name == 'push'
    uses: archyl-com/actions/.github/workflows/archyl-main.yml@v1
    with:
      organization-id: ${{ vars.ARCHYL_ORG_ID }}
      project-id: ${{ vars.ARCHYL_PROJECT_ID }}
      sync: true
      release: true
      release-environment: 'production'
    secrets:
      api-key: ${{ secrets.ARCHYL_API_KEY }}

Damit erhalten Sie eine vollständige Architektur-Governance-Schleife: Konformitätsregeln validieren jeden PR, der Drift-Score misst, wie gut Ihr Code zum Modell passt, und nach dem Merge bleibt das Modell automatisch synchron.

Einzelne Actions

Conformance Check

Führt Ihre Konformitätsregeln gegen die in einem Pull Request geänderten Dateien aus. Verletzungen werden inline annotiert, und eine Zusammenfassung wird als PR-Kommentar gepostet.

- uses: archyl-com/actions/conformance-check@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Schreibberechtigung
organization-id Ja — Archyl-Organisations-UUID
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
fail-on Nein error Mindestschweregrad, ab dem die Prüfung fehlschlägt: error, warning oder none
comment-on-pr Nein true Einen Zusammenfassungskommentar im Pull Request posten
github-token Nein ${{ github.token }} GitHub-Token für PR-Kommentare
max-file-lines Nein 200 Maximale Anzahl gesendeter Zeilen pro Datei (reduziert den Tokenverbrauch)
chunk-size Nein 20 Anzahl der pro API-Aufruf gesendeten Dateien (für große Diffs)

Ausgaben

Ausgabe Beschreibung
check-id UUID der Konformitätsprüfung
total-violations Gesamtzahl gefundener Verletzungen
errors Anzahl der Verletzungen auf Error-Ebene
warnings Anzahl der Verletzungen auf Warning-Ebene
infos Anzahl der Verletzungen auf Info-Ebene
status Prüfergebnis: pass oder fail

Ausgaben verwenden

- uses: archyl-com/actions/conformance-check@v1
  id: conformance
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}
    fail-on: none  # Don't fail, handle manually

- name: Custom handling
  if: steps.conformance.outputs.status == 'fail'
  run: |
    echo "Found ${{ steps.conformance.outputs.total-violations }} violations"
    echo "Errors: ${{ steps.conformance.outputs.errors }}"
    echo "Warnings: ${{ steps.conformance.outputs.warnings }}"

Drift Score

Berechnet den Architektur-Drift-Score — also wie gut Ihre Codebasis mit Ihrem C4-Modell übereinstimmt. Optional wird ein Quality Gate durchgesetzt, indem der Build fehlschlägt, sobald der Score unter einen Schwellenwert fällt.

- uses: archyl-com/actions/drift-score@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}
    threshold: 70

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Schreibberechtigung
organization-id Ja — Archyl-Organisations-UUID
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
threshold Nein 0 Minimal akzeptabler Drift-Score (0-100). Schlägt fehl, wenn der Score darunter liegt. Auf 0 setzen, damit die Prüfung nie fehlschlägt.
poll-interval Nein 5 Sekunden zwischen Statusabfragen, während auf die Berechnung gewartet wird
poll-timeout Nein 300 Maximale Wartezeit in Sekunden, bis die Berechnung abgeschlossen ist
comment-on-pr Nein false Einen Zusammenfassungskommentar im Pull Request posten
github-token Nein ${{ github.token }} GitHub-Token für PR-Kommentare

Ausgaben

Ausgabe Beschreibung
score Drift-Score (0-100)
score-id UUID des Drift-Score-Eintrags
total-elements Gesamtzahl der verglichenen Elemente
matched-count Anzahl übereinstimmender Elemente
missing-in-code Anzahl der Elemente, die im Code fehlen
new-in-code Anzahl neuer, im Code gefundener Elemente
status Berechnungsstatus: completed oder failed

Generate Context

Generiert eine archyl.txt-Datei mit Ihrem Architekturkontext, optimiert für KI-Agenten und LLMs. Die Datei kann automatisch committet werden, wenn sie sich ändert.

- uses: archyl-com/actions/generate-context@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}
    commit: 'true'

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Leseberechtigung
organization-id Ja — Archyl-Organisations-UUID
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
output-file Nein archyl.txt Pfad, unter dem die generierte Kontextdatei geschrieben wird
format Nein markdown Ausgabeformat: markdown für ein LLM-optimiertes Briefing, full für strukturiertes JSON + Markdown
commit Nein false Die generierte Datei automatisch committen, wenn sie sich geändert hat
commit-message Nein chore: update archyl.txt architecture context Commit-Nachricht beim automatischen Committen

Ausgaben

Ausgabe Beschreibung
file-path Pfad zur generierten Kontextdatei
changed Ob sich der Dateiinhalt geändert hat (true oder false)
token-count Ungefähre Tokenanzahl der generierten Datei

Auto CR

Erstellt in Archyl automatisch einen Architektur-Änderungsantrag, wenn Code auf main gemergt wird. Die Action analysiert den Diff, erkennt architekturrelevante Änderungen und hält sie zur Prüfung fest.

- uses: archyl-com/actions/auto-cr@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Schreibberechtigung
organization-id Ja — Archyl-Organisations-UUID
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
github-token Nein ${{ github.token }} GitHub-Token für Commit-Kommentare und Diff-Zugriff
base-ref Nein (automatisch erkannt) Basis-Ref, gegen den verglichen wird
comment-on-commit Nein false Einen Kommentar mit dem Link zum Änderungsantrag am Merge-Commit posten

Ausgaben

Ausgabe Beschreibung
request-id UUID des erstellten Änderungsantrags
changes-detected Anzahl gefundener architekturrelevanter Änderungen
status created, skipped (keine Änderungen) oder failed

Release

Erstellt oder aktualisiert ein Release in Archyl direkt aus Ihrer CI-Pipeline. Verfolgen Sie Deployments, ordnen Sie sie Umgebungen und C4-Elementen zu und speisen Sie Ihre DORA-Metriken.

- uses: archyl-com/actions/release@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}
    status: deployed
    environment: production

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Schreibberechtigung
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
version Nein $GITHUB_REF_NAME Release-Version
status Nein deployed Release-Status: planned, in_progress, deployed, rolled_back, failed
changelog Nein — Changelog oder Beschreibung des Releases
environment Nein — Name der Zielumgebung (z. B. production, staging). Wird automatisch angelegt, falls sie fehlt.
container-id Nein — UUID des Archyl-Containers, der diesem Release zugeordnet wird
system-id Nein — UUID des Archyl-Systems, das diesem Release zugeordnet wird
source-url Nein — URL zurück zur Quelle (Commit, Release-Seite usw.)

Ausgaben

Ausgabe Beschreibung
release-id UUID des erstellten oder aktualisierten Releases

Sync

Synchronisiert Ihre archyl.yaml-DSL-Datei mit Archyl. Deklarieren Sie Ihre Architektur als Code und übertragen Sie Änderungen bei jedem Commit.

- uses: archyl-com/actions/sync@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}

Eingaben

Eingabe Erforderlich Standard Beschreibung
api-key Ja — Archyl-API-Schlüssel mit Schreibberechtigung
project-id Ja — Archyl-Projekt-UUID
api-url Nein https://api.archyl.com Benutzerdefinierte API-URL (für Self-Hosted)
file Nein archyl.yaml Pfad zur archyl.yaml-Datei, relativ zum Repository-Root

Ausgaben

Ausgabe Beschreibung
systems-created Anzahl erstellter Systeme
containers-created Anzahl erstellter Container
components-created Anzahl erstellter Komponenten
relationships-created Anzahl erstellter Beziehungen
summary Lesbare Zusammenfassung des Sync-Ergebnisses

Wiederverwendbare Workflows

Archyl bietet zwei wiederverwendbare Workflows, die mehrere Actions für gängige Szenarien kombinieren.

archyl-pr.yml

Führt Conformance Check und Drift Score bei jedem Pull Request parallel aus.

jobs:
  archyl:
    uses: archyl-com/actions/.github/workflows/archyl-pr.yml@v1
    with:
      organization-id: ${{ vars.ARCHYL_ORG_ID }}
      project-id: ${{ vars.ARCHYL_PROJECT_ID }}
      drift-threshold: 70        # Fail if drift score drops below 70
      fail-on: error              # Fail on error-level conformance violations
      comment-on-pr: true         # Post PR comments with results
    secrets:
      api-key: ${{ secrets.ARCHYL_API_KEY }}

Alle Eingaben außer organization-id, project-id und api-key sind optional.

archyl-main.yml

Führt generate-context, sync und release bei einem Push auf main aus. Jeder Job lässt sich unabhängig ein- und ausschalten.

jobs:
  archyl:
    uses: archyl-com/actions/.github/workflows/archyl-main.yml@v1
    with:
      organization-id: ${{ vars.ARCHYL_ORG_ID }}
      project-id: ${{ vars.ARCHYL_PROJECT_ID }}
      generate-context: true       # Generate and auto-commit archyl.txt
      context-format: markdown     # LLM-optimized format
      sync: true                   # Sync archyl.yaml to Archyl
      sync-file: archyl.yaml       # Path to your archyl.yaml
      release: true                # Create a release record
      release-status: deployed
      release-environment: production
    secrets:
      api-key: ${{ secrets.ARCHYL_API_KEY }}

Andere CI-Plattformen

GitLab CI

Archyl stellt ein einbindbares CI-Template für GitLab bereit. Es führt Conformance Check und Drift Score bei Merge Requests aus und generiert bei Pushes auf den Default-Branch den Kontext.

Einrichtung:

  1. Fügen Sie die erforderlichen CI/CD-Variablen unter Settings > CI/CD > Variables hinzu:

    • ARCHYL_API_KEY (masked, protected)
    • ARCHYL_ORG_ID
    • ARCHYL_PROJECT_ID
  2. Binden Sie das Template in Ihre .gitlab-ci.yml ein:

include:
  - remote: 'https://raw.githubusercontent.com/archyl-com/actions/main/ci-templates/gitlab/.archyl-ci.yml'

Dadurch werden Ihrer Pipeline drei Jobs hinzugefügt:

  • archyl:conformance — läuft bei Merge Requests
  • archyl:drift-score — läuft bei Merge Requests
  • archyl:generate-context — läuft bei Pushes auf den Default-Branch

Optionale Variablen: ARCHYL_API_URL, ARCHYL_DRIFT_THRESHOLD.

Bitbucket Pipelines

Kopieren Sie das Archyl-Pipelines-Template in Ihre bitbucket-pipelines.yml.

Einrichtung:

  1. Fügen Sie die erforderlichen Repository-Variablen unter Settings > Repository variables hinzu:

    • ARCHYL_API_KEY (secured)
    • ARCHYL_ORG_ID
    • ARCHYL_PROJECT_ID
  2. Fügen Sie die Pipeline-Schritte hinzu:

pipelines:
  pull-requests:
    '**':
      - step:
          name: "Archyl Conformance Check"
          image: alpine:3.20
          script:
            - apk add --no-cache curl jq git
            - # ... conformance check script
      - step:
          name: "Archyl Drift Score"
          image: alpine:3.20
          script:
            - apk add --no-cache curl jq
            - # ... drift score script

  branches:
    main:
      - step:
          name: "Archyl Generate Context"
          image: alpine:3.20
          script:
            - apk add --no-cache curl jq git
            - # ... generate context script

Das vollständige Template finden Sie unter archyl-com/actions/ci-templates/bitbucket/archyl-pipelines.yml.

Kombiniertes Beispiel

Ein vollständiger Workflow, der alle sechs Actions zusammen verwendet:

# .github/workflows/architecture.yml
name: Archyl Architecture

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  # --- PR checks (parallel) ---

  conformance:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: archyl-com/actions/conformance-check@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          organization-id: ${{ vars.ARCHYL_ORG_ID }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}

  drift:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: archyl-com/actions/drift-score@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          organization-id: ${{ vars.ARCHYL_ORG_ID }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}
          threshold: 70
          comment-on-pr: 'true'

  # --- Main branch (after merge) ---

  generate-context:
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: archyl-com/actions/generate-context@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          organization-id: ${{ vars.ARCHYL_ORG_ID }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}
          commit: 'true'

  sync:
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: archyl-com/actions/sync@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}

  auto-cr:
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: archyl-com/actions/auto-cr@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          organization-id: ${{ vars.ARCHYL_ORG_ID }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}

  release:
    if: github.event_name == 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: archyl-com/actions/release@v1
        with:
          api-key: ${{ secrets.ARCHYL_API_KEY }}
          project-id: ${{ vars.ARCHYL_PROJECT_ID }}
          status: deployed
          environment: production
          source-url: ${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}

Ergebnisse ansehen

Die Ergebnisse aller in der CI ausgelösten Prüfungen erscheinen in Archyl:

  • Konformitätsprüfungen — sichtbar im Konformitäts-Dashboard (Tab Agent Hub > Dashboard). Klicken Sie auf eine Prüfung, um die Verletzungen nach Datei gruppiert zu sehen.
  • Drift-Scores — sichtbar im Bereich Drift Ihres Projekts. Verfolgen Sie den Verlauf des Scores über die Zeit.
  • Änderungsanträge — sichtbar im Bereich Anfragen. Prüfen Sie Architekturänderungen, bevor Sie sie übernehmen.
  • Releases — sichtbar im Bereich Releases und auf der Seite Umgebungen. Speist Ihre DORA-Metriken.
  • Sync-Ergebnisse — werden sofort in Ihrem C4-Modell sichtbar.

Weitere Details zum Konformitäts-Dashboard finden Sie unter Konformitätsregeln.

Self-Hosted Archyl

Wenn Sie Archyl on-premise betreiben, setzen Sie bei jeder Action die Eingabe api-url auf Ihre Instanz:

- uses: archyl-com/actions/conformance-check@v1
  with:
    api-key: ${{ secrets.ARCHYL_API_KEY }}
    organization-id: ${{ vars.ARCHYL_ORG_ID }}
    project-id: ${{ vars.ARCHYL_PROJECT_ID }}
    api-url: "https://archyl.internal.company.com"

Der Standardwert ist für alle Actions https://api.archyl.com.