modulorails 1.2.1 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/README.md +3 -0
- data/lib/generators/modulorails/docker/docker_generator.rb +8 -1
- data/lib/generators/modulorails/docker/templates/Dockerfile.prod.tt +9 -8
- data/lib/generators/modulorails/docker/templates/Dockerfile.tt +3 -4
- data/lib/generators/modulorails/docker/templates/config/cable.yml.tt +15 -0
- data/lib/generators/modulorails/docker/templates/config/database.yml.tt +12 -15
- data/lib/generators/modulorails/docker/templates/docker-compose.prod.yml.tt +9 -10
- data/lib/generators/modulorails/docker/templates/docker-compose.yml.tt +16 -18
- data/lib/generators/modulorails/docker/templates/entrypoints/docker-entrypoint.sh.tt +1 -1
- data/lib/generators/modulorails/docker/templates/entrypoints/webpack-entrypoint.sh.tt +1 -1
- data/lib/generators/modulorails/gitlabci/gitlabci_generator.rb +11 -0
- data/lib/generators/modulorails/gitlabci/templates/.gitlab-ci.yml.tt +45 -62
- data/lib/generators/modulorails/gitlabci/templates/config/deploy/production.yaml.tt +43 -0
- data/lib/generators/modulorails/gitlabci/templates/config/deploy/review.yaml.tt +42 -0
- data/lib/generators/modulorails/gitlabci/templates/config/deploy/staging.yaml.tt +42 -0
- data/lib/generators/modulorails/healthcheck/health_check_generator.rb +1 -5
- data/lib/generators/modulorails/healthcheck/templates/config/initializers/health_check.rb.tt +1 -1
- data/lib/generators/modulorails/rubocop/templates/rubocop.yml.tt +6 -2
- data/lib/generators/modulorails/service/USAGE +14 -0
- data/lib/generators/modulorails/service/service_generator.rb +12 -0
- data/lib/generators/modulorails/sidekiq/sidekiq_generator.rb +178 -0
- data/lib/generators/modulorails/sidekiq/templates/config/initializers/sidekiq.rb.tt +9 -0
- data/lib/generators/modulorails/sidekiq/templates/entrypoints/sidekiq-entrypoint.sh.tt +7 -0
- data/lib/modulorails/data.rb +4 -0
- data/lib/modulorails/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a06133e9c157d574ab3cc83ffd931e7e61873d7c8deff63c22b8a0657def075
|
4
|
+
data.tar.gz: d345aa7aa32575496041762e43f198001260a003dc811c69ae704f889dde0411
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1594ae1f801bf28f08ec2a86ecc6040f48c513d2c47a2dfb9f0a8a3b69bf2dd7f04d6465aff1041faf80759fb70610ff57a8b02b83bddf4cbdc3ab9c553bdb9b
|
7
|
+
data.tar.gz: 4e4652c68c1ba65d1ce429c5acffbb5e11c8f82effdcdd55735d91cb8c12e442f6a00b5b5099a316b26f8620ef20873c96b5349df4ea58ec24566aaebe75abb1
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,25 @@
|
|
2
2
|
|
3
3
|
This file is used to list changes made in each version of the gem.
|
4
4
|
|
5
|
+
# 1.3.1
|
6
|
+
|
7
|
+
- Update templates according to new devops standards:
|
8
|
+
- Add exec commands in entrypoints.
|
9
|
+
- Upgrade PG and Redis version in docker-compose files.
|
10
|
+
- Upgrade PG and Redis version in test stage in CI.
|
11
|
+
- Add default SECRET_KEY_BASE and optional `yarn install` in `Dockerfile.prod` templates.
|
12
|
+
- Add templates for Kubernetes values files.
|
13
|
+
- Append sidekiq in Kubernetes values files in Sidekiq generator.
|
14
|
+
|
15
|
+
# 1.3.0
|
16
|
+
|
17
|
+
- Update redis configuration in generators.
|
18
|
+
- Update mailcatcher docker image for better compatibility with ARM64.
|
19
|
+
- Remove possible suffix `Service` in service generator.
|
20
|
+
- Update rubocop configuration in template.
|
21
|
+
- Add a generator to add Sidekiq to a project.
|
22
|
+
- Update docker generator to use valid names for environment variables.
|
23
|
+
|
5
24
|
# 1.2.1
|
6
25
|
|
7
26
|
- Update rubocop configuration.
|
data/README.md
CHANGED
@@ -28,6 +28,9 @@ Modulorails.configure do |config|
|
|
28
28
|
config.project_manager 'The email of the project manager of the application'
|
29
29
|
config.endpoint 'The url to the intranet'
|
30
30
|
config.api_key 'The API key'
|
31
|
+
config.review_base_url 'The base url for the review environments' # optional
|
32
|
+
config.staging_url 'The url for the staging environment' # optional
|
33
|
+
config.production_url 'The url for the production environment' # optional
|
31
34
|
end
|
32
35
|
```
|
33
36
|
|
@@ -8,6 +8,12 @@ class Modulorails::DockerGenerator < Rails::Generators::Base
|
|
8
8
|
desc 'This generator creates Dockerfiles for an app'
|
9
9
|
|
10
10
|
def create_config_file
|
11
|
+
@data = Modulorails.data
|
12
|
+
@adapter = data.adapter
|
13
|
+
@webpack_container_needed = data.webpacker_version.present?
|
14
|
+
@image_name = @data.name.parameterize
|
15
|
+
@environment_name = @data.environment_name
|
16
|
+
|
11
17
|
template 'Dockerfile'
|
12
18
|
template 'Dockerfile.prod'
|
13
19
|
template 'docker-compose.yml'
|
@@ -15,9 +21,10 @@ class Modulorails::DockerGenerator < Rails::Generators::Base
|
|
15
21
|
template 'entrypoints/docker-entrypoint.sh'
|
16
22
|
chmod 'entrypoints/docker-entrypoint.sh', 0755
|
17
23
|
template 'config/database.yml'
|
24
|
+
template 'config/cable.yml'
|
18
25
|
|
19
26
|
# Useless unless project is using Webpacker
|
20
|
-
if
|
27
|
+
if @webpack_container_needed
|
21
28
|
template 'entrypoints/webpack-entrypoint.sh'
|
22
29
|
chmod 'entrypoints/webpack-entrypoint.sh', 0755
|
23
30
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# BUILD IMAGE
|
2
|
-
FROM ruby:<%=
|
2
|
+
FROM ruby:<%= @data.ruby_version %>-alpine as builder
|
3
3
|
|
4
|
-
ENV RAILS_ENV=production
|
4
|
+
ENV RAILS_ENV=production \
|
5
|
+
SECRET_KEY_BASE=1
|
5
6
|
WORKDIR /app
|
6
7
|
|
7
8
|
RUN apk add --update --no-cache \
|
@@ -11,27 +12,28 @@ RUN apk add --update --no-cache \
|
|
11
12
|
yarn \
|
12
13
|
shared-mime-info \
|
13
14
|
gcompat \
|
14
|
-
<%- adapter
|
15
|
-
<%- if adapter =~ /mysql/ -%>
|
15
|
+
<%- if @adapter =~ /mysql/ -%>
|
16
16
|
mysql-dev
|
17
17
|
<%- else -%>
|
18
18
|
postgresql-dev
|
19
19
|
<%- end -%>
|
20
|
-
RUN gem install bundler -v <%=
|
20
|
+
RUN gem install bundler -v <%= @data.bundler_version %>
|
21
21
|
|
22
22
|
COPY Gemfile Gemfile.lock ./
|
23
23
|
RUN bundle config set --local deployment 'true'
|
24
24
|
RUN bundle check || bundle install --jobs=2 \
|
25
25
|
&& rm -rf vendor/bundle/ruby/*/cache/*
|
26
26
|
|
27
|
+
<%- if @webpack_container_needed -%>
|
27
28
|
COPY package.json yarn.lock ./
|
28
29
|
RUN yarn install
|
30
|
+
<%- end-%>
|
29
31
|
|
30
32
|
COPY . .
|
31
33
|
RUN bundle exec rake assets:precompile
|
32
34
|
|
33
35
|
# FINAL IMAGE
|
34
|
-
FROM ruby:<%=
|
36
|
+
FROM ruby:<%= @data.ruby_version %>-alpine
|
35
37
|
|
36
38
|
ENV RAILS_ENV=development
|
37
39
|
ENV EDITOR=vim
|
@@ -44,8 +46,7 @@ RUN apk add --update --no-cache \
|
|
44
46
|
tzdata \
|
45
47
|
shared-mime-info \
|
46
48
|
vim \
|
47
|
-
<%- adapter
|
48
|
-
<%- if adapter =~ /mysql/ -%>
|
49
|
+
<%- if @adapter =~ /mysql/ -%>
|
49
50
|
mysql-dev \
|
50
51
|
<%- else -%>
|
51
52
|
postgresql-dev \
|
@@ -1,4 +1,4 @@
|
|
1
|
-
FROM ruby:<%=
|
1
|
+
FROM ruby:<%= @data.ruby_version %>-alpine
|
2
2
|
|
3
3
|
ENV RAILS_ENV=development
|
4
4
|
ENV EDITOR=vim
|
@@ -11,13 +11,12 @@ RUN apk add --update --no-cache \
|
|
11
11
|
tzdata \
|
12
12
|
gcompat \
|
13
13
|
vim \
|
14
|
-
<%- adapter
|
15
|
-
<%- if adapter =~ /mysql/ -%>
|
14
|
+
<%- if @adapter =~ /mysql/ -%>
|
16
15
|
mysql-dev
|
17
16
|
<%- else -%>
|
18
17
|
postgresql-dev
|
19
18
|
<%- end -%>
|
20
|
-
RUN gem install bundler -v <%=
|
19
|
+
RUN gem install bundler -v <%= @data.bundler_version %>
|
21
20
|
|
22
21
|
COPY Gemfile Gemfile.lock ./
|
23
22
|
RUN bundle install --jobs=2
|
@@ -1,29 +1,26 @@
|
|
1
|
-
<%-
|
2
|
-
<%- upper_image_name = image_name.upcase -%>
|
3
|
-
<%- adapter = Modulorails.data.adapter -%>
|
4
|
-
<%- if adapter =~ /mysql/ -%>
|
1
|
+
<%- if @adapter =~ /mysql/ -%>
|
5
2
|
development: &default
|
6
3
|
adapter: mysql2
|
7
4
|
encoding: utf8mb4
|
8
5
|
collation: utf8mb4_unicode_ci
|
9
|
-
database: <%%= ENV.fetch('<%=
|
10
|
-
username: <%%= ENV.fetch('<%=
|
11
|
-
password: <%%= ENV.fetch('<%=
|
12
|
-
host: <%%= ENV.fetch('<%=
|
13
|
-
port: <%%= ENV.fetch('<%=
|
6
|
+
database: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_NAME', '<%= @image_name %>') %>
|
7
|
+
username: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_USERNAME', 'root') %>
|
8
|
+
password: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_PASSWORD', '') %>
|
9
|
+
host: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_HOST', 'database') %>
|
10
|
+
port: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_PORT', 3306) %>
|
14
11
|
<%- else -%>
|
15
12
|
development: &default
|
16
13
|
adapter: postgresql
|
17
|
-
database: <%%= ENV.fetch('<%=
|
18
|
-
username: <%%= ENV.fetch('<%=
|
19
|
-
password: <%%= ENV.fetch('<%=
|
20
|
-
host: <%%= ENV.fetch('<%=
|
21
|
-
port: <%%= ENV.fetch('<%=
|
14
|
+
database: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_NAME', '<%= @image_name %>') %>
|
15
|
+
username: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_USERNAME', 'postgres') %>
|
16
|
+
password: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_PASSWORD', 'postgres') %>
|
17
|
+
host: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_HOST', 'database') %>
|
18
|
+
port: <%%= ENV.fetch('<%= @environment_name %>_DATABASE_PORT', 5432) %>
|
22
19
|
<%- end -%>
|
23
20
|
|
24
21
|
test:
|
25
22
|
<<: *default
|
26
|
-
database: <%%= ENV.fetch('<%=
|
23
|
+
database: <%%= ENV.fetch('<%= @environment_name %>_TEST_DATABASE_NAME', '<%= @image_name %>_test') %>
|
27
24
|
|
28
25
|
staging:
|
29
26
|
<<: *default
|
@@ -1,9 +1,8 @@
|
|
1
1
|
version: '3.7'
|
2
2
|
|
3
|
-
<%- image_name = Modulorails.data.name.parameterize -%>
|
4
3
|
services:
|
5
4
|
app:
|
6
|
-
image: modulotechgroup/<%= image_name %>
|
5
|
+
image: modulotechgroup/<%= @image_name %>
|
7
6
|
build:
|
8
7
|
context: .
|
9
8
|
dockerfile: Dockerfile.prod
|
@@ -15,35 +14,35 @@ services:
|
|
15
14
|
environment:
|
16
15
|
RAILS_ENV: production
|
17
16
|
URL: http://localhost:3000
|
18
|
-
<%=
|
19
|
-
<%=
|
17
|
+
<%= @environment_name %>_DATABASE_HOST: database
|
18
|
+
<%= @environment_name %>_DATABASE_NAME: <%= @image_name %>
|
20
19
|
RAILS_SERVE_STATIC_FILES: 'true'
|
20
|
+
REDIS_URL: redis://redis:6379/1
|
21
21
|
|
22
|
-
<%- adapter
|
23
|
-
<%- if adapter =~ /mysql/ -%>
|
22
|
+
<%- if @adapter =~ /mysql/ -%>
|
24
23
|
database:
|
25
24
|
image: mysql/mysql-server:8.0
|
26
25
|
volumes:
|
27
26
|
- db_data:/var/lib/mysql
|
28
27
|
environment:
|
29
28
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
30
|
-
MYSQL_DATABASE: <%= image_name %>
|
29
|
+
MYSQL_DATABASE: <%= @image_name %>
|
31
30
|
MYSQL_ROOT_HOST: '%'
|
32
31
|
<%- else -%>
|
33
32
|
database:
|
34
|
-
image: postgres:
|
33
|
+
image: postgres:15-alpine
|
35
34
|
volumes:
|
36
35
|
- db_data:/var/lib/postgresql/data
|
37
36
|
environment:
|
38
37
|
POSTGRES_USER: postgres
|
39
38
|
POSTGRES_PASSWORD: postgres
|
40
|
-
POSTGRES_DB: <%= image_name %>
|
39
|
+
POSTGRES_DB: <%= @image_name %>
|
41
40
|
LC_COLLATE: 'en_US.UTF-8'
|
42
41
|
LC_CTYPE: 'en_US.UTF-8'
|
43
42
|
<%- end -%>
|
44
43
|
|
45
44
|
redis:
|
46
|
-
image: redis:
|
45
|
+
image: redis:7-alpine
|
47
46
|
|
48
47
|
# Define the volumes references in the services
|
49
48
|
volumes:
|
@@ -1,9 +1,8 @@
|
|
1
1
|
version: '3.7'
|
2
2
|
|
3
|
-
<%- image_name = Modulorails.data.name.parameterize -%>
|
4
3
|
services:
|
5
4
|
app:
|
6
|
-
image: modulotechgroup/<%= image_name %>:dev
|
5
|
+
image: modulotechgroup/<%= @image_name %>:dev
|
7
6
|
build:
|
8
7
|
context: .
|
9
8
|
dockerfile: Dockerfile
|
@@ -17,47 +16,46 @@ services:
|
|
17
16
|
environment:
|
18
17
|
RAILS_ENV: development
|
19
18
|
URL: http://localhost:3000
|
20
|
-
<%=
|
21
|
-
<%=
|
19
|
+
<%= @environment_name %>_DATABASE_HOST: database
|
20
|
+
<%= @environment_name %>_DATABASE_NAME: <%= @image_name %>
|
21
|
+
REDIS_URL: redis://redis:6379/1
|
22
22
|
entrypoint: ./entrypoints/docker-entrypoint.sh
|
23
23
|
stdin_open: true
|
24
24
|
tty: true
|
25
25
|
|
26
|
-
<%- adapter
|
27
|
-
<%- if adapter =~ /mysql/ -%>
|
26
|
+
<%- if @adapter =~ /mysql/ -%>
|
28
27
|
database:
|
29
28
|
image: mysql/mysql-server:8.0
|
30
29
|
volumes:
|
31
30
|
- db_data:/var/lib/mysql
|
32
31
|
environment:
|
33
32
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
34
|
-
MYSQL_DATABASE: <%= image_name %>
|
33
|
+
MYSQL_DATABASE: <%= @image_name %>
|
35
34
|
MYSQL_ROOT_HOST: '%'
|
36
|
-
<%- else-%>
|
35
|
+
<%- else -%>
|
37
36
|
database:
|
38
|
-
image: postgres:
|
37
|
+
image: postgres:15-alpine
|
39
38
|
volumes:
|
40
39
|
- db_data:/var/lib/postgresql/data
|
41
40
|
environment:
|
42
41
|
POSTGRES_USER: postgres
|
43
42
|
POSTGRES_PASSWORD: postgres
|
44
|
-
POSTGRES_DB: <%= image_name %>
|
43
|
+
POSTGRES_DB: <%= @image_name %>
|
45
44
|
LC_COLLATE: 'en_US.UTF-8'
|
46
45
|
LC_CTYPE: 'en_US.UTF-8'
|
47
|
-
<%- end-%>
|
46
|
+
<%- end -%>
|
48
47
|
|
49
48
|
redis:
|
50
|
-
image: redis:
|
49
|
+
image: redis:7-alpine
|
51
50
|
|
52
51
|
mailcatcher:
|
53
|
-
image:
|
52
|
+
image: dockage/mailcatcher
|
54
53
|
ports:
|
55
|
-
- 1080:
|
54
|
+
- 1080:1080
|
56
55
|
|
57
|
-
<%- webpack_container_needed
|
58
|
-
<%- if webpack_container_needed -%>
|
56
|
+
<%- if @webpack_container_needed -%>
|
59
57
|
webpack:
|
60
|
-
image: modulotechgroup/<%= image_name %>:dev
|
58
|
+
image: modulotechgroup/<%= @image_name %>:dev
|
61
59
|
build:
|
62
60
|
context: .
|
63
61
|
dockerfile: Dockerfile
|
@@ -70,7 +68,7 @@ services:
|
|
70
68
|
NODE_ENV: development
|
71
69
|
RAILS_ENV: development
|
72
70
|
WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
|
73
|
-
<%- end-%>
|
71
|
+
<%- end -%>
|
74
72
|
|
75
73
|
volumes:
|
76
74
|
db_data:
|
@@ -8,8 +8,19 @@ class Modulorails::GitlabciGenerator < Rails::Generators::Base
|
|
8
8
|
desc 'This generator creates a template for a .gitlab-ci.yml file at root'
|
9
9
|
|
10
10
|
def create_config_file
|
11
|
+
@data = Modulorails.data
|
12
|
+
@image_name = @data.name.parameterize
|
13
|
+
@environment_name = @data.environment_name
|
14
|
+
@adapter = data.adapter
|
15
|
+
@review_base_url = @data.review_base_url
|
16
|
+
@staging_url = @data.staging_url
|
17
|
+
@production_url = @data.production_url
|
18
|
+
|
11
19
|
# Update the gitlab-ci template
|
12
20
|
template '.gitlab-ci.yml'
|
21
|
+
template 'config/deploy/production.yaml' if @production_url.present?
|
22
|
+
template 'config/deploy/staging.yaml' if @staging_url.present?
|
23
|
+
template 'config/deploy/review.yaml' if @review_base_url.present?
|
13
24
|
|
14
25
|
# Remove the database-ci template if it exists.
|
15
26
|
# It used to be referenced by the gitlab-ci template.
|
@@ -1,4 +1,3 @@
|
|
1
|
-
<%- image_name = Modulorails.data.name.parameterize -%>
|
2
1
|
include:
|
3
2
|
- project: 'modulosource/modulotech/devops/gitlab-ci-templates'
|
4
3
|
file:
|
@@ -6,26 +5,17 @@ include:
|
|
6
5
|
- '/templates/integration.gitlab-ci.yml'
|
7
6
|
- '/templates/docker-buildx.gitlab-ci.yml'
|
8
7
|
|
9
|
-
services:
|
10
|
-
<%- adapter = Modulorails.data.adapter -%>
|
11
|
-
<%- if adapter =~ /mysql/ -%>
|
12
|
-
- mysql:8.0
|
13
|
-
<%- else -%>
|
14
|
-
- postgres:13.5
|
15
|
-
<%- end -%>
|
16
|
-
- redis:6.2
|
17
|
-
|
18
8
|
variables:
|
19
|
-
IMAGE_NAME: <%= image_name %>
|
20
|
-
<%- if adapter =~ /mysql/ -%>
|
21
|
-
MYSQL_DATABASE: <%= image_name %>_test
|
9
|
+
IMAGE_NAME: <%= @image_name %>
|
10
|
+
<%- if @adapter =~ /mysql/ -%>
|
11
|
+
MYSQL_DATABASE: <%= @image_name %>_test
|
22
12
|
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
23
|
-
<%=
|
13
|
+
<%= @environment_name %>_DATABASE_HOST: mysql
|
24
14
|
<%- else -%>
|
25
|
-
POSTGRES_DB: <%= image_name %>_test
|
15
|
+
POSTGRES_DB: <%= @image_name %>_test
|
26
16
|
POSTGRES_USER: postgres
|
27
17
|
POSTGRES_PASSWORD: postgres
|
28
|
-
<%=
|
18
|
+
<%= @environment_name %>_DATABASE_HOST: postgres
|
29
19
|
<%- end -%>
|
30
20
|
|
31
21
|
stages:
|
@@ -33,35 +23,44 @@ stages:
|
|
33
23
|
- build
|
34
24
|
- deploy
|
35
25
|
|
26
|
+
build_integration_image:
|
27
|
+
extends: .build_integration_image
|
28
|
+
|
36
29
|
test:
|
37
30
|
extends: .test
|
31
|
+
services:
|
32
|
+
<%- if @adapter =~ /mysql/ -%>
|
33
|
+
- mysql:8-alpine
|
34
|
+
<%- else -%>
|
35
|
+
- postgres:15-alpine
|
36
|
+
<%- end -%>
|
37
|
+
- redis:7-alpine
|
38
|
+
variables:
|
39
|
+
RAILS_ENV: test
|
38
40
|
script:
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
|
43
|
-
build_integration_image:
|
44
|
-
extends: .build_integration_image
|
41
|
+
- bundle exec rake db:create
|
42
|
+
- bundle exec rake db:migrate:reset
|
43
|
+
- bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml
|
45
44
|
|
46
45
|
docker_build:
|
47
46
|
extends: .docker_buildx_push
|
48
47
|
only:
|
49
48
|
- merge_requests
|
50
49
|
- staging
|
50
|
+
- master
|
51
51
|
|
52
|
-
<%- review_base_url
|
53
|
-
<%- if review_base_url.present? -%>
|
52
|
+
<%- if @review_base_url.present? -%>
|
54
53
|
deploy_review:
|
55
54
|
extends: .deploy_helm
|
56
55
|
variables:
|
57
|
-
NAMESPACE: <%= image_name %>-$CI_ENVIRONMENT_SLUG
|
58
|
-
NAME: <%= image_name %>
|
59
|
-
CHART_NAME: <%= image_name %>
|
60
|
-
CONFIG_FILE: config/deploy/
|
61
|
-
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA --set ingress.hosts[0].host=${CI_ENVIRONMENT_SLUG}.<%= review_base_url %> --set ingress.tls[0].hosts[0]=${CI_ENVIRONMENT_SLUG}.<%= review_base_url %> --set env.url=${CI_ENVIRONMENT_SLUG}.<%= review_base_url %> --set database.
|
56
|
+
NAMESPACE: <%= @image_name %>-$CI_ENVIRONMENT_SLUG
|
57
|
+
NAME: <%= @image_name %>
|
58
|
+
CHART_NAME: <%= @image_name %>
|
59
|
+
CONFIG_FILE: config/deploy/review.yaml
|
60
|
+
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA --set ingress.hosts[0].host=${CI_ENVIRONMENT_SLUG}.<%= @review_base_url %> --set ingress.tls[0].hosts[0]=${CI_ENVIRONMENT_SLUG}.<%= @review_base_url %> --set env.url=${CI_ENVIRONMENT_SLUG}.<%= @review_base_url %> --set database.url=$DATABASE_URL --set master_key.key=$MASTER_KEY
|
62
61
|
environment:
|
63
62
|
name: review/$CI_COMMIT_REF_SLUG
|
64
|
-
url: https://${CI_ENVIRONMENT_SLUG}.<%= review_base_url %>
|
63
|
+
url: https://${CI_ENVIRONMENT_SLUG}.<%= @review_base_url %>
|
65
64
|
on_stop: stop_review
|
66
65
|
auto_stop_in: 3 days
|
67
66
|
only:
|
@@ -70,56 +69,40 @@ deploy_review:
|
|
70
69
|
stop_review:
|
71
70
|
extends: .stop_review
|
72
71
|
variables:
|
73
|
-
NAMESPACE: <%= image_name %>-$CI_ENVIRONMENT_SLUG
|
74
|
-
NAME: <%= image_name %>
|
72
|
+
NAMESPACE: <%= @image_name %>-$CI_ENVIRONMENT_SLUG
|
73
|
+
NAME: <%= @image_name %>
|
75
74
|
only:
|
76
75
|
- merge_requests
|
77
76
|
<%- end -%>
|
78
77
|
|
79
|
-
<%- staging_url
|
80
|
-
<%- if staging_url.present? -%>
|
78
|
+
<%- if @staging_url.present? -%>
|
81
79
|
deploy_staging:
|
82
80
|
extends: .deploy_helm
|
83
81
|
variables:
|
84
|
-
NAMESPACE: <%= image_name %>
|
85
|
-
NAME: <%= image_name %>
|
86
|
-
CHART_NAME: <%= image_name %>
|
87
|
-
CONFIG_FILE: config/deploy/
|
88
|
-
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA --set database.
|
82
|
+
NAMESPACE: <%= @image_name %>
|
83
|
+
NAME: <%= @image_name %>
|
84
|
+
CHART_NAME: <%= @image_name %>
|
85
|
+
CONFIG_FILE: config/deploy/staging.yaml
|
86
|
+
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA --set database.url=$DATABASE_URL --set master_key.key=$MASTER_KEY
|
89
87
|
environment:
|
90
88
|
name: staging
|
91
|
-
url: https://<%= staging_url %>
|
92
|
-
only:
|
93
|
-
- staging
|
94
|
-
<%- else -%>
|
95
|
-
deploy_staging:
|
96
|
-
extends: .deploy_capistrano
|
97
|
-
variables:
|
98
|
-
STAGE: staging
|
89
|
+
url: https://<%= @staging_url %>
|
99
90
|
only:
|
100
91
|
- staging
|
101
92
|
<%- end -%>
|
102
93
|
|
103
|
-
<%- production_url
|
104
|
-
<%- if production_url.present? -%>
|
94
|
+
<%- if @production_url.present? -%>
|
105
95
|
deploy_production:
|
106
96
|
extends: .deploy_helm
|
107
97
|
variables:
|
108
|
-
NAMESPACE: <%= image_name %>
|
109
|
-
NAME: <%= image_name %>
|
110
|
-
CHART_NAME: <%= image_name %>
|
111
|
-
CONFIG_FILE: config/deploy/
|
112
|
-
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA
|
98
|
+
NAMESPACE: <%= @image_name %>
|
99
|
+
NAME: <%= @image_name %>
|
100
|
+
CHART_NAME: <%= @image_name %>
|
101
|
+
CONFIG_FILE: config/deploy/production.yaml
|
102
|
+
EXTRA_VARS: --set image.tag=$CI_COMMIT_SHORT_SHA
|
113
103
|
environment:
|
114
104
|
name: production
|
115
|
-
url: https://<%= production_url %>
|
116
|
-
only:
|
117
|
-
- master
|
118
|
-
<%- else -%>
|
119
|
-
deploy_production:
|
120
|
-
extends: .deploy_capistrano
|
121
|
-
variables:
|
122
|
-
STAGE: production
|
105
|
+
url: https://<%= @production_url %>
|
123
106
|
only:
|
124
107
|
- master
|
125
108
|
<%- end -%>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
imagePullSecrets:
|
2
|
+
- name: regcred
|
3
|
+
|
4
|
+
ingress:
|
5
|
+
enabled: true
|
6
|
+
annotations:
|
7
|
+
kubernetes.io/ingress.class: nginx
|
8
|
+
kubernetes.io/tls-acme: 'true'
|
9
|
+
hosts:
|
10
|
+
- host: <%= @production_url %>
|
11
|
+
paths:
|
12
|
+
- path: /
|
13
|
+
tls:
|
14
|
+
- secretName: <%= @image_name %>
|
15
|
+
hosts:
|
16
|
+
- <%= @production_url %>
|
17
|
+
|
18
|
+
resources:
|
19
|
+
requests:
|
20
|
+
cpu: 100m
|
21
|
+
memory: 512Mi
|
22
|
+
limits:
|
23
|
+
memory: 512Mi
|
24
|
+
|
25
|
+
autoscaling:
|
26
|
+
enabled: true
|
27
|
+
minReplicas: 2
|
28
|
+
maxReplicas: 10
|
29
|
+
targetCPUUtilizationPercentage: 80
|
30
|
+
|
31
|
+
database:
|
32
|
+
existingSecret: 'database-credential'
|
33
|
+
|
34
|
+
master_key:
|
35
|
+
existingSecret: 'masterkey-credential'
|
36
|
+
|
37
|
+
env:
|
38
|
+
RAILS_ENV: production
|
39
|
+
URL: https://<%= @production_url %>/
|
40
|
+
|
41
|
+
redis:
|
42
|
+
enabled: false
|
43
|
+
existingSecret: 'redis-credential'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
imagePullSecrets:
|
2
|
+
- name: regcred
|
3
|
+
|
4
|
+
ingress:
|
5
|
+
enabled: true
|
6
|
+
annotations:
|
7
|
+
kubernetes.io/ingress.class: nginx
|
8
|
+
kubernetes.io/tls-acme: 'true'
|
9
|
+
hosts:
|
10
|
+
- host: $REVIEW_URL
|
11
|
+
paths:
|
12
|
+
- path: /
|
13
|
+
tls:
|
14
|
+
- secretName: <%= @image_name %>
|
15
|
+
hosts:
|
16
|
+
- $REVIEW_URL
|
17
|
+
|
18
|
+
resources:
|
19
|
+
requests:
|
20
|
+
cpu: 100m
|
21
|
+
memory: 512Mi
|
22
|
+
limits:
|
23
|
+
memory: 512Mi
|
24
|
+
|
25
|
+
autoscaling:
|
26
|
+
enabled: true
|
27
|
+
minReplicas: 1
|
28
|
+
maxReplicas: 10
|
29
|
+
targetCPUUtilizationPercentage: 80
|
30
|
+
|
31
|
+
database:
|
32
|
+
url: $DATABASE_URL
|
33
|
+
|
34
|
+
master_key:
|
35
|
+
key: $MASTER_KEY
|
36
|
+
|
37
|
+
env:
|
38
|
+
RAILS_ENV: staging
|
39
|
+
URL: https://$REVIEW_URL/
|
40
|
+
|
41
|
+
redis:
|
42
|
+
enabled: true
|
@@ -0,0 +1,42 @@
|
|
1
|
+
imagePullSecrets:
|
2
|
+
- name: regcred
|
3
|
+
|
4
|
+
ingress:
|
5
|
+
enabled: true
|
6
|
+
annotations:
|
7
|
+
kubernetes.io/ingress.class: nginx
|
8
|
+
kubernetes.io/tls-acme: 'true'
|
9
|
+
hosts:
|
10
|
+
- host: <%= @staging_url %>
|
11
|
+
paths:
|
12
|
+
- path: /
|
13
|
+
tls:
|
14
|
+
- secretName: <%= @image_name %>
|
15
|
+
hosts:
|
16
|
+
- <%= @staging_url %>
|
17
|
+
|
18
|
+
resources:
|
19
|
+
requests:
|
20
|
+
cpu: 100m
|
21
|
+
memory: 512Mi
|
22
|
+
limits:
|
23
|
+
memory: 512Mi
|
24
|
+
|
25
|
+
autoscaling:
|
26
|
+
enabled: true
|
27
|
+
minReplicas: 1
|
28
|
+
maxReplicas: 10
|
29
|
+
targetCPUUtilizationPercentage: 80
|
30
|
+
|
31
|
+
database:
|
32
|
+
url: $DATABASE_URL
|
33
|
+
|
34
|
+
master_key:
|
35
|
+
key: $MASTER_KEY
|
36
|
+
|
37
|
+
env:
|
38
|
+
RAILS_ENV: staging
|
39
|
+
URL: https://<%= @staging_url %>/
|
40
|
+
|
41
|
+
redis:
|
42
|
+
enabled: true
|
@@ -13,11 +13,7 @@ class Modulorails::HealthCheckGenerator < Rails::Generators::Base
|
|
13
13
|
|
14
14
|
# Add the route
|
15
15
|
unless File.read(Rails.root.join('config/routes.rb')).match?('health_check_routes')
|
16
|
-
inject_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n"
|
17
|
-
<<~'RUBY'
|
18
|
-
health_check_routes
|
19
|
-
RUBY
|
20
|
-
end
|
16
|
+
inject_into_file 'config/routes.rb', " health_check_routes\n\n", after: "Rails.application.routes.draw do\n"
|
21
17
|
end
|
22
18
|
|
23
19
|
# Update the gem and the Gemfile.lock
|
data/lib/generators/modulorails/healthcheck/templates/config/initializers/health_check.rb.tt
CHANGED
@@ -83,7 +83,7 @@ HealthCheck.setup do |config|
|
|
83
83
|
# config.rabbitmq_config = {}
|
84
84
|
|
85
85
|
# When redis url/password is non-standard
|
86
|
-
config.redis_url = ENV
|
86
|
+
config.redis_url = ENV.fetch('REDIS_URL', 'redis://redis:6379')
|
87
87
|
# Only included if set, as url can optionally include passwords as well
|
88
88
|
# config.redis_password = 'redis_password' # default ENV['REDIS_PASSWORD']
|
89
89
|
|
@@ -101,12 +101,12 @@ Metrics/CyclomaticComplexity:
|
|
101
101
|
|
102
102
|
# Commonly used screens these days easily fit more than 80 characters.
|
103
103
|
Layout/LineLength:
|
104
|
-
Max:
|
104
|
+
Max: 120
|
105
105
|
|
106
106
|
# Too short methods lead to extraction of single-use methods, which can make
|
107
107
|
# the code easier to read (by naming things), but can also clutter the class
|
108
108
|
Metrics/MethodLength:
|
109
|
-
Max:
|
109
|
+
Max: 25
|
110
110
|
|
111
111
|
# The guiding principle of classes is SRP, SRP can't be accurately measured by LoC
|
112
112
|
Metrics/ClassLength:
|
@@ -265,3 +265,7 @@ Style/ParallelAssignment:
|
|
265
265
|
# Checks the style of children definitions at classes and modules.
|
266
266
|
Style/ClassAndModuleChildren:
|
267
267
|
Enabled: false
|
268
|
+
|
269
|
+
# Useful to display but it really is a bother to change it: hence the `info` severity.
|
270
|
+
Rails/I18nLocaleTexts:
|
271
|
+
Severity: info
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a new Modulorails service. Pass the service name, either
|
3
|
+
CamelCased or under_scored, and a list of parameters as arguments.
|
4
|
+
|
5
|
+
To create a service within a module, specify the service name as a
|
6
|
+
path like 'parent_module/service_name'.
|
7
|
+
|
8
|
+
This generates a service class in app/services.
|
9
|
+
|
10
|
+
Example:
|
11
|
+
`bin/rails generate modulorails:service Missions::Search word page per`
|
12
|
+
|
13
|
+
Mission::Search service with positional parameters word, page and per.
|
14
|
+
Service: app/services/missions/search_service.rb
|
@@ -8,8 +8,20 @@ class Modulorails::ServiceGenerator < Rails::Generators::NamedBase
|
|
8
8
|
desc 'This generator creates a service inheriting Modulorails::BaseService'
|
9
9
|
argument :arguments, type: :array, default: [], banner: 'argument argument'
|
10
10
|
|
11
|
+
check_class_collision suffix: "Service"
|
12
|
+
|
11
13
|
def create_service_files
|
12
14
|
template 'service.rb', File.join('app/services', class_path, "#{file_name}_service.rb")
|
13
15
|
end
|
14
16
|
|
17
|
+
private
|
18
|
+
|
19
|
+
def file_name
|
20
|
+
@_file_name ||= remove_possible_suffix(super)
|
21
|
+
end
|
22
|
+
|
23
|
+
def remove_possible_suffix(name)
|
24
|
+
name.sub(/_?service$/i, '')
|
25
|
+
end
|
26
|
+
|
15
27
|
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
class Modulorails::SidekiqGenerator < Rails::Generators::Base
|
6
|
+
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
8
|
+
|
9
|
+
desc 'This generator adds Sidekiq to the project'
|
10
|
+
|
11
|
+
def add_to_docker_compose
|
12
|
+
add_to_docker_compose_yml_file(Rails.root.join('docker-compose.yml'))
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_to_docker_compose_prod
|
16
|
+
add_to_docker_compose_yml_file(Rails.root.join('docker-compose.prod.yml'))
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_to_deploy_files
|
20
|
+
add_to_deploy_file(Rails.root.join('config/deploy/production.yaml'))
|
21
|
+
add_to_deploy_file(Rails.root.join('config/deploy/staging.yaml'))
|
22
|
+
add_to_deploy_file(Rails.root.join('config/deploy/review.yaml'))
|
23
|
+
end
|
24
|
+
|
25
|
+
def add_to_gemfile
|
26
|
+
gemfile_path = Rails.root.join('Gemfile')
|
27
|
+
|
28
|
+
# Add gem redis unless already present
|
29
|
+
unless File.read(gemfile_path).match?(/^\s*gem ['"]redis['"]/)
|
30
|
+
append_to_file(gemfile_path, "gem 'redis'\n")
|
31
|
+
end
|
32
|
+
|
33
|
+
# Add gem sidekiq unless already present
|
34
|
+
unless File.read(gemfile_path).match?(/^\s*gem ['"]sidekiq['"]/)
|
35
|
+
append_to_file(gemfile_path, "gem 'sidekiq'\n")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_to_config
|
40
|
+
Dir.glob(Rails.root.join('config/environments/*.rb')) do |file|
|
41
|
+
add_to_config_file(file)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_initializer
|
46
|
+
template 'config/initializers/sidekiq.rb'
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_routes
|
50
|
+
routes_path = Rails.root.join('config/routes.rb')
|
51
|
+
|
52
|
+
unless File.read(routes_path).match?(%r{require ['"]sidekiq/web["']})
|
53
|
+
inject_into_file routes_path, after: "Rails.application.routes.draw do\n" do
|
54
|
+
<<-RUBY
|
55
|
+
require 'sidekiq/web'
|
56
|
+
mount Sidekiq::Web => '/sidekiq'
|
57
|
+
|
58
|
+
RUBY
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_health_check
|
64
|
+
file_path = Rails.root.join('config/initializers/health_check.rb')
|
65
|
+
|
66
|
+
unless File.read(file_path).match?(%r{add_custom_check\s*\(?\s*['"]sidekiq-queues['"]\s*\)?})
|
67
|
+
inject_into_file file_path, after: /^HealthCheck.setup do \|config\|\n$/ do
|
68
|
+
<<-RUBY
|
69
|
+
|
70
|
+
# Add one or more custom checks that return a blank string if ok, or an error message if there is an error
|
71
|
+
config.add_custom_check('sidekiq-queues') do
|
72
|
+
queues = Sidekiq::Queue.all
|
73
|
+
|
74
|
+
# No queues, means no jobs, ok!
|
75
|
+
next '' if queues.empty?
|
76
|
+
|
77
|
+
enqueued_jobs_count = queues.each.map { |queue| queue.count }.sum
|
78
|
+
|
79
|
+
# Less than 200 enqueued jobs, ok!
|
80
|
+
enqueued_jobs_count < 200 ? '' : "\#{enqueued_jobs_count} are currently enqueued."
|
81
|
+
end
|
82
|
+
|
83
|
+
# Add one or more custom checks that return a blank string if ok, or an error message if there is an error
|
84
|
+
config.add_custom_check('sidekiq-retries') do
|
85
|
+
retry_jobs_count = Sidekiq::RetrySet.new.count
|
86
|
+
|
87
|
+
# Less than 200 jobs to retry, ok!
|
88
|
+
retry_jobs_count < 200 ? '' : "\#{retry_jobs_count} are waiting for retry."
|
89
|
+
end
|
90
|
+
RUBY
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_entrypoint
|
96
|
+
template 'entrypoints/sidekiq-entrypoint.sh'
|
97
|
+
chmod 'entrypoints/sidekiq-entrypoint.sh', 0755
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def add_to_docker_compose_yml_file(file_path)
|
103
|
+
@image_name ||= Modulorails.data.name.parameterize
|
104
|
+
|
105
|
+
# Create docker-compose.yml unless present
|
106
|
+
unless File.exist?(file_path)
|
107
|
+
# Modulorails::GitlabciGenerator.new([], {}, {}).invoke_all
|
108
|
+
invoke(Modulorails::DockerGenerator, [])
|
109
|
+
end
|
110
|
+
|
111
|
+
return if File.read(file_path).match?(/^ {2}sidekiq:$/)
|
112
|
+
|
113
|
+
insert_into_file file_path, after: /^services:/ do
|
114
|
+
<<-YAML
|
115
|
+
|
116
|
+
sidekiq:
|
117
|
+
image: modulotechgroup/#{@image_name}:dev
|
118
|
+
build:
|
119
|
+
context: .
|
120
|
+
dockerfile: Dockerfile
|
121
|
+
depends_on:
|
122
|
+
- database
|
123
|
+
- redis
|
124
|
+
volumes:
|
125
|
+
- .:/app
|
126
|
+
environment:
|
127
|
+
RAILS_ENV: development
|
128
|
+
URL: http://app:3000
|
129
|
+
#{@image_name.upcase}_DATABASE_HOST: database
|
130
|
+
#{@image_name.upcase}_DATABASE_NAME: #{@image_name}
|
131
|
+
REDIS_URL: redis://redis:6379/1
|
132
|
+
entrypoint: ./entrypoints/sidekiq-entrypoint.sh
|
133
|
+
stdin_open: true
|
134
|
+
tty: true
|
135
|
+
YAML
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def add_to_config_file(file_path)
|
140
|
+
pattern = /^(?>\s*)(?>#\s*)?(\w+)\.active_job\.queue_adapter = .+$/
|
141
|
+
|
142
|
+
if File.read(file_path).match?(pattern)
|
143
|
+
gsub_file file_path, pattern, ' \1.active_job.queue_adapter = :sidekiq'
|
144
|
+
else
|
145
|
+
append_file file_path, after: "configure do\n" do
|
146
|
+
<<-RUBY
|
147
|
+
config.active_job.queue_adapter = :sidekiq
|
148
|
+
RUBY
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def add_to_deploy_file(file_path)
|
154
|
+
# Do nothing if file does not exists or Sidekiq is already enabled
|
155
|
+
return if !File.exist?(file_path) || File.read(file_path).match?(/^ {2}sidekiq:$/)
|
156
|
+
|
157
|
+
# Add sidekiq to deploy file
|
158
|
+
insert_into_file file_path do
|
159
|
+
<<-YAML
|
160
|
+
|
161
|
+
sidekiq:
|
162
|
+
enabled: true
|
163
|
+
resources:
|
164
|
+
requests:
|
165
|
+
cpu: 100m
|
166
|
+
memory: 512Mi
|
167
|
+
limits:
|
168
|
+
cpu: 100m
|
169
|
+
memory: 512Mi
|
170
|
+
autoscaling:
|
171
|
+
enabled: true
|
172
|
+
minReplicas: 1
|
173
|
+
maxReplicas: 10
|
174
|
+
targetCPUUtilizationPercentage: 80
|
175
|
+
YAML
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
data/lib/modulorails/data.rb
CHANGED
@@ -15,6 +15,7 @@ module Modulorails
|
|
15
15
|
bundler_version modulorails_version adapter db_version adapter_version webpacker_version
|
16
16
|
importmap_version jsbundling_version
|
17
17
|
production_url staging_url review_base_url
|
18
|
+
environment_name
|
18
19
|
].freeze
|
19
20
|
|
20
21
|
# Useful if the gem's user need to read one of the data
|
@@ -73,6 +74,9 @@ module Modulorails
|
|
73
74
|
# The name is the usual name of the project, the one used in conversations at Modulotech
|
74
75
|
@name = configuration.name
|
75
76
|
|
77
|
+
# A version of the name suitable to name environment variables
|
78
|
+
@environment_name = @name.parameterize.gsub('-', '_').gsub(/\b(\d)/, 'MT_\1').upcase
|
79
|
+
|
76
80
|
# The main developer, the lead developer, in short the developer to call when something's
|
77
81
|
# wrong with the application ;)
|
78
82
|
@main_developer = configuration.main_developer
|
data/lib/modulorails/version.rb
CHANGED
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.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthieu Ciappara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -202,6 +202,7 @@ files:
|
|
202
202
|
- lib/generators/modulorails/docker/docker_generator.rb
|
203
203
|
- lib/generators/modulorails/docker/templates/Dockerfile.prod.tt
|
204
204
|
- lib/generators/modulorails/docker/templates/Dockerfile.tt
|
205
|
+
- lib/generators/modulorails/docker/templates/config/cable.yml.tt
|
205
206
|
- lib/generators/modulorails/docker/templates/config/database.yml.tt
|
206
207
|
- lib/generators/modulorails/docker/templates/docker-compose.prod.yml.tt
|
207
208
|
- lib/generators/modulorails/docker/templates/docker-compose.yml.tt
|
@@ -210,14 +211,21 @@ files:
|
|
210
211
|
- lib/generators/modulorails/gitlabci/gitlabci_generator.rb
|
211
212
|
- lib/generators/modulorails/gitlabci/templates/.gitlab-ci.yml.tt
|
212
213
|
- lib/generators/modulorails/gitlabci/templates/.modulorails-gitlab-ci
|
214
|
+
- lib/generators/modulorails/gitlabci/templates/config/deploy/production.yaml.tt
|
215
|
+
- lib/generators/modulorails/gitlabci/templates/config/deploy/review.yaml.tt
|
216
|
+
- lib/generators/modulorails/gitlabci/templates/config/deploy/staging.yaml.tt
|
213
217
|
- lib/generators/modulorails/healthcheck/health_check_generator.rb
|
214
218
|
- lib/generators/modulorails/healthcheck/templates/.modulorails-health_check
|
215
219
|
- lib/generators/modulorails/healthcheck/templates/config/initializers/health_check.rb.tt
|
216
220
|
- lib/generators/modulorails/rubocop/rubocop_generator.rb
|
217
221
|
- lib/generators/modulorails/rubocop/templates/rubocop.yml.tt
|
218
222
|
- lib/generators/modulorails/self_update/self_update_generator.rb
|
223
|
+
- lib/generators/modulorails/service/USAGE
|
219
224
|
- lib/generators/modulorails/service/service_generator.rb
|
220
225
|
- lib/generators/modulorails/service/templates/service.rb.tt
|
226
|
+
- lib/generators/modulorails/sidekiq/sidekiq_generator.rb
|
227
|
+
- lib/generators/modulorails/sidekiq/templates/config/initializers/sidekiq.rb.tt
|
228
|
+
- lib/generators/modulorails/sidekiq/templates/entrypoints/sidekiq-entrypoint.sh.tt
|
221
229
|
- lib/modulorails.rb
|
222
230
|
- lib/modulorails/configuration.rb
|
223
231
|
- lib/modulorails/data.rb
|