diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2015-08-06 16:44:45 +0200 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2015-08-21 14:49:36 +0100 |
commit | ae8f755fc81160b695e44bbfb00b1225527bf5f9 (patch) | |
tree | 755e60bad6f63014e3ae7eea8cd0ad018a611956 /app/models | |
parent | 1ba150e1cf346239eafec3d530b3de3325501893 (diff) | |
download | gitlab-ci-ae8f755fc81160b695e44bbfb00b1225527bf5f9.tar.gz |
Initial support for build triggers
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/build.rb | 52 | ||||
-rw-r--r-- | app/models/commit.rb | 37 | ||||
-rw-r--r-- | app/models/project.rb | 1 | ||||
-rw-r--r-- | app/models/trigger.rb | 35 | ||||
-rw-r--r-- | app/models/trigger_request.rb | 19 |
5 files changed, 108 insertions, 36 deletions
diff --git a/app/models/build.rb b/app/models/build.rb index da52f0a..913a47c 100644 --- a/app/models/build.rb +++ b/app/models/build.rb @@ -2,23 +2,25 @@ # # Table name: builds # -# id :integer not null, primary key -# project_id :integer -# status :string(255) -# finished_at :datetime -# trace :text -# created_at :datetime -# updated_at :datetime -# started_at :datetime -# runner_id :integer -# commit_id :integer -# coverage :float -# commands :text -# job_id :integer -# name :string(255) -# deploy :boolean default(FALSE) -# options :text -# allow_failure :boolean default(FALSE), not null +# id :integer not null, primary key +# project_id :integer +# status :string(255) +# finished_at :datetime +# trace :text +# created_at :datetime +# updated_at :datetime +# started_at :datetime +# runner_id :integer +# commit_id :integer +# coverage :float +# commands :text +# job_id :integer +# name :string(255) +# options :text +# allow_failure :boolean default(FALSE), not null +# stage :string(255) +# deploy :boolean default(FALSE) +# trigger_request_id :integer # class Build < ActiveRecord::Base @@ -27,6 +29,7 @@ class Build < ActiveRecord::Base belongs_to :commit belongs_to :project belongs_to :runner + belongs_to :trigger_request serialize :options @@ -78,6 +81,7 @@ class Build < ActiveRecord::Base new_build.name = build.name new_build.allow_failure = build.allow_failure new_build.stage = build.stage + new_build.trigger_request = build.trigger_request new_build.save new_build end @@ -113,7 +117,7 @@ class Build < ActiveRecord::Base end if build.commit.success? - build.commit.create_next_builds + build.commit.create_next_builds(build.trigger_request) end project.execute_services(build) @@ -165,7 +169,7 @@ class Build < ActiveRecord::Base end def variables - yaml_variables + project_variables + yaml_variables + project_variables + trigger_variables end def duration @@ -264,4 +268,14 @@ class Build < ActiveRecord::Base { key: variable.key, value: variable.value, public: false } end end + + def trigger_variables + if trigger_request && trigger_request.variables + trigger_request.variables.map do |key, value| + { key: key, value: value, public: false } + end + else + [] + end + end end diff --git a/app/models/commit.rb b/app/models/commit.rb index a27c86b..6195090 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -2,21 +2,23 @@ # # Table name: commits # -# id :integer not null, primary key -# project_id :integer -# ref :string(255) -# sha :string(255) -# before_sha :string(255) -# push_data :text -# created_at :datetime -# updated_at :datetime -# tag :boolean default(FALSE) -# yaml_errors :text +# id :integer not null, primary key +# project_id :integer +# ref :string(255) +# sha :string(255) +# before_sha :string(255) +# push_data :text +# created_at :datetime +# updated_at :datetime +# tag :boolean default(FALSE) +# yaml_errors :text +# committed_at :datetime # class Commit < ActiveRecord::Base belongs_to :project has_many :builds, dependent: :destroy + has_many :trigger_requests, dependent: :destroy serialize :push_data @@ -99,7 +101,7 @@ class Commit < ActiveRecord::Base config_processor.stages.find { |stage| stages.include? stage } end - def create_builds_for_stage(stage) + def create_builds_for_stage(stage, trigger_request) return if skip_ci? return unless config_processor @@ -112,28 +114,29 @@ class Commit < ActiveRecord::Base tag_list: build_attrs[:tags], options: build_attrs[:options], allow_failure: build_attrs[:allow_failure], - stage: build_attrs[:stage] + stage: build_attrs[:stage], + trigger_request: trigger_request, }) end end - def create_next_builds + def create_next_builds(trigger_request) return if skip_ci? return unless config_processor - stages = builds.group_by(&:stage) + stages = builds.where(trigger_request: trigger_request).group_by(&:stage) config_processor.stages.any? do |stage| - !stages.include?(stage) && create_builds_for_stage(stage).present? + !stages.include?(stage) && create_builds_for_stage(stage, trigger_request).present? end end - def create_builds + def create_builds(trigger_request = nil) return if skip_ci? return unless config_processor config_processor.stages.any? do |stage| - create_builds_for_stage(stage).present? + create_builds_for_stage(stage, trigger_request).present? end end diff --git a/app/models/project.rb b/app/models/project.rb index 9cc3678..4879f24 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -35,6 +35,7 @@ class Project < ActiveRecord::Base has_many :web_hooks, dependent: :destroy has_many :events, dependent: :destroy has_many :variables, dependent: :destroy + has_many :triggers, dependent: :destroy # Project services has_many :services, dependent: :destroy diff --git a/app/models/trigger.rb b/app/models/trigger.rb new file mode 100644 index 0000000..26d9893 --- /dev/null +++ b/app/models/trigger.rb @@ -0,0 +1,35 @@ +# == Schema Information +# +# Table name: triggers +# +# id :integer not null, primary key +# token :string(255) +# project_id :integer not null +# deleted_at :datetime +# created_at :datetime +# updated_at :datetime +# + +class Trigger < ActiveRecord::Base + acts_as_paranoid + + belongs_to :project + has_many :trigger_requests, dependent: :destroy + + validates_presence_of :token + validates_uniqueness_of :token + + before_validation :set_default_values + + def set_default_values + self.token = SecureRandom.hex(15) if self.token.blank? + end + + def last_trigger_request + trigger_requests.last + end + + def short_token + token[0...10] + end +end diff --git a/app/models/trigger_request.rb b/app/models/trigger_request.rb new file mode 100644 index 0000000..180c23f --- /dev/null +++ b/app/models/trigger_request.rb @@ -0,0 +1,19 @@ +# == Schema Information +# +# Table name: trigger_requests +# +# id :integer not null, primary key +# trigger_id :integer not null +# variables :text +# created_at :datetime +# updated_at :datetime +# commit_id :integer +# + +class TriggerRequest < ActiveRecord::Base + belongs_to :trigger + belongs_to :commit + has_many :builds + + serialize :variables +end |