Static Project URL

Release notes

Problem to solve

At large organizations, the GitLab group structure is often times defined by the organizations team structure. For example, there are many business units (BUs), which contain sub-business units (SBUs), which contain families. Families contain repositories.

In GitLab, the group structure would look like BU -> SBUs -> Families -> Repos

This structure gives organizations:

  1. Ability to map entitlements from auditor-approved entitlements system to the corresponding GitLab group hierarchy, which allows inheritance of entitlements to projects.
  2. Ability to use inheritance for other constructs such as project delete settings, CI/CD environment variables, etc etc
  3. Clean, clear organization of projects in a way developers and managers understand.

However, groups and projects can be moved around for many reasons, including but not limited to reorganizations, strategy changes, project ownership changes, etc. As the project URLs are currently inextricably tied to the group structure, the URL of the project changes when groups or projects are moved. This causes problems in all cases where project URLs may be embedded in any source code.

Project URLs are embedded in source code for many reasons, some of which are:

  1. Base image in build configs
  2. kubernetes configs
  3. Go projects regularly reference other project URLs
  4. Developer decides to rename the project, and updates the path because the project branding has changed

While it is possible to navigate from the project id to the project URL using the projects API, it is infeasible for a customer to make custom changes to every consumer of these URLs, eg, git clients, kubernetes, container registry, etc.

Proposal

A super useful feature would be the ability to have a single static URL for each project, ideally just mapped to the project id (which is unique across the instance). This static URL must always point directly to the current location of the project, without any redirects in the middle. This static URL should, then, be the only URL that is referenced in any source code, as it will never change even when projects are moved.

For example,

  1. At time T0, Project P, which has a GitLab project id of 10, is at the following URL: https://gitlab.com/BU1/SBU1/Fam1/P.git Static URL https://gitlab.com/project/10.git -> https://gitlab.com/BU1/SBU1/Fam1/P.git
  2. At time T1, a new family Fam2 is formed under SBU1, and project P is moved under Fam2: https://gitlab.com/BU1/SBU2/**Fam2**/P.git Static URL https://gitlab.com/project/10.git -> https://gitlab.com/BU1/SBU1/Fam2/P.git
  3. This ought to work for both git over http, web access, browser access.

Intended users

Who will use this feature? If known, include any of the following: types of users (e.g. Developer), personas, or specific company roles (e.g. Release Manager). It's okay to write "Unknown" and fill this field in later.

Personas are described at https://about.gitlab.com/handbook/marketing/product-marketing/roles-personas/

User experience goal

Have a single static project URL that can be referenced by developers, and does not change even when groupe structure changes.

Further details

The customer is currently attempting to solve this by standing up a proxy between their engineers and maintaining their own mapping, which adds an extra hop, impacts SLOs, adds complexity. This is not the ideal state.

Permissions and Security

This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.

Edited by 🤖 GitLab Bot 🤖