Zum Inhalt springen

Release Pipeline

Du kannst Agenten manuell mit selu publish veröffentlichen. Für echte Projekte solltest du den Prozess aber mit CI/CD automatisieren. Diese Anleitung zeigt einen GitHub-Actions-Workflow, der bei jedem getaggten Release validiert, testet, baut und veröffentlicht.

Die Pipeline läuft bei jedem Git-Tag, das auf v* passt, also etwa v1.2.0:

  1. Schemata von agent.yaml und manifest.yaml validieren
  2. Alle Docker-Images der Capabilities bauen
  3. Snapshot-Tests ausführen
  4. Images in die Selu-Registry pushen
  5. Den Agenten für das Marketplace-Review einreichen
.github/workflows/release.yml
name: Release Agent
on:
push:
tags:
- 'v*'
env:
SELU_TOKEN: ${{ secrets.SELU_PUBLISH_TOKEN }}
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Selu CLI
run: |
curl -fsSL https://selu.bot/cli | sh
selu --version
- name: Validate
run: selu validate .
- name: Build capabilities
run: selu build .
- name: Run snapshot tests
run: selu test snapshot run .
- name: Publish
run: selu publish .

Du brauchst ein Secret in deinem GitHub-Repository:

SecretBeschreibung
SELU_PUBLISH_TOKENAPI-Token aus deinem Selu-Marketplace-Konto. Erzeuge es unter https://marketplace.selu.bot/settings/tokens.

Wenn selu build deine Capability-Images baut, vergibt es Tags in diesem Format:

registry.selu.bot/<author>/<agent-name>/<capability-name>:<version>

Zum Beispiel:

registry.selu.bot/your-username/weather-agent/weather:1.2.0

Die version kommt aus deiner agent.yaml. Achte darauf, dass die Version in agent.yaml zum Git-Tag passt, abgesehen vom führenden v.

Ein gängiges Muster ist, die Version aus dem Git-Tag zu extrahieren und zu prüfen, ob sie mit agent.yaml übereinstimmt:

- name: Check version match
run: |
TAG_VERSION="${GITHUB_REF#refs/tags/v}"
YAML_VERSION=$(selu info . --field version)
if [ "$TAG_VERSION" != "$YAML_VERSION" ]; then
echo "Tag v$TAG_VERSION doesn't match agent.yaml version $YAML_VERSION"
exit 1
fi

Wenn dein Agent mehrere Capabilities hat, baut selu build sie standardmäßig parallel. Jede Capability bekommt ihr eigenes Docker-Image. Selektiv bauen kannst du so:

Terminal-Fenster
selu build . --capability weather # build only the weather capability

Für produktive Agenten empfehlen wir:

  • Pull-Request-Reviews vor dem Mergen nach main verlangen
  • Release-Tags nur aus main erstellen
  • Tag-Schutzregeln in GitHub verwenden, um versehentliche Tag-Pushes zu verhindern