Fluid execution agent for GitLab: maintains a persistent WSS connection to the control plane (/v1/agents/websocket) for skills, logs, and runtime_config sync. GitLab REST API skills and gitlab.repo.checkout_mr (local git) run in this agent — not on the Linux interface agent.
| Path | Role |
|---|---|
core/ |
Git submodule → fluid-pub/agent-core |
cmd/ |
Entrypoint and cmd/version.go (semver for releases) |
internal/ |
GitLab API client, agent skills, config |
config/agent.example.yml |
Configuration template |
.github/workflows/ |
CI and release via fluid-pub/actions |
One-time per clone, enable the same gofmt check as CI:
./scripts/install-git-hooks.shgit submodule update --init --recursive
cp config/agent.example.yml config/agent.yml
cp env.secrets.example env.secrets
# Set GITLAB_* and FLUID_CONTROLPLANE_* in env.secrets (never commit that file).
source env.secrets
make devmake dev runs go run ./cmd with -config config/agent.yml.
Monorepo Fluid (code/agents/gitlab/): use make monorepo-replace so go.mod points at ../core instead of the core/ submodule. Do not commit that replace on develop (CI and releases use replace => ./core).
cd code/agents/gitlab
git remote add origin git@github.com:fluid-pub/agent-gitlab.git # if needed
git fetch origin
git checkout -B develop origin/develop
git submodule update --init --recursive
./scripts/install-git-hooks.sh
make monorepo-replace # optional when using code/agents/core in the monorepoKeep env.secrets and config/agent.yml local (gitignored).
| Phase | Transport | Purpose |
|---|---|---|
| Steady state | WSS (controlplane.websocket_url) |
skill_invoke / skill_result, log events, runtime_config push |
| First boot only (optional) | HTTP POST /api/v1/enrollment/enroll |
Exchange FLUID_ENROLLMENT_TOKEN for organization_uuid + connection token |
Durable credentials: /etc/fluid/gitlab/credentials.yaml (-credentials flag). Enroll with agent_type: gitlab, principal: execution_agent.
local(default): GitLab token from config / env /FLUID_SERVICE_CREDENTIALS_ENV_FILE.control_plane: after WSS connect, prefetch GitLab token from the control plane (requiresuse_case_run_idin enrollment extra args orFLUID_USE_CASE_RUN_ID).
The published image includes git (and runs as root) so gitlab.repo.checkout_mr can clone under /tmp/fluid/ workspaces. API-only deployments may still use the same image.
Push a semver tag without v (e.g. 0.1.0) matching var Version in cmd/version.go. The release workflow publishes:
ghcr.io/fluid-pub/agent-gitlab:<tag>- GitHub Release asset
fluid-agent-gitlab-linux-amd64andSHA256SUMS.txt
Release builds pin agent-core to the same semver tag when core_ref is empty in the workflow (see .github/workflows/release-on-semver-tag.yml).
Release notes: CHANGELOG.md.
See SECURITY.md for vulnerability reporting. Repository automation includes Dependabot and CodeQL.