Add Danger-Cobertura
This commit is contained in:
parent
2a2ce224b8
commit
3c5e08bced
|
@ -21,7 +21,6 @@ stages:
|
||||||
- bot
|
- bot
|
||||||
- analyze
|
- analyze
|
||||||
- build
|
- build
|
||||||
- startReview
|
|
||||||
- test
|
- test
|
||||||
- report
|
- report
|
||||||
- publish
|
- publish
|
||||||
|
@ -34,11 +33,11 @@ variables:
|
||||||
# Output upload and download progress every 5 seconds
|
# Output upload and download progress every 5 seconds
|
||||||
TRANSFER_METER_FREQUENCY: "5s"
|
TRANSFER_METER_FREQUENCY: "5s"
|
||||||
# Use no compression for artifacts
|
# Use no compression for artifacts
|
||||||
ARTIFACT_COMPRESSION_LEVEL: "fast"
|
ARTIFACT_COMPRESSION_LEVEL: "fastest"
|
||||||
# Use no compression for caches
|
# Use low compression for caches
|
||||||
CACHE_COMPRESSION_LEVEL: "fastest"
|
CACHE_COMPRESSION_LEVEL: "fast"
|
||||||
|
|
||||||
cache:
|
cache: &global_cache
|
||||||
key: ${CI_COMMIT_REF_SLUG}
|
key: ${CI_COMMIT_REF_SLUG}
|
||||||
paths:
|
paths:
|
||||||
- .gradle/caches/modules-*
|
- .gradle/caches/modules-*
|
||||||
|
@ -48,7 +47,7 @@ cache:
|
||||||
#####################
|
#####################
|
||||||
danger-review:
|
danger-review:
|
||||||
image: ruby:2.7
|
image: ruby:2.7
|
||||||
stage: analyze
|
stage: .post
|
||||||
when: always
|
when: always
|
||||||
tags:
|
tags:
|
||||||
- small
|
- small
|
||||||
|
@ -63,15 +62,17 @@ danger-review:
|
||||||
- Gemfile.lock
|
- Gemfile.lock
|
||||||
paths:
|
paths:
|
||||||
- vendor/ruby
|
- vendor/ruby
|
||||||
|
allow_failure: true
|
||||||
variables:
|
variables:
|
||||||
DANGER_GITLAB_API_TOKEN: $DANGER_GITLAB_API_TOKEN
|
DANGER_GITLAB_API_TOKEN: $DANGER_GITLAB_API_TOKEN
|
||||||
interruptible: true
|
interruptible: true
|
||||||
|
|
||||||
detekt analysis:
|
detekt analyze:
|
||||||
stage: analyze
|
stage: analyze
|
||||||
when: always
|
when: always
|
||||||
tags:
|
tags:
|
||||||
- medium
|
- medium
|
||||||
|
interruptible: true
|
||||||
script:
|
script:
|
||||||
- ./gradlew multiModuleDetekt
|
- ./gradlew multiModuleDetekt
|
||||||
artifacts:
|
artifacts:
|
||||||
|
@ -83,10 +84,11 @@ assemble:
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- large
|
- large
|
||||||
|
interruptible: true
|
||||||
script:
|
script:
|
||||||
- echo PROXY_TOKEN="$(curl -o - https://proxy.proton.black/token/get)" >> local.properties
|
- echo PROXY_TOKEN="$(curl -o - https://proxy.proton.black/token/get)" >> local.properties
|
||||||
- echo HOST="proton.black" >> local.properties
|
- echo HOST="proton.black" >> local.properties
|
||||||
- ./gradlew assemble
|
- ./gradlew assembleDebug
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- coreexample/build/outputs/
|
- coreexample/build/outputs/
|
||||||
|
@ -95,6 +97,7 @@ debugTests:
|
||||||
stage: test
|
stage: test
|
||||||
tags:
|
tags:
|
||||||
- large
|
- large
|
||||||
|
interruptible: true
|
||||||
script:
|
script:
|
||||||
- ./gradlew -Pci --console=plain allTest
|
- ./gradlew -Pci --console=plain allTest
|
||||||
|
|
||||||
|
@ -192,6 +195,7 @@ startReview:
|
||||||
before_script:
|
before_script:
|
||||||
- export REVIEW_APP_ARTIFACT_PATH="coreexample/build/outputs/apk/debug/coreexample-debug.apk"
|
- export REVIEW_APP_ARTIFACT_PATH="coreexample/build/outputs/apk/debug/coreexample-debug.apk"
|
||||||
extends: .startReview
|
extends: .startReview
|
||||||
|
stage: test
|
||||||
|
|
||||||
stopReview:
|
stopReview:
|
||||||
extends: .stopReview
|
extends: .stopReview
|
||||||
|
@ -204,11 +208,15 @@ coverage report:
|
||||||
- ./gradlew coberturaCoverageReport
|
- ./gradlew coberturaCoverageReport
|
||||||
coverage: /Total.*?(\d{1,3}\.\d{0,2})%/
|
coverage: /Total.*?(\d{1,3}\.\d{0,2})%/
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
interruptible: true
|
||||||
|
cache:
|
||||||
|
<<: *global_cache
|
||||||
|
policy: pull
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
paths:
|
paths:
|
||||||
- ./build/reports/*
|
- ./build/reports/*
|
||||||
reports:
|
reports:
|
||||||
cobertura:
|
cobertura:
|
||||||
- ./**/build/reports/cobertura-coverage.xml
|
- ./build/reports/cobertura-coverage.xml
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -7,4 +7,6 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
||||||
# gem "rails"
|
# gem "rails"
|
||||||
|
|
||||||
gem "danger-gitlab", "~> 8.0"
|
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'
|
||||||
|
|
||||||
|
|
20
Gemfile.lock
20
Gemfile.lock
|
@ -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
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
addressable (2.8.0)
|
addressable (2.8.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
|
ansi (1.5.0)
|
||||||
|
ast (2.4.2)
|
||||||
claide (1.0.3)
|
claide (1.0.3)
|
||||||
claide-plugins (0.9.2)
|
claide-plugins (0.9.2)
|
||||||
cork
|
cork
|
||||||
|
@ -27,6 +37,8 @@ GEM
|
||||||
danger-gitlab (8.0.0)
|
danger-gitlab (8.0.0)
|
||||||
danger
|
danger
|
||||||
gitlab (~> 4.2, >= 4.2.0)
|
gitlab (~> 4.2, >= 4.2.0)
|
||||||
|
danger-plugin-api (1.0.0)
|
||||||
|
danger (> 2.0)
|
||||||
faraday (1.8.0)
|
faraday (1.8.0)
|
||||||
faraday-em_http (~> 1.0)
|
faraday-em_http (~> 1.0)
|
||||||
faraday-em_synchrony (~> 1.0)
|
faraday-em_synchrony (~> 1.0)
|
||||||
|
@ -70,10 +82,16 @@ GEM
|
||||||
octokit (4.21.0)
|
octokit (4.21.0)
|
||||||
faraday (>= 0.9)
|
faraday (>= 0.9)
|
||||||
sawyer (~> 0.8.0, >= 0.5.3)
|
sawyer (~> 0.8.0, >= 0.5.3)
|
||||||
|
oga (2.15)
|
||||||
|
ast
|
||||||
|
ruby-ll (~> 2.1)
|
||||||
open4 (1.3.4)
|
open4 (1.3.4)
|
||||||
public_suffix (4.0.6)
|
public_suffix (4.0.6)
|
||||||
rchardet (1.8.0)
|
rchardet (1.8.0)
|
||||||
rexml (3.2.5)
|
rexml (3.2.5)
|
||||||
|
ruby-ll (2.1.2)
|
||||||
|
ansi
|
||||||
|
ast
|
||||||
ruby2_keywords (0.0.5)
|
ruby2_keywords (0.0.5)
|
||||||
sawyer (0.8.2)
|
sawyer (0.8.2)
|
||||||
addressable (>= 2.3.5)
|
addressable (>= 2.3.5)
|
||||||
|
@ -83,9 +101,11 @@ GEM
|
||||||
unicode-display_width (1.8.0)
|
unicode-display_width (1.8.0)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
|
universal-darwin-20
|
||||||
x86_64-linux
|
x86_64-linux
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
|
danger-cobertura!
|
||||||
danger-gitlab (~> 8.0)
|
danger-gitlab (~> 8.0)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
|
|
|
@ -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
|
|
Loading…
Reference in New Issue