DR-011 — GitLab compute minutes and the online mode¶
Converted from
docs/decisions/DR-011-gitlab-compute-minutes-and-online-mode.mdto MADR (backlog B25). The text is unchanged; its sections are grouped under the MADR headings below, in their original order within each group.
Context¶
2. Current layout (read 18 Oct)¶
| Top-level group | Members (role) | Projects | Minutes |
|---|---|---|---|
moneymarche |
Ajay @devops_moneymarche (Owner), Atul @atul.areva (Developer), @moneymarche1 (Maintainer) | api, mm-crons, webapp-sakai, wordpress_plugins (+1) | 400; usage page visible to Ajay only |
money-marche |
Atul (Owner), @moneymarche1 (Maintainer) | money-marche-website (WPDev) | 400; Atul can see usage |
money-marche-testing |
Atul (Owner), Rekha @rekha.areva (Owner), @moneymarche1 (project Maintainer) | money-marche-sandbox (MMCLONE) | 400 |
money-marche-group |
@moneymarche1 (Owner), Atul (Maintainer), Ajay (Developer) | governance repo, website-staging | 400; October: 0 used; one earlier month hit 400 |
So we already have 1,600 free hosted minutes a month across four groups, without changing anything. The imbalance: moneymarche holds the four busiest repositories (API and MM-Cron test suites) in one 400-minute pool.
4. Online mode when the laptop is down¶
| Who | What it can do while the laptop is down |
|---|---|
| MMDEP check-in (Claude, scheduled 08:50 and 19:50) | Read GitHub/GitLab state, review harness branches, write the answers relay, update the MMDEP Actions panel (sort, close, reply), message Atul. It is bound to the laptop today, which may stop it running when the laptop is off: proposal CHK-2 makes it cloud-only (PE cache jobs then wait for the laptop, which they must anyway). |
| MMDEP Assistant (ChatGPT, attended PROCEED) | Digest; relay rows; proposed panel changes written to a file for the check-in to apply (ChatGPT can't write the Claude panel); in GitLab, start hosted-fallback pipelines for critical items within each group's budget, if its GitLab tool allows starting pipelines, otherwise list exactly which to run |
| GitHub projects (PE, MCRM, MMDEP) | GitHub Actions hosted minutes (2,000 a month on Free) for the same critical-only fallback |
Options¶
Not stated separately in the original record.
Decision¶
1. What GitLab's rules actually say¶
| Rule | Effect for us |
|---|---|
| Free namespaces get 400 compute minutes a month per top-level namespace (each top-level group, and each personal namespace); usage is counted against the job's top-level group, not the user who started it | Roles don't matter for minutes. Changing who is Owner/Maintainer/Developer gives no extra minutes and causes no clash |
| Linux small hosted runner: cost factor 1 (1 job-minute = 1 compute minute); larger machines cost up to 12× | Keep hosted jobs on the default small runner |
| Quota covers GitLab's instance (hosted) runners; our own laptop runner (group/project runner) is the recommended way to save minutes | Laptop runner stays primary; hosted minutes are the fallback when the laptop is down |
| Usage resets on the 1st of each month | Sprint 2 starts 1 Nov with a fresh 400 per group |
| Free private top-level groups: max 5 unique users each (over 5 = read-only) | All our groups have 2–3 users: fine |
| Accounts created after 27 Jan 2026: max 3 top-level groups | Our 4 groups predate this; creating more isn't possible on Free from a new account |
| Acceptable Use Policy: no clause about splitting groups; it forbids usage that "significantly exceeds that of other users" or overburdens the service | Organising repos by product is fine; creating groups only to multiply free minutes is a grey area we should avoid |
3. Proposal for sprint 2¶
- No role changes for minutes. Optional for safety: make Atul an Owner of every group (business continuity), keep @moneymarche1 as the automation account (Maintainer), Ajay Owner of
moneymarcheas today. - Group by product, which also spreads the load: move
webapp-sakai(and optionallywordpress_plugins) frommoneymarchetomoney-marche(the websites group).moneymarchethen holds the data platform (API, MM-Cron). A transfer keeps history and redirects old URLs; it needs Owner rights in both groups (Ajay for the source, Atul for the target). CI variables and runner registrations must be re-checked after a move. - Budget per group (each month): about 300 minutes for critical jobs (security fixes, release candidates, main-branch tests when the laptop is down) and 100 in reserve. Routine CI stays on the laptop runner.
- CI configuration (sprint 2 story, per project): default jobs keep the
laptoptag; add ahosted-fallbackvariant of the critical test job that runs on GitLab's small runner only when started withRUNNER=hosted(manual or API-triggered). Instance runners must be enabled on those projects (WPDev's were switched off on 15 Oct). - Record minutes: the collector already reads pipelines; add per-group monthly usage to the capacity register so the assistant and check-ins see what's left.
5. Decisions for Atul¶
- GLB-1: Move
webapp-sakai(and optionallywordpress_plugins) tomoney-marchebefore 1 Nov; no role changes needed for minutes? - CHK-2: Recreate the Claude check-in as cloud-only so it runs while the laptop is off?
- FBK-1: Sprint 2 story: hosted-fallback CI job for critical tests in API, MM-Cron, website, sandbox, with per-group budgets (300 critical + 100 reserve)?
Consequences¶
Not stated separately in the original record.