gitlab-labkit 0.21.3 → 0.24.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: 14048d91e2aa329e7917f040d355f7be56c2f489ebf127bfa20404a8f2f9be64
4
- data.tar.gz: ad10bb2702dd57e5d14fccc95c22c42741ccbe61dda33ec84a9c8a53298cb356
3
+ metadata.gz: 6e86f57fe5a7804f3b930b86abd75f74f7e4a6b01d67eba235c036ba88646052
4
+ data.tar.gz: ea7d3fe526de0859b739b108adebdf86110cc49f6c59ae98b9b834c876794bb7
5
5
  SHA512:
6
- metadata.gz: b47d6fe2f2cf24ab41a0829c0c70908f1f6848d077ad0d09cb57b1df5ea73bc42d279127ad944054ae2a3a8443369d64514b69f90b24f87a05045e55305a03c3
7
- data.tar.gz: 41f04b4d054735c701e80b242cba69aa79723a620abe059e0888b423be0d868e9ab792b8fce08451bc304b8eb84b684d67bb9bcfb67befefdc707188d492c433
6
+ metadata.gz: 0a21a42f553c966c7bf5555afea1abaa72ab2837300bd09bae84c2b58f141a72c22cb3f2f20257c1ab1aadc789af47b2ed3104440b0ca3d66f37e67c17c32f0e
7
+ data.tar.gz: b8f72ab37a74c3523dfc8095d2ebe549c2710bed45741c9a6acb0211424a602695732340e94b7d9d7d3bcd3a1b95151540b3726462bf821ee03acc03951a3968
data/.rubocop.yml CHANGED
@@ -60,3 +60,6 @@ Lint/RedundantSafeNavigation: # (new in 0.93)
60
60
  Enabled: true
61
61
  Style/ClassEqualityComparison: # (new in 0.93)
62
62
  Enabled: true
63
+
64
+ CodeReuse/ActiveRecord:
65
+ Enabled: false
data/Dangerfile CHANGED
@@ -2,10 +2,4 @@
2
2
 
3
3
  require 'gitlab-dangerfiles'
4
4
 
5
- gitlab_dangerfiles = Gitlab::Dangerfiles::Engine.new(self)
6
- gitlab_dangerfiles.import_plugins
7
- gitlab_dangerfiles.import_dangerfiles
8
-
9
- danger.import_plugin('danger/plugins/*.rb')
10
-
11
- danger.import_dangerfile(path: File.join('danger', 'roulette'))
5
+ Gitlab::Dangerfiles.for_project(self, 'labkit-ruby', &:import_defaults)
data/README.md CHANGED
@@ -16,10 +16,11 @@ The changelog is available via [**tagged release notes**](https://gitlab.com/git
16
16
 
17
17
  ## Functionality
18
18
 
19
- LabKit-Ruby provides functionality in three areas:
19
+ LabKit-Ruby provides functionality in a number of areas:
20
20
 
21
21
  1. `Labkit::Context` used for providing context information to log messages.
22
22
  1. `Labkit::Correlation` For accessing the correlation id. (Generated and propagated by `Labkit::Context`)
23
+ 1. `Labkit::FIPS` for checking for FIPS mode and using FIPS-compliant algorithms.
23
24
  1. `Labkit::Logging` for sanitizing log messages.
24
25
  1. `Labkit::Tracing` for handling and propagating distributed traces.
25
26
 
@@ -19,10 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.required_ruby_version = ">= 2.6.0"
20
20
 
21
21
  # Please maintain alphabetical order for dependencies
22
- spec.add_runtime_dependency "actionpack", ">= 5.0.0", "< 7.0.0"
23
- spec.add_runtime_dependency "activesupport", ">= 5.0.0", "< 7.0.0"
22
+ spec.add_runtime_dependency "actionpack", ">= 5.0.0", "< 8.0.0"
23
+ spec.add_runtime_dependency "activesupport", ">= 5.0.0", "< 8.0.0"
24
24
  spec.add_runtime_dependency "grpc", ">= 1.37" # Be sure to update the "grpc-tools" dev_dependency too
25
- spec.add_runtime_dependency "jaeger-client", "~> 1.1"
25
+ spec.add_runtime_dependency "jaeger-client", "~> 1.1.0"
26
26
  spec.add_runtime_dependency "opentracing", "~> 0.4"
27
27
  spec.add_runtime_dependency "pg_query", "~> 2.1"
28
28
  spec.add_runtime_dependency "redis", ">3.0.0", "<5.0.0"
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  # Please maintain alphabetical order for dev dependencies
31
31
  spec.add_development_dependency "excon", "~> 0.78.1"
32
32
  spec.add_development_dependency "faraday", "~> 1.2.0"
33
- spec.add_development_dependency "gitlab-dangerfiles"
33
+ spec.add_development_dependency "gitlab-dangerfiles", "~> 2.11.0"
34
34
  spec.add_development_dependency "gitlab-styles", "~> 6.2.0"
35
35
  spec.add_development_dependency "grpc-tools", ">= 1.37"
36
36
  spec.add_development_dependency "httparty", "~> 0.17.3"
data/lib/gitlab-labkit.rb CHANGED
@@ -9,6 +9,7 @@ module Labkit
9
9
 
10
10
  autoload :Correlation, "labkit/correlation"
11
11
  autoload :Context, "labkit/context"
12
+ autoload :FIPS, "labkit/fips"
12
13
  autoload :Tracing, "labkit/tracing"
13
14
  autoload :Logging, "labkit/logging"
14
15
  autoload :Middleware, "labkit/middleware"
@@ -9,7 +9,6 @@ require "active_support/core_ext/string/inflections"
9
9
  module Labkit
10
10
  # A context can be used to provide structured information on what resources
11
11
  # GitLab is working on within a service.
12
- # The currently supported keys are defined in the `KNOWN_KEYS` constant.
13
12
  #
14
13
  # Values can be provided by passing a hash. If one of the values is a Proc
15
14
  # the proc will only be called when the value is actually needed.
@@ -28,8 +27,6 @@ module Labkit
28
27
  CORRELATION_ID_KEY = "correlation_id"
29
28
  RAW_KEYS = [CORRELATION_ID_KEY].freeze
30
29
  HEADER_PREFIX = "X-Gitlab-"
31
- KNOWN_KEYS = %w[user project root_namespace subscription_plan caller_id
32
- remote_ip related_class feature_category client_id].freeze
33
30
 
34
31
  class << self
35
32
  def with_context(attributes = {})
@@ -122,7 +119,6 @@ module Labkit
122
119
 
123
120
  def assign_attributes(attributes)
124
121
  attributes = attributes.transform_keys(&method(:log_key))
125
- attributes = attributes.slice(*known_log_keys)
126
122
 
127
123
  data.merge!(attributes)
128
124
 
@@ -138,7 +134,7 @@ module Labkit
138
134
 
139
135
  private
140
136
 
141
- delegate :log_key, :known_log_keys, to: :class
137
+ delegate :log_key, to: :class
142
138
 
143
139
  attr_reader :data
144
140
 
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Labkit
4
+ module Digest
5
+ module SHA2
6
+ def new(*args, &block)
7
+ bitlen = args.first || 256
8
+ ::OpenSSL::Digest.const_get("SHA#{bitlen}").new
9
+ end
10
+ end
11
+ end
12
+
13
+ class FIPS
14
+ OPENSSL_DIGESTS = %i[SHA1 SHA256 SHA384 SHA512].freeze
15
+
16
+ class << self
17
+ # Returns whether we should be running in FIPS mode or not
18
+ #
19
+ # @return [Boolean]
20
+ def enabled?
21
+ # Attempt to auto-detect FIPS mode from OpenSSL
22
+ return true if OpenSSL.fips_mode
23
+
24
+ # Otherwise allow it to be set manually via the env vars
25
+ return true if %w[1 true yes].include?(ENV["FIPS_MODE"])
26
+
27
+ false
28
+ end
29
+
30
+ # Swap Ruby's Digest::SHAx implementations for OpenSSL::Digest::SHAx.
31
+ def enable_fips_mode!
32
+ require "digest"
33
+ require "digest/sha2"
34
+
35
+ ::Digest::SHA2.singleton_class.prepend(Labkit::Digest::SHA2)
36
+ OPENSSL_DIGESTS.each { |alg| use_openssl_digest(alg, alg) }
37
+ end
38
+
39
+ private
40
+
41
+ def use_openssl_digest(ruby_algorithm, openssl_algorithm)
42
+ ::Digest.send(:remove_const, ruby_algorithm) # rubocop:disable GitlabSecurity/PublicSend
43
+ ::Digest.const_set(ruby_algorithm, OpenSSL::Digest.const_get(openssl_algorithm, false))
44
+ end
45
+ end
46
+ end
47
+ end
@@ -10,6 +10,7 @@ module Labkit
10
10
  def call(_worker_class, job, _queue)
11
11
  worker_name = (job["wrapped"].presence || job["class"]).to_s
12
12
  data = job.merge(Labkit::Context.log_key(:caller_id) => worker_name)
13
+ .select { |key, _| key.start_with?("#{Labkit::Context::LOG_KEY}.") || Labkit::Context::RAW_KEYS.include?(key.to_s) }
13
14
 
14
15
  Labkit::Context.with_context(data) do |_context|
15
16
  yield
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-labkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.3
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Newdigate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-22 00:00:00.000000000 Z
11
+ date: 2022-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 5.0.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 7.0.0
22
+ version: 8.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 5.0.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 7.0.0
32
+ version: 8.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: 5.0.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 7.0.0
42
+ version: 8.0.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: 5.0.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 7.0.0
52
+ version: 8.0.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: grpc
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '1.1'
73
+ version: 1.1.0
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '1.1'
80
+ version: 1.1.0
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: opentracing
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -158,16 +158,16 @@ dependencies:
158
158
  name: gitlab-dangerfiles
159
159
  requirement: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - ">="
161
+ - - "~>"
162
162
  - !ruby/object:Gem::Version
163
- version: '0'
163
+ version: 2.11.0
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - ">="
168
+ - - "~>"
169
169
  - !ruby/object:Gem::Version
170
- version: '0'
170
+ version: 2.11.0
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: gitlab-styles
173
173
  requirement: !ruby/object:Gem::Requirement
@@ -371,8 +371,6 @@ files:
371
371
  - LICENSE
372
372
  - README.md
373
373
  - Rakefile
374
- - danger/plugins/project_helper.rb
375
- - danger/roulette/Dangerfile
376
374
  - gitlab-labkit.gemspec
377
375
  - lib/gitlab-labkit.rb
378
376
  - lib/labkit/context.rb
@@ -383,6 +381,7 @@ files:
383
381
  - lib/labkit/correlation/grpc/grpc_common.rb
384
382
  - lib/labkit/correlation/grpc/server_interceptor.rb
385
383
  - lib/labkit/excon_publisher.rb
384
+ - lib/labkit/fips.rb
386
385
  - lib/labkit/httpclient_publisher.rb
387
386
  - lib/labkit/logging.rb
388
387
  - lib/labkit/logging/grpc.rb
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Danger
4
- # Common helper functions for danger scripts
5
- class ProjectHelper < ::Danger::Plugin
6
- def changes
7
- # We do not need to categorize files in this code base
8
- helper.changes([])
9
- end
10
-
11
- def project_name
12
- "labkit-ruby"
13
- end
14
- end
15
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- MESSAGE = <<MARKDOWN
4
- ## Reviewer roulette
5
-
6
- Changes that require review have been detected! A merge request is normally
7
- reviewed by both a reviewer and a maintainer in its primary category and by a
8
- maintainer in all other categories.
9
- MARKDOWN
10
-
11
- TABLE_MARKDOWN = <<MARKDOWN
12
-
13
- To spread load more evenly across eligible reviewers, Danger has picked a candidate for each
14
- review slot. Feel free to
15
- [override these selections](https://about.gitlab.com/handbook/engineering/projects/#labkit-ruby)
16
- if you think someone else would be better-suited
17
- or request help in the `#labkit` Slack channel.
18
-
19
- To read more on how to use the reviewer roulette, please take a look at the
20
- [Engineering workflow](https://about.gitlab.com/handbook/engineering/workflow/#basics)
21
- and [code review guidelines](https://docs.gitlab.com/ee/development/code_review.html).
22
-
23
- Once you've decided who will review this merge request, mention them as you
24
- normally would! Danger does not automatically notify them for you.
25
-
26
- | Reviewer | Maintainer |
27
- | -------- | ---------- |
28
- MARKDOWN
29
-
30
- def note_for_spins_role(spins, role)
31
- spins.each do |spin|
32
- note = note_for_spin_role(spin, role)
33
-
34
- return note if note
35
- end
36
-
37
- 'No %{role} available' % { role: role }
38
- end
39
-
40
- def note_for_spin_role(spin, role)
41
- spin.public_send(role)&.markdown_name(author: roulette.team_mr_author) # rubocop:disable GitlabSecurity/PublicSend
42
- end
43
-
44
- def markdown_row_for_spins(spins_array)
45
- reviewer_note = note_for_spins_role(spins_array, :reviewer)
46
- maintainer_note = note_for_spins_role(spins_array, :maintainer)
47
-
48
- "#{reviewer_note} | #{maintainer_note} |"
49
- end
50
-
51
- if project_helper.changes.any?
52
- project = project_helper.project_name
53
-
54
- random_roulette_spins = roulette.spin(project, [nil], timezone_experiment: false)
55
-
56
- rows = random_roulette_spins.map do |spin|
57
- markdown_row_for_spins([spin])
58
- end
59
-
60
- markdown(MESSAGE)
61
- markdown(TABLE_MARKDOWN + rows.join("\n")) unless rows.empty?
62
- end