summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-04-29 15:14:38 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-06-10 22:38:40 +0200
commitcf7da039bedcad5163ce9deedccc94206d4c485a (patch)
treefe865b6b7f017a964f01f2909fbf1842bc6e3992
parentff345f8ba11658c679b423e06bbc42b90af158eb (diff)
downloadgitlab-ce-cf7da039bedcad5163ce9deedccc94206d4c485a.tar.gz
commit status
-rw-r--r--app/controllers/projects/environments_controller.rb17
-rw-r--r--app/helpers/gitlab_routing_helper.rb4
-rw-r--r--app/models/ci/pipeline.rb4
-rw-r--r--app/views/projects/environments/_environment.html.haml58
-rw-r--r--app/views/projects/environments/_header_title.html.haml1
-rw-r--r--app/views/projects/environments/index.html.haml22
-rw-r--r--app/views/projects/environments/show.html.haml30
-rw-r--r--config/routes.rb2
8 files changed, 138 insertions, 0 deletions
diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb
new file mode 100644
index 00000000000..f5af24ed217
--- /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 2ce2d4e694f..aae6b5d0d38 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 9b5b46f4928..85d9e0856d1 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 00000000000..e3216aea6cd
--- /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"
+ &middot;
+ = 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
+ &nbsp;
+ #{duration_in_words(build.finished_at, build.started_at)}
+ - if build.finished_at
+ %p
+ %i.fa.fa-calendar
+ &nbsp;
+ #{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 00000000000..e056fccad5d
--- /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 00000000000..e94bc97be9d
--- /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 00000000000..ce2d9cf7d71
--- /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 95fbe7dd9df..6b8402c40dd 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