Membangun Pack
Gambaran Umum
Section titled “Gambaran Umum”Pack adalah unit distribusi di Greentic. Panduan ini membahas pembuatan, pembangunan, penandatanganan, dan publikasi pack menggunakan alat CLI.
Perintah CLI Pack
Section titled “Perintah CLI Pack”gtc pack
Section titled “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 registryMembuat Pack
Section titled “Membuat Pack”-
Buat struktur direktori pack
Terminal window mkdir -p my-pack/{flows,components,assets} -
Buat manifest 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/" -
Tambahkan flow
my-pack/flows/main.ygtc name: mainversion: "1.0"description: Main flownodes:- id: processtype: replyconfig:message: "Hello from my pack!"triggers:- type: messagetarget: process -
Tambahkan komponen (jika ada)
Build komponen WASM dan letakkan di
components/:Terminal window cd my-componentcargo build --target wasm32-wasip2 --releasecp target/wasm32-wasip2/release/my_component.wasm ../my-pack/components/
Membangun Pack
Section titled “Membangun Pack”Build Dasar
Section titled “Build Dasar”gtc pack build ./my-pack
# Output: my-feature-1.0.0.gtpackBuild dengan Opsi
Section titled “Build dengan Opsi”# 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 --debugHasil Build
Section titled “Hasil Build”Directorymy-feature-1.0.0.gtpack
- manifest.cbor
Directoryflows/
- main.ygtc
Directorycomponents/
- processor.wasm
Directoryassets/
Directorytemplates/
- …
- sbom.json
Menandatangani Pack
Section titled “Menandatangani Pack”Membuat Signing Key
Section titled “Membuat Signing Key”# 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)Menandatangani Pack
Section titled “Menandatangani 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)Memverifikasi Tanda Tangan
Section titled “Memverifikasi Tanda Tangan”gtc pack verify my-feature-1.0.0.gtpack --pubkey my-signing-key.pub
# Output: Signature validInspeksi Pack
Section titled “Inspeksi Pack”Lihat Metadata
Section titled “Lihat Metadata”gtc pack info my-feature-1.0.0.gtpackOutput:
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...)Daftar Isi
Section titled “Daftar Isi”gtc pack info my-feature-1.0.0.gtpack --list
# Lists all files in the packEkstrak Pack
Section titled “Ekstrak Pack”gtc pack extract my-feature-1.0.0.gtpack --output ./extracted/
# Extracts pack contents for inspectionValidasi Flow
Section titled “Validasi Flow”Validasi Flow
Section titled “Validasi Flow”# Validate all flows in a directorygtc flow doctor ./my-pack/flows/
# Validate specific flowgtc flow validate ./my-pack/flows/main.ygtcOutput Doctor
Section titled “Output Doctor”gtc flow doctor ./flows/# Output:# Checking flows/main.ygtc... OK# Checking flows/helper.ygtc... OK## 2 flows checked, 0 errors, 0 warningsKesalahan Validasi yang Umum
Section titled “Kesalahan Validasi yang Umum”| Error | Penyebab | Perbaikan |
|---|---|---|
Unknown node type | Tipe node tidak valid | Periksa tipe node yang tersedia |
Missing target node | Edge mengarah ke node yang tidak ada | Perbaiki referensi ID node |
Circular dependency | Node membentuk siklus | Putuskan siklusnya |
No trigger defined | Flow tidak memiliki entry point | Tambahkan trigger |
Mempublikasikan Pack
Section titled “Mempublikasikan Pack”Publikasikan ke OCI Registry
Section titled “Publikasikan ke OCI Registry”# Login to registrygtc pack login ghcr.io --username USER --password TOKEN
# Publish packgtc pack publish my-feature-1.0.0.gtpack --registry ghcr.io/greenticPull dari Registry
Section titled “Pull dari Registry”gtc pack pull ghcr.io/greentic/my-feature:1.0.0Gunakan di Bundle
Section titled “Gunakan di Bundle”apps: my-app: pack: "oci://ghcr.io/greentic/my-feature:1.0.0"Template Pack
Section titled “Template Pack”Template Provider Pack
Section titled “Template 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"]Template Application Pack
Section titled “Template 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/"Praktik Terbaik
Section titled “Praktik Terbaik”- Gunakan versioning semantik - Gunakan semver (MAJOR.MINOR.PATCH)
- Tandatangani semua rilis - Jangan pernah mendistribusikan pack tanpa tanda tangan
- Sertakan SBOM - Dokumentasikan dependensi untuk audit keamanan
- Uji sebelum publikasi - Validasi flow dan uji komponen
- Dokumentasikan secara menyeluruh - Sertakan README di pack
- Jaga pack tetap fokus - Satu fitur atau provider per pack
- Gunakan CI/CD - Otomatiskan build dan publikasi
Contoh CI/CD
Section titled “Contoh 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 }}Langkah Berikutnya
Section titled “Langkah Berikutnya”- Referensi Format Pack - Spesifikasi lengkap
- Referensi Skema Flow - Skema YAML
- Panduan Components - Membangun komponen WASM