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.
Überblick über den Workflow
Abschnitt betitelt „Überblick über den Workflow“Die Pipeline läuft bei jedem Git-Tag, das auf v* passt, also etwa v1.2.0:
- Schemata von
agent.yamlundmanifest.yamlvalidieren - Alle Docker-Images der Capabilities bauen
- Snapshot-Tests ausführen
- Images in die Selu-Registry pushen
- Den Agenten für das Marketplace-Review einreichen
GitHub-Actions-Workflow
Abschnitt betitelt „GitHub-Actions-Workflow“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 .Secrets
Abschnitt betitelt „Secrets“Du brauchst ein Secret in deinem GitHub-Repository:
| Secret | Beschreibung |
|---|---|
SELU_PUBLISH_TOKEN | API-Token aus deinem Selu-Marketplace-Konto. Erzeuge es unter https://marketplace.selu.bot/settings/tokens. |
Docker-Image-Tags
Abschnitt betitelt „Docker-Image-Tags“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.0Die version kommt aus deiner agent.yaml. Achte darauf, dass die Version in agent.yaml zum Git-Tag passt, abgesehen vom führenden v.
Versionsabgleich
Abschnitt betitelt „Versionsabgleich“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 fiBuilds mit mehreren Capabilities
Abschnitt betitelt „Builds mit mehreren Capabilities“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:
selu build . --capability weather # build only the weather capabilityBranch Protection
Abschnitt betitelt „Branch Protection“Für produktive Agenten empfehlen wir:
- Pull-Request-Reviews vor dem Mergen nach
mainverlangen - Release-Tags nur aus
mainerstellen - Tag-Schutzregeln in GitHub verwenden, um versehentliche Tag-Pushes zu verhindern
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Versionierung: Regeln für SemVer und Upgrade-Richtlinien
- Marketplace-Richtlinien: Was im Review geprüft wird