Skip to content

GraphQL query & mutations for virtual registry upstreams

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

Summary

We need to implement GraphQL query and mutations for CRUD operations on Maven virtual registry upstreams. These operations will allow users to manage Maven-specific upstream configurations through the GraphQL API.

Background

This issue is related to parent epic gitlab-org#15090 and designs are proposed in #493842 (closed). This implementation focuses specifically on Maven package registry upstreams.

Proposal

Data Model

A Maven virtual registry upstream contains:

  • Name

  • URL (Maven repository URL)

  • Cache expiration period (in hours)

  • Optional username

  • Optional password

  • Association with a Maven virtual registry (via virtual registry ID)

Required GraphQL Operations

Query

  • mavenVirtualRegistryUpstreams: Fetch upstreams for a Maven virtual registry with pagination support
    • Input: Maven virtual registry ID, pagination parameters
    • Output: List of Maven upstreams with their attributes
type MavenVirtualRegistryUpstream {
  id: ID!
  name: String!
  url: String!
  cacheExpirationPeriodHours: Int!
  username: String
  # password is not returned for security reasons
  virtualRegistryId: ID!
  position: Int!
  createdAt: Time!
  updatedAt: Time!

  # Cache metrics
  cachedResponsesCount: Int!
  cacheSizeBytes: Int!
}

type MavenVirtualRegistryUpstreamConnection {
  nodes: [MavenVirtualRegistryUpstream]
  pageInfo: PageInfo!
}

extend type Query {
  mavenVirtualRegistryUpstreams(
    virtualRegistryId: ID!
    after: String
    before: String
    first: Int
    last: Int
  ): MavenVirtualRegistryUpstreamConnection!
}

Mutations

  • createMavenVirtualRegistryUpstream: Create a new Maven upstream
  • updateMavenVirtualRegistryUpstream: Update an existing Maven upstream
  • deleteMavenVirtualRegistryUpstream: Delete a Maven upstream
input CreateMavenVirtualRegistryUpstreamInput {
  virtualRegistryId: ID!
  name: String!
  url: String!
  cacheExpirationPeriodHours: Int!
  username: String
  password: String

}

type CreateMavenVirtualRegistryUpstreamPayload {
  upstream: MavenVirtualRegistryUpstream
  errors: [Error!]!
}

input UpdateMavenVirtualRegistryUpstreamInput {
  id: ID!
  name: String
  url: String
  cacheExpirationPeriodHours: Int
  username: String
  password: String

}

type UpdateMavenVirtualRegistryUpstreamPayload {
  upstream: MavenVirtualRegistryUpstream
  errors: [Error!]!
}

input DeleteMavenVirtualRegistryUpstreamInput {
  id: ID!
}

type DeleteMavenVirtualRegistryUpstreamPayload {
  errors: [Error!]!
}

extend type Mutation {
  createMavenVirtualRegistryUpstream(
    input: CreateMavenVirtualRegistryUpstreamInput!
  ): CreateMavenVirtualRegistryUpstreamPayload

  updateMavenVirtualRegistryUpstream(
    input: UpdateMavenVirtualRegistryUpstreamInput!
  ): UpdateMavenVirtualRegistryUpstreamPayload

  deleteMavenVirtualRegistryUpstream(
    input: DeleteMavenVirtualRegistryUpstreamInput!
  ): DeleteMavenVirtualRegistryUpstreamPayload
}
Edited by 🤖 GitLab Bot 🤖