summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2015-08-06 16:44:45 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2015-08-21 14:49:36 +0100
commitae8f755fc81160b695e44bbfb00b1225527bf5f9 (patch)
tree755e60bad6f63014e3ae7eea8cd0ad018a611956 /app/models
parent1ba150e1cf346239eafec3d530b3de3325501893 (diff)
downloadgitlab-ci-ae8f755fc81160b695e44bbfb00b1225527bf5f9.tar.gz
Initial support for build triggers
Diffstat (limited to 'app/models')
-rw-r--r--app/models/build.rb52
-rw-r--r--app/models/commit.rb37
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/trigger.rb35
-rw-r--r--app/models/trigger_request.rb19
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