summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-10-01 16:44:07 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-10-01 16:44:07 +0300
commita317ac2fd11f5c6323af67b0c36911ed0c2bfbca (patch)
tree644ef2f240e3f075094329ca9a91c0dede4e2c8c /app/models
parentffd1285fc1882e29de9ba2815d11fea082237821 (diff)
downloadgitlab-ci-a317ac2fd11f5c6323af67b0c36911ed0c2bfbca.tar.gz
Implement parsing and set coverage after build finished
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/models')
-rw-r--r--app/models/build.rb29
-rw-r--r--app/models/project.rb6
2 files changed, 33 insertions, 2 deletions
diff --git a/app/models/build.rb b/app/models/build.rb
index 47ca196..4f8ec2e 100644
--- a/app/models/build.rb
+++ b/app/models/build.rb
@@ -25,13 +25,14 @@ class Build < ActiveRecord::Base
serialize :push_data
attr_accessible :project_id, :ref, :sha, :before_sha,
- :status, :finished_at, :trace, :started_at, :push_data, :runner_id, :project_name
+ :status, :finished_at, :trace, :started_at, :push_data, :runner_id, :project_name, :coverage
validates :before_sha, presence: true
validates :sha, presence: true
validates :ref, presence: true
validates :status, presence: true
validate :valid_commit_sha
+ validates :coverage, numericality: true, allow_blank: true
scope :running, ->() { where(status: "running") }
scope :pending, ->() { where(status: "pending") }
@@ -88,6 +89,10 @@ class Build < ActiveRecord::Base
NotificationService.new.build_ended(build)
end
end
+
+ if project.coverage_enabled?
+ build.update_coverage
+ end
end
state :pending, value: 'pending'
@@ -199,4 +204,26 @@ class Build < ActiveRecord::Base
Time.now - started_at
end
end
+
+ def update_coverage
+ coverage = extract_coverage(trace, project.coverage_regex)
+
+ if coverage.is_a? Numeric
+ update_attributes(coverage: coverage)
+ end
+ end
+
+ def extract_coverage(text, regex)
+ begin
+ matches = text.gsub(Regexp.new(regex)).to_a.last
+ coverage = matches.gsub(/\d+(\.\d+)?/).first
+
+ if coverage.present?
+ coverage.to_f
+ end
+ rescue => ex
+ # if bad regex or something goes wrong we dont want to interrupt transition
+ # so we just silentrly ignore error for now
+ end
+ end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index e482802..7ea0544 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -26,7 +26,7 @@ class Project < ActiveRecord::Base
attr_accessible :name, :path, :scripts, :timeout, :token, :timeout_in_minutes,
:default_ref, :gitlab_url, :always_build, :polling_interval,
:public, :ssh_url_to_repo, :gitlab_id, :allow_git_fetch, :skip_refs,
- :email_recipients, :email_add_committer, :email_only_broken_builds
+ :email_recipients, :email_add_committer, :email_only_broken_builds, :coverage_regex
has_many :builds, dependent: :destroy
has_many :runner_projects, dependent: :destroy
@@ -183,4 +183,8 @@ ls -la
false
end
end
+
+ def coverage_enabled?
+ coverage_regex.present?
+ end
end