modulorails 0.2.2 → 0.3.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +14 -1
- data/Gemfile.lock +2 -4
- data/lib/generators/docker/docker_generator.rb +19 -0
- data/lib/generators/docker/templates/Dockerfile.prod.tt +52 -0
- data/lib/generators/docker/templates/Dockerfile.tt +28 -0
- data/lib/generators/docker/templates/config/database.yml.tt +21 -0
- data/lib/generators/docker/templates/docker-compose.prod.yml.tt +36 -0
- data/lib/generators/docker/templates/docker-compose.yml.tt +37 -0
- data/lib/generators/docker/templates/entrypoints/docker-entrypoint.sh.tt +20 -0
- data/lib/generators/gitlabci/gitlabci_generator.rb +53 -0
- data/lib/generators/{templates/.gitlab-ci.yml → gitlabci/templates/.gitlab-ci.yml.tt} +10 -3
- data/lib/generators/{templates → gitlabci/templates}/.modulorails-gitlab-ci +0 -0
- data/lib/generators/gitlabci/templates/config/database-ci.yml.tt +8 -0
- data/lib/modulorails.rb +2 -8
- data/lib/modulorails/railtie.rb +1 -1
- data/lib/modulorails/version.rb +1 -1
- metadata +13 -6
- data/lib/generators/gitlabci_generator.rb +0 -134
- data/lib/generators/templates/config/database-ci.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55dbb40ab0e717d0204e96ded91f37a2384d6a068cc588d4c4c9db90e96c2d91
|
4
|
+
data.tar.gz: e6f08f5aeec11a0249d8323604f17471120a066e696308c6ad9d0b2e4ed93cd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4c82055e0f2037c6f4ff7831659be156ff501eb4fbe80ac52089f1857f20ff1db40e81446d0bf2bbfba1df6bba7638b05b54bb114623ff856eb9fce5cb65641
|
7
|
+
data.tar.gz: 79732d5ad59379f2988ac10d8dac50f99d1984365fca5487ead432cb8d7f2e1b39b666e344dc02f051c267ffe9da19dcc4a82785ecda669c638bed101ee23fe0
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,20 @@
|
|
2
2
|
|
3
3
|
This file is used to list changes made in each version of the gem.
|
4
4
|
|
5
|
-
# 0.
|
5
|
+
# 0.3.0
|
6
|
+
|
7
|
+
Docker release.
|
8
|
+
|
9
|
+
- Add generator for Docker.
|
10
|
+
- Use templates for Gitlabci generator.
|
11
|
+
|
12
|
+
# 0.2.3
|
13
|
+
|
14
|
+
Gitlab-ci generator.
|
15
|
+
|
16
|
+
- Fixes the Ruby version put in the generated `.gitlab-ci.yml`.
|
17
|
+
|
18
|
+
# 0.2.2
|
6
19
|
|
7
20
|
Auto-update fixes.
|
8
21
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
modulorails (0.
|
4
|
+
modulorails (0.3.0)
|
5
5
|
git (~> 1.7, >= 1.7.0)
|
6
6
|
httparty
|
7
7
|
i18n
|
@@ -53,11 +53,9 @@ GEM
|
|
53
53
|
mime-types (3.3.1)
|
54
54
|
mime-types-data (~> 3.2015)
|
55
55
|
mime-types-data (3.2021.0225)
|
56
|
-
mini_portile2 (2.5.0)
|
57
56
|
minitest (5.14.1)
|
58
57
|
multi_xml (0.6.0)
|
59
|
-
nokogiri (1.11.1)
|
60
|
-
mini_portile2 (~> 2.5.0)
|
58
|
+
nokogiri (1.11.1-x86_64-darwin)
|
61
59
|
racc (~> 1.4)
|
62
60
|
racc (1.5.2)
|
63
61
|
rack (2.2.3)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
class DockerGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
7
|
+
desc 'This generator creates Dockerfiles for an app'
|
8
|
+
|
9
|
+
def create_config_file
|
10
|
+
template 'Dockerfile'
|
11
|
+
template 'Dockerfile.prod'
|
12
|
+
template 'docker-compose.yml'
|
13
|
+
template 'docker-compose.prod.yml'
|
14
|
+
template 'entrypoints/docker-entrypoint.sh'
|
15
|
+
template 'config/database.yml'
|
16
|
+
rescue StandardError => e
|
17
|
+
$stderr.puts("[Modulorails] Error: cannot generate Docker configuration: #{e.message}")
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
FROM surnet/alpine-wkhtmltopdf:3.12-0.12.6-small as wkhtmltopdf
|
2
|
+
# BUILD IMAGE
|
3
|
+
FROM ruby:<%= Modulorails.data.ruby_version %>-alpine as builder
|
4
|
+
|
5
|
+
ENV RAILS_ENV=production
|
6
|
+
WORKDIR /app
|
7
|
+
|
8
|
+
RUN apk add --update --no-cache \
|
9
|
+
alpine-sdk \
|
10
|
+
mysql-dev \
|
11
|
+
nodejs \
|
12
|
+
sqlite-dev \
|
13
|
+
tzdata \
|
14
|
+
yarn \
|
15
|
+
shared-mime-info
|
16
|
+
RUN gem install bundler -v <%= Modulorails.data.bundler_version %>
|
17
|
+
|
18
|
+
COPY Gemfile Gemfile.lock ./
|
19
|
+
RUN bundle check || bundle install --deployment --jobs=2 \
|
20
|
+
&& rm -rf vendor/bundle/ruby/*/cache/*
|
21
|
+
|
22
|
+
COPY package.json yarn.lock ./
|
23
|
+
RUN yarn install
|
24
|
+
|
25
|
+
COPY . .
|
26
|
+
RUN bundle exec rake assets:precompile
|
27
|
+
|
28
|
+
# FINAL IMAGE
|
29
|
+
FROM ruby:<%= Modulorails.data.ruby_version %>-alpine
|
30
|
+
|
31
|
+
WORKDIR /app
|
32
|
+
|
33
|
+
RUN apk add --update --no-cache \
|
34
|
+
curl \
|
35
|
+
git \
|
36
|
+
mysql-dev \
|
37
|
+
nodejs \
|
38
|
+
sqlite-dev \
|
39
|
+
tzdata \
|
40
|
+
shared-mime-info
|
41
|
+
&& rm -rf .git/
|
42
|
+
|
43
|
+
# Replace segfault version with patched one
|
44
|
+
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /usr/bin/wkhtmltopdf
|
45
|
+
COPY --from=builder /app .
|
46
|
+
|
47
|
+
RUN bundle config --local path vendor/bundle \
|
48
|
+
&& bundle config --local without development:test:assets
|
49
|
+
|
50
|
+
EXPOSE 3000
|
51
|
+
|
52
|
+
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Import wkhtmltopdf with qt patched because from alpine it's not and segfault
|
2
|
+
FROM surnet/alpine-wkhtmltopdf:3.12-0.12.6-small as wkhtmltopdf
|
3
|
+
|
4
|
+
FROM ruby:<%= Modulorails.data.ruby_version %>-alpine
|
5
|
+
|
6
|
+
ENV RAILS_ENV=development
|
7
|
+
WORKDIR /app
|
8
|
+
|
9
|
+
RUN apk add --update --no-cache \
|
10
|
+
alpine-sdk \
|
11
|
+
nodejs \
|
12
|
+
yarn \
|
13
|
+
sqlite-dev \
|
14
|
+
tzdata \
|
15
|
+
mysql-dev
|
16
|
+
RUN gem install bundler -v <%= Modulorails.data.bundler_version %>
|
17
|
+
|
18
|
+
COPY Gemfile Gemfile.lock ./
|
19
|
+
RUN bundle install --jobs=2
|
20
|
+
|
21
|
+
COPY . .
|
22
|
+
|
23
|
+
# Replace segfault version with patched one
|
24
|
+
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /usr/bin/wkhtmltopdf
|
25
|
+
|
26
|
+
EXPOSE 3000
|
27
|
+
|
28
|
+
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%- image_name = Modulorails.data.name.parameterize -%>
|
2
|
+
<%- upper_image_name = image_name.upcase -%>
|
3
|
+
development: &default
|
4
|
+
adapter: mysql2
|
5
|
+
encoding: utf8mb4
|
6
|
+
collation: utf8mb4_unicode_ci
|
7
|
+
database: <%%= ENV.fetch('<%= upper_image_name %>_DATABASE_NAME', '<%= image_name %>') %>
|
8
|
+
username: <%%= ENV.fetch('<%= upper_image_name %>_DATABASE_USERNAME', 'root') %>
|
9
|
+
password: <%%= ENV.fetch('<%= upper_image_name %>_DATABASE_PASSWORD', '') %>
|
10
|
+
host: <%%= ENV.fetch('<%= upper_image_name %>_DATABASE_HOST', 'database') %>
|
11
|
+
port: <%%= ENV.fetch('<%= upper_image_name %>_DATABASE_PORT', 3306) %>
|
12
|
+
|
13
|
+
test:
|
14
|
+
<<: *default
|
15
|
+
database: <%%= ENV.fetch('<%= upper_image_name %>_TEST_DATABASE_NAME', '<%= image_name %>_test') %>
|
16
|
+
|
17
|
+
staging:
|
18
|
+
<<: *default
|
19
|
+
|
20
|
+
production:
|
21
|
+
<<: *default
|
@@ -0,0 +1,36 @@
|
|
1
|
+
version: '3.7'
|
2
|
+
|
3
|
+
<% image_name = Modulorails.data.name.parameterize %>
|
4
|
+
|
5
|
+
services:
|
6
|
+
app:
|
7
|
+
image: modulotechgroup/<%= image_name %>
|
8
|
+
build:
|
9
|
+
context: .
|
10
|
+
dockerfile: Dockerfile.prod
|
11
|
+
depends_on:
|
12
|
+
- database
|
13
|
+
- redis
|
14
|
+
ports:
|
15
|
+
- '3000:3000'
|
16
|
+
environment:
|
17
|
+
RAILS_ENV: production
|
18
|
+
URL: http://localhost:3000
|
19
|
+
<%= image_name.upcase %>_DATABASE_HOST: database
|
20
|
+
<%= image_name.upcase %>_DATABASE_NAME: <%= image_name %>
|
21
|
+
RAILS_SERVE_STATIC_FILES: 'true'
|
22
|
+
|
23
|
+
database:
|
24
|
+
image: mysql:8.0
|
25
|
+
volumes:
|
26
|
+
- db_data:/var/lib/mysql
|
27
|
+
environment:
|
28
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
29
|
+
MYSQL_DATABASE: <%= image_name %>
|
30
|
+
|
31
|
+
redis:
|
32
|
+
image: redis:6.2-alpine
|
33
|
+
|
34
|
+
# Define the volumes references in the services
|
35
|
+
volumes:
|
36
|
+
db_data:
|
@@ -0,0 +1,37 @@
|
|
1
|
+
version: '3.7'
|
2
|
+
|
3
|
+
<% image_name = Modulorails.data.name.parameterize %>
|
4
|
+
|
5
|
+
services:
|
6
|
+
app:
|
7
|
+
image: modulotechgroup/<%= image_name %>:dev
|
8
|
+
build:
|
9
|
+
context: .
|
10
|
+
dockerfile: Dockerfile
|
11
|
+
depends_on:
|
12
|
+
- database
|
13
|
+
- redis
|
14
|
+
ports:
|
15
|
+
- '3000:3000'
|
16
|
+
volumes:
|
17
|
+
- .:/app
|
18
|
+
environment:
|
19
|
+
RAILS_ENV: development
|
20
|
+
URL: http://localhost:3000
|
21
|
+
<%= image_name.upcase %>_DATABASE_HOST: database
|
22
|
+
<%= image_name.upcase %>_DATABASE_NAME: <%= image_name %>
|
23
|
+
entrypoint: ./entrypoints/docker-entrypoint.sh
|
24
|
+
|
25
|
+
database:
|
26
|
+
image: mysql:8.0
|
27
|
+
volumes:
|
28
|
+
- db_data:/var/lib/mysql
|
29
|
+
environment:
|
30
|
+
MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
|
31
|
+
MYSQL_DATABASE: <%= image_name %>
|
32
|
+
|
33
|
+
redis:
|
34
|
+
image: redis:6.2-alpine
|
35
|
+
|
36
|
+
volumes:
|
37
|
+
db_data:
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# Exit immediately if a command exits with a non-zero status
|
4
|
+
set -e
|
5
|
+
|
6
|
+
# No `node_modules` directory means `yarn install` was never launched.
|
7
|
+
# It is mandatory to install yarn dependencies.
|
8
|
+
if [ ! -d node_modules ]
|
9
|
+
then
|
10
|
+
yarn install
|
11
|
+
fi
|
12
|
+
|
13
|
+
# Remove pidfile if it exists else the server will not launch
|
14
|
+
if [ -f tmp/pids/server.pid ]
|
15
|
+
then
|
16
|
+
rm tmp/pids/server.pid
|
17
|
+
fi
|
18
|
+
|
19
|
+
# Launch the application listening from all origins on port 3000
|
20
|
+
./bin/bundle exec rails s -b 0.0.0.0 -p 3000
|
@@ -0,0 +1,53 @@
|
|
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
|
+
desc 'This generator creates a template for a .gitlab-ci.yml file at root'
|
8
|
+
|
9
|
+
# Configurations for MySQL/Postgres dockers
|
10
|
+
MYSQL_DOCKER_DB = <<~EOS
|
11
|
+
# Install a MySQL 5.7 database and configure mandatory environment variables
|
12
|
+
# (https://hub.docker.com/_/mysql/)
|
13
|
+
services:
|
14
|
+
- mysql:5.7
|
15
|
+
variables:
|
16
|
+
MYSQL_DATABASE: test
|
17
|
+
MYSQL_ROOT_PASSWORD: password
|
18
|
+
EOS
|
19
|
+
POSTGRES_DOCKER_DB = <<~EOS
|
20
|
+
# Install a Postgres 11 database and configure mandatory environment variables
|
21
|
+
# (https://hub.docker.com/_/postgres/)
|
22
|
+
services:
|
23
|
+
- postgresql:11
|
24
|
+
variables:
|
25
|
+
POSTGRES_DB: test
|
26
|
+
POSTGRES_PASSWORD: password
|
27
|
+
EOS
|
28
|
+
|
29
|
+
def create_config_file
|
30
|
+
# Update the gitlab-ci template
|
31
|
+
template '.gitlab-ci.yml'
|
32
|
+
|
33
|
+
# Update the database-ci template
|
34
|
+
template 'config/database-ci.yml'
|
35
|
+
|
36
|
+
# Create file to avoid this generator on next modulorails launch
|
37
|
+
create_keep_file
|
38
|
+
rescue StandardError => e
|
39
|
+
$stderr.puts("[Modulorails] Error: cannot generate CI configuration: #{e.message}")
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def create_keep_file
|
45
|
+
file = '.modulorails-gitlab-ci'
|
46
|
+
|
47
|
+
# Create file to avoid this generator on next modulorails launch
|
48
|
+
copy_file(file, file)
|
49
|
+
|
50
|
+
say "Add #{file} to git"
|
51
|
+
%x(git add #{file})
|
52
|
+
end
|
53
|
+
end
|
@@ -1,10 +1,17 @@
|
|
1
|
-
|
1
|
+
<%- adapter = Modulorails.data.adapter -%>
|
2
|
+
<%- if adapter =~ /mysql/ -%>
|
3
|
+
<%= GitlabciGenerator::MYSQL_DOCKER_DB -%>
|
4
|
+
<%- else -%>
|
5
|
+
<%= GitlabciGenerator::POSTGRES_DOCKER_DB -%>
|
6
|
+
<%- end -%>
|
7
|
+
|
8
|
+
image: ruby:<%= Modulorails.data.ruby_version %>
|
2
9
|
stages:
|
3
10
|
- lint
|
4
11
|
- test
|
5
12
|
- deploy
|
6
13
|
cache:
|
7
|
-
key:
|
14
|
+
key: <%= Modulorails.data.rails_name.parameterize %>-ci_cd
|
8
15
|
paths:
|
9
16
|
- vendor/ruby
|
10
17
|
|
@@ -16,7 +23,7 @@ before_script:
|
|
16
23
|
- mkdir -p ~/.ssh
|
17
24
|
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
|
18
25
|
- apt-get install -y ruby-dev
|
19
|
-
- gem install bundler -v
|
26
|
+
- gem install bundler -v <%= Modulorails.data.bundler_version %> --no-document
|
20
27
|
# You might need DPL if you're deploying using Heroku
|
21
28
|
#- gem install dpl -v 1.10.15 --no-document
|
22
29
|
# You might need to add some configurations here like a key for a theme
|
File without changes
|
data/lib/modulorails.rb
CHANGED
@@ -4,7 +4,7 @@ require 'modulorails/data'
|
|
4
4
|
require 'modulorails/validators/database_configuration'
|
5
5
|
require 'modulorails/updater'
|
6
6
|
require 'modulorails/railtie' if defined?(Rails::Railtie)
|
7
|
-
require 'generators/gitlabci_generator'
|
7
|
+
require 'generators/gitlabci/gitlabci_generator'
|
8
8
|
require 'httparty'
|
9
9
|
|
10
10
|
# Author: Matthieu 'ciappa_m' Ciappara
|
@@ -100,13 +100,7 @@ module Modulorails
|
|
100
100
|
def generate_ci_template
|
101
101
|
return if File.exists?(Rails.root.join('.modulorails-gitlab-ci'))
|
102
102
|
|
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
|
103
|
+
GitlabciGenerator.new([], {}, {}).invoke_all
|
110
104
|
end
|
111
105
|
|
112
106
|
# @author Matthieu 'ciappa_m' Ciappara
|
data/lib/modulorails/railtie.rb
CHANGED
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: 0.
|
4
|
+
version: 0.3.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: 2021-
|
11
|
+
date: 2021-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -111,10 +111,17 @@ files:
|
|
111
111
|
- bin/console
|
112
112
|
- bin/setup
|
113
113
|
- config/locales/en.yml
|
114
|
-
- lib/generators/
|
115
|
-
- lib/generators/templates
|
116
|
-
- lib/generators/templates
|
117
|
-
- lib/generators/templates/config/database
|
114
|
+
- lib/generators/docker/docker_generator.rb
|
115
|
+
- lib/generators/docker/templates/Dockerfile.prod.tt
|
116
|
+
- lib/generators/docker/templates/Dockerfile.tt
|
117
|
+
- lib/generators/docker/templates/config/database.yml.tt
|
118
|
+
- lib/generators/docker/templates/docker-compose.prod.yml.tt
|
119
|
+
- lib/generators/docker/templates/docker-compose.yml.tt
|
120
|
+
- lib/generators/docker/templates/entrypoints/docker-entrypoint.sh.tt
|
121
|
+
- lib/generators/gitlabci/gitlabci_generator.rb
|
122
|
+
- lib/generators/gitlabci/templates/.gitlab-ci.yml.tt
|
123
|
+
- lib/generators/gitlabci/templates/.modulorails-gitlab-ci
|
124
|
+
- lib/generators/gitlabci/templates/config/database-ci.yml.tt
|
118
125
|
- lib/modulorails.rb
|
119
126
|
- lib/modulorails/configuration.rb
|
120
127
|
- lib/modulorails/data.rb
|
@@ -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
|