Persist pipeline creation status across page reloads using GraphQL subscriptions
What does this MR do and why?
Implements real-time pipeline creation status tracking for merge request pipelines using GraphQL subscriptions. This replaces the temporary client-side skeleton loader with persistent, server-backed creation request data that survives page reloads.
Closes #568346
Changes
Backend
- Added
pipelineCreationRequestsfield toMergeRequestTypethat returns all pipeline creation requests from Redis - Created
Subscriptions::Ci::PipelineCreationRequestsUpdatedGraphQL subscription - Added
GraphqlTriggers.ci_pipeline_creation_requests_updatedto trigger subscription updates - Modified
MergeRequests::CreatePipelineServiceto trigger subscription after both sync and async pipeline creation
Frontend
- Added GraphQL query
getPipelineCreationRequeststo fetch creation requests on page load - Added GraphQL subscription
ciPipelineCreationRequestsUpdatedfor real-time updates inlegacy_pipelines_table_wrapper.vue - Auto-refreshes pipeline table when in-progress requests complete
- Added error alert that displays when pipeline creation fails
Screenshots or screen recordings
Real-time skeleton loader update on success
Screen_Recording_2025-10-07_at_06.13.10
Pipeline creation failed on reload
Pipeline creation loader still active for long running requests
How to set up and validate locally
- Navigate to any merge request with a
.gitlab-ci.ymlfile:http://gdk.test:3000/[project]/-/merge_requests/[iid]/pipelines - Click "Run Pipeline" button
- Observe:
- Button becomes disabled with loading state
- Skeleton loader appears in pipelines table
- Refresh the page while pipeline is being created
- Verify:
- Skeleton loader persists after reload
- Button remains disabled
- Once pipeline creation completes, table auto-refreshes with new pipeline
- Button becomes enabled again
MR acceptance checklist
This MR has been evaluated against the MR acceptance checklist.
Edited by Sahil Sharma