gitlab-org--gitlab-foss/app/models/environment_status.rb

111 lines
2.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class EnvironmentStatus
include Gitlab::Utils::StrongMemoize
attr_reader :project, :environment, :merge_request, :sha
delegate :id, to: :environment
delegate :name, to: :environment
delegate :status, to: :deployment, allow_nil: true
delegate :deployed_at, to: :deployment, allow_nil: true
def self.for_merge_request(mr, user)
Squashed commit of the following: commit 04b06a2293fa12660a9c213a9db27fe90b83248b Merge: d580841d4ed a445aa0a926 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Dec 3 10:51:55 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit d580841d4ed944f01e6417fa77842826843b6a04 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 18:11:04 2018 +0900 Add environment to all_models.yml commit 689fbe2699a3adf10804312e680fa336e4560eaf Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 17:00:35 2018 +0900 Proper way to get uniq relationship commit c0733c6ecd535a6a1b6243080a2226836890f479 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:20:40 2018 +0900 Revert build change commit 19dc55a8fe6e0fa575858d51144516b7fb0120de Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:19:18 2018 +0900 Add uniq option commit 0a6995f311c09b453fd0aecff2f6052de38efc27 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:14:30 2018 +0900 Drop persisted_environment commit 3f68fc783b0ee0d66e03de6d979616c4c4892118 Author: Shinya Maeda <shinya@gitlab.com> Date: Wed Nov 28 13:59:04 2018 +0900 Return empty array if pipeline is nil commit 73801c5c3d06339e38dce7461a71285bcdbb8f45 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:34:47 2018 +0900 Add changelog commit d461699abf2835cc51949a5138e829628209dd6d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:32:20 2018 +0900 Squashed commit of the following: commit 77ab5259605e217a39b04d2cea6204277e42d2b5 Merge: 7ac1ed50612 2ee8c40fc16 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:31:07 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 7ac1ed50612620df6408220b0a7cfcb626a04c48 Merge: 49ba5c5aeff b55aeca25e7 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 20:01:43 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 49ba5c5aeff3efee7b7498d443372021c3f4f8b5 Merge: aa3fd0ff9e8 fbbe5ccd1be Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 15:27:36 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit aa3fd0ff9e8a418a233ebaa60b38c081cab50099 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:28:53 2018 +0900 Fix static analysis commit 7afe5f37003869a73dbb297229f8533f78b82684 Merge: e65b9580ff4 8a581d531ba Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:27:33 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit e65b9580ff422359113e1a4e37c212f7b13aba4d Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 17:59:48 2018 +0900 Ignore deployments from project import/export commit 9eb4ddab8415c1ef61a3c646bdc4602bcf4ebe24 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:26:00 2018 +0900 Add memoization commit 57f0bea3aaaa07b75d18e52068c532277350cda0 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:21:39 2018 +0900 Fix unrelated deployment status in MR widget
2018-12-03 06:46:45 +00:00
build_environments_status(mr, user, mr.actual_head_pipeline)
end
def self.after_merge_request(mr, user)
return [] unless mr.merged?
Squashed commit of the following: commit 04b06a2293fa12660a9c213a9db27fe90b83248b Merge: d580841d4ed a445aa0a926 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Dec 3 10:51:55 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit d580841d4ed944f01e6417fa77842826843b6a04 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 18:11:04 2018 +0900 Add environment to all_models.yml commit 689fbe2699a3adf10804312e680fa336e4560eaf Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 17:00:35 2018 +0900 Proper way to get uniq relationship commit c0733c6ecd535a6a1b6243080a2226836890f479 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:20:40 2018 +0900 Revert build change commit 19dc55a8fe6e0fa575858d51144516b7fb0120de Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:19:18 2018 +0900 Add uniq option commit 0a6995f311c09b453fd0aecff2f6052de38efc27 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:14:30 2018 +0900 Drop persisted_environment commit 3f68fc783b0ee0d66e03de6d979616c4c4892118 Author: Shinya Maeda <shinya@gitlab.com> Date: Wed Nov 28 13:59:04 2018 +0900 Return empty array if pipeline is nil commit 73801c5c3d06339e38dce7461a71285bcdbb8f45 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:34:47 2018 +0900 Add changelog commit d461699abf2835cc51949a5138e829628209dd6d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:32:20 2018 +0900 Squashed commit of the following: commit 77ab5259605e217a39b04d2cea6204277e42d2b5 Merge: 7ac1ed50612 2ee8c40fc16 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:31:07 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 7ac1ed50612620df6408220b0a7cfcb626a04c48 Merge: 49ba5c5aeff b55aeca25e7 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 20:01:43 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 49ba5c5aeff3efee7b7498d443372021c3f4f8b5 Merge: aa3fd0ff9e8 fbbe5ccd1be Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 15:27:36 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit aa3fd0ff9e8a418a233ebaa60b38c081cab50099 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:28:53 2018 +0900 Fix static analysis commit 7afe5f37003869a73dbb297229f8533f78b82684 Merge: e65b9580ff4 8a581d531ba Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:27:33 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit e65b9580ff422359113e1a4e37c212f7b13aba4d Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 17:59:48 2018 +0900 Ignore deployments from project import/export commit 9eb4ddab8415c1ef61a3c646bdc4602bcf4ebe24 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:26:00 2018 +0900 Add memoization commit 57f0bea3aaaa07b75d18e52068c532277350cda0 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:21:39 2018 +0900 Fix unrelated deployment status in MR widget
2018-12-03 06:46:45 +00:00
build_environments_status(mr, user, mr.merge_pipeline)
end
def self.for_deployed_merge_request(mr, user)
statuses = []
mr.recent_visible_deployments.each do |deploy|
env = deploy.environment
next unless Ability.allowed?(user, :read_environment, env)
statuses <<
EnvironmentStatus.new(deploy.project, env, mr, deploy.sha)
end
# Existing projects that used deployments prior to the introduction of
# explicitly linked merge requests won't have any data using this new
# approach, so we fall back to retrieving deployments based on CI pipelines.
if statuses.any?
statuses
else
after_merge_request(mr, user)
end
end
def initialize(project, environment, merge_request, sha)
@project = project
@environment = environment
@merge_request = merge_request
@sha = sha
end
def deployment
strong_memoize(:deployment) do
2018-11-07 05:29:16 +00:00
Deployment.where(environment: environment).find_by_sha(sha)
end
end
def has_metrics?
strong_memoize(:has_metrics) do
deployment_metrics.has_metrics?
end
end
def changes
strong_memoize(:changes) do
has_route_map? ? changed_files.map { |file| build_change(file) }.compact : []
end
end
def changed_files
merge_request.merge_request_diff
.merge_request_diff_files.where(deleted_file: false)
end
def has_route_map?
project.route_map_for(sha).present?
end
private
PAGE_EXTENSIONS = /\A\.(s?html?|php|asp|cgi|pl)\z/i.freeze
def deployment_metrics
@deployment_metrics ||= DeploymentMetrics.new(project, deployment)
end
def build_change(file)
public_path = project.public_path_for_source_path(file.new_path, sha)
return if public_path.nil?
ext = File.extname(public_path)
return if ext.present? && ext !~ PAGE_EXTENSIONS
{
path: public_path,
external_url: environment.external_url_for(file.new_path, sha)
}
end
Squashed commit of the following: commit 04b06a2293fa12660a9c213a9db27fe90b83248b Merge: d580841d4ed a445aa0a926 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Dec 3 10:51:55 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit d580841d4ed944f01e6417fa77842826843b6a04 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 18:11:04 2018 +0900 Add environment to all_models.yml commit 689fbe2699a3adf10804312e680fa336e4560eaf Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 17:00:35 2018 +0900 Proper way to get uniq relationship commit c0733c6ecd535a6a1b6243080a2226836890f479 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:20:40 2018 +0900 Revert build change commit 19dc55a8fe6e0fa575858d51144516b7fb0120de Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:19:18 2018 +0900 Add uniq option commit 0a6995f311c09b453fd0aecff2f6052de38efc27 Author: Shinya Maeda <shinya@gitlab.com> Date: Fri Nov 30 16:14:30 2018 +0900 Drop persisted_environment commit 3f68fc783b0ee0d66e03de6d979616c4c4892118 Author: Shinya Maeda <shinya@gitlab.com> Date: Wed Nov 28 13:59:04 2018 +0900 Return empty array if pipeline is nil commit 73801c5c3d06339e38dce7461a71285bcdbb8f45 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:34:47 2018 +0900 Add changelog commit d461699abf2835cc51949a5138e829628209dd6d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:32:20 2018 +0900 Squashed commit of the following: commit 77ab5259605e217a39b04d2cea6204277e42d2b5 Merge: 7ac1ed50612 2ee8c40fc16 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 27 16:31:07 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 7ac1ed50612620df6408220b0a7cfcb626a04c48 Merge: 49ba5c5aeff b55aeca25e7 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 20:01:43 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit 49ba5c5aeff3efee7b7498d443372021c3f4f8b5 Merge: aa3fd0ff9e8 fbbe5ccd1be Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 26 15:27:36 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit aa3fd0ff9e8a418a233ebaa60b38c081cab50099 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:28:53 2018 +0900 Fix static analysis commit 7afe5f37003869a73dbb297229f8533f78b82684 Merge: e65b9580ff4 8a581d531ba Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Nov 20 18:27:33 2018 +0900 Merge branch 'master-ce' into fix-mr-widget-unrelated-deployment-status commit e65b9580ff422359113e1a4e37c212f7b13aba4d Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 17:59:48 2018 +0900 Ignore deployments from project import/export commit 9eb4ddab8415c1ef61a3c646bdc4602bcf4ebe24 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:26:00 2018 +0900 Add memoization commit 57f0bea3aaaa07b75d18e52068c532277350cda0 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Nov 19 16:21:39 2018 +0900 Fix unrelated deployment status in MR widget
2018-12-03 06:46:45 +00:00
def self.build_environments_status(mr, user, pipeline)
return [] unless pipeline
pipeline.environments_in_self_and_descendants.includes(:project).available.map do |environment|
next unless Ability.allowed?(user, :read_environment, environment)
EnvironmentStatus.new(pipeline.project, environment, mr, pipeline.sha)
end.compact
end
private_class_method :build_environments_status
end