Draft: Draft: Add read GraphQL surface for Artifact Registry
What does this MR do and why?
This adds the read half of the GraphQL surface for GitLab Artifact Registry: a new GraphQL type and a field on the organization type that lets clients read an organization's Artifact Registry state.
- Adds
Types::ArtifactRegistry::RegistryType(graphql_nameArtifactRegistry) exposing exactly three fields, all non-null and all marked experiment:handle(String),status(String), andcreatedAt(Time).statusis deliberately a plain String, not an enum, so an unrecognized Artifact Registry status value reaches the response instead of raising. The type authorizesread_artifact_registry. - Adds
Resolvers::ArtifactRegistry::RegistryResolver, which extends the existing S03BaseResolver. It returns null when the organization has no namespace-mapping row and authorizesread_artifact_registryagainst the organization (the organization type declares no authorization of its own). Step 3'sNamespaceMapping#registrydoes not raise on client failure; it returns a truthyResolutionFailuremarker naming the exception class. The resolver re-raises the named client exception so the shared error-mapping concern turns an authorization failure into a null field and an unavailability failure into a service-unavailable GraphQL error. - Mounts an
artifactRegistryfield on the organization GraphQL type (null: true, experiment) behind the existingartifact_registry_uifeature flag. With the flag off, the field stays in the schema, resolves null, and makes no client call. - Regenerates the GraphQL reference docs and the introspection JSON.
Which plan step this implements
This implements Step 4 of the S10 "activation and deactivation" plan for GitLab Artifact Registry. It covers only Step 4 of Steps 4-6.
Work item: #608392 (closed)
Feature flag
This is behind the existing artifact_registry_ui feature flag (dark,
disabled by default). Because the flag is dark, there is no changelog,
and the schema text requires no i18n.
MR target
This MR targets nkannan/ar-s10-step3-resolution, not master, because
Step 4 depends on the unmerged Step 3 (MR !250657 (merged)).
How to validate locally
Run the specs:
bundle exec rspec ee/spec/graphql/types/artifact_registry/registry_type_spec.rb ee/spec/graphql/resolvers/artifact_registry/registry_resolver_spec.rb ee/spec/requests/api/graphql/organizations/artifact_registry_spec.rbThen enable the artifact_registry_ui flag for an activated
organization and run:
organization { artifactRegistry { handle status createdAt } }