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.
Progress Status
✅ Completed
-
GraphQL Query - Implemented in !205320 (merged) (merged in 18.6) -
mavenVirtualRegistryUpstreams: Fetch upstreams for a Maven virtual registry with pagination support - Search functionality by upstream name
- Proper permissions and authorization checks
-
-
Create Mutation - Implemented in !194371 (merged) (merged in 18.2) -
createMavenVirtualRegistryUpstream: Create a new Maven upstream - Support for all required and optional fields
- Proper validation and error handling
-
🔄 Remaining Work
-
Update Mutation - updateMavenVirtualRegistryUpstream: Update an existing Maven upstream -
Delete Mutation - deleteMavenVirtualRegistryUpstream: Delete a Maven upstream
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 ✅ COMPLETED
-
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
Create ✅ COMPLETED
-
createMavenVirtualRegistryUpstream: Create a new Maven upstream
input CreateMavenVirtualRegistryUpstreamInput {
virtualRegistryId: ID!
name: String!
url: String!
cacheExpirationPeriodHours: Int!
username: String
password: String
}
type CreateMavenVirtualRegistryUpstreamPayload {
upstream: MavenVirtualRegistryUpstream
errors: [Error!]!
}
Update & Delete 🔄 IN PROGRESS
-
updateMavenVirtualRegistryUpstream: Update an existing Maven upstream -
deleteMavenVirtualRegistryUpstream: Delete a Maven upstream
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
}
Sub-tasks
-
#577438 (closed) GraphQL query for Maven virtual registry upstreams
✅ COMPLETED (merged in !205320 (merged)) -
#577439 (closed) GraphQL create mutation for Maven virtual registry upstreams
✅ COMPLETED (merged in !194371 (merged)) -
#577440 GraphQL update and delete mutations for Maven virtual registry upstreams
🔄 IN PROGRESS
Edited by Rahul Chanila