From 3c5e08bcedbca7f9f3f6f5b0556cf736bf642a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Marti=CC=81n?= Date: Thu, 4 Nov 2021 14:05:04 +0100 Subject: [PATCH] Add Danger-Cobertura --- .gitlab-ci.yml | 26 +++++++++------ Dangerfile | 9 ++++-- Gemfile | 2 ++ Gemfile.lock | 20 ++++++++++++ ci/danger/assign_reviewers.rb | 61 ----------------------------------- 5 files changed, 45 insertions(+), 73 deletions(-) delete mode 100644 ci/danger/assign_reviewers.rb diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 14cfc2446..18c169ac3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/Dangerfile b/Dangerfile index 306add40b..85597fdd0 100644 --- a/Dangerfile +++ b/Dangerfile @@ -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 diff --git a/Gemfile b/Gemfile index 03dbab4f7..c4c29de12 100644 --- a/Gemfile +++ b/Gemfile @@ -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' diff --git a/Gemfile.lock b/Gemfile.lock index 352243659..b7c9d6a13 100644 --- a/Gemfile.lock +++ b/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 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 diff --git a/ci/danger/assign_reviewers.rb b/ci/danger/assign_reviewers.rb deleted file mode 100644 index f6c0d8112..000000000 --- a/ci/danger/assign_reviewers.rb +++ /dev/null @@ -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 \ No newline at end of file