Skip to main content
Version: v1 (Current)

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:

  1. Navigate to Profile → SSH Keys
  2. Click Add SSH Key
  3. Paste your public key (e.g., contents of ~/.ssh/id_ed25519.pub)
  4. 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
note

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

  1. Push detected — Gitea sends a webhook to the platform
  2. Build job queued — a background job clones the repository
  3. Dependencies installed — runs npm install (or yarn/pnpm based on lock file)
  4. Build executed — runs the configured build command (default: npm run build)
  5. Artifacts uploaded — compiled output is packaged and stored
  6. 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/):

FileRequiredPurpose
dist/plugin.es.jsYesCompiled JavaScript module
dist/style.cssNoCompiled CSS styles

Build Configuration

Configure per-repository settings in the plugin's Git Repository tab:

SettingDefaultDescription
Build BranchmainBranch that triggers builds
Build Commandnpm run buildShell command to execute
Output PathdistDirectory containing build artifacts
Node Version18Node.js version (16, 18, 20, 22)

Supported Package Managers

The build system detects your package manager from the lock file:

Lock FilePackage Manager
package-lock.jsonnpm
yarn.lockyarn
pnpm-lock.yamlpnpm

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 optionally dist/style.css)

Auto-Upload to Plugin Version

After a successful build, artifacts are automatically uploaded:

  1. The system finds the latest unpublished (draft) version for the plugin
  2. If no draft exists, a new draft version is created automatically
  3. plugin.es.js is uploaded as the version's JavaScript asset
  4. style.css is uploaded as the version's style asset (if present)
  5. 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