Implements empty state for remote repositories

What does this MR do and why?

A remote repository has no publish action. It fills only after its first pull from its upstream. The shared illustrated empty state offers publish steps, so it no longer fits a remote repository with no cached artifacts.

This MR keeps the artifact table visible for an empty remote repository, instead of switching to the illustrated empty state. The table shows its column headers and a single centered message row: "No packages have been cached yet." for Maven and npm repositories, or "No images have been cached yet." for Docker and OCI repositories. A hosted repository's empty state does not change.

The sidebar artifact counter on a remote repository now reads "Packages cached" / "Images cached" (and the singular form, "Package cached" / "Image cached"), instead of "Packages" / "Images". This counter reflects copies pulled from the upstream, not artifacts the repository owns, so the wording needed to match.

The trigger for the new empty state is the artifact connection's first page, not the buffered artifactsCount field on the repository row. The sidebar stats block already hides itself on an empty list through the existing hideStats prop, so that block needed no change.

This MR implements Step 9 of the linked issue only. Step 4, which moves the setup instructions entry point out of the kebab menu into a header button, follows in a separate MR.

The entire change sits behind the default-off artifact_registry_ui feature flag.

References

Screenshots or screen recordings

Before After (remote repositories)
Same as hosted Screenshot_2026-09-02_at_9.51.17_pm
Screenshot_2026-09-02_at_9.56.06_pm
Screenshot_2026-09-02_at_9.56.49_pm

Screenshots are pending. The change sits behind the default-off artifact_registry_ui feature flag.

How to set up and validate locally

  1. Enable the artifact_registry_ui feature flag.
  2. Open the Artifact Registry repository list for an organization.
  3. Open a remote repository that has cached no artifacts.
  4. Confirm the artifact table shows its column headers and the "No packages have been cached yet." or "No images have been cached yet." message row, instead of the illustrated empty state.
  5. Confirm the sidebar counter reads "Packages cached" or "Images cached" (or the singular form when the count is 1).
  6. Open a hosted repository with no artifacts and confirm its empty state is unchanged.

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.

Notes on the checklist:

  • No changelog entry: the feature flag artifact_registry_ui stays default off.
  • Jest specs added for artifacts_section, artifacts_table, and repository_sidebar, plus a new mockEmptyPackagePage fixture.
  • No documentation change: the Artifact Registry UI is not yet documented.
  • No database, security, or migration surface: this is a frontend-only Vue change.
  • Strings use s__ and n__ for externalization; locale/gitlab.pot is regenerated with the three new strings.
Edited by Rahul Chanila

Merge request reports

Loading
Loading