Skip to content

feat: enhance pipeline monitoring, downstream jobs, authentication, and dashboard UI - #520

Open
andjoy404 wants to merge 13 commits into
larscom:mainfrom
andjoy404:feat/dashboard-reliability-and-ui
Open

feat: enhance pipeline monitoring, downstream jobs, authentication, and dashboard UI#520
andjoy404 wants to merge 13 commits into
larscom:mainfrom
andjoy404:feat/dashboard-reliability-and-ui

Conversation

@andjoy404

Copy link
Copy Markdown

Summary

This PR improves the GitLab CI Dashboard’s reliability, pipeline visibility,
performance, security, and overall user experience.

The Pipelines page now presents one newest pipeline per project, recursively
collects downstream pipeline jobs, tracks active child jobs independently from
the parent pipeline status, and provides a significantly cleaner Arcane-inspired
interface.

GitLab API reliability

  • Added global GitLab API request concurrency limits.
  • Added request pacing to reduce burst traffic.
  • Added retry handling for temporary failures and GitLab rate limits.
  • Honor Retry-After and rate-limit reset information.
  • Converted pipeline history timestamps to RFC3339.
  • Added configurable project, pipeline, job, group, and branch caching.
  • Prevented a rate-limited project from breaking the entire group response.
  • Reduced pipeline pagination by requesting only one newest pipeline per project.

Pipeline and downstream-job visibility

  • Added recursive downstream-pipeline discovery through GitLab bridge jobs.
  • Added bridge jobs to the displayed job list.
  • Display parent and downstream jobs for successful and failed pipelines.
  • Mark downstream jobs with a child indicator.
  • Fetch jobs without filtering them by the parent pipeline status.
  • Keep the pipeline Status column as GitLab’s parent pipeline status.
  • Display the actual status of every parent and child job in the Jobs column.
  • Poll only while created, pending, preparing, waiting, canceling, or running
    jobs exist.
  • Stop polling when the complete job tree finishes.
  • Bypass the normal job-cache TTL while active jobs are present.
  • Preserve completed job results in cache to reduce GitLab traffic.

Newest-pipeline mode and refresh

  • Show only the newest pipeline for each project on the Pipelines page.
  • Request pipelines with page=1 and per_page=1.
  • Keep schedule history retrieval separate and unchanged.
  • Refresh active pipelines automatically.
  • Add a manual Refresh button that bypasses the newest-pipeline cache.
  • Update the summary to report one newest pipeline per project.

Pipeline overview and filtering

  • Added a latest-pipeline total.
  • Added per-status pipeline counters.
  • Added a visual status-distribution bar.
  • Added Group → Project → Branch search ordering.
  • Added group-path filtering.
  • Added project, branch, topic, job, and status filters.
  • Display complete nested GitLab namespace paths.
  • Avoid duplicate project names in the Group column.

Table improvements

  • Applied consistent styling to:
    • Pipelines
    • Pipelines (latest)
    • Schedules
    • Expanded branch pipelines
    • Expanded scheduled pipelines
  • Added resizable columns.
  • Added explicit shared header and row width configuration.
  • Added horizontal scrolling for long job lists.
  • Prevented cell text and job tags from wrapping.
  • Added sticky headers.
  • Fixed header and body alignment while scrolling.
  • Added a permanently fixed Action column.
  • Prevented job content from overlapping the Action column.
  • Replaced multiple inline action buttons with a compact ellipsis menu.
  • Styled the action menu as a vertical Arcane-inspired popup.

Navigation and visual design

  • Added an Arcane-inspired expandable sidebar.
  • Added a small pin control with persisted sidebar state.
  • Moved the dashboard identity and active GitLab group into the sidebar.
  • Added compact icon-only navigation when unpinned.
  • Added tooltips for collapsed navigation.
  • Moved Theme, Favorites, Sign out, and GitHub controls into the top header.
  • Added consistent styling for tables, inputs, buttons, tags, dropdowns,
    pagination, drawers, alerts, and dialogs.
  • Added persistent light and Dracula themes.

Authentication and branding

  • Added an optional login page for private deployments.

  • Added server-side username/password authentication.

  • Added random server-side session tokens.

  • Added HttpOnly and SameSite session cookies.

  • Added optional secure-cookie support for HTTPS deployments.

  • Added failed-login throttling.

  • Added Sign out support.

  • Added runtime-configurable company branding:

    UI_COMPANY_NAME=ACME CORP

andjoy404 added 13 commits July 28, 2026 02:59
…nd dashboard UI

- protect GitLab API calls with request pacing, concurrency limits, retries,
  rate-limit handling, and configurable caching
- prevent one rate-limited project from breaking the complete group dashboard
- use RFC3339 pipeline history timestamps
- discover downstream pipelines recursively through bridge jobs
- display parent, bridge, and downstream jobs for successful and failed pipelines
- fetch all child-job statuses independently from the parent pipeline status
- refresh active job trees while keeping completed job results cached
- bypass stale job cache entries while downstream jobs are still active
- show only the newest pipeline per project on the Pipelines page
- request one newest pipeline per project to reduce pagination and API traffic
- preserve historical pipeline retrieval for scheduled pipelines
- add a manual Refresh button that bypasses the newest-pipeline cache
- add pipeline totals, status counts, and status-distribution visualization
- add group, project, branch, topic, job, and status filtering
- display complete nested namespace paths without duplicating project names
- order group and project information consistently across tables
- add resizable columns and explicit shared table widths
- add horizontal and vertical table scrolling with non-wrapping cells
- keep all table headers sticky and aligned with their rows
- keep the Action column pinned to the right
- replace inline action buttons with an Arcane-style ellipsis menu
- apply consistent table behavior to latest pipelines, pipelines, schedules,
  branch details, and scheduled-pipeline details
- add an Arcane-inspired expandable sidebar with saved pin state
- display configurable company branding and the selected GitLab group
- move theme, favorites, logout, and GitHub actions into the top header
- add persistent light and Dracula themes
- add optional username/password authentication with secure session cookies
- throttle failed login attempts
- add runtime-configurable company branding through UI_COMPANY_NAME
- document new authentication, branding, history, and cache settings
- add anonymized light and Dracula dashboard and login screenshots
- replace the Schedules menu with read-only self-hosted runner monitoring
- discover runners from the selected group and all descendant groups
- exclude GitLab-hosted shared and instance runners
- paginate runner discovery and deduplicate runners by ID
- display runner tags, type, owning group or project, address, status, and jobs
- retrieve runner IP addresses from the runner managers API
- prioritize active and online runner managers when displaying addresses
- deduplicate runner manager IP addresses
- cache runner lists, details, managers, and active jobs
- retain last-known runner and job data during temporary GitLab API failures
- pace runner API requests to reduce the risk of HTTP 429 responses
- show active jobs handled by each runner with GitLab links
- automatically refresh runner state while silently handling background failures
- add a manual runner refresh button that bypasses runner caches
- add runner totals and status counts
- add a colored runner-status distribution visualization
- add separate group or project, runner or IP, and tag searches
- add clickable status filters with status-specific colors
- add readable runner tags and status colors for light and Dracula themes
- add colored address and runner-type badges
- align runner table dimensions, scrolling, resizing, and pagination with Pipelines
- order runner columns as tags, type, group or project, address, runner, status, and jobs
- add null-safe handling for optional GitLab runner and group fields
- add staggered post-login preloading for dashboard menus
- preload inactive menus sequentially to warm backend caches
- avoid displaying global errors for silent background preload failures
- brighten the application header and table headings in light mode
- preserve the Arcane-inspired header and table styling in Dracula mode
- document runner permissions and configurable runner cache settings
- replace Schedules with a read-only Runners dashboard
- discover self-hosted runners across nested groups and projects
- display runner tags, type, namespace, IP address, status, and active jobs
- retrieve runner IP addresses from runner manager details
- add runner totals, status counts, distribution chart, filters, and refresh
- cache and preload runner and pipeline data while limiting GitLab API requests
- add resilient handling for missing GitLab runner fields and stale API data
- match runner table sizing, scrolling, pagination, and theme behavior with pipelines
- improve runner tag and status contrast in light and Dracula themes
- reorder runner columns for easier operational scanning
- add colorful, theme-safe branch, trigger, topic, and status values to pipeline tables
- apply consistent pipeline styling to latest pipelines and expanded branch rows
…it dashboard feature changes

- Add GHCR Docker publish workflow
- Replace legacy theme screenshot assets
- Update README to document api/config.toml and config.example.toml
- Align config.example.toml with actual supported runtime schema
- Update backend analytics/environment/GitLab config handling
- Add analytics and environment management backend support
- Update frontend dashboard, analytics, and user feature code
- Remove obsolete favorites-panel service
- Update build config and Docker setup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant