Version Control
- github - Create GitHub releases
- gitlab - Create GitLab releases
Relicta’s plugin system lets you integrate with external services at any point in the release lifecycle. All official plugins are distributed separately and installed via the plugin registry.
# List all available pluginsrelicta plugin list --available
# Install a pluginrelicta plugin install github
# Enable itrelicta plugin enable github
# View detailsrelicta plugin info githubRelicta provides 30 official plugins across 6 categories:
Version Control
Notifications
Package Managers
Containers & Registries
Project Management
DevOps
Create GitHub releases and upload build artifacts automatically.
plugins: - name: github enabled: true config: draft: false prerelease: false generate_release_notes: false discussion_category: "" assets: - "dist/*.tar.gz" - "dist/*.zip" - "dist/checksums.txt"relicta plugin install githubrelicta plugin enable githubEnvironment: GITHUB_TOKEN (auto-set in GitHub Actions)
Hooks: PostPublish, OnSuccess, OnError
Create GitLab releases with links to build artifacts.
plugins: - name: gitlab enabled: true config: project_id: "12345" url: "https://gitlab.com"relicta plugin install gitlabrelicta plugin enable gitlabEnvironment: GITLAB_TOKEN, CI_PROJECT_ID (auto-set in GitLab CI)
Hooks: PostPublish
Send release notifications to Slack channels.
plugins: - name: slack enabled: true config: channel: "#releases" username: "Relicta Bot" notify_on_success: true notify_on_error: truerelicta plugin install slackrelicta plugin enable slackEnvironment: SLACK_WEBHOOK_URL
Hooks: PostPublish, OnError
Send release notifications to Discord channels.
plugins: - name: discord enabled: true config: username: "Relicta Bot" avatar_url: "https://example.com/avatar.png"relicta plugin install discordrelicta plugin enable discordEnvironment: DISCORD_WEBHOOK_URL
Hooks: PostPublish, OnError
Send release notifications to Microsoft Teams channels.
plugins: - name: teams enabled: true config: theme_color: "0076D7" notify_on_success: true notify_on_error: truerelicta plugin install teamsrelicta plugin enable teamsEnvironment: TEAMS_WEBHOOK_URL
Hooks: PostPublish
Send release notifications to Telegram channels or groups.
plugins: - name: telegram enabled: true config: chat_id: "-1001234567890" parse_mode: "Markdown" disable_notification: falserelicta plugin install telegramrelicta plugin enable telegramEnvironment: TELEGRAM_BOT_TOKEN
Hooks: PostPublish, OnError
Publish packages to npm registry.
plugins: - name: npm enabled: true config: registry: "https://registry.npmjs.org" access: "public" tag: "latest"relicta plugin install npmrelicta plugin enable npmEnvironment: NPM_TOKEN, NPM_OTP (optional for 2FA)
Hooks: PrePublish, PostPublish
Update Homebrew formula with new release.
plugins: - name: homebrew enabled: true config: tap: "your-org/homebrew-tap" formula: "your-app"relicta plugin install homebrewrelicta plugin enable homebrewEnvironment: HOMEBREW_GITHUB_TOKEN
Hooks: PostPublish
Publish Python packages to PyPI.
plugins: - name: pypi enabled: true config: repository: "https://upload.pypi.org/legacy/" dist_dir: "dist" skip_existing: falserelicta plugin install pypirelicta plugin enable pypiEnvironment: PYPI_USERNAME (use __token__), PYPI_PASSWORD
Hooks: PrePublish, PostPublish
Publish packages to Chocolatey (Windows).
plugins: - name: chocolatey enabled: true config: package_id: "your-package" source: "https://push.chocolatey.org/"relicta plugin install chocolateyrelicta plugin enable chocolateyEnvironment: CHOCOLATEY_API_KEY
Hooks: PrePublish, PostPublish
Build Linux packages (deb, rpm, apk).
plugins: - name: linuxpkg enabled: true config: formats: ["deb", "rpm", "apk"] description: "Package description" binaries: - "bin/myapp"relicta plugin install linuxpkgrelicta plugin enable linuxpkgHooks: PrePublish, PostPublish
Publish Rust crates to crates.io.
plugins: - name: crates enabled: true config: manifest_path: "Cargo.toml" allow_dirty: falserelicta plugin install cratesrelicta plugin enable cratesEnvironment: CARGO_REGISTRY_TOKEN
Hooks: PrePublish, PostPublish
Publish .NET packages to NuGet.
plugins: - name: nuget enabled: true config: source: "https://api.nuget.org/v3/index.json" skip_duplicate: falserelicta plugin install nugetrelicta plugin enable nugetEnvironment: NUGET_API_KEY
Hooks: PrePublish, PostPublish
Publish Java packages to Maven Central.
plugins: - name: maven enabled: true config: group_id: "com.example" artifact_id: "my-artifact" pom_path: "pom.xml"relicta plugin install mavenrelicta plugin enable mavenEnvironment: MAVEN_USERNAME, MAVEN_PASSWORD, GPG_KEY_ID (optional)
Hooks: PrePublish, PostPublish
Publish Ruby gems to RubyGems.org.
plugins: - name: rubygems enabled: true config: host: "https://rubygems.org"relicta plugin install rubygemsrelicta plugin enable rubygemsEnvironment: GEM_HOST_API_KEY
Hooks: PrePublish, PostPublish
Publish Elixir/Erlang packages to Hex.pm.
plugins: - name: hex enabled: true config: organization: "" replace: false mix_path: "mix.exs"relicta plugin install hexrelicta plugin enable hexEnvironment: HEX_API_KEY
Hooks: PrePublish, PostPublish
Publish PHP packages to Packagist.
plugins: - name: packagist enabled: true config: package_name: "vendor/package"relicta plugin install packagistrelicta plugin enable packagistEnvironment: PACKAGIST_API_TOKEN, PACKAGIST_USERNAME
Hooks: PostPublish
Publish Go modules and notify the module proxy.
plugins: - name: gomod enabled: true config: module_path: "github.com/user/repo" private: falserelicta plugin install gomodrelicta plugin enable gomodHooks: PrePublish, PostPublish
Publish packages to Windows Package Manager (winget).
plugins: - name: winget enabled: true config: package_id: "Publisher.AppName" manifest_path: "manifests/" installer_url: "https://github.com/org/repo/releases/download/{{version}}/app.exe"relicta plugin install wingetrelicta plugin enable wingetEnvironment: GITHUB_TOKEN (for PR creation)
Hooks: PostPublish
Publish Swift packages.
plugins: - name: swift-pm enabled: true config: package_path: "Package.swift"relicta plugin install swift-pmrelicta plugin enable swift-pmHooks: PrePublish, PostPublish
Publish Dart and Flutter packages to pub.dev.
plugins: - name: pub enabled: true config: dry_run: false force: falserelicta plugin install pubrelicta plugin enable pubEnvironment: PUB_CREDENTIALS (from dart pub login)
Hooks: PrePublish, PostPublish
Create and link Jira release versions. Automatically detects issue keys in commits.
plugins: - name: jira enabled: true config: url: "https://yourcompany.atlassian.net" project: "PROJ" create_version: true release_version: truerelicta plugin install jirarelicta plugin enable jiraEnvironment: JIRA_USERNAME, JIRA_TOKEN
Hooks: PostPublish
Create releases in LaunchNotes for customer-facing announcements.
plugins: - name: launchnotes enabled: true config: project_id: "proj_123" auto_publish: false categories: feat: "new-features" fix: "bug-fixes"relicta plugin install launchnotesrelicta plugin enable launchnotesEnvironment: LAUNCHNOTES_API_KEY
Hooks: PostPublish
Create and link Linear issues to releases. Automatically detects issue IDs in commits.
plugins: - name: linear enabled: true config: team_id: "TEAM-123" project_id: "PROJECT-456" create_release: truerelicta plugin install linearrelicta plugin enable linearEnvironment: LINEAR_API_KEY
Hooks: PostPublish
Build and push Docker images to container registries.
plugins: - name: docker enabled: true config: registry: "docker.io" image: "username/myapp" tags: - "{{version}}" - "{{major}}.{{minor}}" - "latest" platforms: - "linux/amd64" - "linux/arm64" dockerfile: "Dockerfile" context: "." push: truerelicta plugin install dockerrelicta plugin enable dockerEnvironment: DOCKER_USERNAME, DOCKER_PASSWORD
Hooks: PrePublish, PostPublish
Tag variables: {{version}}, {{major}}, {{minor}}, {{patch}}
Push container images to Amazon Elastic Container Registry.
plugins: - name: ecr enabled: true config: registry: "123456789.dkr.ecr.us-east-1.amazonaws.com" repository: "myapp" tags: - "{{version}}" - "latest"relicta plugin install ecrrelicta plugin enable ecrEnvironment: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION
Hooks: PrePublish, PostPublish
Push container images to Google Artifact Registry (GAR/GCR).
plugins: - name: gcr enabled: true config: project: "my-gcp-project" location: "us-central1" repository: "myapp" tags: - "{{version}}" - "latest"relicta plugin install gcrrelicta plugin enable gcrEnvironment: GOOGLE_APPLICATION_CREDENTIALS or GCLOUD_SERVICE_KEY
Hooks: PrePublish, PostPublish
Push container images to Azure Container Registry.
plugins: - name: acr enabled: true config: registry: "myregistry.azurecr.io" repository: "myapp" tags: - "{{version}}" - "latest"relicta plugin install acrrelicta plugin enable acrEnvironment: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID
Hooks: PrePublish, PostPublish
Package and publish Helm charts to OCI registries or chart repositories.
plugins: - name: helm enabled: true config: chart_path: "charts/myapp" registry: "oci://ghcr.io/myorg/charts" push: truerelicta plugin install helmrelicta plugin enable helmEnvironment: HELM_REGISTRY_USERNAME, HELM_REGISTRY_PASSWORD
Hooks: PrePublish, PostPublish
Track releases and deployments in Sentry for error monitoring.
plugins: - name: sentry enabled: true config: organization: "my-org" project: "my-project" environment: "production" set_commits: truerelicta plugin install sentryrelicta plugin enable sentryEnvironment: SENTRY_AUTH_TOKEN, SENTRY_ORG
Hooks: PostPublish
Plugins execute at specific hooks during the release process:
PreInit → PostInit → PrePlan → PostPlan → PreVersion → PostVersion → PreNotes → PostNotes → PreApprove → PostApprove → PrePublish → PostPublish → OnSuccess → OnErrorMost plugins run at PostPublish after the release is tagged. Some run at PrePublish for validation or preparation.
Build your own plugins using the Plugin SDK.
# Create a new pluginrelicta plugin create my-plugincd my-plugin
# Build and testgo build -o my-pluginrelicta plugin test my-pluginpackage main
import ( "context" "github.com/relicta-tech/relicta-plugin-sdk/helpers" "github.com/relicta-tech/relicta-plugin-sdk/plugin")
type MyPlugin struct{}
func (p *MyPlugin) GetInfo() plugin.Info { return plugin.Info{ Name: "my-plugin", Version: "1.0.0", Description: "My custom plugin", Author: "Your Name", Hooks: []plugin.Hook{plugin.HookPostPublish}, }}
func (p *MyPlugin) Execute(ctx context.Context, req plugin.ExecuteRequest) (*plugin.ExecuteResponse, error) { parser := helpers.NewConfigParser(req.Config) // ... plugin logic return &plugin.ExecuteResponse{Success: true}, nil}
func (p *MyPlugin) Validate(ctx context.Context, config map[string]any) (*plugin.ValidateResponse, error) { return &plugin.ValidateResponse{Valid: true}, nil}
func main() { plugin.Serve(&MyPlugin{})}Test with dry run first
relicta publish --dry-runValidate configuration
relicta validateEnable error notifications
plugins: - name: slack config: notify_on_error: trueEnable plugins incrementally - Add one plugin at a time to identify issues.
Pin plugin versions for reproducible releases: