modulorails 0.2.2 → 1.0.1
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.
- checksums.yaml +4 -4
- data/.dockerignore +14 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +62 -0
- data/.travis.yml +23 -4
- data/Appraisals +18 -0
- data/CHANGELOG.md +42 -1
- data/Dockerfile.ruby25 +34 -0
- data/Dockerfile.ruby26 +28 -0
- data/Dockerfile.ruby27 +25 -0
- data/Dockerfile.ruby30 +25 -0
- data/Dockerfile.ruby31 +25 -0
- data/Gemfile.lock +59 -54
- data/README.md +16 -4
- data/Rakefile +1 -1
- data/app/assets/stylesheets/modulorails.css +21 -0
- data/app/helpers/modulorails/application_helper.rb +8 -0
- data/config/locales/en.yml +3 -0
- data/docker-compose.debug.yml +47 -0
- data/docker-compose.yml +37 -0
- data/entrypoints/appraisal_test.sh +7 -0
- data/gemfiles/rails_52.gemfile +9 -0
- data/gemfiles/rails_60.gemfile +9 -0
- data/gemfiles/rails_61.gemfile +9 -0
- data/gemfiles/rails_70.gemfile +9 -0
- data/lib/generators/modulorails/docker/docker_generator.rb +19 -0
- data/lib/generators/modulorails/docker/templates/Dockerfile.prod.tt +57 -0
- data/lib/generators/modulorails/docker/templates/Dockerfile.tt +26 -0
- data/lib/generators/modulorails/docker/templates/config/database.yml.tt +32 -0
- data/lib/generators/modulorails/docker/templates/docker-compose.prod.yml.tt +50 -0
- data/lib/generators/modulorails/docker/templates/docker-compose.yml.tt +71 -0
- data/lib/generators/modulorails/docker/templates/entrypoints/docker-entrypoint.sh.tt +20 -0
- data/lib/generators/modulorails/docker/templates/entrypoints/webpack-entrypoint.sh.tt +7 -0
- data/lib/generators/modulorails/gitlabci/gitlabci_generator.rb +34 -0
- data/lib/generators/modulorails/gitlabci/templates/.gitlab-ci.yml.tt +118 -0
- data/lib/generators/modulorails/gitlabci/templates/.modulorails-gitlab-ci +6 -0
- data/lib/generators/modulorails/gitlabci/templates/config/database-ci.yml.tt +8 -0
- data/lib/generators/modulorails/healthcheck/health_check_generator.rb +41 -0
- data/lib/generators/modulorails/healthcheck/templates/.modulorails-health_check +6 -0
- data/lib/generators/modulorails/healthcheck/templates/config/initializers/health_check.rb.tt +100 -0
- data/lib/generators/modulorails/rubocop/rubocop_generator.rb +24 -0
- data/lib/generators/modulorails/rubocop/templates/rubocop.yml.tt +18 -0
- data/lib/generators/modulorails/self_update/self_update_generator.rb +32 -0
- data/lib/generators/modulorails/service/service_generator.rb +13 -0
- data/lib/generators/modulorails/service/templates/service.rb.tt +28 -0
- data/lib/modulorails/configuration.rb +8 -2
- data/lib/modulorails/data.rb +21 -2
- data/lib/modulorails/error_data.rb +21 -0
- data/lib/modulorails/errors/base_error.rb +4 -0
- data/lib/modulorails/errors/errors.rb +3 -0
- data/lib/modulorails/errors/invalid_format_error.rb +14 -0
- data/lib/modulorails/errors/invalid_value_error.rb +14 -0
- data/lib/modulorails/railtie.rb +35 -3
- data/lib/modulorails/services/base_service.rb +203 -0
- data/lib/modulorails/services/logs_for_method_service.rb +42 -0
- data/lib/modulorails/services/services.rb +2 -0
- data/lib/modulorails/success_data.rb +17 -0
- data/lib/modulorails/validators/database_configuration.rb +9 -3
- data/lib/modulorails/version.rb +4 -1
- data/lib/modulorails.rb +46 -21
- data/modulorails.gemspec +4 -0
- metadata +114 -17
- data/lib/generators/gitlabci_generator.rb +0 -134
- data/lib/generators/templates/.gitlab-ci.yml +0 -72
- data/lib/generators/templates/.modulorails-gitlab-ci +0 -3
- data/lib/generators/templates/config/database-ci.yml +0 -7
- data/lib/modulorails/updater.rb +0 -46
data/lib/modulorails.rb
CHANGED
@@ -2,10 +2,16 @@ require 'modulorails/version'
|
|
2
2
|
require 'modulorails/configuration'
|
3
3
|
require 'modulorails/data'
|
4
4
|
require 'modulorails/validators/database_configuration'
|
5
|
-
require 'modulorails/updater'
|
6
5
|
require 'modulorails/railtie' if defined?(Rails::Railtie)
|
7
|
-
require 'generators/gitlabci_generator'
|
6
|
+
require 'generators/modulorails/gitlabci/gitlabci_generator'
|
7
|
+
require 'generators/modulorails/healthcheck/health_check_generator'
|
8
|
+
require 'generators/modulorails/self_update/self_update_generator'
|
9
|
+
require 'generators/modulorails/rubocop/rubocop_generator'
|
8
10
|
require 'httparty'
|
11
|
+
require 'modulorails/error_data'
|
12
|
+
require 'modulorails/success_data'
|
13
|
+
require 'modulorails/errors/errors'
|
14
|
+
require 'modulorails/services/services'
|
9
15
|
|
10
16
|
# Author: Matthieu 'ciappa_m' Ciappara
|
11
17
|
# The entry point of the gem. It exposes the configurator, the gathered data and the method to
|
@@ -77,17 +83,25 @@ module Modulorails
|
|
77
83
|
# Define the JSON body of the request
|
78
84
|
body = data.to_params.to_json
|
79
85
|
|
80
|
-
#
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
86
|
+
# Prevent HTTParty to raise error and crash the server in dev
|
87
|
+
begin
|
88
|
+
# Post to the configured endpoint on the Intranet
|
89
|
+
response = HTTParty.post(configuration.endpoint, headers: headers, body: body)
|
90
|
+
|
91
|
+
# According to the API specification, on a "Bad request" response, the server explicits what
|
92
|
+
# went wrong with an `errors` field. We do not want to raise since the gem's user is not
|
93
|
+
# (necessarily) responsible for the error but we still need to display it somewhere to warn
|
94
|
+
# the user something went wrong.
|
95
|
+
puts("[Modulorails] Error: #{response['errors'].join(', ')}") if response.code == 400
|
96
|
+
|
97
|
+
# Return the response to allow users to do some more
|
98
|
+
response
|
99
|
+
rescue StandardError => e
|
100
|
+
# Still need to notify the user
|
101
|
+
puts("[Modulorails] Error: Could not post to #{configuration.endpoint}")
|
102
|
+
puts e.message
|
103
|
+
nil
|
104
|
+
end
|
91
105
|
else
|
92
106
|
raise Error.new('No endpoint or api key')
|
93
107
|
end
|
@@ -100,13 +114,7 @@ module Modulorails
|
|
100
114
|
def generate_ci_template
|
101
115
|
return if File.exists?(Rails.root.join('.modulorails-gitlab-ci'))
|
102
116
|
|
103
|
-
|
104
|
-
'--app', data.rails_name.parameterize,
|
105
|
-
'--database', data.adapter,
|
106
|
-
'--bundler', data.bundler_version,
|
107
|
-
'--ruby_version', data.ruby_version
|
108
|
-
]
|
109
|
-
GitlabciGenerator.new([], generator_options, {}).invoke_all
|
117
|
+
Modulorails::GitlabciGenerator.new([], {}, {}).invoke_all
|
110
118
|
end
|
111
119
|
|
112
120
|
# @author Matthieu 'ciappa_m' Ciappara
|
@@ -130,9 +138,26 @@ module Modulorails
|
|
130
138
|
# Check the last version of Modulorails available on rubygems and update if there was a
|
131
139
|
# publication
|
132
140
|
def self_update
|
133
|
-
Modulorails::
|
141
|
+
Modulorails::SelfUpdateGenerator.new([], {}, {}).invoke_all unless configuration.no_auto_update
|
134
142
|
rescue StandardError => e
|
135
143
|
puts("[Modulorails] An error occured: #{e.class} - #{e.message}")
|
136
144
|
end
|
145
|
+
|
146
|
+
# @author Matthieu 'ciappa_m' Ciappara
|
147
|
+
#
|
148
|
+
# Generate a health_check configuration unless it was already done.
|
149
|
+
# The check is done using a 'keepfile'.
|
150
|
+
def generate_healthcheck_template
|
151
|
+
return if File.exists?(Rails.root.join('.modulorails-health_check'))
|
152
|
+
|
153
|
+
Modulorails::HealthCheckGenerator.new([], {}, {}).invoke_all
|
154
|
+
end
|
155
|
+
|
156
|
+
# @author Matthieu 'ciappa_m' Ciappara
|
157
|
+
#
|
158
|
+
# Generate a rubocop configuration.
|
159
|
+
def generate_rubocop_template
|
160
|
+
Modulorails::RubocopGenerator.new([], {}, {}).invoke_all
|
161
|
+
end
|
137
162
|
end
|
138
163
|
end
|
data/modulorails.gemspec
CHANGED
@@ -33,6 +33,10 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_runtime_dependency 'git', '~> 1.7', '>= 1.7.0'
|
34
34
|
spec.add_runtime_dependency 'httparty'
|
35
35
|
spec.add_runtime_dependency 'i18n'
|
36
|
+
spec.add_runtime_dependency 'health_check', '~> 3.1'
|
37
|
+
spec.add_runtime_dependency 'rubocop', '= 1.25.1'
|
38
|
+
spec.add_runtime_dependency 'rubocop-rails', '= 2.13.2'
|
36
39
|
|
37
40
|
spec.add_development_dependency 'activerecord', '>= 4.2.0'
|
41
|
+
spec.add_development_dependency 'appraisal'
|
38
42
|
end
|
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: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthieu Ciappara
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -28,22 +28,22 @@ dependencies:
|
|
28
28
|
name: git
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.7'
|
34
31
|
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: 1.7.0
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '1.7'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "~>"
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '1.7'
|
44
41
|
- - ">="
|
45
42
|
- !ruby/object:Gem::Version
|
46
43
|
version: 1.7.0
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.7'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: httparty
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +72,48 @@ dependencies:
|
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: health_check
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.1'
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.1'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - '='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 1.25.1
|
96
|
+
type: :runtime
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.25.1
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubocop-rails
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.13.2
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 2.13.2
|
75
117
|
- !ruby/object:Gem::Dependency
|
76
118
|
name: activerecord
|
77
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +128,20 @@ dependencies:
|
|
86
128
|
- - ">="
|
87
129
|
- !ruby/object:Gem::Version
|
88
130
|
version: 4.2.0
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: appraisal
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
89
145
|
description: |
|
90
146
|
Modulorails is the common base for the Ruby on Rails project at Modulotech
|
91
147
|
(https://www.modulotech.fr/).
|
@@ -98,28 +154,69 @@ executables: []
|
|
98
154
|
extensions: []
|
99
155
|
extra_rdoc_files: []
|
100
156
|
files:
|
157
|
+
- ".dockerignore"
|
101
158
|
- ".gitignore"
|
102
159
|
- ".rspec"
|
160
|
+
- ".rubocop.yml"
|
103
161
|
- ".travis.yml"
|
162
|
+
- Appraisals
|
104
163
|
- CHANGELOG.md
|
105
164
|
- CODE_OF_CONDUCT.md
|
165
|
+
- Dockerfile.ruby25
|
166
|
+
- Dockerfile.ruby26
|
167
|
+
- Dockerfile.ruby27
|
168
|
+
- Dockerfile.ruby30
|
169
|
+
- Dockerfile.ruby31
|
106
170
|
- Gemfile
|
107
171
|
- Gemfile.lock
|
108
172
|
- LICENSE.txt
|
109
173
|
- README.md
|
110
174
|
- Rakefile
|
175
|
+
- app/assets/stylesheets/modulorails.css
|
176
|
+
- app/helpers/modulorails/application_helper.rb
|
111
177
|
- bin/console
|
112
178
|
- bin/setup
|
113
179
|
- config/locales/en.yml
|
114
|
-
-
|
115
|
-
-
|
116
|
-
-
|
117
|
-
-
|
180
|
+
- docker-compose.debug.yml
|
181
|
+
- docker-compose.yml
|
182
|
+
- entrypoints/appraisal_test.sh
|
183
|
+
- gemfiles/rails_52.gemfile
|
184
|
+
- gemfiles/rails_60.gemfile
|
185
|
+
- gemfiles/rails_61.gemfile
|
186
|
+
- gemfiles/rails_70.gemfile
|
187
|
+
- lib/generators/modulorails/docker/docker_generator.rb
|
188
|
+
- lib/generators/modulorails/docker/templates/Dockerfile.prod.tt
|
189
|
+
- lib/generators/modulorails/docker/templates/Dockerfile.tt
|
190
|
+
- lib/generators/modulorails/docker/templates/config/database.yml.tt
|
191
|
+
- lib/generators/modulorails/docker/templates/docker-compose.prod.yml.tt
|
192
|
+
- lib/generators/modulorails/docker/templates/docker-compose.yml.tt
|
193
|
+
- lib/generators/modulorails/docker/templates/entrypoints/docker-entrypoint.sh.tt
|
194
|
+
- lib/generators/modulorails/docker/templates/entrypoints/webpack-entrypoint.sh.tt
|
195
|
+
- lib/generators/modulorails/gitlabci/gitlabci_generator.rb
|
196
|
+
- lib/generators/modulorails/gitlabci/templates/.gitlab-ci.yml.tt
|
197
|
+
- lib/generators/modulorails/gitlabci/templates/.modulorails-gitlab-ci
|
198
|
+
- lib/generators/modulorails/gitlabci/templates/config/database-ci.yml.tt
|
199
|
+
- lib/generators/modulorails/healthcheck/health_check_generator.rb
|
200
|
+
- lib/generators/modulorails/healthcheck/templates/.modulorails-health_check
|
201
|
+
- lib/generators/modulorails/healthcheck/templates/config/initializers/health_check.rb.tt
|
202
|
+
- lib/generators/modulorails/rubocop/rubocop_generator.rb
|
203
|
+
- lib/generators/modulorails/rubocop/templates/rubocop.yml.tt
|
204
|
+
- lib/generators/modulorails/self_update/self_update_generator.rb
|
205
|
+
- lib/generators/modulorails/service/service_generator.rb
|
206
|
+
- lib/generators/modulorails/service/templates/service.rb.tt
|
118
207
|
- lib/modulorails.rb
|
119
208
|
- lib/modulorails/configuration.rb
|
120
209
|
- lib/modulorails/data.rb
|
210
|
+
- lib/modulorails/error_data.rb
|
211
|
+
- lib/modulorails/errors/base_error.rb
|
212
|
+
- lib/modulorails/errors/errors.rb
|
213
|
+
- lib/modulorails/errors/invalid_format_error.rb
|
214
|
+
- lib/modulorails/errors/invalid_value_error.rb
|
121
215
|
- lib/modulorails/railtie.rb
|
122
|
-
- lib/modulorails/
|
216
|
+
- lib/modulorails/services/base_service.rb
|
217
|
+
- lib/modulorails/services/logs_for_method_service.rb
|
218
|
+
- lib/modulorails/services/services.rb
|
219
|
+
- lib/modulorails/success_data.rb
|
123
220
|
- lib/modulorails/validators/database_configuration.rb
|
124
221
|
- lib/modulorails/version.rb
|
125
222
|
- modulorails.gemspec
|
@@ -130,7 +227,7 @@ metadata:
|
|
130
227
|
homepage_uri: https://github.com/moduloTech/modulorails
|
131
228
|
source_code_uri: https://github.com/moduloTech/modulorails
|
132
229
|
changelog_uri: https://github.com/moduloTech/modulorails/blob/master/CHANGELOG.md
|
133
|
-
post_install_message:
|
230
|
+
post_install_message:
|
134
231
|
rdoc_options: []
|
135
232
|
require_paths:
|
136
233
|
- lib
|
@@ -145,8 +242,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
242
|
- !ruby/object:Gem::Version
|
146
243
|
version: '0'
|
147
244
|
requirements: []
|
148
|
-
rubygems_version: 3.
|
149
|
-
signing_key:
|
245
|
+
rubygems_version: 3.0.3
|
246
|
+
signing_key:
|
150
247
|
specification_version: 4
|
151
248
|
summary: Common base for Ruby on Rails projects at Modulotech
|
152
249
|
test_files: []
|
@@ -1,134 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rails/generators'
|
4
|
-
|
5
|
-
class GitlabciGenerator < Rails::Generators::Base
|
6
|
-
source_root File.expand_path('templates', __dir__)
|
7
|
-
class_option(:app,
|
8
|
-
required: true, type: :string,
|
9
|
-
desc: 'Specify the application name.')
|
10
|
-
class_option(:database,
|
11
|
-
required: true, type: :string,
|
12
|
-
desc: 'Specify the database to use (either mysql or postgres).')
|
13
|
-
class_option(:bundler,
|
14
|
-
required: true, type: :string,
|
15
|
-
desc: 'Specify the Bundler version.')
|
16
|
-
class_option(:ruby_version,
|
17
|
-
required: true, type: :string,
|
18
|
-
desc: 'Specify the Ruby version.')
|
19
|
-
desc 'This generator creates a template for a .gitlab-ci.yml file at root'
|
20
|
-
|
21
|
-
# Configurations for MySQL/Postgres dockers
|
22
|
-
MYSQL_DOCKER_DB = <<~EOS
|
23
|
-
# Install a MySQL 5.7 database and configure mandatory environment variables
|
24
|
-
# (https://hub.docker.com/_/mysql/)
|
25
|
-
services:
|
26
|
-
- mysql:5.7
|
27
|
-
variables:
|
28
|
-
MYSQL_DATABASE: test
|
29
|
-
MYSQL_ROOT_PASSWORD: password
|
30
|
-
EOS
|
31
|
-
POSTGRES_DOCKER_DB = <<~EOS
|
32
|
-
# Install a Postgres 11 database and configure mandatory environment variables
|
33
|
-
# (https://hub.docker.com/_/postgres/)
|
34
|
-
services:
|
35
|
-
- postgresql:11
|
36
|
-
variables:
|
37
|
-
POSTGRES_DB: test
|
38
|
-
POSTGRES_PASSWORD: password
|
39
|
-
EOS
|
40
|
-
|
41
|
-
def create_config_file
|
42
|
-
# Get the configuration for the database engine
|
43
|
-
db_conf = database_config(options[:database])
|
44
|
-
|
45
|
-
# Update the gitlab-ci template
|
46
|
-
update_gitlab_ci(options, db_conf)
|
47
|
-
|
48
|
-
# Update the database-ci template
|
49
|
-
update_database_ci(db_conf)
|
50
|
-
|
51
|
-
# Create file to avoid this generator on next modulorails launch
|
52
|
-
create_keep_file
|
53
|
-
rescue StandardError => e
|
54
|
-
$stderr.puts("[Modulorails] Error: cannot generate CI configuration: #{e.message}")
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def update_gitlab_ci(options, db_conf)
|
60
|
-
file = '.gitlab-ci.yml'
|
61
|
-
exists = File.exists?(file)
|
62
|
-
|
63
|
-
# Remove original file if there is one
|
64
|
-
remove_file file if exists
|
65
|
-
|
66
|
-
# Copy file
|
67
|
-
copy_file file, file
|
68
|
-
|
69
|
-
# Add the correct database docker
|
70
|
-
prepend_file file, db_conf[:header]
|
71
|
-
|
72
|
-
# Replace key for CI/CD cache
|
73
|
-
gsub_file file, 'CI_CD_CACHE_KEY', "#{options[:app]}-ci_cd"
|
74
|
-
|
75
|
-
# Replace key for bundler version
|
76
|
-
gsub_file file, 'BUNDLER_VERSION', options[:bundler]
|
77
|
-
|
78
|
-
# Replace ruby version
|
79
|
-
gsub_file file, 'RUBY_VERSION', '2.5.0'
|
80
|
-
|
81
|
-
# Warn the user about file overwrite/creation
|
82
|
-
warn_file_update(file, exists)
|
83
|
-
end
|
84
|
-
|
85
|
-
def update_database_ci(db_conf)
|
86
|
-
file = 'config/database-ci.yml'
|
87
|
-
exists = File.exists?(file)
|
88
|
-
|
89
|
-
# Remove original file if there is one
|
90
|
-
remove_file file if exists
|
91
|
-
|
92
|
-
# Copy file
|
93
|
-
copy_file file, file
|
94
|
-
|
95
|
-
# Replace configuration
|
96
|
-
gsub_file file, 'HOST', db_conf[:host]
|
97
|
-
gsub_file file, 'ADAPTER', db_conf[:adapter]
|
98
|
-
gsub_file file, 'DATABASE', 'test'
|
99
|
-
|
100
|
-
# Warn the user about file overwrite/creation
|
101
|
-
warn_file_update(file, exists)
|
102
|
-
end
|
103
|
-
|
104
|
-
def database_config(database)
|
105
|
-
case database
|
106
|
-
when 'mysql', 'mysql2'
|
107
|
-
{ header: MYSQL_DOCKER_DB, host: 'mysql', adapter: 'mysql2' }
|
108
|
-
when 'postgres', 'postgresql'
|
109
|
-
{ header: POSTGRES_DOCKER_DB, host: 'postgres', adapter: 'postgresql' }
|
110
|
-
else
|
111
|
-
raise "Unknown database adapter `#{database}`: either mysql or postgres"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def warn_file_update(file, exists)
|
116
|
-
intro = if exists
|
117
|
-
"/!\\ Watch out! Your #{file} was overwritten"
|
118
|
-
else
|
119
|
-
"A new file #{file} was added"
|
120
|
-
end
|
121
|
-
|
122
|
-
say "#{intro} by Modulorails. Ensure everything is correct!"
|
123
|
-
end
|
124
|
-
|
125
|
-
def create_keep_file
|
126
|
-
file = '.modulorails-gitlab-ci'
|
127
|
-
|
128
|
-
# Create file to avoid this generator on next modulorails launch
|
129
|
-
copy_file(file, file)
|
130
|
-
|
131
|
-
say "Add #{file} to git"
|
132
|
-
%x(git add #{file})
|
133
|
-
end
|
134
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
image: ruby:RUBY_VERSION
|
2
|
-
stages:
|
3
|
-
- lint
|
4
|
-
- test
|
5
|
-
- deploy
|
6
|
-
cache:
|
7
|
-
key: CI_CD_CACHE_KEY
|
8
|
-
paths:
|
9
|
-
- vendor/ruby
|
10
|
-
|
11
|
-
before_script:
|
12
|
-
- apt-get update -qy
|
13
|
-
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
|
14
|
-
- eval $(ssh-agent -s)
|
15
|
-
- ssh-add <(echo "$SSH_PRIVATE_KEY")
|
16
|
-
- mkdir -p ~/.ssh
|
17
|
-
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
|
18
|
-
- apt-get install -y ruby-dev
|
19
|
-
- gem install bundler -v BUNDLER_VERSION --no-document
|
20
|
-
# You might need DPL if you're deploying using Heroku
|
21
|
-
#- gem install dpl -v 1.10.15 --no-document
|
22
|
-
# You might need to add some configurations here like a key for a theme
|
23
|
-
#- bundle config gems.rapidrailsthemes.com "$RRT_CFG"
|
24
|
-
- bundle install -j $(nproc) --path vendor
|
25
|
-
|
26
|
-
rubocop:
|
27
|
-
stage: lint
|
28
|
-
script:
|
29
|
-
- bundle exec rubocop -D
|
30
|
-
tags:
|
31
|
-
- rails
|
32
|
-
except:
|
33
|
-
- master
|
34
|
-
- staging
|
35
|
-
|
36
|
-
test:
|
37
|
-
stage: test
|
38
|
-
script:
|
39
|
-
- cp config/database-ci.yml config/database.yml
|
40
|
-
- "bundle exec rake db:create RAILS_ENV=test"
|
41
|
-
- "RAILS_ENV=test bundle exec rake db:migrate:reset"
|
42
|
-
- bundle exec rspec
|
43
|
-
tags:
|
44
|
-
- rails
|
45
|
-
except:
|
46
|
-
- master
|
47
|
-
|
48
|
-
staging:
|
49
|
-
stage: deploy
|
50
|
-
script:
|
51
|
-
# Uncomment the next line and update the application name if you're using DPL to deploy on
|
52
|
-
# Heroku
|
53
|
-
#- dpl --provider=heroku --app=APP_NAME --api-key=$HEROKU_API_KEY
|
54
|
-
# Remove the next line if you're not using Capistrano
|
55
|
-
- bundle exec cap staging deploy
|
56
|
-
only:
|
57
|
-
- staging
|
58
|
-
tags:
|
59
|
-
- rails
|
60
|
-
|
61
|
-
production:
|
62
|
-
stage: deploy
|
63
|
-
script:
|
64
|
-
# Uncomment the next line and update the application name if you're using DPL to deploy on
|
65
|
-
# Heroku
|
66
|
-
#- dpl --provider=heroku --app=APP_NAME --api-key=$HEROKU_API_KEY
|
67
|
-
# Remove the next line if you're not using Capistrano
|
68
|
-
- bundle exec cap production deploy
|
69
|
-
only:
|
70
|
-
- master
|
71
|
-
tags:
|
72
|
-
- rails
|
data/lib/modulorails/updater.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
module Modulorails
|
2
|
-
# Author: Matthieu 'ciappa_m' Ciappara
|
3
|
-
# This updates modulorails by editing the gemfile and running a bundle update
|
4
|
-
class Updater
|
5
|
-
LATEST_VERSION_URL = 'https://rubygems.org/api/v1/versions/modulorails/latest.json'.freeze
|
6
|
-
|
7
|
-
def self.call(*args)
|
8
|
-
new(*args).call
|
9
|
-
end
|
10
|
-
|
11
|
-
def call
|
12
|
-
# Get the last published version
|
13
|
-
@last_published_version = HTTParty.get(LATEST_VERSION_URL).parsed_response['version']
|
14
|
-
|
15
|
-
# Do nothing if we could not fetch the last published version (whatever the reason)
|
16
|
-
# Or if the current version is the same as the last published version
|
17
|
-
return if @last_published_version.nil? || @last_published_version == Modulorails::VERSION
|
18
|
-
|
19
|
-
# If the last published version is different from the current version, we update the gem
|
20
|
-
edit_gemfile
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def edit_gemfile
|
26
|
-
# Log to warn the user
|
27
|
-
puts("[Modulorails] Last version for modulorails is #{@last_published_version} while you "\
|
28
|
-
"are using version #{Modulorails::VERSION}. Running auto-update.")
|
29
|
-
|
30
|
-
# Read the lines of the Gemfile
|
31
|
-
gemfile_location = Rails.root.join('Gemfile')
|
32
|
-
lines = File.readlines gemfile_location
|
33
|
-
|
34
|
-
# Search and replace the modulorails line
|
35
|
-
index = lines.index { |l| l =~ /gem\s['"]modulorails['"]/ }
|
36
|
-
lines[index].gsub!(/(\s*)gem\s['"]modulorails['"].*/,
|
37
|
-
"#{$1}gem 'modulorails', '= #{@last_published_version}'")
|
38
|
-
|
39
|
-
# Update the Gemfile
|
40
|
-
File.open(gemfile_location, 'w') { |f| f.puts(lines) }
|
41
|
-
|
42
|
-
# Update the gem and the Gemfile.lock
|
43
|
-
system('bundle install')
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|