From a4638dddf22797f46d72ea7b73c8453ba68645ab Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 13 Sep 2016 14:14:55 +0200 Subject: Add support for dynamic environments Environments that can have a URL with predefined CI variables. --- app/models/environment.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 75e6f869786..33c9abf382a 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -4,6 +4,7 @@ class Environment < ActiveRecord::Base has_many :deployments before_validation :nullify_external_url + before_save :set_environment_type validates :name, presence: true, @@ -26,6 +27,17 @@ class Environment < ActiveRecord::Base self.external_url = nil if self.external_url.blank? end + def set_environment_type + names = name.split('/') + + self.environment_type = + if names.many? + names.first + else + nil + end + end + def includes_commit?(commit) return false unless last_deployment -- cgit v1.2.1 From 8957293d9bd0d711db3af26182205c2fe4125194 Mon Sep 17 00:00:00 2001 From: Timothy Andrew Date: Tue, 20 Sep 2016 15:06:54 +0530 Subject: Implement review comments from @yorickpeterse 1. Change multiple updates to a single `update_all` 2. Use cascading deletes 3. Extract an average function for the database median. 4. Move database median to `lib/gitlab/database` 5. Use `delete_all` instead of `destroy_all` 6. Minor refactoring --- app/models/environment.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 33c9abf382a..49e0a20640c 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -43,4 +43,8 @@ class Environment < ActiveRecord::Base last_deployment.includes_commit?(commit) end + + def update_merge_request_metrics? + self.name == "production" + end end -- cgit v1.2.1 From 7d46bd6128309e6ef1f3f4785889f5a0fef4de8f Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Fri, 30 Sep 2016 15:45:27 +0200 Subject: Save a fetchable ref per deployement --- app/models/environment.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 49e0a20640c..843f85883a1 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -47,4 +47,8 @@ class Environment < ActiveRecord::Base def update_merge_request_metrics? self.name == "production" end + + def ref_path + "refs/environments/#{Shellwords.shellescape(name)}/" + end end -- cgit v1.2.1 From 901c994b7a4481437f8fe91583d2ed3f19e4775e Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Mon, 3 Oct 2016 15:39:12 +0200 Subject: deployment refs in own folder, new method for creating refs --- app/models/environment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 843f85883a1..f0f3ee23223 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -49,6 +49,6 @@ class Environment < ActiveRecord::Base end def ref_path - "refs/environments/#{Shellwords.shellescape(name)}/" + "refs/environments/#{Shellwords.shellescape(name)}" end end -- cgit v1.2.1 From 3f85c3ef1629870e22f6a676585e8de80e5120c3 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Thu, 6 Oct 2016 13:10:50 +0200 Subject: Initial support for closing environments --- app/models/environment.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index f0f3ee23223..6ec498ea2b7 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -19,6 +19,24 @@ class Environment < ActiveRecord::Base allow_nil: true, addressable_url: true + delegate :closeable?, :close_action, to: :last_deployment, allow_nil: true + + scope :opened, -> { where(state: [:opened]) } + scope :closed, -> { where(state: [:closed]) } + + state_machine :state, initial: :opened do + event :close do + transition opened: :closed + end + + event :reopen do + transition closed: :opened + end + + state :opened + state :closed + end + def last_deployment deployments.last end -- cgit v1.2.1 From 6a4f71008390752e6b5574a9e9bdf277732d852d Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Tue, 4 Oct 2016 16:03:13 +0200 Subject: Show what time ago a MR was deployed --- app/models/environment.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index f0f3ee23223..1c7d06906f3 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -48,6 +48,14 @@ class Environment < ActiveRecord::Base self.name == "production" end + def deployment_id_for(commit) + ref = project.repository.ref_name_for_sha(ref_path, commit.sha) + + return nil unless ref + + ref.split('/').last.to_i + end + def ref_path "refs/environments/#{Shellwords.shellescape(name)}" end -- cgit v1.2.1 From fa58068b2894b900d4b2519825411e0710557fc6 Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 5 Oct 2016 13:52:15 +0200 Subject: Refactor ci_status on MergeRequestController --- app/models/environment.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 1c7d06906f3..c6cae81ce6a 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -48,12 +48,13 @@ class Environment < ActiveRecord::Base self.name == "production" end - def deployment_id_for(commit) + def first_deployment_for(commit) ref = project.repository.ref_name_for_sha(ref_path, commit.sha) return nil unless ref - ref.split('/').last.to_i + deployment_id = ref.split('/').last.to_i + deployments.find(deployment_id) end def ref_path -- cgit v1.2.1 From 35e2315a66e34f290230720cfa74240fd5532970 Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 12 Oct 2016 15:21:01 +0200 Subject: Minor style improvement --- app/models/environment.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index c6cae81ce6a..d970bc0a005 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -53,11 +53,17 @@ class Environment < ActiveRecord::Base return nil unless ref - deployment_id = ref.split('/').last.to_i + deployment_id = ref.split('/').last deployments.find(deployment_id) end def ref_path "refs/environments/#{Shellwords.shellescape(name)}" end + + def formatted_external_url + return nil unless external_url + + external_url.gsub(/\A.*?:\/\//, '') + end end -- cgit v1.2.1 From 6cdbb27ec3cf72ce6728986909aa3df54b7a26c6 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 17 Oct 2016 12:45:31 +0200 Subject: Refactor code to use available and stopped statuses and refactor views to use separate renders --- app/models/environment.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 07f14a7ad8d..93e7dedd6f8 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -19,22 +19,22 @@ class Environment < ActiveRecord::Base allow_nil: true, addressable_url: true - delegate :closeable?, :close_action, to: :last_deployment, allow_nil: true + delegate :stoppable?, :stop_action, to: :last_deployment, allow_nil: true - scope :opened, -> { where(state: [:opened]) } - scope :closed, -> { where(state: [:closed]) } + scope :available, -> { where(state: [:available]) } + scope :stopped, -> { where(state: [:stopped]) } - state_machine :state, initial: :opened do - event :close do - transition opened: :closed + state_machine :state, initial: :available do + event :start do + transition stopped: :available end - event :reopen do - transition closed: :opened + event :stop do + transition available: :stopped end - state :opened - state :closed + state :available + state :stopped end def last_deployment -- cgit v1.2.1 From 9b790f1cf97157240178601c62d2e557a404503e Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 17 Oct 2016 16:13:19 +0200 Subject: Improve after code review --- app/models/environment.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 93e7dedd6f8..20da71ccb3f 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -19,10 +19,7 @@ class Environment < ActiveRecord::Base allow_nil: true, addressable_url: true - delegate :stoppable?, :stop_action, to: :last_deployment, allow_nil: true - - scope :available, -> { where(state: [:available]) } - scope :stopped, -> { where(state: [:stopped]) } + delegate :stop_action, to: :last_deployment, allow_nil: true state_machine :state, initial: :available do event :start do @@ -84,4 +81,8 @@ class Environment < ActiveRecord::Base external_url.gsub(/\A.*?:\/\//, '') end + + def stoppable? + available? && stop_action.present? + end end -- cgit v1.2.1 From e9880722076081df1576a3fb01e2c30feb6208ba Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 17 Oct 2016 21:06:10 +0200 Subject: Fix environments specs --- app/models/environment.rb | 3 +++ 1 file changed, 3 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 20da71ccb3f..ff55e751f70 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -21,6 +21,9 @@ class Environment < ActiveRecord::Base delegate :stop_action, to: :last_deployment, allow_nil: true + scope :available, -> { with_state(:available) } + scope :stopped, -> { with_state(:stopped) } + state_machine :state, initial: :available do event :start do transition stopped: :available -- cgit v1.2.1 From 0aa232704c5df68f0ed111e355a07cfaf241e8a9 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 18 Oct 2016 12:02:50 +0200 Subject: Add `stop!` to `environment` --- app/models/environment.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index ff55e751f70..d575f1dc73a 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -88,4 +88,10 @@ class Environment < ActiveRecord::Base def stoppable? available? && stop_action.present? end + + def stop!(current_user) + return unless stoppable? + + stop_action.play(current_user) + end end -- cgit v1.2.1 From c1212beaa495b5b0c3b805bb1b2a7bdc6d1a941b Mon Sep 17 00:00:00 2001 From: "Z.J. van de Weg" Date: Wed, 19 Oct 2016 14:49:09 +0200 Subject: Use deployment IID when saving refs --- app/models/environment.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index d575f1dc73a..73f415c0ef0 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -71,8 +71,8 @@ class Environment < ActiveRecord::Base return nil unless ref - deployment_id = ref.split('/').last - deployments.find(deployment_id) + deployment_iid = ref.split('/').last + deployments.find_by(iid: deployment_iid) end def ref_path -- cgit v1.2.1 From a88b2d3b019cd696404d20f8042a555ec0081143 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 14 Nov 2016 14:35:29 +0100 Subject: Add feature tests for environments auto-close --- app/models/environment.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 73f415c0ef0..67812b12993 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -92,6 +92,7 @@ class Environment < ActiveRecord::Base def stop!(current_user) return unless stoppable? + stop stop_action.play(current_user) end end -- cgit v1.2.1 From c7350f0c62dee6ffc43cf24004ed95e399d72832 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 15 Nov 2016 14:48:14 +0100 Subject: Select recently updated environments for auto-close --- app/models/environment.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 67812b12993..fe3df473d73 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -37,6 +37,10 @@ class Environment < ActiveRecord::Base state :stopped end + def recently_updated_on?(ref) + ref.to_s == last_deployment.ref + end + def last_deployment deployments.last end -- cgit v1.2.1 From e49229aa04144e0ce7672ad0a34a24da9b09027e Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 16 Nov 2016 10:54:20 +0100 Subject: Refactor methods for environments in project model --- app/models/environment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index fe3df473d73..8e4de640953 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -37,7 +37,7 @@ class Environment < ActiveRecord::Base state :stopped end - def recently_updated_on?(ref) + def recently_updated_on_branch?(ref) ref.to_s == last_deployment.ref end -- cgit v1.2.1 From d9d69d7ba7dd660c9b3e0ab30b58891a8b760328 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Wed, 16 Nov 2016 11:26:36 +0100 Subject: Add specs for environments recently updated on branch --- app/models/environment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 8e4de640953..5278efd71d2 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -38,7 +38,7 @@ class Environment < ActiveRecord::Base end def recently_updated_on_branch?(ref) - ref.to_s == last_deployment.ref + ref.to_s == last_deployment.try(:ref) end def last_deployment -- cgit v1.2.1 From 1d16f137d93576385e403f5caf5f64bfe0b3a647 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 21 Nov 2016 13:47:18 +0100 Subject: Add deploy chat command [ci skip] --- app/models/environment.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index 5278efd71d2..e6dd7717e46 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -19,7 +19,7 @@ class Environment < ActiveRecord::Base allow_nil: true, addressable_url: true - delegate :stop_action, to: :last_deployment, allow_nil: true + delegate :stop_action, :manual_actions, to: :last_deployment, allow_nil: true scope :available, -> { with_state(:available) } scope :stopped, -> { with_state(:stopped) } @@ -99,4 +99,12 @@ class Environment < ActiveRecord::Base stop stop_action.play(current_user) end + + def actions_for(environment) + return [] unless manual_actions + + manual_actions.select |action| + action.expanded_environment_name = environment + end + end end -- cgit v1.2.1 From a36d556137116385e84eca592ec62e46ecb97e03 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Mon, 21 Nov 2016 17:26:35 +0100 Subject: Introduce deploy command that allows to start deployment from one environment to second one --- app/models/environment.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/models/environment.rb') diff --git a/app/models/environment.rb b/app/models/environment.rb index e6dd7717e46..a7f4156fc2e 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -103,8 +103,8 @@ class Environment < ActiveRecord::Base def actions_for(environment) return [] unless manual_actions - manual_actions.select |action| - action.expanded_environment_name = environment + manual_actions.select do |action| + action.expanded_environment_name == environment end end end -- cgit v1.2.1