codeowner_validator 0.1.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b7c6486b06a5d901e16a9832878588af1e3a053c2dc831a10ec391712019fba
4
- data.tar.gz: b1d39da8af2673c74ba6d054588538c0c21b8b251333b8e65c83a1af970bc992
3
+ metadata.gz: d35f65763b9fadd44bcb19531f9562d50c50e4f2e2c4c0a5f3a732390b6cb994
4
+ data.tar.gz: c92f01df71595708c7b2545f4cd9062472ccd3e322eaee80ad5a7610c6de34fc
5
5
  SHA512:
6
- metadata.gz: eaf28f5df9af24d42f6b197fa75f3596f2549609917ed6b2cf8cfb6d70b9e4d3391b4a4c365723cd950e07cd5012db4308937ae2287d506d54318ca81fc91a99
7
- data.tar.gz: e16eccee7010b4713cba8440d7e8d134ce9976d68a5a3437e1fa0e2531b3e6972696d9ce65877c0d4280e98288d495aec09221388bbe1abd3f2fed73c0aa32fb
6
+ metadata.gz: 2e0ea092271b5c2bf7f2b5d2260dec6c0ab562332323ac21f5bd2787915228cb0e8b133ad8eec34e8bce91106cd3dfab74b2309b3a346557b506fe1dcf6241f9
7
+ data.tar.gz: c48f25546f3e3b369c1f4dbace312c9d08a3a5fb33b0fa01bb6a4a388b6c8802054a0bc01eab9e1fb6d94eaa75fbcca1c7d78f3cbaba0c84950401f2d71f4744
@@ -13,7 +13,7 @@ jobs:
13
13
  fail-fast: false
14
14
  matrix:
15
15
  ruby:
16
- - 2.7
16
+ - 3.2
17
17
  name: Ruby-${{matrix.ruby}}
18
18
  steps:
19
19
  - name: Check out
@@ -4,11 +4,12 @@ name: CI
4
4
 
5
5
  on:
6
6
  push:
7
- branches: ['**']
7
+ branches: ['main']
8
8
  pull_request:
9
9
  branches: ['main']
10
10
  schedule:
11
11
  - cron: '0 1 * * SUN'
12
+ workflow_dispatch:
12
13
 
13
14
  jobs:
14
15
  tests:
@@ -17,9 +18,9 @@ jobs:
17
18
  fail-fast: false
18
19
  matrix:
19
20
  ruby:
20
- - 2.6
21
21
  - 2.7
22
22
  - 3.0
23
+ - 3.2
23
24
  name: Ruby-${{matrix.ruby}}
24
25
  continue-on-error: ${{matrix.ruby == 'head'}}
25
26
  steps:
@@ -32,6 +33,13 @@ jobs:
32
33
  ruby-version: ${{ matrix.ruby }}
33
34
  - name: Install dependencies
34
35
  run: bundle install --jobs 4 --retry 3
36
+ - if: github.event_name == 'pull_request'
37
+ name: Danger
38
+ uses: danger/danger-js@9.1.8
39
+ env:
40
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
+ # https://github.com/danger/danger-js/issues/557#issuecomment-664851950
42
+ DANGER_DISABLE_TRANSPILATION: true
35
43
  - name: Run tests
36
44
  run: bundle exec rspec
37
45
  - name: Run Rubocop
data/.rubocop.yml CHANGED
@@ -1,18 +1,14 @@
1
1
  require:
2
2
  - rubocop-performance
3
- - rubocop-rspec
4
- - rubocop-rake
5
3
 
6
4
  AllCops:
7
- TargetRubyVersion: 2.6
5
+ TargetRubyVersion: 3.2
8
6
  DisabledByDefault: true
9
7
  Exclude:
10
- - 'bin/{bundle,bundle-audit,bundler-audit,rake,rspec,rubocop}'
8
+ - 'bin/{bundle,bundle-audit,bundler-audit,rackup,rake,rspec,rubocop}'
11
9
  - 'target/**/*'
12
10
  - 'vendor/**/*'
13
- - 'build/**/*'
14
- - 'pkg/**/*'
15
- - 'tmp/**/*'
11
+ SuggestExtensions: false
16
12
 
17
13
  # Bundler Cop Configuration
18
14
  # https://docs.rubocop.org/en/stable/cops_bundler/
@@ -240,7 +236,7 @@ Lint/AssignmentInCondition:
240
236
  Enabled: true
241
237
  Lint/BigDecimalNew:
242
238
  Enabled: true
243
- # Supercedes Lint/UselessComparison in rubocop 0.89.
239
+ # Supersedes Lint/UselessComparison in rubocop 0.89.
244
240
  Lint/BinaryOperatorWithIdenticalOperands:
245
241
  Enabled: true
246
242
  Lint/BooleanSymbol:
@@ -301,7 +297,7 @@ Lint/MissingCopEnableDirective:
301
297
  Enabled: true
302
298
  Lint/MissingSuper:
303
299
  # Disabled. This cop is well-meaning, but doesn't provide exemption of cases where invocation of
304
- # super is not possible. Supercedes Style/MethodMissingSuper in rubocop 0.89.
300
+ # super is not possible. Supersedes Style/MethodMissingSuper in rubocop 0.89.
305
301
  Enabled: false
306
302
  Lint/MultipleComparison:
307
303
  Enabled: true
@@ -387,8 +383,6 @@ Lint/UselessAccessModifier:
387
383
  Enabled: true
388
384
  Lint/UselessAssignment:
389
385
  Enabled: true
390
- Lint/UselessElseWithoutRescue:
391
- Enabled: true
392
386
  Lint/UselessSetterCall:
393
387
  Enabled: true
394
388
  Lint/Void:
@@ -451,7 +445,7 @@ Naming/MemoizedInstanceVariableName:
451
445
  Enabled: true
452
446
  Naming/MethodName:
453
447
  Enabled: true
454
- IgnoredPatterns:
448
+ AllowedPatterns:
455
449
  - 'do_GET'
456
450
  - 'do_POST'
457
451
  - 'do_PUT'
@@ -467,9 +461,10 @@ Naming/RescuedExceptionsVariableName:
467
461
  Enabled: false
468
462
  Naming/VariableName:
469
463
  Enabled: true
464
+ # Disabled. It's acceptable (and in heavy usage already) to name things like "data_model_1"
465
+ # instead of forcing "data_model1".
470
466
  Naming/VariableNumber:
471
- Enabled: true
472
-
467
+ Enabled: false
473
468
 
474
469
  # Performance Cop Configuration
475
470
  # https://rubocop-performance.readthedocs.io/en/stable/cops_performance/
@@ -604,15 +599,11 @@ Style/DefWithParentheses:
604
599
  Style/Dir:
605
600
  Enabled: true
606
601
  Style/Documentation:
607
- Enabled: true
608
- Exclude:
609
- - test/**/*
610
- - spec/**/*
602
+ # Disabled. Documentation is required, but enforcement here does not seem to work.
603
+ Enabled: false
611
604
  Style/DocumentationMethod:
612
- Enabled: true
613
- Exclude:
614
- - test/**/*
615
- - spec/**/*
605
+ # Disabled. Documentation is required, but enforcement here does not seem to work.
606
+ Enabled: false
616
607
  Style/DoubleCopDisableDirective:
617
608
  Enabled: true
618
609
  Style/DoubleNegation:
@@ -658,7 +649,7 @@ Style/GlobalVars:
658
649
  Style/GuardClause:
659
650
  Enabled: true
660
651
  Style/HashSyntax:
661
- Enabled: true
652
+ Enabled: false
662
653
  Style/IdenticalConditionalBranches:
663
654
  Enabled: true
664
655
  Style/IfInsideElse:
@@ -703,7 +694,7 @@ Style/MethodCallWithoutArgsParentheses:
703
694
  Enabled: true
704
695
  Style/MethodCalledOnDoEndBlock:
705
696
  # Disabled. It is acceptable to call a method at the end of a do/end block. In particular, this is
706
- # occationally needed in RSpec code.
697
+ # occasionally needed in RSpec code.
707
698
  Enabled: false
708
699
  Style/MethodDefParentheses:
709
700
  Enabled: true
@@ -803,7 +794,8 @@ Style/RedundantCondition:
803
794
  Style/RedundantConditional:
804
795
  Enabled: true
805
796
  Style/RedundantException:
806
- Enabled: true
797
+ # Disabled. With ImplicitRuntimeError enabled, disable subsequent warning if consumer wishes to continue using RuntimeError
798
+ Enabled: false
807
799
  Style/RedundantFreeze:
808
800
  Enabled: true
809
801
  Style/RedundantInterpolation:
@@ -855,8 +847,8 @@ Style/SpecialGlobalVars:
855
847
  Style/StabbyLambdaParentheses:
856
848
  Enabled: true
857
849
  Style/StderrPuts:
858
- # Disabled. This cop functionally equates use of STDERR with optional warnings. This may be true in some use cases, but there
859
- # are times when using STDERR in CLIs is not an optional warning.
850
+ # Disabled. This cop functionally equates use of STDERR with optional warnings. This may be true
851
+ # in some use cases, but there are times when using STDERR in CLIs is not an optional warning.
860
852
  Enabled: false
861
853
  Style/StringHashKeys:
862
854
  # Disabled. There are many use cases where using Strings for Hash keys is required.
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.6
1
+ ruby-3.2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # 0.1.0
2
- Initial release
2
+ - Initial release
3
3
 
4
4
  # 0.1.1
5
- Fix homepage reference
5
+ - Fix homepage reference
6
+
7
+ # 0.2.0
8
+ - Update version of thor to have a broader availability ([#6](https://github.com/cerner/codeowner_validator/pull/6))
9
+
10
+ # 0.3.0
11
+ - Update to support ruby 3.2 ([#9](https://github.com/cerner/codeowner_validator/pull/9))
data/Gemfile CHANGED
@@ -14,7 +14,3 @@ gem 'rubocop-performance', '~> 1.8', require: false
14
14
  gem 'rubocop-rake', '~> 0.5', require: false
15
15
  gem 'rubocop-rspec', '~> 2.1', require: false
16
16
  gem 'simplecov', '~> 0.19', require: false
17
-
18
- # debugging
19
- gem 'debase', '~> 0.2.5.beta2'
20
- gem 'ruby-debug-ide'
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # CODEOWNER Validator
2
2
 
3
- ![CI](https://github.com/cerner/codeowner_validator/actions/workflows/ci.yml/badge.svg)
3
+ [![Cerner OSS](https://badgen.net/badge/Cerner/OSS/blue)](http://engineering.cerner.com/2014/01/cerner-and-open-source/)
4
+ [![License](https://badgen.net/github/license/cerner/codeowner_validator)](https://github.com/cerner/codeowner_validator/blob/main/LICENSE)
5
+ [![Build Status](https://github.com/cerner/codeowner_validator/actions/workflows/ci.yml/badge.svg)](https://github.com/cerner/codeowner_validator/actions/workflows/ci.yml)
4
6
 
5
7
  This library provides interactions with the GitHub CODEOWNERS file for performing validation tasks that include
6
8
  * ownership checks
@@ -157,4 +159,4 @@ Everyone interacting in the CodeownerValidator project’s codebases, issue trac
157
159
  Shout-out to @jonatas and his project [codeowners-checker](https://github.com/toptal/codeowners-checker). The checker provided easy reusage which greatly reduced the
158
160
  dependencies within this project.
159
161
 
160
- [pathspec-ruby]: https://github.com/highb/pathspec-ruby
162
+ [pathspec-ruby]: https://github.com/highb/pathspec-ruby
@@ -27,10 +27,13 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.required_ruby_version = '>= 2.6.2'
30
+ # rubocop:disable Gemspec/RequiredRubyVersion
31
+ # The intent is for supportability from ruby 2.7 and greater
32
+ spec.required_ruby_version = '>= 2.7.6'
33
+ # rubocop:enable Gemspec/RequiredRubyVersion
31
34
 
32
35
  spec.add_dependency 'rainbow', '>= 2.0', '< 4.0.0'
33
- spec.add_dependency 'thor', '~> 0.19'
36
+ spec.add_dependency 'thor', '>= 0.19'
34
37
 
35
38
  spec.add_dependency 'tty-prompt', '~> 0.12'
36
39
  spec.add_dependency 'tty-spinner', '~> 0.4'
data/dangerfile.js ADDED
@@ -0,0 +1,97 @@
1
+ const PR_LINK = `([#${danger.github.pr.number}](${danger.github.pr.html_url}))`;
2
+
3
+ const CHANGELOG_SUMMARY_TITLE = `Instructions and example for changelog`;
4
+ const CHANGELOG_BODY = `Please add an entry to \`CHANGELOG.md\` to the "Unreleased" section. Make sure the entry includes this PR's number.
5
+
6
+ Example:`;
7
+
8
+ const CHANGELOG_END_BODY = `If none of the above apply, you can opt out of this check by adding \`#skip-changelog\` to the PR description.`;
9
+
10
+ function getCleanTitleWithPrLink() {
11
+ const title = danger.github.pr.title;
12
+ return title.split(": ").slice(-1)[0].trim().replace(/\.+$/, "") + ` ` + PR_LINK;
13
+ }
14
+
15
+ function getChangelogDetailsHtml() {
16
+ return `
17
+ ### ${CHANGELOG_SUMMARY_TITLE}
18
+
19
+ ${CHANGELOG_BODY}
20
+
21
+ \`\`\`markdown
22
+ - ${getCleanTitleWithPrLink()}
23
+ \`\`\`
24
+
25
+ ${CHANGELOG_END_BODY}
26
+ `;
27
+ }
28
+
29
+ function getChangelogDetailsTxt() {
30
+ return (
31
+ CHANGELOG_SUMMARY_TITLE +
32
+ "\n" +
33
+ CHANGELOG_BODY +
34
+ "\n" +
35
+ getCleanTitleWithPrLink() +
36
+ "\n" +
37
+ CHANGELOG_END_BODY
38
+ );
39
+ }
40
+
41
+ function HasPermissionToComment() {
42
+ return (
43
+ danger.github.pr.head.repo.git_url == danger.github.pr.base.repo.git_url
44
+ );
45
+ }
46
+
47
+ async function containsChangelog(path) {
48
+ const contents = await danger.github.utils.fileContents(path);
49
+ return contents.includes(PR_LINK);
50
+ }
51
+
52
+ async function checkChangelog() {
53
+ const skipChangelog =
54
+ danger.github && (danger.github.pr.body + "").toLowerCase().includes("#skip-changelog");
55
+ if (skipChangelog) {
56
+ return;
57
+ }
58
+
59
+ const hasChangelog = await containsChangelog("CHANGELOG.md");
60
+
61
+ if (!hasChangelog) {
62
+ if (HasPermissionToComment()) {
63
+ fail("Please consider adding a changelog entry for the next release.");
64
+ markdown(getChangelogDetailsHtml());
65
+ } else {
66
+ //Fallback
67
+ console.log(
68
+ "Please consider adding a changelog entry for the next release."
69
+ );
70
+ console.log(getChangelogDetailsTxt());
71
+ process.exitCode = 1;
72
+ }
73
+ }
74
+ }
75
+
76
+ async function checkIfFeature() {
77
+ const title = danger.github.pr.title;
78
+ if (title.startsWith("feat:") && HasPermissionToComment()) {
79
+ message(
80
+ 'Do not forget to update <a href="https://github.com/getsentry/sentry-docs">Sentry-docs</a> with your feature once the pull request gets approved.'
81
+ );
82
+ }
83
+ }
84
+
85
+ async function checkAll() {
86
+ // See: https://spectrum.chat/danger/javascript/support-for-github-draft-prs~82948576-ce84-40e7-a043-7675e5bf5690
87
+ const isDraft = danger.github.pr.mergeable_state === "draft";
88
+
89
+ if (isDraft) {
90
+ return;
91
+ }
92
+
93
+ await checkIfFeature();
94
+ await checkChangelog();
95
+ }
96
+
97
+ schedule(checkAll);
@@ -262,10 +262,8 @@ module CodeownerValidator
262
262
  @codeowner_file_paths = %w[CODEOWNERS docs/CODEOWNERS .github/CODEOWNERS]
263
263
 
264
264
  # allow customization of the locations to search for the file
265
- if ENV['CODEOWNER_FILE_PATHS']
266
- ENV['CODEOWNER_FILE_PATHS']&.split(',')&.each(&:strip!)&.each do |str|
267
- @codeowner_file_paths << str
268
- end
265
+ ENV['CODEOWNER_FILE_PATHS']&.split(',')&.each(&:strip!)&.each do |str|
266
+ @codeowner_file_paths << str
269
267
  end
270
268
 
271
269
  @codeowner_file_paths
@@ -12,7 +12,7 @@ module CodeownerValidator
12
12
  class << self
13
13
  # @see CodeownerValidator::Group::Comment.match?
14
14
  def match?(type)
15
- Comment::TYPE_ERROR == type
15
+ type == Comment::TYPE_ERROR
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module CodeownerValidator
12
12
  class << self
13
13
  # @see CodeownerValidator::Group::Comment.match?
14
14
  def match?(type)
15
- Comment::TYPE_INFO == type
15
+ type == Comment::TYPE_INFO
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module CodeownerValidator
12
12
  class << self
13
13
  # @see CodeownerValidator::Group::Comment.match?
14
14
  def match?(type)
15
- Comment::TYPE_VERBOSE == type
15
+ type == Comment::TYPE_VERBOSE
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module CodeownerValidator
12
12
  class << self
13
13
  # @see CodeownerValidator::Group::Comment.match?
14
14
  def match?(type)
15
- Comment::TYPE_WARN == type
15
+ type == Comment::TYPE_WARN
16
16
  end
17
17
  end
18
18
  end
@@ -13,18 +13,23 @@ module CodeownerValidator
13
13
  def in_folder(folder)
14
14
  raise "The folder location '#{folder}' does not exists" unless File.directory?(folder)
15
15
 
16
- if defined?(Bundler)
17
- Bundler.with_clean_env do
18
- Dir.chdir folder do
19
- yield
20
- end
21
- end
22
- else
16
+ with_clean_env do
23
17
  Dir.chdir folder do
24
18
  yield
25
19
  end
26
20
  end
27
21
  end
22
+
23
+ def with_clean_env
24
+ return yield unless defined?(Bundler)
25
+
26
+ if Bundler.respond_to?(:with_unbundled_env)
27
+ Bundler.with_unbundled_env { yield }
28
+ else
29
+ # Deprecated on Bundler 2.1
30
+ Bundler.with_clean_env { yield }
31
+ end
32
+ end
28
33
  end
29
34
  end
30
35
  # rubocop:enable Style/ImplicitRuntimeError
@@ -79,10 +79,8 @@ module CodeownerValidator
79
79
  @whitelist_file_paths = %w[CODEOWNERS_WHITELIST .github/CODEOWNERS_WHITELIST]
80
80
 
81
81
  # allow customization of the locations to search for the file
82
- if ENV['CODEOWNER_WHITELIST_FILE_PATHS']
83
- ENV['CODEOWNER_WHITELIST_FILE_PATHS']&.split(',')&.each(&:strip!)&.each do |str|
84
- @whitelist_file_paths << str
85
- end
82
+ ENV['CODEOWNER_WHITELIST_FILE_PATHS']&.split(',')&.each(&:strip!)&.each do |str|
83
+ @whitelist_file_paths << str
86
84
  end
87
85
 
88
86
  @whitelist_file_paths
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'codeowner_validator/common/tasks/base'
4
+ require 'codeowner_validator/group/comment'
4
5
 
5
6
  module CodeownerValidator
6
7
  module Tasks
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'codeowner_validator/common/tasks/base'
4
+ require 'codeowner_validator/group/comment'
4
5
 
5
6
  module CodeownerValidator
6
7
  module Tasks
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeownerValidator
4
- VERSION = '0.1.1'
4
+ VERSION = '0.3.0'
5
5
 
6
6
  # version module
7
7
  module Version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeowner_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Howdeshell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2023-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rainbow
@@ -34,14 +34,14 @@ dependencies:
34
34
  name: thor
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0.19'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.19'
47
47
  - !ruby/object:Gem::Dependency
@@ -157,6 +157,7 @@ files:
157
157
  - bin/rspec
158
158
  - bin/rubocop
159
159
  - codeowner_validator.gemspec
160
+ - dangerfile.js
160
161
  - lib/codeowner_validator.rb
161
162
  - lib/codeowner_validator/cli/validator_cli.rb
162
163
  - lib/codeowner_validator/code_owners.rb
@@ -190,14 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
191
  requirements:
191
192
  - - ">="
192
193
  - !ruby/object:Gem::Version
193
- version: 2.6.2
194
+ version: 2.7.6
194
195
  required_rubygems_version: !ruby/object:Gem::Requirement
195
196
  requirements:
196
197
  - - ">="
197
198
  - !ruby/object:Gem::Version
198
199
  version: '0'
199
200
  requirements: []
200
- rubygems_version: 3.0.3
201
+ rubygems_version: 3.4.10
201
202
  signing_key:
202
203
  specification_version: 4
203
204
  summary: Write a short summary, because RubyGems requires one.