dockerfile-rails 1.0.1 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cf90509af5087378fd186d88358f0157d40ca2335e19a66ecdddbf1efd9add4
4
- data.tar.gz: 640b5eeb291be5e4168a5da7ffd17236b1ebf49deed3fb8a5d8148e6fe3ba92c
3
+ metadata.gz: ca1f4e5fe001307e03c7a37ad194cc643b0130d709a3974c453dc036857eb4a8
4
+ data.tar.gz: 81508d5aa170bfc00062ce1fb52ca54237def089702937b13ce7ae56e95f99a0
5
5
  SHA512:
6
- metadata.gz: 9390f22b5e4348c6d59345b08c843bec8ae4932e6b20afa69bffac4bf600c3489ae093e9847b9f59cd0b688b448d35c4c5a1815743b2693abd90db97d051a7cd
7
- data.tar.gz: 77fe857b46a6aa3b5bda4d7b3ce0f68b24f1907d1a049c927b4e2d0e759d39b2fd771ebf3b5937d92c418f4d3e04b52f07788d939b06d644a0d4f028fb9bd7c2
6
+ metadata.gz: e2f75d96502988be41600c72ee59a6bfd32d583fc8e0d1c9ea59c3a4c478bcefb484510b4db03fd8c28730d356944f62678244ceb5ac8d4bd4769de166760700
7
+ data.tar.gz: 9f75d764d9ad5badedfd6c935796db84e7988441a2c87fc12eab78c1a2cbae67eaeffed1f2f14b2a28c89df0f6cb13222c9653c983ef85540cc2acb8986568f0
data/README.md CHANGED
@@ -10,7 +10,7 @@ Provides a Rails generator to produce Dockerfiles and related files. This is be
10
10
  ## Usage
11
11
 
12
12
  ```
13
- bundle add dockerfile-rails --version ">= 0.5.0" --group development
13
+ bundle add dockerfile-rails --optimistic --group development
14
14
  bin/rails generate dockerfile
15
15
  ```
16
16
 
@@ -19,11 +19,12 @@ General options:
19
19
  * `--force` - overwrite existing files
20
20
  * `--ci` - include test gems in deployed image
21
21
  * `--bin-cd` - adjust binstubs to set current working directory
22
- * `--no-prepare` - omit `db:prepare`. Useful for cloud platforms with [release](https://devcenter.heroku.com/articles/release-phase) phases.
23
- * `--platform=s` - specify target platform. See [FROM](https://docs.docker.com/engine/reference/builder/#from) for details.
22
+ * `--no-prepare` - omit `db:prepare`. Useful for cloud platforms with [release](https://devcenter.heroku.com/articles/release-phase) phases
23
+ * `--platform=s` - specify target platform. See [FROM](https://docs.docker.com/engine/reference/builder/#from) for details
24
24
  * `--cache` - use build caching to speed up builds
25
25
  * `--parallel` - use multi-stage builds to install gems and node modules in parallel
26
26
  * `--compose` - generate a `docker-compose.yml` file
27
+ * `--label=name:value` - specify docker label. Can be used multiple times. See [LABEL](https://docs.docker.com/engine/reference/builder/#label) for details
27
28
 
28
29
  Dependencies:
29
30
 
@@ -40,9 +40,7 @@ module DockerfileRails
40
40
  end
41
41
  end
42
42
 
43
- @sidekiq = @gemfile.include? 'sidekiq'
44
43
  @anycable = @gemfile.include? 'anycable-rails'
45
- @rmagick = @gemfile.include? 'rmagick'
46
44
  @vips = @gemfile.include? 'ruby-vips'
47
45
  @bootstrap = @gemfile.include? 'bootstrap'
48
46
  @puppeteer = @gemfile.include? 'puppeteer'
@@ -73,7 +71,7 @@ module DockerfileRails
73
71
  @redis_cache = true
74
72
  end
75
73
 
76
- @redis = @redis_cable || @redis_cache || @sidekiq
74
+ @redis = @redis_cable || @redis_cache
77
75
  end
78
76
  end
79
77
  end
@@ -19,15 +19,21 @@ class DockerfileGenerator < Rails::Generators::Base
19
19
  'redis' => false,
20
20
  'swap' => nil,
21
21
  'yjit' => false,
22
+ 'label' => {},
22
23
  )
23
24
 
25
+ @@labels = {}
26
+
24
27
  # load defaults from config file
25
28
  if File.exist? 'config/dockerfile.yml'
26
29
  options = YAML.safe_load_file('config/dockerfile.yml', symbolize_names: true)[:options]
30
+
27
31
  if options
28
32
  OPTION_DEFAULTS.to_h.each do |option, value|
29
33
  OPTION_DEFAULTS[option] = options[option] if options.include? option
30
34
  end
35
+
36
+ @@labels = options[:label].stringify_keys if options.include? :label
31
37
  end
32
38
  end
33
39
 
@@ -76,9 +82,15 @@ class DockerfileGenerator < Rails::Generators::Base
76
82
  class_option :yjit, type: :boolean, default: OPTION_DEFAULTS.yjit,
77
83
  desc: 'enable YJIT optimizing compiler'
78
84
 
85
+ class_option :label, type: :hash, default: {},
86
+ desc: 'Add Docker label(s)'
87
+
79
88
  def generate_app
80
89
  source_paths.push File.expand_path('./templates', __dir__)
81
90
 
91
+ # merge options
92
+ options.label.replace(@@labels.merge(options.label).select {|key, value| value != ''})
93
+
82
94
  # gather up options for config file
83
95
  @dockerfile_config = OPTION_DEFAULTS.dup.to_h.stringify_keys
84
96
  options.to_h.each do |option, value|
@@ -142,7 +154,7 @@ private
142
154
  end
143
155
 
144
156
  def using_redis?
145
- options.redis? or @redis
157
+ options.redis? or @redis or @gemfile.include?('sidekiq')
146
158
  end
147
159
 
148
160
  def using_execjs?
@@ -150,7 +162,11 @@ private
150
162
  end
151
163
 
152
164
  def using_puppeteer?
153
- @gemfile.include?('grover')
165
+ @gemfile.include?('grover') or @gemfile.include?('puppeteer-ruby')
166
+ end
167
+
168
+ def using_sidekiq?
169
+ @gemfile.include?('sidekiq')
154
170
  end
155
171
 
156
172
  def parallel?
@@ -176,6 +192,27 @@ private
176
192
  end
177
193
  end
178
194
 
195
+ def base_packages
196
+ packages = []
197
+
198
+ if using_execjs?
199
+ packages += %w(curl unzip)
200
+ end
201
+
202
+ if using_puppeteer?
203
+ packages += %w(curl gnupg)
204
+ end
205
+
206
+ packages.sort.uniq
207
+ end
208
+
209
+ def base_requirements
210
+ requirements = []
211
+ requirements << 'nodejs' if using_execjs?
212
+ requirements << 'chrome' if using_puppeteer?
213
+ requirements.join(' and ')
214
+ end
215
+
179
216
  def build_packages
180
217
  # start with the essentials
181
218
  packages = %w(build-essential)
@@ -188,7 +225,7 @@ private
188
225
  # add git if needed to install gems
189
226
  packages << 'git' if @git
190
227
 
191
- # add redis in case Action Cable, caching, or sidekiq are added later
228
+ # add redis if Action Cable, caching, or sidekiq are used
192
229
  packages << "redis" if options.redis? or using_redis?
193
230
 
194
231
  # ActiveStorage preview support
@@ -200,7 +237,7 @@ private
200
237
  # node support, including support for building native modules
201
238
  if using_node?
202
239
  packages += %w(node-gyp pkg-config)
203
- packages += %w(curl unzip) unless using_execjs?
240
+ packages += %w(curl unzip) unless using_execjs? or using_puppeteer?
204
241
 
205
242
  # module build process depends on Python, and debian changed
206
243
  # how python is installed with the bullseye release. Below
@@ -240,7 +277,9 @@ private
240
277
  packages << "libvips" if @gemfile.include? 'ruby-vips'
241
278
 
242
279
  # Rmagick gem
243
- packages << 'imagemagick' if @gemfile.include? 'rmagick'
280
+ if @gemfile.include?('rmagick') or @gemfile.include?('mini_magick')
281
+ packages << 'imagemagick'
282
+ end
244
283
 
245
284
  # Puppeteer
246
285
  packages << 'google-chrome-stable' if using_puppeteer?
@@ -13,6 +13,12 @@ FROM <%= platform %>quay.io/evl.ms/fullstaq-ruby:${RUBY_VERSION}-<%= @options.je
13
13
  FROM <%= platform %>ruby:$RUBY_VERSION-slim as base
14
14
  <% end -%>
15
15
 
16
+ <% unless options.label.empty? -%>
17
+ <% options.label.each do |key, value| -%>
18
+ LABEL <%= key =~ /^\w[.\w]*$/ ? key : key.inspect %>=<%= value.inspect %>
19
+ <% end -%>
20
+
21
+ <% end -%>
16
22
  # Rails app lives here
17
23
  WORKDIR /rails
18
24
 
@@ -26,15 +32,12 @@ ARG BUNDLER_VERSION=<%= Bundler::VERSION %>
26
32
  RUN gem update --system --no-document && \
27
33
  gem install -N bundler -v ${BUNDLER_VERSION}
28
34
 
29
- <% if using_execjs? -%>
30
- <% if using_puppeteer? -%>
31
- # Install packages needed to install nodejs and chrome
32
- <%= render partial: 'apt_install', locals: {packages: %w(curl gnupg unzip), clean: true, repos: ''} %>
33
- <% else -%>
34
- # Install packages needed to install nodejs
35
- <%= render partial: 'apt_install', locals: {packages: %w(curl unzip), clean: true, repos: ''} %>
36
- <% end -%>
35
+ <% unless base_requirements.empty? -%>
36
+ # Install packages needed to install <%= base_requirements %>
37
+ <%= render partial: 'apt_install', locals: {packages: base_packages, clean: true, repos: ''} %>
37
38
 
39
+ <% end -%>
40
+ <% if using_execjs? -%>
38
41
  <%= render partial: 'install_node', locals: {yarn_version: nil} %>
39
42
 
40
43
  <% end -%>
@@ -68,4 +68,27 @@ services:
68
68
 
69
69
  redis-db:
70
70
  image: redis
71
+ <% end -%>
72
+ <% if using_sidekiq? and deploy_database != 'sqlite3' -%>
73
+
74
+ sidekiq:
75
+ build: .
76
+ environment:
77
+ - RAILS_MASTER_KEY=$RAILS_MASTER_KEY
78
+ - REDIS_URL=redis://redis-db:6379
79
+ <% if deploy_database == 'postgresql' -%>
80
+ - DATABASE_URL=postgres://root:password@postgres-db/
81
+ <% elsif deploy_database == 'mysql' -%>
82
+ - DATABASE_URL=mysql2://root:password@mysql-db/
83
+ <% end -%>
84
+ depends_on:
85
+ redis-db:
86
+ condition: service_started
87
+ <% if deploy_database == 'postgresql' -%>
88
+ postgres-db:
89
+ condition: service_healthy
90
+ <% elsif deploy_database == 'mysql' -%>
91
+ mysql-db:
92
+ condition: service_healthy
93
+ <% end -%>
71
94
  <% end -%>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockerfile-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-30 00:00:00.000000000 Z
11
+ date: 2023-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails