Skip to content

Commit ffc05c3

Browse files
committed
Refactor DockerCompose to run with "-p"
Isolation other matrix with the project name("-p")
1 parent e81422c commit ffc05c3

File tree

3 files changed

+53
-12
lines changed

3 files changed

+53
-12
lines changed

lib/matrixeval/ruby/docker_compose.rb

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,43 @@ def initialize(context)
1212
end
1313

1414
def run(arguments)
15-
forward_arguments = arguments.join(" ")
15+
forward_arguments = arguments.map do |arg|
16+
arg.match(/\s/) ? "\"#{arg}\"" : arg
17+
end.join(" ")
18+
19+
no_tty = %w[bash sh zsh dash].include?(arguments[0]) ? '' : '--no-TTY'
1620

1721
system(
1822
<<~DOCKER_COMPOSE_COMMAND
19-
docker compose -f #{yaml_file} \
23+
#{docker_compose} \
2024
run --rm \
25+
#{no_tty} \
2126
#{context.docker_compose_service_name} \
2227
#{forward_arguments}
2328
DOCKER_COMPOSE_COMMAND
2429
)
2530
ensure
31+
stop_containers
32+
clean_containers_and_anonymous_volumes
2633
turn_on_stty_opost
27-
clean_linked_containers
2834
end
2935

3036
private
3137

32-
def clean_linked_containers
33-
system("docker compose -f #{yaml_file} down >> /dev/null 2>&1")
38+
def stop_containers
39+
system("#{docker_compose} stop >> /dev/null 2>&1")
40+
end
41+
42+
def clean_containers_and_anonymous_volumes
43+
system("#{docker_compose} rm -v -f >> /dev/null 2>&1")
44+
end
45+
46+
def docker_compose
47+
<<~DOCKER_COMPOSE_COMMAND.strip
48+
docker --log-level error compose \
49+
-f #{yaml_file} \
50+
-p matrixeval-#{project_name}-#{context.id}
51+
DOCKER_COMPOSE_COMMAND
3452
end
3553

3654
def yaml_file
@@ -41,6 +59,10 @@ def turn_on_stty_opost
4159
system("stty opost")
4260
end
4361

62+
def project_name
63+
Config.project_name.gsub(/[^A-Za-z0-9-]/,'_').downcase
64+
end
65+
4466
end
4567
end
4668
end

lib/matrixeval/ruby/docker_compose/file.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def working_dir_name
126126
end
127127

128128
def project_name
129-
Config.project_name.gsub(/[^A-Za-z0-9]/,'_').downcase
129+
Config.project_name.gsub(/[^A-Za-z0-9-]/,'_').downcase
130130
end
131131

132132
end

test/matrixeval/ruby/docker_compose_test.rb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ def test_context
1111
end
1212

1313
def test_run
14+
Matrixeval::Ruby::Config::YAML.stubs(:yaml).returns({"project_name" => "dummy app"})
15+
1416
context = Matrixeval::Ruby::Context.new(
1517
main_variant: Matrixeval::Ruby::Variant.new(
1618
{
@@ -42,15 +44,32 @@ def test_run
4244
)
4345
docker_compose = Matrixeval::Ruby::DockerCompose.new(context)
4446

45-
expected_docker_compose_command = <<~COMMAND
46-
docker compose -f .matrixeval/docker-compose/ruby_3_0_rails_6_0_sidekiq_5_0.yml \
47-
run --rm ruby_3_0 rake test
47+
docker_compose.expects(:system).with(<<~COMMAND
48+
docker --log-level error compose \
49+
-f .matrixeval/docker-compose/ruby_3_0_rails_6_0_sidekiq_5_0.yml \
50+
-p matrixeval-dummy_app-ruby_3_0_rails_6_0_sidekiq_5_0 \
51+
run --rm --no-TTY \
52+
ruby_3_0 rake test
4853
COMMAND
49-
docker_compose.expects(:system).with(expected_docker_compose_command)
54+
)
5055

51-
docker_compose.expects(:system).with("stty opost")
56+
docker_compose.expects(:system).with(<<~COMMAND.strip
57+
docker --log-level error compose \
58+
-f .matrixeval/docker-compose/ruby_3_0_rails_6_0_sidekiq_5_0.yml \
59+
-p matrixeval-dummy_app-ruby_3_0_rails_6_0_sidekiq_5_0 \
60+
stop >> /dev/null 2>&1
61+
COMMAND
62+
)
5263

53-
docker_compose.expects(:system).with("docker compose -f .matrixeval/docker-compose/ruby_3_0_rails_6_0_sidekiq_5_0.yml down >> /dev/null 2>&1")
64+
docker_compose.expects(:system).with(<<~COMMAND.strip
65+
docker --log-level error compose \
66+
-f .matrixeval/docker-compose/ruby_3_0_rails_6_0_sidekiq_5_0.yml \
67+
-p matrixeval-dummy_app-ruby_3_0_rails_6_0_sidekiq_5_0 \
68+
rm -v -f >> /dev/null 2>&1
69+
COMMAND
70+
)
71+
72+
docker_compose.expects(:system).with("stty opost")
5473

5574
docker_compose.run(["rake", "test"])
5675
end

0 commit comments

Comments
 (0)