Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AutoMerge: Respect the Override AutoMerge: name similarity is okay label #536

Merged
merged 6 commits into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/src/guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ function guidelines_to_markdown_output(guidelines_function::Function)
check_license = true,
this_is_jll_package = false,
this_pr_can_use_special_jll_exceptions = false,
use_distance_check = false,
)
filter!(x -> x[1] != :update_status, guidelines)
filter!(x -> !(x[1].docs isa Nothing), guidelines)
Expand Down Expand Up @@ -50,6 +51,7 @@ function guidelines_to_markdown_output(guidelines_function::Function)
check_license = true,
this_is_jll_package = false,
this_pr_can_use_special_jll_exceptions = false,
use_distance_check = false,
)
filter!(x -> x[1] != :update_status, guidelines)
filter!(x -> !(x[1].docs isa Nothing), guidelines)
Expand Down
9 changes: 9 additions & 0 deletions example_github_workflow_files/automerge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,19 @@ on:
schedule:
- cron: '05,17,29,41,53 * * * *'
pull_request:
# opened = run when the PR is first opened
# labeled = run when labels are applied, so that the "Override AutoMerge: name similarity is okay label is respected.
ericphanson marked this conversation as resolved.
Show resolved Hide resolved
# synchronize = run when a commit is pushed to the PR
types: [opened, labeled, synchronize]
workflow_dispatch:

jobs:
AutoMerge:
# Run if the we are not triggered by a label OR we are triggered by a label, and that
# label is one that affects the execution of the workflow
# Note: since the label contains a colon, we need to use a workaround like https://github.com/actions/runner/issues/1019#issuecomment-810482716
# for the syntax to parse correctly.
if: "${{ github.event.action != 'labeled' || (github.event.action == 'labeled' && github.event.label.name == 'Override AutoMerge: name similarity is okay') }}"
runs-on: ${{ matrix.os }}
strategy:
matrix:
Expand Down
24 changes: 23 additions & 1 deletion src/AutoMerge/guidelines.jl
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ To prevent confusion between similarly named packages, the names of new packages
[VisualStringDistances.jl](https://github.com/ericphanson/VisualStringDistances.jl)
between the package name and any existing package must exceeds a certain
a hand-chosen threshold (currently 2.5).

These checks can be overridden by applying a label `Override AutoMerge: name similarity is okay` to the PR. This will turn off the check as long as the label is applied to the PR.
""",
check=data -> meets_distance_check(data.pkg, data.registry_master),
)
Expand Down Expand Up @@ -373,6 +375,24 @@ function meets_distance_check(
return (false, message)
end

# Used in `pull_request_build` to determine if we should
# perform the distance check or not.
# We expect to be passed the `labels` field of a PullRequest:
# <https://github.com/JuliaWeb/GitHub.jl/blob/d24bd6798609ae356db308d65577e99aad0cf432/src/issues/pull_requests.jl#L33>
function perform_distance_check(labels)
# No labels? Do the check
isnothing(labels) && return true
for label in labels
if label.name === "Override AutoMerge: name similarity is okay"
# found the override! Skip the check
@debug "Found label; skipping distance check" label.name
return false
end
end
# Did not find the override. Perform the check.
return true
end

const guideline_normal_capitalization = Guideline(;
info="Normal capitalization",
docs=string(
Expand Down Expand Up @@ -956,6 +976,7 @@ function get_automerge_guidelines(
check_license::Bool,
this_is_jll_package::Bool,
this_pr_can_use_special_jll_exceptions::Bool,
use_distance_check::Bool
)
guidelines = [
(guideline_registry_consistency_tests_pass, true),
Expand Down Expand Up @@ -987,7 +1008,7 @@ function get_automerge_guidelines(
# prints the list of similar package names in
# the automerge comment. To make the comment easy
# to read, we want this list to be at the end.
(guideline_distance_check, true),
(guideline_distance_check, use_distance_check),
]
return guidelines
end
Expand All @@ -997,6 +1018,7 @@ function get_automerge_guidelines(
check_license::Bool,
this_is_jll_package::Bool,
this_pr_can_use_special_jll_exceptions::Bool,
use_distance_check::Bool # unused for new versions
)
guidelines = [
(guideline_registry_consistency_tests_pass, true),
Expand Down
1 change: 1 addition & 0 deletions src/AutoMerge/pull_requests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ function pull_request_build(data::GitHubAutoMergeData; check_license)::Nothing
check_license=check_license,
this_is_jll_package=this_is_jll_package,
this_pr_can_use_special_jll_exceptions=this_pr_can_use_special_jll_exceptions,
use_distance_check=perform_distance_check(data.pr.labels)
)
checked_guidelines = Guideline[]

Expand Down
12 changes: 9 additions & 3 deletions test/automerge-unit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,12 @@ end
"ReallyLooooongNameCD", ["ReallyLooooongNameAB"]
)[1]
end
@testset "perform_distance_check" begin
@test AutoMerge.perform_distance_check(nothing)
@test AutoMerge.perform_distance_check([GitHub.Label(; name="hi")])
@test !AutoMerge.perform_distance_check([GitHub.Label(; name="Override AutoMerge: name similarity is okay")])
@test !AutoMerge.perform_distance_check([GitHub.Label(; name="hi"), GitHub.Label(; name="Override AutoMerge: name similarity is okay")])
end
@testset "`get_all_non_jll_package_names`" begin
registry_path = joinpath(DEPOT_PATH[1], "registries", "General")
packages = AutoMerge.get_all_non_jll_package_names(registry_path)
Expand Down Expand Up @@ -617,7 +623,7 @@ end
@test result[1]
result = has_osi_license_in_depot("VisualStringDistances")
@test result[1]

# Now, what happens if there's also a non-OSI license in another file?
pkg_path = pkgdir_from_depot(tmp_depot, "UnbalancedOptimalTransport")
open(joinpath(pkg_path, "LICENSE2"); write=true) do io
Expand All @@ -627,12 +633,12 @@ end
end
result = has_osi_license_in_depot("UnbalancedOptimalTransport")
@test result[1]

# What if we also remove the original license, leaving only the CC0 license?
rm(joinpath(pkg_path, "LICENSE"))
result = has_osi_license_in_depot("UnbalancedOptimalTransport")
@test !result[1]

# What about no license at all?
pkg_path = pkgdir_from_depot(tmp_depot, "VisualStringDistances")
rm(joinpath(pkg_path, "LICENSE"))
Expand Down
Loading