Git Repos & Build Pipelines
GXP includes a self-hosted Git server (Gitea) with integrated CI/CD. When you create a plugin page, a Git repository is automatically created, giving you source control and automated builds out of the box.
SSH Key Setup
Before you can clone or push to your plugin repository, add your SSH public key to your GXP profile:
- Navigate to Profile → SSH Keys
- Click Add SSH Key
- Paste your public key (e.g., contents of
~/.ssh/id_ed25519.pub) - Save — the key is automatically synced to the Gitea server
Cloning Your Repository
Clone via SSH (recommended) or HTTPS:
# SSH (port 2222)
git clone ssh://git@git-ssh.eventfinity.app:2222/your-team/plugin-name.git
# HTTPS
git clone https://git.eventfinity.app/your-team/plugin-name.git
The SSH server runs on port 2222, not the standard port 22.
CI/CD Build Pipeline
Every push to the configured build branch (default: main) triggers an automated build.
Build Process
- Push detected — Gitea sends a webhook to the platform
- Build job queued — a background job clones the repository
- Dependencies installed — runs
npm install(oryarn/pnpmbased on lock file) - Build executed — runs the configured build command (default:
npm run build) - Artifacts uploaded — compiled output is packaged and stored
- Plugin version updated — artifacts are auto-uploaded to the latest unpublished draft version
Expected Build Output
The build expects these files in the output directory (default: dist/):
| File | Required | Purpose |
|---|---|---|
dist/plugin.es.js | Yes | Compiled JavaScript module |
dist/style.css | No | Compiled CSS styles |
Build Configuration
Configure per-repository settings in the plugin's Git Repository tab:
| Setting | Default | Description |
|---|---|---|
| Build Branch | main | Branch that triggers builds |
| Build Command | npm run build | Shell command to execute |
| Output Path | dist | Directory containing build artifacts |
| Node Version | 18 | Node.js version (16, 18, 20, 22) |
Supported Package Managers
The build system detects your package manager from the lock file:
| Lock File | Package Manager |
|---|---|
package-lock.json | npm |
yarn.lock | yarn |
pnpm-lock.yaml | pnpm |
Custom Build Configuration
By default, the platform copies its own vite.config.js during builds. To use your own build configuration, set use_custom_build in your app-manifest.json:
{
"manifest_version": 3,
"name": "My Plugin",
"version": "1.0.0",
"use_custom_build": true
}
When use_custom_build is true:
- The platform skips copying its Vite config
- Your plugin must have its own
vite.config.js - The build command (
npm run build) is still executed - Output must still produce
dist/plugin.es.js(and optionallydist/style.css)
Auto-Upload to Plugin Version
After a successful build, artifacts are automatically uploaded:
- The system finds the latest unpublished (draft) version for the plugin
- If no draft exists, a new draft version is created automatically
plugin.es.jsis uploaded as the version's JavaScript assetstyle.cssis uploaded as the version's style asset (if present)- A real-time event notifies the dashboard of the update
Build Logs
Build progress and logs are streamed in real-time via WebSocket. View them in the plugin's Git Repository tab under Build History.
Collaborators
Repository access is managed through the plugin's Git Repository tab:
- Project admins automatically get repository access
- Additional collaborators can be added with read, write, or admin permissions
- Access is synced between the GXP platform and Gitea
Next Steps
- DevKit Basics — Set up local development with the GxP DevKit
- Creating a Plugin — Plugin creation and version lifecycle
- GxP DevKit: Building for Platform — Prepare your plugin for production builds