audit: permit license groups

This commit is contained in:
Jonathan Chang 2020-08-04 20:42:54 +10:00
parent e76cea16b1
commit f1e06b865a
2 changed files with 46 additions and 10 deletions

View File

@ -335,6 +335,14 @@ module Homebrew
openssl@1.1 openssl@1.1
].freeze ].freeze
PERMITTED_LICENSE_MISMATCHES = {
"AGPL-3.0" => ["AGPL-3.0-only", "AGPL-3.0-or-later"],
"GPL-2.0" => ["GPL-2.0-only", "GPL-2.0-or-later"],
"GPL-3.0" => ["GPL-3.0-only", "GPL-3.0-or-later"],
"LGPL-2.1" => ["LGPL-2.1-only", "LGPL-2.1-or-later"],
"LGPL-3.0" => ["LGPL-3.0-only", "LGPL-3.0-or-later"],
}.freeze
def audit_license def audit_license
if formula.license.present? if formula.license.present?
non_standard_licenses = formula.license.map do |license| non_standard_licenses = formula.license.map do |license|
@ -355,12 +363,12 @@ module Homebrew
github_license = GitHub.get_repo_license(user, repo) github_license = GitHub.get_repo_license(user, repo)
return if github_license && (formula.license + ["NOASSERTION"]).include?(github_license) return if github_license && (formula.license + ["NOASSERTION"]).include?(github_license)
return if PERMITTED_LICENSE_MISMATCHES[github_license]&.any? { |license| formula.license.include? license }
problem "License mismatch - GitHub license is: #{Array(github_license)}, "\ problem "Formula license #{formula.license} does not match GitHub license #{Array(github_license)}."
"but Formulae license states: #{formula.license}."
elsif @new_formula elsif @new_formula && @core_tap
problem "No license specified for package." problem "Formulae in homebrew/core must specify a license."
end end
end end

View File

@ -102,14 +102,14 @@ module Homebrew
end end
it "detects no license info" do it "detects no license info" do
fa = formula_auditor "foo", <<~RUBY, spdx_data: spdx_data, new_formula: true fa = formula_auditor "foo", <<~RUBY, spdx_data: spdx_data, new_formula: true, core_tap: true
class Foo < Formula class Foo < Formula
url "https://brew.sh/foo-1.0.tgz" url "https://brew.sh/foo-1.0.tgz"
end end
RUBY RUBY
fa.audit_license fa.audit_license
expect(fa.problems.first).to match "No license specified for package." expect(fa.problems.first).to match "Formulae in homebrew/core must specify a license."
end end
it "detects if license is not a standard spdx-id" do it "detects if license is not a standard spdx-id" do
@ -174,6 +174,34 @@ module Homebrew
expect(fa.problems).to be_empty expect(fa.problems).to be_empty
end end
it "checks online and verifies that a standard license id is in the same exempted license group"\
"as what is indicated on its Github repo" do
fa = formula_auditor "cask", <<~RUBY, spdx_data: spdx_data, online: true, new_formula: true
class Cask < Formula
url "https://github.com/cask/cask/archive/v0.8.4.tar.gz"
head "https://github.com/cask/cask.git"
license "GPL-3.0-or-later"
end
RUBY
fa.audit_license
expect(fa.problems).to be_empty
end
it "checks online and verifies that a standard license array is in the same exempted license group"\
"as what is indicated on its Github repo" do
fa = formula_auditor "cask", <<~RUBY, spdx_data: spdx_data, online: true, new_formula: true
class Cask < Formula
url "https://github.com/cask/cask/archive/v0.8.4.tar.gz"
head "https://github.com/cask/cask.git"
license ["GPL-3.0-or-later", "MIT"]
end
RUBY
fa.audit_license
expect(fa.problems).to be_empty
end
it "checks online and detects that a formula-specified license is not "\ it "checks online and detects that a formula-specified license is not "\
"the same as what is indicated on its Github repository" do "the same as what is indicated on its Github repository" do
fa = formula_auditor "cask", <<~RUBY, online: true, spdx_data: spdx_data, core_tap: true, new_formula: true fa = formula_auditor "cask", <<~RUBY, online: true, spdx_data: spdx_data, core_tap: true, new_formula: true
@ -185,8 +213,8 @@ module Homebrew
RUBY RUBY
fa.audit_license fa.audit_license
expect(fa.problems.first).to match "License mismatch - GitHub license is: [\"GPL-3.0\"], "\ expect(fa.problems.first).to match "Formula license #{Array(standard_mismatch_spdx_id)} "\
"but Formulae license states: #{Array(standard_mismatch_spdx_id)}." "does not match GitHub license [\"GPL-3.0\"]."
end end
it "checks online and detects that an array of license does not contain "\ it "checks online and detects that an array of license does not contain "\
@ -200,8 +228,8 @@ module Homebrew
RUBY RUBY
fa.audit_license fa.audit_license
expect(fa.problems.first).to match "License mismatch - GitHub license is: [\"GPL-3.0\"], "\ expect(fa.problems.first).to match "Formula license #{license_array_mismatch} "\
"but Formulae license states: #{Array(license_array_mismatch)}." "does not match GitHub license [\"GPL-3.0\"]."
end end
it "checks online and verifies that an array of license contains "\ it "checks online and verifies that an array of license contains "\