Skip to content

Commit 6c73ee0

Browse files
authored
Merge pull request rails#51749 from Shopify/devcontainer-use-sqlite-feature
SQLite3 feature for dev container
2 parents 59064f8 + 6e0b867 commit 6c73ee0

File tree

3 files changed

+29
-19
lines changed

3 files changed

+29
-19
lines changed

railties/lib/rails/generators/devcontainer.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
module Rails
44
module Generators
55
module Devcontainer
6+
DB_FEATURES = {
7+
"mysql" => "ghcr.io/rails/devcontainer/features/mysql-client",
8+
"postgresql" => "ghcr.io/rails/devcontainer/features/postgres-client",
9+
"sqlite3" => "ghcr.io/rails/devcontainer/features/sqlite3"
10+
}
11+
612
private
713
def devcontainer_dependencies
814
return @devcontainer_dependencies if @devcontainer_dependencies
@@ -124,6 +130,7 @@ def db_service_for_devcontainer(database = options[:database])
124130

125131
def db_feature_for_devcontainer(database = options[:database])
126132
case database
133+
when "sqlite3" then sqlite3_feature
127134
when "mysql" then mysql_feature
128135
when "postgresql" then postgres_feature
129136
end
@@ -178,18 +185,19 @@ def db_service_names
178185
end
179186

180187
def mysql_feature
181-
{ "ghcr.io/rails/devcontainer/features/mysql-client" => {} }
188+
{ DB_FEATURES["mysql"] => {} }
182189
end
183190

184191
def postgres_feature
185-
{ "ghcr.io/rails/devcontainer/features/postgres-client" => {} }
192+
{ DB_FEATURES["postgresql"] => {} }
193+
end
194+
195+
def sqlite3_feature
196+
{ DB_FEATURES["sqlite3"] => {} }
186197
end
187198

188199
def db_features
189-
[
190-
"ghcr.io/rails/devcontainer/features/mysql-client",
191-
"ghcr.io/rails/devcontainer/features/postgres-client"
192-
]
200+
@db_features ||= DB_FEATURES.values
193201
end
194202

195203
def local_rails_mount

railties/test/generators/app_generator_test.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,7 @@ def test_devcontainer
12871287
assert_equal "selenium", content["containerEnv"]["SELENIUM_HOST"]
12881288
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/activestorage"])
12891289
assert_equal({}, content["features"]["ghcr.io/devcontainers/features/github-cli:1"])
1290+
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/sqlite3"])
12901291
assert_includes(content["forwardPorts"], 3000)
12911292
assert_includes(content["forwardPorts"], 6379)
12921293
end

railties/test/generators/db_system_change_generator_test.rb

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ class ChangeGeneratorTest < Rails::Generators::TestCase
5252
assert_match "curl libvips postgresql-client", content
5353
end
5454

55-
assert_file(".devcontainer/devcontainer.json") do |content|
56-
assert_match(/"DB_HOST": "postgres"/, content)
57-
assert_match(/"ghcr.io\/rails\/devcontainer\/features\/postgres-client":/, content)
55+
assert_devcontainer_json_file do |content|
56+
assert_equal "postgres", content["containerEnv"]["DB_HOST"]
57+
assert_includes content["features"].keys, "ghcr.io/rails/devcontainer/features/postgres-client"
58+
assert_not_includes content["features"].keys, "ghcr.io/rails/devcontainer/features/sqlite"
5859
end
5960

6061
assert_compose_file do |compose_config|
@@ -94,9 +95,9 @@ class ChangeGeneratorTest < Rails::Generators::TestCase
9495
assert_match "curl default-mysql-client libvips", content
9596
end
9697

97-
assert_file(".devcontainer/devcontainer.json") do |content|
98-
assert_match(/"DB_HOST": "mysql"/, content)
99-
assert_match(/"ghcr.io\/rails\/devcontainer\/features\/mysql-client":/, content)
98+
assert_devcontainer_json_file do |content|
99+
assert_equal "mysql", content["containerEnv"]["DB_HOST"]
100+
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/mysql-client"])
100101
end
101102

102103
assert_compose_file do |compose_config|
@@ -136,8 +137,8 @@ class ChangeGeneratorTest < Rails::Generators::TestCase
136137
assert_match "curl libsqlite3-0 libvips", content
137138
end
138139

139-
assert_file(".devcontainer/devcontainer.json") do |content|
140-
assert_no_match(/"DB_HOST"/, content)
140+
assert_devcontainer_json_file do |content|
141+
assert_not_includes content["containerEnv"].keys, "DB_HOST"
141142
end
142143
end
143144

@@ -160,8 +161,8 @@ class ChangeGeneratorTest < Rails::Generators::TestCase
160161
assert_no_match "default-libmysqlclient-dev", content
161162
end
162163

163-
assert_file(".devcontainer/devcontainer.json") do |content|
164-
assert_match(/"DB_HOST": "mariadb"/, content)
164+
assert_devcontainer_json_file do |content|
165+
assert_match "mariadb", content["containerEnv"]["DB_HOST"]
165166
end
166167

167168
assert_compose_file do |compose_config|
@@ -203,9 +204,9 @@ class ChangeGeneratorTest < Rails::Generators::TestCase
203204
run_generator ["--to", "mysql"]
204205
run_generator ["--to", "sqlite3", "--force"]
205206

206-
assert_file(".devcontainer/devcontainer.json") do |content|
207-
assert_no_match(/"DB_HOST"/, content)
208-
assert_no_match(/"ghcr.io\/rails\/devcontainer\/features\/mysql-client":/, content)
207+
assert_devcontainer_json_file do |content|
208+
assert_not_includes content["containerEnv"].keys, "DB_HOST"
209+
assert_not_includes content["features"].keys, "ghcr.io\/rails\/devcontainer\/features\/mysql-client"
209210
end
210211

211212
assert_compose_file do |compose_config|

0 commit comments

Comments
 (0)