Construcción de Packs
Resumen
Sección titulada «Resumen»Los packs son la unidad de distribución en Greentic. Esta guía cubre la creación, construcción, firmado y publicación de packs usando las herramientas CLI.
Comandos CLI de Pack
Sección titulada «Comandos CLI de Pack»gtc pack
Sección titulada «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 registryCrear un Pack
Sección titulada «Crear un Pack»-
Crear la estructura de directorios del pack
Ventana de terminal mkdir -p my-pack/{flows,components,assets} -
Crear el manifiesto del pack
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/" -
Agregar flows
my-pack/flows/main.ygtc name: mainversion: "1.0"description: Main flownodes:- id: processtype: replyconfig:message: "Hello from my pack!"triggers:- type: messagetarget: process -
Agregar components (si aplica)
Construye los components WASM y colócalos en
components/:Ventana de terminal cd my-componentcargo build --target wasm32-wasip2 --releasecp target/wasm32-wasip2/release/my_component.wasm ../my-pack/components/
Construir Packs
Sección titulada «Construir Packs»Build básico
Sección titulada «Build básico»gtc pack build ./my-pack
# Output: my-feature-1.0.0.gtpackBuild con opciones
Sección titulada «Build con opciones»# 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 --debugSalida del build
Sección titulada «Salida del build»Directoriomy-feature-1.0.0.gtpack
- manifest.cbor
Directorioflows/
- main.ygtc
Directoriocomponents/
- processor.wasm
Directorioassets/
Directoriotemplates/
- …
- sbom.json
Firmar Packs
Sección titulada «Firmar Packs»Generar clave de firma
Sección titulada «Generar clave de firma»# 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)Firmar un Pack
Sección titulada «Firmar un Pack»gtc pack sign my-feature-1.0.0.gtpack --key my-signing-key.pem
# Output: my-feature-1.0.0.gtpack (updated with signature)Verificar firma
Sección titulada «Verificar firma»gtc pack verify my-feature-1.0.0.gtpack --pubkey my-signing-key.pub
# Output: Signature validInspección de Packs
Sección titulada «Inspección de Packs»Ver metadatos
Sección titulada «Ver metadatos»gtc pack info my-feature-1.0.0.gtpackSalida:
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...)Listar contenido
Sección titulada «Listar contenido»gtc pack info my-feature-1.0.0.gtpack --list
# Lists all files in the packExtraer Pack
Sección titulada «Extraer Pack»gtc pack extract my-feature-1.0.0.gtpack --output ./extracted/
# Extracts pack contents for inspectionValidación de Flows
Sección titulada «Validación de Flows»Validar flows
Sección titulada «Validar flows»# Validate all flows in a directorygtc flow doctor ./my-pack/flows/
# Validate specific flowgtc flow validate ./my-pack/flows/main.ygtcSalida de doctor
Sección titulada «Salida de doctor»gtc flow doctor ./flows/
# Output:# Checking flows/main.ygtc... OK# Checking flows/helper.ygtc... OK## 2 flows checked, 0 errors, 0 warningsErrores comunes de validación
Sección titulada «Errores comunes de validación»| Error | Causa | Solución |
|---|---|---|
Unknown node type | Tipo de nodo no válido | Verifica los tipos de nodo disponibles |
Missing target node | Una arista apunta a un nodo inexistente | Corrige la referencia del ID del nodo |
Circular dependency | Los nodos forman un ciclo | Rompe el ciclo |
No trigger defined | El flow no tiene punto de entrada | Agrega un trigger |
Publicar Packs
Sección titulada «Publicar Packs»Publicar en un registro OCI
Sección titulada «Publicar en un registro OCI»# Login to registrygtc pack login ghcr.io --username USER --password TOKEN
# Publish packgtc pack publish my-feature-1.0.0.gtpack --registry ghcr.io/greenticDescargar desde el registro
Sección titulada «Descargar desde el registro»gtc pack pull ghcr.io/greentic/my-feature:1.0.0Usar en un Bundle
Sección titulada «Usar en un Bundle»apps: my-app: pack: "oci://ghcr.io/greentic/my-feature:1.0.0"Plantillas de Pack
Sección titulada «Plantillas de Pack»Plantilla de Pack de Provider
Sección titulada «Plantilla de Pack de Provider»[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"]Plantilla de Pack de Aplicación
Sección titulada «Plantilla de Pack de Aplicación»[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/"Buenas prácticas
Sección titulada «Buenas prácticas»- Versiona semánticamente - Usa semver (MAJOR.MINOR.PATCH)
- Firma todas las releases - Nunca distribuyas packs sin firmar
- Incluye SBOM - Documenta dependencias para auditorías de seguridad
- Prueba antes de publicar - Valida flows y prueba components
- Documenta a fondo - Incluye un README en el pack
- Mantén los packs enfocados - Una funcionalidad o provider por pack
- Usa CI/CD - Automatiza build y publicación
Ejemplo de CI/CD
Sección titulada «Ejemplo de CI/CD»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 }}Siguientes pasos
Sección titulada «Siguientes pasos»- Referencia del formato de Pack - Especificación completa
- Referencia del esquema de Flow - Esquema YAML
- Guía de Components - Construcción de components WASM