modulorails 1.1.0 → 1.2.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: 0eea438f121d0e403eee3f6c137338eb030fd7dd5dae376dcd4031a84d4a7fb5
4
- data.tar.gz: 7b89b7e8ccb4662fea9be88c200681dacac7a90d2b83ae625e29924c0920910d
3
+ metadata.gz: 74b7d68847f4e32d43a53990e8e400702a1c667334ad7c862e2e9f6d4197c31b
4
+ data.tar.gz: 4aedbb6cc5e066b49f710d43a721f8b3a5a4e6869c98979815f8564b1a34fa5d
5
5
  SHA512:
6
- metadata.gz: e558f3457c6bb1689e27c9f65df05dd6cc21b75c4ce21e0d455dd65485143be8ccd48ca82f22785576415cc3527f21bfa8c0c70d67c453151c445dc504d88f8a
7
- data.tar.gz: 81232ed88216f39e467cb4a50038d88b8b89924ebcabb8b4a818d97002c3e4b9ff958be097c17836192e42241247554097b686946c1273354cf8bdb0e31cc9d6
6
+ metadata.gz: b079774bb4f3e9cfb2eb18bd31745f641d68712426498a859ac6bb8033b1ab274f1fbb708ff9d8519484d39b2dd28676845ed2809b1d04e622bf849a696bcfe8
7
+ data.tar.gz: d29668cb45b4078b5d7b780d25281cd700cdb96f1d24e6679af5e6aa8871ae23ce1cc71b613ad1b8522c85b23ddd3c60fad766d62f61916bcbb0f0363e1b4fce
data/.rubocop.yml CHANGED
@@ -26,19 +26,18 @@ AllCops:
26
26
 
27
27
  # Excluding most directories with generated files and directories with configuration files.
28
28
  Exclude:
29
- - '/**/vendor/**/*'
30
- - '/**/db/**/*'
31
- - '/**/tmp/**/*'
32
- - '/**/bin/**/*'
33
- - '/**/builds/**/*'
34
- - '/**/Gemfile'
35
- - '/**/Guardfile'
36
- - '/**/Capfile'
37
- - '/**/Rakefile'
38
- - '/**/config/**/*'
39
- - '/**/test/**/*'
40
- - '/**/node_modules/**/*'
41
- - '/**/spec/**/*'
29
+ - 'vendor/**/*'
30
+ - 'db/**/*'
31
+ - 'tmp/**/*'
32
+ - 'bin'
33
+ - '**/Gemfile'
34
+ - '**/Guardfile'
35
+ - '**/Capfile'
36
+ - '**/Rakefile'
37
+ - 'config/**/*'
38
+ - 'test/**/*'
39
+ - 'node_modules/**/*'
40
+ - 'spec/**/*'
42
41
 
43
42
  # Instructing rubocop about all standard Modulotech environments.
44
43
  Rails/UnknownEnv:
@@ -234,7 +233,7 @@ Style/EmptyMethod:
234
233
  Metrics/BlockLength:
235
234
  Enabled: true
236
235
  Exclude:
237
- - '/**/app/admin/**/*'
236
+ - 'app/admin/**/*'
238
237
 
239
238
  # Checks if empty lines around the bodies of classes match the configuration.
240
239
  Layout/EmptyLinesAroundClassBody:
data/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  This file is used to list changes made in each version of the gem.
4
4
 
5
+ # 1.2.0
6
+
7
+ The 'audit' release.
8
+
9
+ - Add bundler-audit in CI.
10
+ - Make the rubocop configuration work during CI.
11
+ - Fix generation of .gitlab-ci.yml for PG databases.
12
+ - Remove deprecated `--deployment` flag from Dockerfile.prod
13
+
5
14
  # 1.1.0
6
15
 
7
16
  The 'new project' release.
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+
5
+ class Modulorails::BundlerauditGenerator < Rails::Generators::Base
6
+
7
+ source_root File.expand_path('templates', __dir__)
8
+ desc 'This generator creates a configuration for Bundler-Audit'
9
+
10
+ def create_config_files
11
+ gitlab_config_path = Rails.root.join('.gitlab-ci.yml')
12
+
13
+ return if File.read(gitlab_config_path).match?(/\s+extends:\s+.bundleraudit\s*$/)
14
+
15
+ append_file gitlab_config_path do
16
+ <<~YAML
17
+ # Scan Gemfile.lock for Common Vulnerabilities and Exposures
18
+ # https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures
19
+ # https://www.cve.org/
20
+ bundleraudit:
21
+ extends: .bundleraudit
22
+ YAML
23
+ end
24
+ end
25
+
26
+ end
@@ -20,7 +20,8 @@ RUN apk add --update --no-cache \
20
20
  RUN gem install bundler -v <%= Modulorails.data.bundler_version %>
21
21
 
22
22
  COPY Gemfile Gemfile.lock ./
23
- RUN bundle check || bundle install --deployment --jobs=2 \
23
+ RUN bundle config set --local deployment 'true'
24
+ RUN bundle check || bundle install --jobs=2 \
24
25
  && rm -rf vendor/bundle/ruby/*/cache/*
25
26
 
26
27
  COPY package.json yarn.lock ./
@@ -17,9 +17,16 @@ services:
17
17
 
18
18
  variables:
19
19
  IMAGE_NAME: <%= image_name %>
20
+ <%- if adapter =~ /mysql/ -%>
20
21
  MYSQL_DATABASE: <%= image_name %>_test
21
22
  MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
22
23
  <%= image_name.upcase %>_DATABASE_HOST: mysql
24
+ <%- else -%>
25
+ POSTGRES_DB: <%= image_name %>_test
26
+ POSTGRES_USER: postgres
27
+ POSTGRES_PASSWORD: postgres
28
+ <%= image_name.upcase %>_DATABASE_HOST: postgres
29
+ <%- end -%>
23
30
 
24
31
  stages:
25
32
  - test
@@ -9,10 +9,259 @@
9
9
  #
10
10
  # See https://docs.rubocop.org/rubocop/configuration
11
11
 
12
- inherit_gem:
13
- modulorails: .rubocop.yml
12
+ # Enabling Rails-specific cops.
13
+ require: rubocop-rails
14
14
 
15
- # Take into account the exclude list from the gem
16
15
  inherit_mode:
17
16
  merge:
18
17
  - Exclude
18
+ - Include
19
+
20
+ AllCops:
21
+ # No suggestions since the gem is the sole truth for rubocop configuration.
22
+ SuggestExtensions: false
23
+
24
+ # Enable new cops by default
25
+ NewCops: enable
26
+
27
+ # Excluding most directories with generated files and directories with configuration files.
28
+ Exclude:
29
+ - 'vendor/**/*'
30
+ - 'db/**/*'
31
+ - 'tmp/**/*'
32
+ - 'bin'
33
+ - '**/Gemfile'
34
+ - '**/Guardfile'
35
+ - '**/Capfile'
36
+ - '**/Rakefile'
37
+ - 'config/**/*'
38
+ - 'test/**/*'
39
+ - 'node_modules/**/*'
40
+ - 'spec/**/*'
41
+
42
+ # Instructing rubocop about all standard Modulotech environments.
43
+ Rails/UnknownEnv:
44
+ Environments:
45
+ - production
46
+ - development
47
+ - test
48
+ - staging
49
+ - preprod
50
+
51
+ # Checks if String literals are using single quotes when no interpolation is required
52
+ Style/StringLiterals:
53
+ Enabled: true
54
+ EnforcedStyle: single_quotes
55
+ ConsistentQuotesInMultiline: false
56
+
57
+ # Checks if the quotes used for quoted symbols are single quotes when no interpolation is required
58
+ Style/QuotedSymbols:
59
+ Enabled: true
60
+ EnforcedStyle: same_as_string_literals
61
+
62
+ # This cop checks for uses of literal strings converted to a symbol where a literal symbol could be used instead.
63
+ Lint/SymbolConversion:
64
+ Enabled: true
65
+ EnforcedStyle: strict
66
+
67
+ # Useless cop. It checks for unnecessary safe navigations.
68
+ # Example:
69
+ # obj&.a && obj.b
70
+ # Triggers rubocop error: it requires to add safe navigation for "obj.b" call => "obj&.b".
71
+ # but it is not necessary. obj&.a will return nil if obj is nil, and it will stop
72
+ # execution of the operation because `&&` right part executes only when left part is truthy.
73
+ Lint/SafeNavigationConsistency:
74
+ Enabled: false
75
+
76
+ # Checks for places where keyword arguments can be used instead of boolean arguments when defining methods.
77
+ # Disabled because moving from default arguments to keywords is not that easy.
78
+ Style/OptionalBooleanParameter:
79
+ Enabled: false
80
+
81
+ # Checks for use of the lambda.(args) syntax.
82
+ # Disabled while the Ruby team has not voted on this.
83
+ Style/LambdaCall:
84
+ Enabled: false
85
+ EnforcedStyle: braces
86
+
87
+ # Checks for presence or absence of braces around hash literal as a last array item depending on configuration.
88
+ # Disabled because it would break a lot of permitted_params definitions
89
+ Style/HashAsLastArrayItem:
90
+ Enabled: false
91
+
92
+ # Checks for grouping of accessors in class and module bodies.
93
+ # Useless.
94
+ Style/AccessorGrouping:
95
+ Enabled: false
96
+
97
+ # Makes our lives happier: we don't need to disable it in each case/when method
98
+ # with more than 5 "when"s.
99
+ Metrics/CyclomaticComplexity:
100
+ Max: 10
101
+
102
+ # Commonly used screens these days easily fit more than 80 characters.
103
+ Layout/LineLength:
104
+ Max: 100
105
+
106
+ # Too short methods lead to extraction of single-use methods, which can make
107
+ # the code easier to read (by naming things), but can also clutter the class
108
+ Metrics/MethodLength:
109
+ Max: 20
110
+
111
+ # The guiding principle of classes is SRP, SRP can't be accurately measured by LoC
112
+ Metrics/ClassLength:
113
+ Max: 1500
114
+
115
+ # No space makes the method definition shorter and differentiates
116
+ # from a regular assignment.
117
+ Layout/SpaceAroundEqualsInParameterDefault:
118
+ EnforcedStyle: no_space
119
+
120
+ # We do not need to support Ruby 1.9, so this is good to use.
121
+ Style/SymbolArray:
122
+ Enabled: true
123
+
124
+ # Most readable form.
125
+ Layout/HashAlignment:
126
+ EnforcedHashRocketStyle: table
127
+ EnforcedColonStyle: table
128
+
129
+ # Mixing the styles looks just silly.
130
+ Style/HashSyntax:
131
+ EnforcedStyle: ruby19_no_mixed_keys
132
+
133
+ # has_key? and has_value? are far more readable than key? and value?
134
+ Style/PreferredHashMethods:
135
+ Enabled: false
136
+
137
+ # String#% is by far the least verbose and only object oriented variant.
138
+ Style/FormatString:
139
+ EnforcedStyle: percent
140
+
141
+ # Annotated or template are too verbose and rarely needed.
142
+ Style/FormatStringToken:
143
+ EnforcedStyle: unannotated
144
+
145
+ Style/CollectionMethods:
146
+ Enabled: true
147
+ PreferredMethods:
148
+ # inject seems more common in the community.
149
+ reduce: "inject"
150
+
151
+ # Either allow this style or don't. Marking it as safe with parenthesis
152
+ # is silly. Let's try to live without them for now.
153
+ Style/ParenthesesAroundCondition:
154
+ AllowSafeAssignment: false
155
+ Lint/AssignmentInCondition:
156
+ AllowSafeAssignment: false
157
+
158
+ # A specialized exception class will take one or more arguments and construct the message from it.
159
+ # So both variants make sense.
160
+ Style/RaiseArgs:
161
+ Enabled: false
162
+
163
+ # Indenting the chained dots beneath each other is not supported by this cop,
164
+ # see https://github.com/bbatsov/rubocop/issues/1633
165
+ Layout/MultilineOperationIndentation:
166
+ Enabled: false
167
+
168
+ # Fail is an alias of raise. Avoid aliases, it's more cognitive load for no gain.
169
+ # The argument that fail should be used to abort the program is wrong too,
170
+ # there's Kernel#abort for that.
171
+ Style/SignalException:
172
+ EnforcedStyle: only_raise
173
+
174
+ # Suppressing exceptions can be perfectly fine, and be it to avoid to
175
+ # explicitly type nil into the rescue since that's what you want to return,
176
+ # or suppressing LoadError for optional dependencies
177
+ Lint/SuppressedException:
178
+ Enabled: false
179
+
180
+ # { ... } for multi-line blocks is okay, follow Weirichs rule instead:
181
+ # https://web.archive.org/web/20140221124509/http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
182
+ Style/BlockDelimiters:
183
+ Enabled: false
184
+
185
+ # do / end blocks should be used for side effects,
186
+ # methods that run a block for side effects and have
187
+ # a useful return value are rare, assign the return
188
+ # value to a local variable for those cases.
189
+ Style/MethodCalledOnDoEndBlock:
190
+ Enabled: true
191
+
192
+ # Enforcing the names of variables? To single letter ones? Just no.
193
+ Style/SingleLineBlockParams:
194
+ Enabled: false
195
+
196
+ # Shadowing outer local variables with block parameters is often useful
197
+ # to not reinvent a new name for the same thing, it highlights the relation
198
+ # between the outer variable and the parameter. The cases where it's actually
199
+ # confusing are rare, and usually bad for other reasons already, for example
200
+ # because the method is too long.
201
+ Lint/ShadowingOuterLocalVariable:
202
+ Enabled: false
203
+
204
+ # Check with yard instead.
205
+ Style/Documentation:
206
+ Enabled: false
207
+
208
+ # This is just silly. Calling the argument `other` in all cases makes no sense.
209
+ Naming/BinaryOperatorParameterName:
210
+ Enabled: false
211
+
212
+ # Disable frozen string
213
+ Style/FrozenStringLiteralComment:
214
+ Enabled: false
215
+
216
+ # Disable No ASCII char in comments
217
+ Style/AsciiComments:
218
+ Enabled: false
219
+
220
+ # Disable ordered Gems By ascii
221
+ Bundler/OrderedGems:
222
+ Enabled: false
223
+
224
+ # Change ABC max value
225
+ Metrics/AbcSize:
226
+ Max: 35
227
+
228
+ # Disable empty method in one line
229
+ Style/EmptyMethod:
230
+ EnforcedStyle: expanded
231
+
232
+ # Disable max height block
233
+ Metrics/BlockLength:
234
+ Enabled: true
235
+ Exclude:
236
+ - 'app/admin/**/*'
237
+ - 'lib/tasks/**/*'
238
+
239
+ # Checks if empty lines around the bodies of classes match the configuration.
240
+ Layout/EmptyLinesAroundClassBody:
241
+ EnforcedStyle: empty_lines
242
+ # Checks if empty lines around the bodies of modules match the configuration.
243
+ Layout/EmptyLinesAroundModuleBody:
244
+ EnforcedStyle: empty_lines
245
+
246
+ # Enforces the consistent usage of %-literal delimiters.
247
+ Style/PercentLiteralDelimiters:
248
+ PreferredDelimiters:
249
+ default: '()'
250
+ '%i': '[]'
251
+ '%I': '[]'
252
+ '%r': '{}'
253
+ '%w': '[]'
254
+ '%W': '[]'
255
+
256
+ # Unnecessary cop. In what universe "A || B && C" or "A && B || C && D" is ambiguous? looks
257
+ # like a cop for those who can't in boolean.
258
+ Lint/AmbiguousOperatorPrecedence:
259
+ Enabled: false
260
+
261
+ # Checks for simple usages of parallel assignment.
262
+ Style/ParallelAssignment:
263
+ Enabled: false
264
+
265
+ # Checks the style of children definitions at classes and modules.
266
+ Style/ClassAndModuleChildren:
267
+ Enabled: false
@@ -51,6 +51,9 @@ module Modulorails
51
51
  # Add/update Rubocop config
52
52
  Modulorails.generate_rubocop_template
53
53
 
54
+ # Add/update Bundler-audit config
55
+ Modulorails.generate_bundleraudit_template
56
+
54
57
  # Gem's self-update if a new version was released
55
58
  Modulorails.self_update
56
59
  end
@@ -1,6 +1,6 @@
1
1
  module Modulorails
2
2
 
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
 
5
5
  # Useful to compare the current Ruby version
6
6
  COMPARABLE_RUBY_VERSION = Gem::Version.new(RUBY_VERSION)
data/lib/modulorails.rb CHANGED
@@ -7,6 +7,7 @@ require 'generators/modulorails/gitlabci/gitlabci_generator'
7
7
  require 'generators/modulorails/healthcheck/health_check_generator'
8
8
  require 'generators/modulorails/self_update/self_update_generator'
9
9
  require 'generators/modulorails/rubocop/rubocop_generator'
10
+ require 'generators/modulorails/bundleraudit/bundleraudit_generator'
10
11
  require 'httparty'
11
12
  require 'modulorails/error_data'
12
13
  require 'modulorails/success_data'
@@ -165,6 +166,13 @@ module Modulorails
165
166
  Modulorails::RubocopGenerator.new([], {}, {}).invoke_all
166
167
  end
167
168
 
169
+ # @author Matthieu 'ciappa_m' Ciappara
170
+ #
171
+ # Generate a bundler-audit configuration.
172
+ def generate_bundleraudit_template
173
+ Modulorails::BundlerauditGenerator.new([], {}, {}).invoke_all
174
+ end
175
+
168
176
  end
169
177
 
170
178
  end
data/modulorails.gemspec CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.add_runtime_dependency 'railties', '>= 4.2.0'
37
37
  spec.add_runtime_dependency 'rubocop', '>= 1.28.2'
38
38
  spec.add_runtime_dependency 'rubocop-rails', '>= 2.14.2'
39
+ spec.add_runtime_dependency 'bundler-audit', '~> 0.9.1'
39
40
 
40
41
  spec.add_development_dependency 'activerecord', '>= 4.2.0'
41
42
  spec.add_development_dependency 'appraisal'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modulorails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu Ciappara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-21 00:00:00.000000000 Z
11
+ date: 2022-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: 2.14.2
117
+ - !ruby/object:Gem::Dependency
118
+ name: bundler-audit
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.9.1
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.9.1
117
131
  - !ruby/object:Gem::Dependency
118
132
  name: activerecord
119
133
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +198,7 @@ files:
184
198
  - gemfiles/rails_60.gemfile
185
199
  - gemfiles/rails_61.gemfile
186
200
  - gemfiles/rails_70.gemfile
201
+ - lib/generators/modulorails/bundleraudit/bundleraudit_generator.rb
187
202
  - lib/generators/modulorails/docker/docker_generator.rb
188
203
  - lib/generators/modulorails/docker/templates/Dockerfile.prod.tt
189
204
  - lib/generators/modulorails/docker/templates/Dockerfile.tt