Skip to content

Commit a61bfe4

Browse files
andrewn617rafaelfranca
authored andcommitted
Make devcontainer opt-in when creating a new application
For Rails 7.2 we will make devcontainer and opt-in feature for new applications. When creating a new app, you can generate a devcontainer by passing the --devcontainer flag.
1 parent a8fdfff commit a61bfe4

File tree

6 files changed

+22
-30
lines changed

6 files changed

+22
-30
lines changed

.github/workflows/devcontainer-smoke-test.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
bundler-cache: true
3232

3333
- name: Generate rails app sqlite3
34-
run: bundle exec railties/exe/rails new myapp_sqlite --database="sqlite3" --dev
34+
run: bundle exec railties/exe/rails new myapp_sqlite --database="sqlite3" --dev --devcontainer
3535

3636
- name: Remove old deprecated docker-compose
3737
run: |
@@ -52,7 +52,7 @@ jobs:
5252
run: docker ps -q | xargs docker stop
5353

5454
- name: Generate rails app postgresql
55-
run: bundle exec railties/exe/rails new myapp_postgresql --database="postgresql" --dev
55+
run: bundle exec railties/exe/rails new myapp_postgresql --database="postgresql" --dev --devcontainer
5656

5757
- name: Test devcontainer postgresql
5858
uses: devcontainers/[email protected]
@@ -69,7 +69,7 @@ jobs:
6969
run: docker ps -q | xargs docker stop
7070

7171
- name: Generate rails app mysql
72-
run: bundle exec railties/exe/rails new myapp_mysql --database="mysql" --dev
72+
run: bundle exec railties/exe/rails new myapp_mysql --database="mysql" --dev --devcontainer
7373

7474
- name: Test devcontainer mysql
7575
uses: devcontainers/[email protected]
@@ -86,7 +86,7 @@ jobs:
8686
run: docker ps -q | xargs docker stop
8787

8888
- name: Generate rails app trilogy
89-
run: bundle exec railties/exe/rails new myapp_trilogy --database="trilogy" --dev
89+
run: bundle exec railties/exe/rails new myapp_trilogy --database="trilogy" --dev --devcontainer
9090

9191
- name: Test devcontainer trilogy
9292
uses: devcontainers/[email protected]

guides/source/command_line.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ If you wish to skip some files from being generated or skip some libraries, you
6767
| `--skip-bootsnap` | Skip bootsnap gem |
6868
| `--skip-dev-gems` | Skip adding development gems |
6969
| `--skip-rubocop` | Skip RuboCop setup |
70-
| `--skip-devcontainer` | Skip Dev Container setup |
7170

7271
These are just some of the options that `rails new` accepts. For a full list of options, type `rails new --help`.
7372

guides/source/getting_started.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ of the files and folders that Rails creates by default:
198198
|.gitignore|This file tells git which files (or patterns) it should ignore. See [GitHub - Ignoring files](https://help.github.com/articles/ignoring-files) for more information about ignoring files.|
199199
|.rubocop.yml|This file contains the configuration for RuboCop.|
200200
|.ruby-version|This file contains the default Ruby version.|
201-
|.devcontainer/|This folder contains the Dev Container configuration|
202201

203202
Hello, Rails!
204203
-------------

railties/lib/rails/generators/app_base.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ def self.add_shared_options_for(name)
109109
class_option :skip_ci, type: :boolean, default: nil,
110110
desc: "Skip GitHub CI files"
111111

112-
class_option :skip_devcontainer, type: :boolean, default: false,
113-
desc: "Skip devcontainer files"
114-
115112
class_option :skip_kamal, type: :boolean, default: false,
116113
desc: "Skip Kamal setup"
117114

118115
class_option :dev, type: :boolean, default: nil,
119116
desc: "Set up the #{name} with Gemfile pointing to your Rails checkout"
120117

118+
class_option :devcontainer, type: :boolean, default: false,
119+
desc: "Generate devcontainer files"
120+
121121
class_option :edge, type: :boolean, default: nil,
122122
desc: "Set up the #{name} with a Gemfile pointing to the #{edge_branch} branch on the Rails repository"
123123

@@ -411,7 +411,7 @@ def skip_ci?
411411
end
412412

413413
def skip_devcontainer?
414-
options[:skip_devcontainer]
414+
!options[:devcontainer]
415415
end
416416

417417
def skip_kamal?

railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ default: &default
1818
# For details on connection pooling, see Rails configuration guide
1919
# https://guides.rubyonrails.org/configuring.html#database-pooling
2020
pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
21-
<% unless options[:skip_devcontainer] -%>
21+
<% if options[:devcontainer] -%>
2222
<%% if ENV["DB_HOST"] %>
2323
host: <%%= ENV["DB_HOST"] %>
2424
username: postgres

railties/test/generators/app_generator_test.rb

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
require "generators/shared_generator_tests"
66

77
DEFAULT_APP_FILES = %w(
8-
.devcontainer/Dockerfile
9-
.devcontainer/compose.yaml
10-
.devcontainer/devcontainer.json
118
.dockerignore
129
.git
1310
.gitattributes
@@ -1050,9 +1047,6 @@ def test_inclusion_of_ruby_version
10501047

10511048
ruby_version = "#{Gem::Version.new(Gem::VERSION) >= Gem::Version.new("3.3.13") ? Gem.ruby_version : RUBY_VERSION}"
10521049

1053-
assert_file ".devcontainer/Dockerfile" do |content|
1054-
assert_match(/ARG RUBY_VERSION=#{ruby_version}$/, content)
1055-
end
10561050
assert_file "Dockerfile" do |content|
10571051
assert_match(/ARG RUBY_VERSION=#{ruby_version}/, content)
10581052
end
@@ -1275,7 +1269,7 @@ def test_name_option
12751269
end
12761270

12771271
def test_devcontainer
1278-
run_generator [destination_root, "--name=my-app"]
1272+
run_generator [destination_root, "--devcontainer", "--name=my-app"]
12791273

12801274
assert_devcontainer_json_file do |content|
12811275
assert_equal "my_app", content["name"]
@@ -1329,7 +1323,7 @@ def test_devcontainer
13291323
end
13301324

13311325
def test_devcontainer_no_redis_skipping_action_cable_and_active_job
1332-
run_generator [ destination_root, "--skip-action-cable", "--skip-active-job" ]
1326+
run_generator [ destination_root, "--devcontainer", "--skip-action-cable", "--skip-active-job" ]
13331327

13341328
assert_compose_file do |compose_config|
13351329
assert_not_includes compose_config["services"]["rails-app"]["depends_on"], "redis"
@@ -1343,7 +1337,7 @@ def test_devcontainer_no_redis_skipping_action_cable_and_active_job
13431337
end
13441338

13451339
def test_devcontainer_postgresql
1346-
run_generator [ destination_root, "-d", "postgresql" ]
1340+
run_generator [ destination_root, "--devcontainer", "-d", "postgresql" ]
13471341

13481342
assert_compose_file do |compose_config|
13491343
assert_includes compose_config["services"]["rails-app"]["depends_on"], "postgres"
@@ -1373,7 +1367,7 @@ def test_devcontainer_postgresql
13731367
end
13741368

13751369
def test_devcontainer_mysql
1376-
run_generator [ destination_root, "-d", "mysql" ]
1370+
run_generator [ destination_root, "--devcontainer", "-d", "mysql" ]
13771371

13781372
assert_compose_file do |compose_config|
13791373
assert_includes compose_config["services"]["rails-app"]["depends_on"], "mysql"
@@ -1403,7 +1397,7 @@ def test_devcontainer_mysql
14031397
end
14041398

14051399
def test_devcontainer_mariadb
1406-
run_generator [ destination_root, "-d", "trilogy" ]
1400+
run_generator [ destination_root, "--devcontainer", "-d", "trilogy" ]
14071401

14081402
assert_compose_file do |compose_config|
14091403
assert_includes compose_config["services"]["rails-app"]["depends_on"], "mariadb"
@@ -1430,7 +1424,7 @@ def test_devcontainer_mariadb
14301424
end
14311425

14321426
def test_devcontainer_no_selenium_when_skipping_system_test
1433-
run_generator [ destination_root, "--skip-system-test" ]
1427+
run_generator [ destination_root, "--devcontainer", "--skip-system-test" ]
14341428

14351429
assert_compose_file do |compose_config|
14361430
assert_not_includes compose_config["services"]["rails-app"]["depends_on"], "selenium"
@@ -1442,39 +1436,39 @@ def test_devcontainer_no_selenium_when_skipping_system_test
14421436
end
14431437

14441438
def test_devcontainer_no_feature_when_skipping_active_storage
1445-
run_generator [ destination_root, "--skip-active-storage" ]
1439+
run_generator [ destination_root, "--devcontainer", "--skip-active-storage" ]
14461440

14471441
assert_devcontainer_json_file do |content|
14481442
assert_nil content["features"]["ghcr.io/rails/devcontainer/features/activestorage"]
14491443
end
14501444
end
14511445

14521446
def test_devcontainer_no_depends_on_when_no_dependencies
1453-
run_generator [ destination_root, "--minimal" ]
1447+
run_generator [ destination_root, "--devcontainer", "--minimal" ]
14541448

14551449
assert_compose_file do |compose_config|
14561450
assert_not_includes compose_config["services"]["rails-app"].keys, "depends_on"
14571451
end
14581452
end
14591453

14601454
def test_devcontainer_adds_node_tooling_when_required
1461-
run_generator [destination_root, "--javascript=esbuild"]
1455+
run_generator [destination_root, "--devcontainer", "--javascript=esbuild"]
14621456

14631457
assert_devcontainer_json_file do |devcontainer_config|
14641458
assert_includes devcontainer_config["features"].keys, "ghcr.io/devcontainers/features/node:1"
14651459
end
14661460
end
14671461

14681462
def test_devcontainer_does_not_add_node_tooling_when_not_required
1469-
run_generator [destination_root]
1463+
run_generator [destination_root, "--devcontainer"]
14701464

14711465
assert_devcontainer_json_file do |devcontainer_config|
14721466
assert_not_includes devcontainer_config["features"].keys, "ghcr.io/devcontainers/features/node:1"
14731467
end
14741468
end
14751469

14761470
def test_devcontainer_dev_flag_mounts_local_rails_repo
1477-
run_generator_using_prerelease [ destination_root, "--dev" ]
1471+
run_generator_using_prerelease [ destination_root, "--devcontainer", "--dev" ]
14781472

14791473
assert_devcontainer_json_file do |devcontainer_config|
14801474
rails_mount = devcontainer_config["mounts"].sole
@@ -1485,8 +1479,8 @@ def test_devcontainer_dev_flag_mounts_local_rails_repo
14851479
end
14861480
end
14871481

1488-
def test_skip_devcontainer
1489-
run_generator [ destination_root, "--skip-devcontainer" ]
1482+
def test_no_devcontainer_by_default
1483+
run_generator [ destination_root ]
14901484

14911485
assert_no_file(".devcontainer/devcontainer.json")
14921486
assert_no_file(".devcontainer/Dockerfile")

0 commit comments

Comments
 (0)