Draft: POC: Public CI Catalog server

What does this MR do and why?

This is a Proof of Concept (PoC) for enabling CI Catalog components to be used across different Cells.

Problem

In a multi-Cell GitLab deployment, components published in one Cell cannot currently be used by projects in other Cells. This blocks the Cells architecture from supporting cross-Cell CI component sharing.

Solution

This PoC introduces the concept of a "Public CI Catalog Server" where:

  1. New public API endpoint (GET /projects/:id/components/:path) - Exposes component content for public catalog resources without authentication
  2. ExternalPath class - Handles component addresses pointing to external servers (other Cells)
  3. Cell detection - InstancePath.match? now checks if the component's project is on the same Cell before treating it as local
sequenceDiagram
    participant P as Project CI (Cell 2)
    participant F as FetchService (Cell 2)
    participant E as ExternalPath (Cell 2)
    participant HR as HTTP Router
    participant API as Components API (Cell 1)
    participant C as CI Catalog (Cell 1)

    P->>F: include: component: cell1/org/project/comp@1.0
    F->>F: InstancePath.match?() → false (different cell)
    F->>F: ExternalPath.match?() → true (allowed host)
    F->>E: fetch_content!
    E->>HR: GET gitlab.com/projects/:id/components/:path?version=1.0
    HR->>API: Route to Cell 1
    API->>C: InstancePath.fetch_content!
    C-->>API: ComponentData {content, path, version, sha}
    API-->>HR: JSON response
    HR-->>E: Proxy response
    E-->>F: ComponentData
    F-->>P: Component content for pipeline

References

How to use components from different Cells (#456843 - closed)

How to set up and validate locally

  1. Set up Cells
    • gdk config set cells.enabled true and gdk config set cells.instance_count 1
    • gdk reconfigure
    • gdk cells up
  2. Run gdk cells start
  3. New cell installation failed in my case. I entered /Users/USER/gdk/gitlab-cells/cell-2 and ran gdk update. Then, ran gdk cells start again.
  • Now, in http://gdk.test:3333/, I have my main cell.
  • In http://gdk.test:12002/, I have another cell. I entered the URL and signed up as a new user. It will require an admin approval so you need to sign in as admin too.
  • WARNING: Use different browser user or incognito mode for different cells. If there is any confusion about the Cells on your browser tabs, then remove the session cookie.

Current setup:

Screenshot_2026-01-12_at_14.30.58

Screenshot_2026-01-12_at_14.31.18

  1. Have a published component in your main cell.

Screenshot_2026-01-12_at_14.32.22

  1. Use this component in the new Cell's project 🎉

Screenshot_2026-01-12_at_14.55.12

Screenshot_2026-01-12_at_14.55.33

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Furkan Ayhan

Merge request reports

Loading