Packs erstellen
Überblick
Abschnitt betitelt „Überblick“Packs sind die Distributionseinheit in Greentic. Diese Anleitung behandelt das Erstellen, Bauen, Signieren und Veröffentlichen von Packs mit den CLI-Tools.
Pack-CLI-Befehle
Abschnitt betitelt „Pack-CLI-Befehle“gtc pack
Abschnitt betitelt „gtc pack“gtc pack <COMMAND>
Commands: build Build a pack from source directory verify Verify pack signature and contents info Display pack metadata extract Extract pack contents sign Sign a pack publish Publish pack to registryEin Pack erstellen
Abschnitt betitelt „Ein Pack erstellen“-
Pack-Verzeichnisstruktur erstellen
Terminal-Fenster mkdir -p my-pack/{flows,components,assets} -
Pack-Manifest erstellen
my-pack/pack.toml [pack]name = "my-feature"version = "1.0.0"description = "My awesome feature pack"authors = ["Your Name <you@example.com>"][capabilities]id = "greentic.cap.app.v1"provides = ["my-feature"][flows]main = "flows/main.ygtc"[components]processor = "components/processor.wasm"[assets]templates = "assets/templates/" -
Flows hinzufügen
my-pack/flows/main.ygtc name: mainversion: "1.0"description: Main flownodes:- id: processtype: replyconfig:message: "Hello from my pack!"triggers:- type: messagetarget: process -
Komponenten hinzufügen (falls vorhanden)
WASM-Komponenten bauen und in
components/ablegen:Terminal-Fenster cd my-componentcargo build --target wasm32-wasip2 --releasecp target/wasm32-wasip2/release/my_component.wasm ../my-pack/components/
Packs bauen
Abschnitt betitelt „Packs bauen“Einfacher Build
Abschnitt betitelt „Einfacher Build“gtc pack build ./my-pack
# Output: my-feature-1.0.0.gtpackBuild mit Optionen
Abschnitt betitelt „Build mit Optionen“# Specify output pathgtc pack build ./my-pack --output ./dist/my-feature.gtpack
# Skip WASM optimizationgtc pack build ./my-pack --no-optimize
# Include debug infogtc pack build ./my-pack --debugBuild-Ausgabe
Abschnitt betitelt „Build-Ausgabe“Ordnermy-feature-1.0.0.gtpack
- manifest.cbor
Ordnerflows/
- main.ygtc
Ordnercomponents/
- processor.wasm
Ordnerassets/
Ordnertemplates/
- …
- sbom.json
Packs signieren
Abschnitt betitelt „Packs signieren“Signaturschlüssel erzeugen
Abschnitt betitelt „Signaturschlüssel erzeugen“# Generate new Ed25519 key pairgtc pack keygen --output my-signing-key
# Creates:# - my-signing-key.pem (private key - keep secret!)# - my-signing-key.pub (public key - distribute)Ein Pack signieren
Abschnitt betitelt „Ein Pack signieren“gtc pack sign my-feature-1.0.0.gtpack --key my-signing-key.pem
# Output: my-feature-1.0.0.gtpack (updated with signature)Signatur verifizieren
Abschnitt betitelt „Signatur verifizieren“gtc pack verify my-feature-1.0.0.gtpack --pubkey my-signing-key.pub
# Output: Signature validPack-Inspektion
Abschnitt betitelt „Pack-Inspektion“Metadaten anzeigen
Abschnitt betitelt „Metadaten anzeigen“gtc pack info my-feature-1.0.0.gtpackAusgabe:
Pack: my-featureVersion: 1.0.0Description: My awesome feature packAuthors: Your Name <you@example.com>
Capabilities: ID: greentic.cap.app.v1 Provides: my-feature
Contents: Flows: 1 Components: 1 Assets: 2 directories
Signature: Valid (signed by: ABC123...)Inhalt auflisten
Abschnitt betitelt „Inhalt auflisten“gtc pack info my-feature-1.0.0.gtpack --list
# Lists all files in the packPack extrahieren
Abschnitt betitelt „Pack extrahieren“gtc pack extract my-feature-1.0.0.gtpack --output ./extracted/
# Extracts pack contents for inspectionFlow-Validierung
Abschnitt betitelt „Flow-Validierung“Flows validieren
Abschnitt betitelt „Flows validieren“# Validate all flows in a directorygtc flow doctor ./my-pack/flows/
# Validate specific flowgtc flow validate ./my-pack/flows/main.ygtcDoctor-Ausgabe
Abschnitt betitelt „Doctor-Ausgabe“gtc flow doctor ./flows/# Output:# Checking flows/main.ygtc... OK# Checking flows/helper.ygtc... OK## 2 flows checked, 0 errors, 0 warningsHäufige Validierungsfehler
Abschnitt betitelt „Häufige Validierungsfehler“| Fehler | Ursache | Lösung |
|---|---|---|
Unknown node type | Ungültiger Knotentyp | Verfügbare Knotentypen prüfen |
Missing target node | Edge verweist auf einen nicht existierenden Knoten | Referenz auf die Knoten-ID korrigieren |
Circular dependency | Knoten bilden einen Zyklus | Den Zyklus aufbrechen |
No trigger defined | Flow hat keinen Einstiegspunkt | Einen Trigger hinzufügen |
Packs veröffentlichen
Abschnitt betitelt „Packs veröffentlichen“In OCI-Registry veröffentlichen
Abschnitt betitelt „In OCI-Registry veröffentlichen“# Login to registrygtc pack login ghcr.io --username USER --password TOKEN
# Publish packgtc pack publish my-feature-1.0.0.gtpack --registry ghcr.io/greenticAus der Registry ziehen
Abschnitt betitelt „Aus der Registry ziehen“gtc pack pull ghcr.io/greentic/my-feature:1.0.0In einem Bundle verwenden
Abschnitt betitelt „In einem Bundle verwenden“apps: my-app: pack: "oci://ghcr.io/greentic/my-feature:1.0.0"Pack-Vorlagen
Abschnitt betitelt „Pack-Vorlagen“Vorlage für ein Provider-Pack
Abschnitt betitelt „Vorlage für ein Provider-Pack“[pack]name = "messaging-custom"version = "1.0.0"description = "Custom messaging provider"
[capabilities]id = "greentic.cap.messaging.provider.v1"provides = ["custom"]
[flows]setup_default = "flows/setup.ygtc"verify_webhooks = "flows/verify.ygtc"
[components]ingress = "components/ingress.wasm"egress = "components/egress.wasm"operator = "components/operator.wasm"
[secrets]required = ["api_key"]optional = ["webhook_secret"]Vorlage für ein Application-Pack
Abschnitt betitelt „Vorlage für ein Application-Pack“[pack]name = "helpdesk-bot"version = "1.0.0"description = "IT Helpdesk bot"
[capabilities]id = "greentic.cap.app.v1"provides = ["helpdesk"]
[dependencies]greentic-templates = "^0.4"greentic-llm-openai = "^0.4"
[flows]on_message = "flows/on_message.ygtc"on_ticket = "flows/on_ticket.ygtc"
[assets]cards = "assets/cards/"templates = "assets/templates/"Best Practices
Abschnitt betitelt „Best Practices“- Semantisch versionieren - Verwende semver (
MAJOR.MINOR.PATCH) - Alle Releases signieren - Verteile niemals unsignierte Packs
- SBOM einbinden - Dokumentiere Abhängigkeiten für Sicherheitsprüfungen
- Vor dem Veröffentlichen testen - Flows validieren und Komponenten testen
- Gründlich dokumentieren - Eine README in das Pack aufnehmen
- Packs fokussiert halten - Ein Feature oder Provider pro Pack
- CI/CD verwenden - Build und Veröffentlichung automatisieren
CI/CD-Beispiel
Abschnitt betitelt „CI/CD-Beispiel“name: Build and Publish Pack
on: push: tags: - 'v*'
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Install Rust uses: dtolnay/rust-toolchain@1.90.0
- name: Build Pack run: gtc pack build ./my-pack
- name: Sign Pack run: | echo "${{ secrets.SIGNING_KEY }}" > key.pem gtc pack sign my-feature-*.gtpack --key key.pem
- name: Publish run: | gtc pack login ghcr.io --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} gtc pack publish my-feature-*.gtpack --registry ghcr.io/${{ github.repository }}Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Pack-Format-Referenz - Vollständige Spezifikation
- Flow-Schema-Referenz - YAML-Schema
- Komponentenleitfaden - WASM-Komponenten bauen