diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-10-01 16:44:07 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2014-10-01 16:44:07 +0300 |
commit | a317ac2fd11f5c6323af67b0c36911ed0c2bfbca (patch) | |
tree | 644ef2f240e3f075094329ca9a91c0dede4e2c8c /app/models | |
parent | ffd1285fc1882e29de9ba2815d11fea082237821 (diff) | |
download | gitlab-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.rb | 29 | ||||
-rw-r--r-- | app/models/project.rb | 6 |
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 |