git-lint 3.3.2 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/git-lint.gemspec +4 -2
  4. data/lib/git/lint/analyzer.rb +6 -4
  5. data/lib/git/lint/analyzers/abstract.rb +6 -4
  6. data/lib/git/lint/analyzers/commit_author_capitalization.rb +2 -2
  7. data/lib/git/lint/analyzers/commit_author_email.rb +2 -2
  8. data/lib/git/lint/analyzers/commit_author_name.rb +2 -2
  9. data/lib/git/lint/analyzers/commit_subject_prefix.rb +1 -1
  10. data/lib/git/lint/analyzers/commit_trailer_collaborator_capitalization.rb +5 -2
  11. data/lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb +2 -2
  12. data/lib/git/lint/analyzers/commit_trailer_collaborator_email.rb +5 -3
  13. data/lib/git/lint/analyzers/commit_trailer_collaborator_key.rb +2 -2
  14. data/lib/git/lint/analyzers/commit_trailer_collaborator_name.rb +5 -3
  15. data/lib/git/lint/cli/actions/analyze/branch.rb +5 -9
  16. data/lib/git/lint/cli/actions/analyze/commit.rb +5 -7
  17. data/lib/git/lint/cli/actions/config.rb +5 -7
  18. data/lib/git/lint/cli/actions/container.rb +25 -0
  19. data/lib/git/lint/cli/actions/hook.rb +5 -9
  20. data/lib/git/lint/cli/actions/import.rb +13 -0
  21. data/lib/git/lint/cli/parser.rb +8 -5
  22. data/lib/git/lint/cli/parsers/core.rb +5 -5
  23. data/lib/git/lint/cli/shell.rb +17 -30
  24. data/lib/git/lint/commits/loader.rb +13 -22
  25. data/lib/git/lint/commits/systems/circle_ci.rb +1 -7
  26. data/lib/git/lint/commits/systems/container.rb +25 -0
  27. data/lib/git/lint/commits/systems/git_hub_action.rb +1 -7
  28. data/lib/git/lint/commits/systems/import.rb +13 -0
  29. data/lib/git/lint/commits/systems/local.rb +1 -7
  30. data/lib/git/lint/commits/systems/netlify_ci.rb +3 -13
  31. data/lib/git/lint/container.rb +4 -24
  32. data/lib/git/lint/import.rb +9 -0
  33. data.tar.gz.sig +0 -0
  34. metadata +48 -16
  35. metadata.gz.sig +0 -0
  36. data/lib/git/lint/commits/container.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1b17af3b62363ed7de4584d22bc904539be015aa543bce443a91cecbabfa2f6
4
- data.tar.gz: e17cee80abbc948f42fa5450db8d970f6f0410b15af1f9bd1eecd0e5b0cd3f4d
3
+ metadata.gz: 8db52556e39c3841f3c14399aba51d98569a2be8507ddb491db2141f1a5c69ef
4
+ data.tar.gz: 88f6abbbc71e0359ce9c4478cd18b087cc84d6845cfb3aea076ffbb2aeffec69
5
5
  SHA512:
6
- metadata.gz: 44c5e86cbb951472ec53b1efb32f7ed3e2b1a5f1810518479f0d3631fbd1428edb79fa844fad1e24234a1a7d9ba68aaf4b7df9f076e634ee286e670468896d15
7
- data.tar.gz: 530f8b51a463be0ed3db69e3ad92612789d5223850f9272e5b67fc6c97f03dbf651b7a5cea1ebf482e34ec88a9bad4d677d42baf05b34fb48f38901720be35c6
6
+ metadata.gz: 5114c6e63c3f59b6c7643e8eb201f6119ed3fd5cfcdfa518f3fe90287e34f2b27b74d0f89f4890f560e58bf1244b89f94f64f14ce8c7a2371d0dc1abce60bef2
7
+ data.tar.gz: fa5b831b4f0f938dd16d579647813ff49baabf73d960c70a5dcaff74b6785c9111a2513428cf00cc18bf00227975639650d5152d7e87731493415c815e36448f
checksums.yaml.gz.sig CHANGED
Binary file
data/git-lint.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "git-lint"
5
- spec.version = "3.3.2"
5
+ spec.version = "4.0.0"
6
6
  spec.authors = ["Brooke Kuhlmann"]
7
7
  spec.email = ["brooke@alchemists.io"]
8
8
  spec.homepage = "https://www.alchemists.io/projects/git-lint"
@@ -22,7 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.cert_chain = [Gem.default_cert_path]
23
23
 
24
24
  spec.required_ruby_version = "~> 3.1"
25
- spec.add_dependency "dry-container", "~> 0.9.0"
25
+ spec.add_dependency "auto_injector", "~> 0.4"
26
+ spec.add_dependency "cogger", "~> 0.0"
27
+ spec.add_dependency "dry-container", "~> 0.9"
26
28
  spec.add_dependency "git_plus", "~> 1.1"
27
29
  spec.add_dependency "pastel", "~> 0.8"
28
30
  spec.add_dependency "refinements", "~> 9.2"
@@ -4,6 +4,8 @@ module Git
4
4
  module Lint
5
5
  # Runs all analyzers.
6
6
  class Analyzer
7
+ include Import[:configuration]
8
+
7
9
  ANALYZERS = [
8
10
  Analyzers::CommitAuthorCapitalization,
9
11
  Analyzers::CommitAuthorEmail,
@@ -32,11 +34,11 @@ module Git
32
34
  def initialize analyzers: ANALYZERS,
33
35
  collector: Collector.new,
34
36
  reporter: Reporters::Branch,
35
- container: Container
37
+ **dependencies
38
+ super(**dependencies)
36
39
  @analyzers = analyzers
37
40
  @collector = collector
38
41
  @reporter = reporter
39
- @container = container
40
42
  end
41
43
  # rubocop:enable Metrics/ParameterLists
42
44
 
@@ -48,7 +50,7 @@ module Git
48
50
 
49
51
  private
50
52
 
51
- attr_reader :analyzers, :collector, :reporter, :container
53
+ attr_reader :analyzers, :collector, :reporter
52
54
 
53
55
  def process commits
54
56
  collector.clear
@@ -70,7 +72,7 @@ module Git
70
72
  end
71
73
  end
72
74
 
73
- def settings = container[:configuration].analyzers
75
+ def settings = configuration.analyzers
74
76
  end
75
77
  end
76
78
  end
@@ -7,6 +7,8 @@ module Git
7
7
  module Analyzers
8
8
  # An abstract class which provides basic functionality from which all analyzers inherit from.
9
9
  class Abstract
10
+ include Import[:configuration, :environment]
11
+
10
12
  using ::Refinements::Strings
11
13
 
12
14
  LEVELS = %i[warn error].freeze
@@ -20,9 +22,9 @@ module Git
20
22
 
21
23
  attr_reader :commit
22
24
 
23
- def initialize commit, container: Container
25
+ def initialize commit, **dependencies
26
+ super(**dependencies)
24
27
  @commit = commit
25
- @container = container
26
28
  @filter_list = load_filter_list
27
29
  end
28
30
 
@@ -50,7 +52,7 @@ module Git
50
52
 
51
53
  protected
52
54
 
53
- attr_reader :container, :filter_list
55
+ attr_reader :filter_list
54
56
 
55
57
  def load_filter_list = []
56
58
 
@@ -74,7 +76,7 @@ module Git
74
76
  fail NotImplementedError, "The `.#{__method__}` method must be implemented."
75
77
  end
76
78
 
77
- def settings = container[:configuration].find_setting(self.class.id)
79
+ def settings = configuration.find_setting(self.class.id)
78
80
  end
79
81
  end
80
82
  end
@@ -5,8 +5,8 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes author for proper capitalization of author name.
7
7
  class CommitAuthorCapitalization < Abstract
8
- def initialize commit, validator: Validators::Capitalization
9
- super commit
8
+ def initialize commit, validator: Validators::Capitalization, **dependencies
9
+ super commit, **dependencies
10
10
  @validator = validator
11
11
  end
12
12
 
@@ -5,8 +5,8 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes author email address for proper format.
7
7
  class CommitAuthorEmail < Abstract
8
- def initialize commit, validator: Validators::Email
9
- super commit
8
+ def initialize commit, validator: Validators::Email, **dependencies
9
+ super commit, **dependencies
10
10
  @validator = validator
11
11
  end
12
12
 
@@ -5,8 +5,8 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes author name for minimum parts of name.
7
7
  class CommitAuthorName < Abstract
8
- def initialize commit, validator: Validators::Name
9
- super commit
8
+ def initialize commit, validator: Validators::Name, **dependencies
9
+ super commit, **dependencies
10
10
  @validator = validator
11
11
  end
12
12
 
@@ -24,7 +24,7 @@ module Git
24
24
 
25
25
  def locally_prefixed? = !ci? && commit.prefix?
26
26
 
27
- def ci? = container[:environment]["CI"] == "true"
27
+ def ci? = environment["CI"] == "true"
28
28
  end
29
29
  end
30
30
  end
@@ -5,13 +5,16 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes commit trailer collaborator name capitalization.
7
7
  class CommitTrailerCollaboratorCapitalization < Abstract
8
+ # rubocop:disable Metrics/ParameterLists
8
9
  def initialize commit,
9
10
  parser: Parsers::Trailers::Collaborator,
10
- validator: Validators::Capitalization
11
- super commit
11
+ validator: Validators::Capitalization,
12
+ **dependencies
13
+ super commit, **dependencies
12
14
  @parser = parser
13
15
  @validator = validator
14
16
  end
17
+ # rubocop:enable Metrics/ParameterLists
15
18
 
16
19
  def valid? = affected_commit_trailers.empty?
17
20
 
@@ -5,8 +5,8 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes commit trailer collaborator duplication.
7
7
  class CommitTrailerCollaboratorDuplication < Abstract
8
- def initialize commit, parser: Parsers::Trailers::Collaborator
9
- super commit
8
+ def initialize commit, parser: Parsers::Trailers::Collaborator, **dependencies
9
+ super commit, **dependencies
10
10
  @parser = parser
11
11
  @tally = build_tally
12
12
  end
@@ -5,14 +5,16 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes commit trailer collaborator email address format.
7
7
  class CommitTrailerCollaboratorEmail < Abstract
8
+ # rubocop:disable Metrics/ParameterLists
8
9
  def initialize commit,
9
10
  parser: Parsers::Trailers::Collaborator,
10
- validator: Validators::Email
11
-
12
- super commit
11
+ validator: Validators::Email,
12
+ **dependencies
13
+ super commit, **dependencies
13
14
  @parser = parser
14
15
  @validator = validator
15
16
  end
17
+ # rubocop:enable Metrics/ParameterLists
16
18
 
17
19
  def valid? = affected_commit_trailers.empty?
18
20
 
@@ -5,8 +5,8 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes commit trailer collaborator key usage.
7
7
  class CommitTrailerCollaboratorKey < Abstract
8
- def initialize commit, parser: Parsers::Trailers::Collaborator
9
- super commit
8
+ def initialize commit, parser: Parsers::Trailers::Collaborator, **dependencies
9
+ super commit, **dependencies
10
10
  @parser = parser
11
11
  end
12
12
 
@@ -5,14 +5,16 @@ module Git
5
5
  module Analyzers
6
6
  # Analyzes commit trailer collaborator name construction.
7
7
  class CommitTrailerCollaboratorName < Abstract
8
+ # rubocop:disable Metrics/ParameterLists
8
9
  def initialize commit,
9
10
  parser: Parsers::Trailers::Collaborator,
10
- validator: Validators::Name
11
-
12
- super commit
11
+ validator: Validators::Name,
12
+ **dependencies
13
+ super commit, **dependencies
13
14
  @parser = parser
14
15
  @validator = validator
15
16
  end
17
+ # rubocop:enable Metrics/ParameterLists
16
18
 
17
19
  def valid? = affected_commit_trailers.empty?
18
20
 
@@ -7,9 +7,11 @@ module Git
7
7
  module Analyze
8
8
  # Handles analyze action for branch.
9
9
  class Branch
10
- def initialize analyzer: Analyzer.new, container: Container
10
+ include Git::Lint::Import[:repository, :kernel, :logger]
11
+
12
+ def initialize analyzer: Analyzer.new, **dependencies
13
+ super(**dependencies)
11
14
  @analyzer = analyzer
12
- @container = container
13
15
  end
14
16
 
15
17
  def call
@@ -21,7 +23,7 @@ module Git
21
23
 
22
24
  private
23
25
 
24
- attr_reader :analyzer, :container
26
+ attr_reader :analyzer
25
27
 
26
28
  def parse
27
29
  analyzer.call do |collector, reporter|
@@ -29,12 +31,6 @@ module Git
29
31
  kernel.abort if collector.errors?
30
32
  end
31
33
  end
32
-
33
- def repository = container[__method__]
34
-
35
- def kernel = container[__method__]
36
-
37
- def logger = container[__method__]
38
34
  end
39
35
  end
40
36
  end
@@ -7,12 +7,14 @@ module Git
7
7
  module Analyze
8
8
  # Handles analyze action for commit(s) by SHA.
9
9
  class Commit
10
+ include Git::Lint::Import[:kernel, :logger]
11
+
10
12
  def initialize analyzer: Analyzer.new,
11
13
  parser: GitPlus::Parsers::Commits::Saved::History.with_show,
12
- container: Container
14
+ **dependencies
15
+ super(**dependencies)
13
16
  @analyzer = analyzer
14
17
  @parser = parser
15
- @container = container
16
18
  end
17
19
 
18
20
  def call sha = nil
@@ -24,7 +26,7 @@ module Git
24
26
 
25
27
  private
26
28
 
27
- attr_reader :analyzer, :parser, :container
29
+ attr_reader :analyzer, :parser
28
30
 
29
31
  def process sha
30
32
  analyzer.call commits: parser.call(*sha) do |collector, reporter|
@@ -32,10 +34,6 @@ module Git
32
34
  kernel.abort if collector.errors?
33
35
  end
34
36
  end
35
-
36
- def kernel = container[__method__]
37
-
38
- def logger = container[__method__]
39
37
  end
40
38
  end
41
39
  end
@@ -6,9 +6,11 @@ module Git
6
6
  module Actions
7
7
  # Handles gem configuration action.
8
8
  class Config
9
- def initialize configuration: Configuration::Loader::CLIENT, container: Container
9
+ include Git::Lint::Import[:kernel, :logger]
10
+
11
+ def initialize configuration: Configuration::Loader::CLIENT, **dependencies
12
+ super(**dependencies)
10
13
  @configuration = configuration
11
- @container = container
12
14
  end
13
15
 
14
16
  def call action
@@ -21,15 +23,11 @@ module Git
21
23
 
22
24
  private
23
25
 
24
- attr_reader :configuration, :container
26
+ attr_reader :configuration
25
27
 
26
28
  def edit = kernel.system("$EDITOR #{configuration.current}")
27
29
 
28
30
  def view = kernel.system("cat #{configuration.current}")
29
-
30
- def kernel = container[__method__]
31
-
32
- def logger = container[__method__]
33
31
  end
34
32
  end
35
33
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/container"
4
+
5
+ module Git
6
+ module Lint
7
+ module CLI
8
+ module Actions
9
+ # Provides a single container with application and action specific dependencies.
10
+ module Container
11
+ extend Dry::Container::Mixin
12
+
13
+ config.registry = ->(container, key, value, _options) { container[key.to_s] = value }
14
+
15
+ merge Git::Lint::Container
16
+
17
+ register(:analyze_branch) { Analyze::Branch.new }
18
+ register(:analyze_commit) { Analyze::Commit.new }
19
+ register(:config) { Config.new }
20
+ register(:hook) { Hook.new }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -6,9 +6,11 @@ module Git
6
6
  module Actions
7
7
  # Handles unsaved Git commit action.
8
8
  class Hook
9
- def initialize analyzer: Analyzer.new, container: Container
9
+ include Git::Lint::Import[:repository, :kernel, :logger]
10
+
11
+ def initialize analyzer: Analyzer.new, **dependencies
12
+ super(**dependencies)
10
13
  @analyzer = analyzer
11
- @container = container
12
14
  end
13
15
 
14
16
  def call path
@@ -20,13 +22,7 @@ module Git
20
22
 
21
23
  private
22
24
 
23
- attr_reader :analyzer, :container
24
-
25
- def repository = container[__method__]
26
-
27
- def kernel = container[__method__]
28
-
29
- def logger = container[__method__]
25
+ attr_reader :analyzer
30
26
  end
31
27
  end
32
28
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "auto_injector"
4
+
5
+ module Git
6
+ module Lint
7
+ module CLI
8
+ module Actions
9
+ Import = AutoInjector[Container]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -7,26 +7,29 @@ module Git
7
7
  module CLI
8
8
  # Assembles and parses all Command Line Interface (CLI) options.
9
9
  class Parser
10
+ include Import[:configuration]
11
+
10
12
  CLIENT = OptionParser.new nil, 40, " "
11
13
  SECTIONS = [Parsers::Core, Parsers::Analyze].freeze # Order matters.
12
14
 
13
- def initialize sections: SECTIONS, client: CLIENT, container: Container
15
+ def initialize sections: SECTIONS, client: CLIENT, **dependencies
16
+ super(**dependencies)
14
17
  @sections = sections
15
18
  @client = client
16
- @configuration = container[:configuration].dup
19
+ @configuration_duplicate = configuration.dup
17
20
  end
18
21
 
19
22
  def call arguments = []
20
- sections.each { |section| section.call configuration, client: }
23
+ sections.each { |section| section.call configuration_duplicate, client: }
21
24
  client.parse arguments
22
- configuration.freeze
25
+ configuration_duplicate.freeze
23
26
  end
24
27
 
25
28
  def to_s = client.to_s
26
29
 
27
30
  private
28
31
 
29
- attr_reader :sections, :client, :configuration
32
+ attr_reader :sections, :client, :configuration_duplicate
30
33
  end
31
34
  end
32
35
  end
@@ -8,16 +8,18 @@ module Git
8
8
  module Parsers
9
9
  # Handles parsing of Command Line Interface (CLI) core options.
10
10
  class Core
11
+ include Import[:specification]
12
+
11
13
  using ::Refinements::Structs
12
14
 
13
15
  def self.call(...) = new(...).call
14
16
 
15
17
  def initialize configuration = Container[:configuration],
16
18
  client: Parser::CLIENT,
17
- container: Container
19
+ **dependencies
20
+ super(**dependencies)
18
21
  @configuration = configuration
19
22
  @client = client
20
- @container = container
21
23
  end
22
24
 
23
25
  def call arguments = []
@@ -30,7 +32,7 @@ module Git
30
32
 
31
33
  private
32
34
 
33
- attr_reader :configuration, :client, :container
35
+ attr_reader :configuration, :client
34
36
 
35
37
  def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
36
38
 
@@ -68,8 +70,6 @@ module Git
68
70
  configuration.merge! action_help: true
69
71
  end
70
72
  end
71
-
72
- def specification = container[__method__]
73
73
  end
74
74
  end
75
75
  end
@@ -5,17 +5,18 @@ module Git
5
5
  module CLI
6
6
  # The main Command Line Interface (CLI) object.
7
7
  class Shell
8
- ACTIONS = {
9
- analyze_branch: Actions::Analyze::Branch.new,
10
- analyze_commit: Actions::Analyze::Commit.new,
11
- config: Actions::Config.new,
12
- hook: Actions::Hook.new
13
- }.freeze
14
-
15
- def initialize parser: Parser.new, actions: ACTIONS, container: Container
8
+ include Actions::Import[
9
+ :analyze_branch,
10
+ :analyze_commit,
11
+ :config,
12
+ :hook,
13
+ :specification,
14
+ :logger
15
+ ]
16
+
17
+ def initialize parser: Parser.new, **dependencies
18
+ super(**dependencies)
16
19
  @parser = parser
17
- @actions = actions
18
- @container = container
19
20
  end
20
21
 
21
22
  def call arguments = []
@@ -26,32 +27,18 @@ module Git
26
27
 
27
28
  private
28
29
 
29
- attr_reader :parser, :actions, :container
30
+ attr_reader :parser
30
31
 
31
32
  def perform configuration
32
33
  case configuration
33
- in action_analyze: true, analyze_sha: nil then analyze_branch
34
- in action_analyze: true, analyze_sha: String => sha then analyze_commit sha
35
- in action_config: Symbol => action then config action
36
- in action_hook: Pathname => path then hook path
34
+ in action_analyze: true, analyze_sha: nil then analyze_branch.call
35
+ in action_analyze: true, analyze_sha: String => sha then analyze_commit.call sha
36
+ in action_config: Symbol => action then config.call action
37
+ in action_hook: Pathname => path then hook.call path
37
38
  in action_version: true then logger.info { specification.labeled_version }
38
- else usage
39
+ else logger.any { parser.to_s }
39
40
  end
40
41
  end
41
-
42
- def analyze_branch = actions.fetch(__method__).call
43
-
44
- def analyze_commit(sha) = actions.fetch(__method__).call(sha)
45
-
46
- def config(action) = actions.fetch(__method__).call(action)
47
-
48
- def hook(path) = actions.fetch(__method__).call(path)
49
-
50
- def usage = logger.unknown { parser.to_s }
51
-
52
- def specification = container[__method__]
53
-
54
- def logger = container[__method__]
55
42
  end
56
43
  end
57
44
  end
@@ -7,19 +7,16 @@ module Git
7
7
  module Commits
8
8
  # Automatically detects and loads system.
9
9
  class Loader
10
- using ::Refinements::Strings
11
-
12
- SYSTEMS = {
13
- circle_ci: Systems::CircleCI.new,
14
- git_hub_action: Systems::GitHubAction.new,
15
- netlify_ci: Systems::NetlifyCI.new,
16
- local: Systems::Local.new
17
- }.freeze
10
+ include Systems::Import[
11
+ :circle_ci,
12
+ :git_hub_action,
13
+ :netlify_ci,
14
+ :local,
15
+ :repository,
16
+ :environment
17
+ ]
18
18
 
19
- def initialize systems: SYSTEMS, container: Container
20
- @systems = systems
21
- @container = container
22
- end
19
+ using ::Refinements::Strings
23
20
 
24
21
  def call
25
22
  message = "Invalid repository. Are you within a Git repository?"
@@ -30,21 +27,15 @@ module Git
30
27
 
31
28
  private
32
29
 
33
- attr_reader :systems, :container
34
-
35
30
  def load_system
36
- if key? "CIRCLECI" then systems.fetch :circle_ci
37
- elsif key? "GITHUB_ACTIONS" then systems.fetch :git_hub_action
38
- elsif key? "NETLIFY" then systems.fetch :netlify_ci
39
- else systems.fetch :local
31
+ if key? "CIRCLECI" then circle_ci
32
+ elsif key? "GITHUB_ACTIONS" then git_hub_action
33
+ elsif key? "NETLIFY" then netlify_ci
34
+ else local
40
35
  end
41
36
  end
42
37
 
43
38
  def key?(key) = environment.fetch(key, "false").to_bool
44
-
45
- def repository = container[__method__]
46
-
47
- def environment = container[__method__]
48
39
  end
49
40
  end
50
41
  end
@@ -6,19 +6,13 @@ module Git
6
6
  module Systems
7
7
  # Provides Circle CI build environment feature branch information.
8
8
  class CircleCI
9
- def initialize container: Container
10
- @container = container
11
- end
9
+ include Git::Lint::Import[:repository]
12
10
 
13
11
  def call = repository.commits("origin/#{repository.branch_default}..#{name}")
14
12
 
15
13
  private
16
14
 
17
- attr_reader :container
18
-
19
15
  def name = "origin/#{repository.branch_name}"
20
-
21
- def repository = container[__method__]
22
16
  end
23
17
  end
24
18
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/container"
4
+
5
+ module Git
6
+ module Lint
7
+ module Commits
8
+ module Systems
9
+ # Provides a single container with application and system specific dependencies.
10
+ module Container
11
+ extend Dry::Container::Mixin
12
+
13
+ config.registry = ->(container, key, value, _options) { container[key.to_s] = value }
14
+
15
+ merge Git::Lint::Container
16
+
17
+ register(:circle_ci) { CircleCI.new }
18
+ register(:git_hub_action) { GitHubAction.new }
19
+ register(:netlify_ci) { NetlifyCI.new }
20
+ register(:local) { Local.new }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -6,19 +6,13 @@ module Git
6
6
  module Systems
7
7
  # Provides GitHub Action build environment feature branch information.
8
8
  class GitHubAction
9
- def initialize container: Container
10
- @container = container
11
- end
9
+ include Git::Lint::Import[:repository]
12
10
 
13
11
  def call = repository.commits("origin/#{repository.branch_default}..#{name}")
14
12
 
15
13
  private
16
14
 
17
- attr_reader :container
18
-
19
15
  def name = "origin/#{repository.branch_name}"
20
-
21
- def repository = container[__method__]
22
16
  end
23
17
  end
24
18
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "auto_injector"
4
+
5
+ module Git
6
+ module Lint
7
+ module Commits
8
+ module Systems
9
+ Import = AutoInjector[Container]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -6,19 +6,13 @@ module Git
6
6
  module Systems
7
7
  # Provides local build environment feature branch information.
8
8
  class Local
9
- def initialize container: Container
10
- @container = container
11
- end
9
+ include Git::Lint::Import[:repository]
12
10
 
13
11
  def call = repository.commits("#{repository.branch_default}..#{name}")
14
12
 
15
13
  private
16
14
 
17
- attr_reader :container
18
-
19
15
  def name = repository.branch_name
20
-
21
- def repository = container[__method__]
22
16
  end
23
17
  end
24
18
  end
@@ -8,27 +8,17 @@ module Git
8
8
  module Systems
9
9
  # Provides Netlify CI build environment feature branch information.
10
10
  class NetlifyCI
11
- def initialize container: Container
12
- @container = container
13
- end
11
+ include Git::Lint::Import[:repository, :executor, :environment]
14
12
 
15
13
  def call
16
- shell.capture3 "git remote add -f origin #{environment["REPOSITORY_URL"]}"
17
- shell.capture3 "git fetch origin #{name}:#{name}"
14
+ executor.capture3 "git remote add -f origin #{environment["REPOSITORY_URL"]}"
15
+ executor.capture3 "git fetch origin #{name}:#{name}"
18
16
  repository.commits "origin/#{repository.branch_default}..origin/#{name}"
19
17
  end
20
18
 
21
19
  private
22
20
 
23
- attr_reader :container
24
-
25
21
  def name = environment["HEAD"]
26
-
27
- def repository = container[__method__]
28
-
29
- def shell = container[__method__]
30
-
31
- def environment = container[__method__]
32
22
  end
33
23
  end
34
24
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "cogger"
3
4
  require "dry-container"
4
5
  require "git_plus"
5
- require "logger"
6
- require "pastel"
6
+ require "open3"
7
7
  require "spek"
8
8
 
9
9
  module Git
@@ -16,29 +16,9 @@ module Git
16
16
  register(:environment) { ENV }
17
17
  register(:repository) { GitPlus::Repository.new }
18
18
  register(:specification) { Spek::Loader.call "#{__dir__}/../../../git-lint.gemspec" }
19
- register(:colorizer) { Pastel.new enabled: $stdout.tty? }
20
19
  register(:kernel) { Kernel }
21
-
22
- register :log_colors do
23
- {
24
- "DEBUG" => self[:colorizer].white.detach,
25
- "INFO" => self[:colorizer].green.detach,
26
- "WARN" => self[:colorizer].yellow.detach,
27
- "ERROR" => self[:colorizer].red.detach,
28
- "FATAL" => self[:colorizer].white.bold.on_red.detach,
29
- "ANY" => self[:colorizer].white.bold.detach
30
- }
31
- end
32
-
33
- register :logger do
34
- Logger.new $stdout,
35
- level: Logger.const_get(ENV.fetch("LOG_LEVEL", "INFO")),
36
- formatter: (
37
- lambda do |severity, _at, _name, message|
38
- self[:log_colors][severity].call "#{message}\n"
39
- end
40
- )
41
- end
20
+ register(:executor) { Open3 }
21
+ register(:logger) { Cogger::Client.new }
42
22
  end
43
23
  end
44
24
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "auto_injector"
4
+
5
+ module Git
6
+ module Lint
7
+ Import = AutoInjector[Container]
8
+ end
9
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -10,9 +10,9 @@ bindir: exe
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIC/jCCAeagAwIBAgIBBDANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMTAzMTkxMjQ4MDZaFw0yMjAzMTkx
15
- MjQ4MDZaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
13
+ MIIC/jCCAeagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
+ a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMjAzMTkxNzI0MzJaFw0yMzAzMTkx
15
+ NzI0MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
16
16
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
17
17
  xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
18
18
  brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
@@ -20,30 +20,58 @@ cert_chain:
20
20
  D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
21
21
  3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
22
22
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
23
- 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAEjpaOXHHp8s/7GL2qCb
24
- YAs7urOLv9VHSPfQWAwaTMVnSsIf3Sw4xzISOP/mmfEPBPXtz61K5esrE/uTFtgb
25
- FyjxQk2H0sEWgrRXGGNHBWQRhhEs7LP/TByoC15A0br++xLxRz4r7HBLGAWQQDpg
26
- 66BJ2TBVjxS6K64tKbq7+ACyrOZGgTfNHACh4M076y0x0oRf/rwBrU39/KRfuhbb
27
- cm+nNCEtO35gTmZ2bVDHLGvWazi3gJt6+huQjfXTCUUG2YYBxwhu+GPdAGQPxpf9
28
- lkHilIrX69jq8wMPpBhlaw2mRmeSL50Wv5u6xVBvOHhXFSP1crXM95vfLhLyRYod
29
- W2A=
23
+ 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAJbbNyWzFjqUNVPPCUCo
24
+ IMrhDa9xf1xkORXNYYbmXgoxRy/KyNbUr+jgEEoWJAm9GXlcqxxWAUI6pK/i4/Qi
25
+ X6rPFEFmeObDOHNvuqy8Hd6AYsu+kP94U/KJhe9wnWGMmGoNKJNU3EkW3jM/osSl
26
+ +JRxiH5t4WtnDiVyoYl5nYC02rYdjJkG6VMxDymXTqn7u6HhYgZkGujq1UPar8x2
27
+ hNIWJblDKKSu7hA2d6+kUthuYo13o1sg1Da/AEDg0hoZSUvhqDEF5Hy232qb3pDt
28
+ CxDe2+VuChj4I1nvIHdu+E6XoEVlanUPKmSg6nddhkKn2gC45Kyzh6FZqnzH/CRp
29
+ RFE=
30
30
  -----END CERTIFICATE-----
31
- date: 2022-03-04 00:00:00.000000000 Z
31
+ date: 2022-04-10 00:00:00.000000000 Z
32
32
  dependencies:
33
+ - !ruby/object:Gem::Dependency
34
+ name: auto_injector
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.4'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.4'
47
+ - !ruby/object:Gem::Dependency
48
+ name: cogger
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.0'
33
61
  - !ruby/object:Gem::Dependency
34
62
  name: dry-container
35
63
  requirement: !ruby/object:Gem::Requirement
36
64
  requirements:
37
65
  - - "~>"
38
66
  - !ruby/object:Gem::Version
39
- version: 0.9.0
67
+ version: '0.9'
40
68
  type: :runtime
41
69
  prerelease: false
42
70
  version_requirements: !ruby/object:Gem::Requirement
43
71
  requirements:
44
72
  - - "~>"
45
73
  - !ruby/object:Gem::Version
46
- version: 0.9.0
74
+ version: '0.9'
47
75
  - !ruby/object:Gem::Dependency
48
76
  name: git_plus
49
77
  requirement: !ruby/object:Gem::Requirement
@@ -169,16 +197,19 @@ files:
169
197
  - lib/git/lint/cli/actions/analyze/branch.rb
170
198
  - lib/git/lint/cli/actions/analyze/commit.rb
171
199
  - lib/git/lint/cli/actions/config.rb
200
+ - lib/git/lint/cli/actions/container.rb
172
201
  - lib/git/lint/cli/actions/hook.rb
202
+ - lib/git/lint/cli/actions/import.rb
173
203
  - lib/git/lint/cli/parser.rb
174
204
  - lib/git/lint/cli/parsers/analyze.rb
175
205
  - lib/git/lint/cli/parsers/core.rb
176
206
  - lib/git/lint/cli/shell.rb
177
207
  - lib/git/lint/collector.rb
178
- - lib/git/lint/commits/container.rb
179
208
  - lib/git/lint/commits/loader.rb
180
209
  - lib/git/lint/commits/systems/circle_ci.rb
210
+ - lib/git/lint/commits/systems/container.rb
181
211
  - lib/git/lint/commits/systems/git_hub_action.rb
212
+ - lib/git/lint/commits/systems/import.rb
182
213
  - lib/git/lint/commits/systems/local.rb
183
214
  - lib/git/lint/commits/systems/netlify_ci.rb
184
215
  - lib/git/lint/configuration/content.rb
@@ -189,6 +220,7 @@ files:
189
220
  - lib/git/lint/errors/base.rb
190
221
  - lib/git/lint/errors/severity.rb
191
222
  - lib/git/lint/errors/sha.rb
223
+ - lib/git/lint/import.rb
192
224
  - lib/git/lint/kit/filter_list.rb
193
225
  - lib/git/lint/parsers/trailers/collaborator.rb
194
226
  - lib/git/lint/rake/setup.rb
@@ -227,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
259
  - !ruby/object:Gem::Version
228
260
  version: '0'
229
261
  requirements: []
230
- rubygems_version: 3.3.8
262
+ rubygems_version: 3.3.11
231
263
  signing_key:
232
264
  specification_version: 4
233
265
  summary: A command line interface for linting Git commits.
metadata.gz.sig CHANGED
Binary file
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dry-container"
4
- require "git_plus"
5
-
6
- module Git
7
- module Lint
8
- module Commits
9
- # Provides container specific to this namespace for all systems.
10
- module Container
11
- extend Dry::Container::Mixin
12
-
13
- config.registry = ->(container, key, value, _options) { container[key.to_s] = value }
14
-
15
- merge Git::Lint::Container
16
-
17
- register(:shell) { Open3 }
18
- end
19
- end
20
- end
21
- end