GitLab
GitLab connects with a group path and a group access token you create, rather than an OAuth redirect. Governax then polls the group's audit events every ten minutes. It is entirely self-service, but it has a plan requirement that is worth checking before you start.
Before you start#
Why the plan matters#
The only GitLab feed that reports who joined, who left and whose role changed is the group audit events API, and it is a Premium and Ultimate feature. On GitLab Free it is not reachable at all, and no other feed, webhooks included, carries membership or permission changes. A Free group is therefore refused at connect time rather than left half-working.
Creating the group access token#
Open the group, then Settings, then Access tokens
Choose Add new token.
Set the role to Owner
This is a correctness requirement, not a convenience. A token with a lower role is not refused by GitLab's audit endpoint; it receives a normal response narrowed to that principal's own actions. Governax cannot tell that apart from a complete feed, so it checks the role directly and refuses anything below Owner rather than connect over a ledger that looks complete but is not.
Tick the read_api scope only
read_apiRead access to everything Governax needs, and nothing to write with. Do not grant
api, which includes write access Governax never uses.Choose an expiry and note it down
GitLab allows up to 365 days and does not support tokens that never expire. When the token lapses, ingestion for this group stops until you reconnect with a fresh one, so put the date somewhere you will see it.
Create it and copy the value
GitLab shows the token only once.
Connecting#
Open the entity, then Integrations, then GitLab, and fill in two fields:
Governax then runs three checks, in this order, and nothing is written until all three pass:
On success the token is encrypted at rest, the connection shows the group's full path, and polling begins. A GitLab group can be connected to one entity at a time; see Connecting a tool for the rules.
The baseline snapshot#
At connect time Governax reads the group's current member list, inherited members included, and records each one as an access.baseline_observed event carrying their access level by name (Guest, Reporter, Developer, Maintainer, Owner and so on) and their membership expiry, if any. This is what lets a later removal be a change from something.
How polling works#
Nothing is ever written to GitLab. Governax only reads.
Events captured#
Events carry the GitLab scope they belong to, so a project-level change inside the group is distinguishable from a group-level one, and the payload keeps GitLab's own event name alongside the ledger's.
What is deliberately dropped#
Disconnecting#
Reconnecting later keeps the previous poll position, so a reconnect with a fresh token does not re-import everything. That is also the path when a token expires: reconnect the same group with a new token.
Troubleshooting#
General connector behaviour is covered in Connecting a tool.