Add Danger-Cobertura

This commit is contained in:
Jorge Martín 2021-11-04 14:05:04 +01:00
parent 2a2ce224b8
commit 3c5e08bced
5 changed files with 45 additions and 73 deletions

View File

@ -21,7 +21,6 @@ stages:
- bot
- analyze
- build
- startReview
- test
- report
- publish
@ -34,11 +33,11 @@ variables:
# Output upload and download progress every 5 seconds
TRANSFER_METER_FREQUENCY: "5s"
# Use no compression for artifacts
ARTIFACT_COMPRESSION_LEVEL: "fast"
# Use no compression for caches
CACHE_COMPRESSION_LEVEL: "fastest"
ARTIFACT_COMPRESSION_LEVEL: "fastest"
# Use low compression for caches
CACHE_COMPRESSION_LEVEL: "fast"
cache:
cache: &global_cache
key: ${CI_COMMIT_REF_SLUG}
paths:
- .gradle/caches/modules-*
@ -48,7 +47,7 @@ cache:
#####################
danger-review:
image: ruby:2.7
stage: analyze
stage: .post
when: always
tags:
- small
@ -63,15 +62,17 @@ danger-review:
- Gemfile.lock
paths:
- vendor/ruby
allow_failure: true
variables:
DANGER_GITLAB_API_TOKEN: $DANGER_GITLAB_API_TOKEN
interruptible: true
detekt analysis:
detekt analyze:
stage: analyze
when: always
tags:
- medium
interruptible: true
script:
- ./gradlew multiModuleDetekt
artifacts:
@ -83,10 +84,11 @@ assemble:
stage: build
tags:
- large
interruptible: true
script:
- echo PROXY_TOKEN="$(curl -o - https://proxy.proton.black/token/get)" >> local.properties
- echo HOST="proton.black" >> local.properties
- ./gradlew assemble
- ./gradlew assembleDebug
artifacts:
paths:
- coreexample/build/outputs/
@ -95,6 +97,7 @@ debugTests:
stage: test
tags:
- large
interruptible: true
script:
- ./gradlew -Pci --console=plain allTest
@ -192,6 +195,7 @@ startReview:
before_script:
- export REVIEW_APP_ARTIFACT_PATH="coreexample/build/outputs/apk/debug/coreexample-debug.apk"
extends: .startReview
stage: test
stopReview:
extends: .stopReview
@ -204,11 +208,15 @@ coverage report:
- ./gradlew coberturaCoverageReport
coverage: /Total.*?(\d{1,3}\.\d{0,2})%/
allow_failure: true
interruptible: true
cache:
<<: *global_cache
policy: pull
artifacts:
expire_in: 1 week
paths:
- ./build/reports/*
reports:
cobertura:
- ./**/build/reports/cobertura-coverage.xml
- ./build/reports/cobertura-coverage.xml

View File

@ -1,5 +1,8 @@
require_relative 'ci/danger/assign_reviewers.rb'
warn("Big PR") if git.insertions > 1000
warn("Big PR") if git.lines_of_code > 500
random_reviewers.assign(["jmartin", "marmatys", "dkadrikj", "nmarietta", "vbrison"])
assign_reviewers(["jmartin", "marmatys", "dkadrikj", "nmarietta", "vbrison"])
cobertura.report = "build/reports/cobertura-coverage.xml"
cobertura.additional_headers = [:line, :branch]
cobertura.warn_if_file_less_than(percentage: 50)
cobertura.show_coverage

View File

@ -7,4 +7,6 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
gem "danger-gitlab", "~> 8.0"
gem "danger-cobertura", :git => "https://github.com/ProtonMail/danger-cobertura_multimodule.git"
gem "danger-random_reviewers", :git => "https://github.com/ProtonMail/danger-random_reviewers.git", branch: 'main'

View File

@ -1,8 +1,18 @@
GIT
remote: git@gitlab.protontech.ch:jmartin/danger-cobertura.git
revision: a03477098a850d8fc9fac3c0705e29749f4fce77
specs:
danger-cobertura (1.3.0)
danger-plugin-api (~> 1.0)
oga (~> 2.15)
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
ansi (1.5.0)
ast (2.4.2)
claide (1.0.3)
claide-plugins (0.9.2)
cork
@ -27,6 +37,8 @@ GEM
danger-gitlab (8.0.0)
danger
gitlab (~> 4.2, >= 4.2.0)
danger-plugin-api (1.0.0)
danger (> 2.0)
faraday (1.8.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
@ -70,10 +82,16 @@ GEM
octokit (4.21.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
oga (2.15)
ast
ruby-ll (~> 2.1)
open4 (1.3.4)
public_suffix (4.0.6)
rchardet (1.8.0)
rexml (3.2.5)
ruby-ll (2.1.2)
ansi
ast
ruby2_keywords (0.0.5)
sawyer (0.8.2)
addressable (>= 2.3.5)
@ -83,9 +101,11 @@ GEM
unicode-display_width (1.8.0)
PLATFORMS
universal-darwin-20
x86_64-linux
DEPENDENCIES
danger-cobertura!
danger-gitlab (~> 8.0)
BUNDLED WITH

View File

@ -1,61 +0,0 @@
# Auto assign reviewer(s) to the current merge request based on:
# - Match assigned reviewers number to and required approvals number
# - Filter out non active eligible reviewers (based on their GitLab status)
# - Filter out from eligible reviewers reviewers provided in parameter reviewer_username_filter
#
# @param reviewer_username_filter Additional reviewer(s) to filter out from eligible reviewer.
def assign_reviewers(reviewer_username_filter = [])
current_reviewers = gitlab.mr_json["reviewers"]
project_id = gitlab.mr_json["project_id"]
mr_id = gitlab.mr_json["iid"]
merge_request_approvals = gitlab.api.merge_request_approvals(project_id, mr_id)
approvals_required = merge_request_approvals["approvals_required"]
reviewers_to_add_count = approvals_required - current_reviewers.length
if reviewers_to_add_count <= 0
p "No need to assign additional reviewer"
return
end
# Get all eligible reviewers
eligible_reviewers = merge_request_approvals["approvers"].map { |approver| approver["user"] }
# Filter out MR author
eligible_reviewers = eligible_reviewers.reject { |eligible_reviewer| eligible_reviewer["id"] == gitlab.mr_json["author"]["id"] }
# Filter out non active user
eligible_reviewers = eligible_reviewers.reject { |eligible_reviewer| eligible_reviewer["state"] != "active" }
# Filter out current reviewers
eligible_reviewers = eligible_reviewers.reject { |eligible_reviewer|
current_reviewers.any? { |current_reviewer|
current_reviewer["id"] == eligible_reviewer["id"]
}
}
# Filter reviewer by username if filter non empty
if !reviewer_username_filter.empty?
p "reviewer filter not empty, filtering eligible reviewers"
eligible_reviewers = eligible_reviewers.reject { |eligible_reviewer|
reviewer_username_filter.none? { |reviewer_username_to_keep|
eligible_reviewer["username"] == reviewer_username_to_keep
}
}
end
# Random pick reviewers to add
if reviewers_to_add_count > eligible_reviewers.count
warn("Not enough eligible reviewers (#{eligible_reviewers.count}) to add (#{reviewers_to_add_count}) to match required approvals (#{approvals_required})")
end
reviewers_to_add = eligible_reviewers.sample(reviewers_to_add_count)
target_reviewer_ids = current_reviewers.map { |reviewer| reviewer["id"] } + reviewers_to_add.map { |reviewer| reviewer["id"] }
# Updating MR reviewers
gitlab.api.update_merge_request(project_id, mr_id, { reviewer_ids: target_reviewer_ids })
# Posting on MR
if !reviewers_to_add.empty?
reviewers_to_add_link = reviewers_to_add.map { |reviewer| "@#{reviewer.to_hash["username"]}" }
message("Assigned randomly for review #{reviewers_to_add_link.join(", ")}")
end
end