Added workflow for PR labeling using Danger

Workflow is called when PR is created or updated. It checks if PR is too big (>500 changed lines), changes one of translation files (YML, except en.yml) or contains merge-commits and generates appropriate labels.
This commit is contained in:
Nenad Vujicic 2024-10-07 11:13:18 +02:00
parent acd899d26d
commit e307b9037a
4 changed files with 101 additions and 0 deletions

25
.github/workflows/labeling.yml vendored Normal file
View file

@ -0,0 +1,25 @@
name: Danger
run-name: Updating labels for current PR
on:
pull_request_target:
types: [opened, synchronize]
jobs:
danger:
runs-on: ubuntu-22.04
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.1
rubygems: 3.4.10
bundler-cache: true
- name: Danger
env:
DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
bundle exec danger --verbose

32
Dangerfile Normal file
View file

@ -0,0 +1,32 @@
# Get PR number
pr_number = github.pr_json["number"]
# Report if number of changed lines is > 500
if git.lines_of_code > 500
warn("Number of updated lines of code is too large to be in one PR. Perhaps it should be separated into two or more?")
auto_label.set(pr_number, "Big PR", "FBCA04")
else
auto_label.remove("Big PR")
end
# Get list of translation files (except en.yml) which are modified
modified_yml_files = git.modified_files.select do |file|
file.start_with?("config/locales") && File.extname(file) == ".yml" && File.basename(file) != "en.yml"
end
# Report if some translation file (except en.yml) is modified
if modified_yml_files.empty?
auto_label.remove("Compromised Translations")
else
modified_files_str = modified_yml_files.map { |file| "`#{file}`" }.join(", ")
warn("The following YAML files other than `en.yml` have been modified: #{modified_files_str}. Only `en.yml` is allowed to be changed. Translations are updated via Translatewiki, see CONTRIBUTING.md.")
auto_label.set(pr_number, "Compromised Translations", "B60205")
end
# Report if there are merge-commits in PR
if git.commits.any? { |c| c.parents.count > 1 }
warn("Merge commits are found in PR. Please rebase to get rid of the merge commits in this PR and read CONTRIBUTE.md.")
auto_label.set(pr_number, "Merge Commits", "D93F0B")
else
auto_label.remove("Merge Commits")
end

View file

@ -145,6 +145,8 @@ gem "unicode-display_width"
group :development do
gem "better_errors"
gem "binding_of_caller"
gem "danger"
gem "danger-auto_label"
gem "debug_inspector"
gem "i18n-tasks"
gem "listen"

View file

@ -150,16 +150,40 @@ GEM
xpath (~> 3.2)
childprocess (5.1.0)
logger (~> 1.5)
claide (1.1.0)
claide-plugins (0.9.2)
cork
nap
open4 (~> 1.3)
colored2 (3.1.2)
concurrent-ruby (1.3.4)
config (5.5.2)
deep_merge (~> 1.2, >= 1.2.1)
ostruct
connection_pool (2.4.1)
cork (0.3.0)
colored2 (~> 3.1)
crack (1.0.0)
bigdecimal
rexml
crass (1.0.6)
dalli (3.2.8)
danger (9.5.0)
claide (~> 1.0)
claide-plugins (>= 0.9.2)
colored2 (~> 3.1)
cork (~> 0.1)
faraday (>= 0.9.0, < 3.0)
faraday-http-cache (~> 2.0)
git (~> 1.13)
kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.0)
octokit (>= 4.0)
terminal-table (>= 1, < 4)
danger-auto_label (1.3.1)
danger-plugin-api (~> 1.0)
danger-plugin-api (1.0.0)
danger (> 2.0)
dartsass-ruby (3.0.2)
sass-embedded (~> 1.54, < 1.67)
dartsass-sprockets (3.0.0)
@ -240,6 +264,8 @@ GEM
faraday-net_http (>= 2.0, < 3.4)
json
logger
faraday-http-cache (2.5.1)
faraday (>= 0.8)
faraday-net_http (3.3.0)
net-http
ffi (1.17.0)
@ -254,6 +280,9 @@ GEM
fspath (3.1.2)
gd2-ffij (0.4.0)
ffi (>= 1.0.0)
git (1.19.1)
addressable (~> 2.8)
rchardet (~> 1.8)
globalid (1.2.1)
activesupport (>= 6.1)
google-protobuf (3.25.5)
@ -311,6 +340,8 @@ GEM
kgio (2.11.4)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
language_server-protocol (3.17.0.3)
libv8-node (18.19.0.0)
libxml-ruby (5.0.3)
@ -344,6 +375,7 @@ GEM
multi_json (1.15.0)
multi_xml (0.7.1)
bigdecimal (~> 3.1)
nap (1.1.0)
net-http (0.4.1)
uri
net-imap (0.4.16)
@ -372,6 +404,9 @@ GEM
rack (>= 1.2, < 4)
snaky_hash (~> 2.0)
version_gem (~> 1.1)
octokit (9.1.0)
faraday (>= 1, < 3)
sawyer (~> 0.9)
omniauth (2.0.4)
hashie (>= 3.4.6)
rack (>= 1.6.2, < 3)
@ -407,6 +442,7 @@ GEM
omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
omniauth (~> 2.0)
open4 (1.3.4)
openstreetmap-deadlock_retry (1.3.1)
ostruct (0.6.0)
overcommit (0.64.0)
@ -488,6 +524,7 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rchardet (1.8.0)
rdoc (6.7.0)
psych (>= 4.0.0)
regexp_parser (2.9.2)
@ -542,6 +579,9 @@ GEM
sass-embedded (1.64.2)
google-protobuf (~> 3.23)
rake (>= 13.0.0)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
securerandom (0.3.1)
selenium-webdriver (4.23.0)
base64 (~> 0.2)
@ -634,6 +674,8 @@ DEPENDENCIES
config
connection_pool
dalli
danger
danger-auto_label
dartsass-sprockets
debug
debug_inspector