diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..f5af24ed217daa3b64d2cceece366c4c594ddc2e --- /dev/null +++ b/app/controllers/projects/environments_controller.rb @@ -0,0 +1,17 @@ +class Projects::EnvironmentsController < Projects::ApplicationController + layout 'project' + + def index + @environments = project.builds.where.not(environment: nil).pluck(:environment).uniq + @environments = @environments.map { |env| build_for_env(env) }.compact + end + + def show + @environment = params[:id].to_s + @builds = project.builds.where.not(status: ["manual"]).where(environment: params[:id].to_s).order(id: :desc).page(params[:page]).per(30) + end + + def build_for_env(environment) + project.builds.success.order(id: :desc).find_by(environment: environment) + end +end diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb index 2ce2d4e694f38cae75a009d7ec2aba16e9c2958b..aae6b5d0d38a117880ebac6d6898bd83c9eccc4d 100644 --- a/app/helpers/gitlab_routing_helper.rb +++ b/app/helpers/gitlab_routing_helper.rb @@ -29,6 +29,10 @@ module GitlabRoutingHelper namespace_project_pipelines_path(project.namespace, project, *args) end + def project_environments_path(project, *args) + namespace_project_environments_path(project.namespace, project, *args) + end + def project_builds_path(project, *args) namespace_project_builds_path(project.namespace, project, *args) end diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 9b5b46f4928ba6fada6a66c8f0b96a6c8d0cdf06..85d9e0856d18586e71019af0b9fdd70c849d8ff3 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -161,6 +161,10 @@ module Ci git_commit_message =~ /(\[ci skip\])/ if git_commit_message end + def environments + builds.where.not(environment: nil).success.pluck(:environment).uniq + end + private def update_state diff --git a/app/views/projects/environments/_environment.html.haml b/app/views/projects/environments/_environment.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..e3216aea6cdf76f810391796b33490b190d0f545 --- /dev/null +++ b/app/views/projects/environments/_environment.html.haml @@ -0,0 +1,58 @@ +%tr.commit + - commit = build.commit + - status = build.status + + %td + %strong + = link_to build.environment, namespace_project_environment_path(@project.namespace, @project, build.environment), class: "monospace" + + %td.commit-link + = link_to namespace_project_pipeline_path(@project.namespace, @project, commit.id), class: "ci-status ci-#{commit.status}" do + = ci_icon_for_status(commit.status) + %strong ##{commit.id} + + %td.commit-link + = link_to namespace_project_build_path(@project.namespace, @project, build.id), class: "ci-status ci-#{build.status}" do + = ci_icon_for_status(build.status) + %strong ##{build.id} + + %td + %div.branch-commit + - if commit.ref + = link_to commit.ref, namespace_project_commits_path(@project.namespace, @project, commit.ref), class: "monospace" + · + = link_to commit.short_sha, namespace_project_commit_path(@project.namespace, @project, commit.sha), class: "commit-id monospace" + + %p + %span + - if commit_data = commit.commit_data + = link_to_gfm commit_data.title, namespace_project_commit_path(@project.namespace, @project, commit_data.id), class: "commit-row-message" + - else + Cant find HEAD commit for this branch + + %td + - if build.started_at && build.finished_at + %p + %i.fa.fa-clock-o + + #{duration_in_words(build.finished_at, build.started_at)} + - if build.finished_at + %p + %i.fa.fa-calendar + + #{time_ago_with_tooltip(build.finished_at)} + + %td + .controls.hidden-xs.pull-right + - manual = commit.builds.latest.manual_actions.to_a + - if manual.any? + .dropdown.inline + %button.dropdown-toggle.btn{type: 'button', 'data-toggle' => 'dropdown'} + = icon('play') + %b.caret + %ul.dropdown-menu.dropdown-menu-align-right + - manual.each do |manual_build| + %li + = link_to '#', rel: 'nofollow' do + %i.fa.fa-play + %span #{manual_build.name} diff --git a/app/views/projects/environments/_header_title.html.haml b/app/views/projects/environments/_header_title.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..e056fccad5d9c865146b4950397b44738b0bddc2 --- /dev/null +++ b/app/views/projects/environments/_header_title.html.haml @@ -0,0 +1 @@ +- header_title project_title(@project, "Environments", project_environments_path(@project)) diff --git a/app/views/projects/environments/index.html.haml b/app/views/projects/environments/index.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..e94bc97be9d446b6dc7f90bbfc1f41bd00bf7fae --- /dev/null +++ b/app/views/projects/environments/index.html.haml @@ -0,0 +1,22 @@ +- page_title "Environments" += render "header_title" + +.gray-content-block + Environments for this project + +%ul.content-list + - if @environments.blank? + %li + .nothing-here-block No environments to show + - else + .table-holder + %table.table.builds + %tbody + %th Environment + %th Pipeline ID + %th Build ID + %th Changes + %th + %th + - @environments.each do |build| + = render "environment", build: build diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..ce2d9cf7d71398956e342acbef30770a17b73fc6 --- /dev/null +++ b/app/views/projects/environments/show.html.haml @@ -0,0 +1,30 @@ +- page_title "Environments" + += render "header_title" + +.gray-content-block + Latest deployments for + %strong + = @environment + +%ul.content-list + - if @builds.blank? + %li + .nothing-here-block No builds to show for specific environment + - else + .table-holder + %table.table.builds + %thead + %tr + %th Status + %th Build ID + %th Commit + %th Ref + %th Name + %th Duration + %th Finished at + %th + + = render @builds, commit_sha: true, ref: true, allow_retry: true + + = paginate @builds, theme: 'gitlab' diff --git a/config/routes.rb b/config/routes.rb index 95fbe7dd9df9cb9680713731de3214ec958938c0..6b8402c40ddfbe90dbf905c6c3acd51f1a4f888a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -704,6 +704,8 @@ Rails.application.routes.draw do end end + resources :environments, only: [:index, :show] + resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do collection do post :cancel_all