git-lint 3.3.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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