50 lines
1.9 KiB
Ruby
50 lines
1.9 KiB
Ruby
ActiveAdmin.register_page "CI Dashboard" do
|
|
menu parent: "🌀 WarpEngine", priority: 11, label: "🚀 CI Dashboard"
|
|
|
|
content do
|
|
if WarpEngine.woodpecker_configured?
|
|
begin
|
|
entries = WarpEngine::CiPipelineService.new.dashboard
|
|
rescue => e
|
|
entries = []
|
|
div class: "flash flash_alert" do
|
|
"Error connecting to Woodpecker: #{e.message}"
|
|
end
|
|
end
|
|
|
|
entries.group_by { |e| e[:repo].platform }.sort.each do |platform, group|
|
|
panel platform.titleize do
|
|
table_for group do
|
|
column("Repository") { |e| link_to e[:repo].full_name, admin_ci_repository_path(e[:repo]) }
|
|
column("Software") { |e| e[:repo].software ? link_to(e[:repo].software.title, admin_software_path(e[:repo].software)) : "-" }
|
|
column("Status") { |e|
|
|
if e[:pipeline]
|
|
status_tag e[:pipeline]["status"],
|
|
class: e[:pipeline]["status"] == "success" ? "ok" : "error"
|
|
else
|
|
status_tag "unknown", class: "warning"
|
|
end
|
|
}
|
|
column("Branch") { |e| e.dig(:pipeline, "branch") || "-" }
|
|
column("When") { |e| e.dig(:pipeline, "created_at") || "-" }
|
|
column("Actions") { |e|
|
|
if e[:repo].active
|
|
text_node link_to("Trigger", trigger_admin_ci_repository_path(e[:repo]),
|
|
method: :post, class: "member_link")
|
|
end
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
if entries.empty?
|
|
para "No CI repositories tracked. Sync repos from the CI Repos page.",
|
|
style: "color:#999;text-align:center;padding:40px 0;"
|
|
end
|
|
else
|
|
para "Woodpecker is not configured. Set woodpecker_url and woodpecker_api_token in the WarpEngine initializer.",
|
|
style: "color:#999;text-align:center;padding:40px 0;"
|
|
end
|
|
end
|
|
end
|