|
|
|
|
@@ -13,13 +13,13 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
|
|
|
|
|
test "run" do
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "run with hostname" do
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal --hostname myhost -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal --hostname myhost -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run(hostname: "myhost").join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -27,14 +27,14 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:volumes] = [ "/local/path:/container/path" ]
|
|
|
|
|
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-web.env --log-opt max-size=\"10m\" --volume /local/path:/container/path --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/web.env --log-opt max-size=\"10m\" --volume /local/path:/container/path --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "run with custom options" do
|
|
|
|
|
@config[:servers] = { "web" => [ "1.1.1.1" ], "jobs" => { "hosts" => [ "1.1.1.2" ], "cmd" => "bin/jobs", "options" => { "mount" => "somewhere", "cap-add" => true } } }
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-jobs-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-jobs-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-jobs.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"jobs\" --label destination --mount \"somewhere\" --cap-add dhh/app:999 bin/jobs",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-jobs-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-jobs-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/jobs.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"jobs\" --label destination --mount \"somewhere\" --cap-add dhh/app:999 bin/jobs",
|
|
|
|
|
new_command(role: "jobs", host: "1.1.1.2").run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -42,7 +42,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:logging] = { "driver" => "local", "options" => { "max-size" => "100m", "max-file" => "3" } }
|
|
|
|
|
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-web.env --log-driver \"local\" --log-opt max-size=\"100m\" --log-opt max-file=\"3\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/web.env --log-driver \"local\" --log-opt max-size=\"100m\" --log-opt max-file=\"3\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -51,7 +51,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:servers] = { "web" => { "hosts" => [ "1.1.1.1" ], "logging" => { "driver" => "local", "options" => { "max-size" => "100m" } } } }
|
|
|
|
|
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/env/roles/app-web.env --log-driver \"local\" --log-opt max-size=\"100m\" --log-opt max-file=\"3\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env-file .kamal/apps/app/env/roles/web.env --log-driver \"local\" --log-opt max-size=\"100m\" --log-opt max-file=\"3\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -60,7 +60,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:env]["tags"] = { "tag1" => { "ENV1" => "value1" } }
|
|
|
|
|
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env ENV1=\"value1\" --env-file .kamal/env/roles/app-web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
"docker run --detach --restart unless-stopped --name app-web-999 --network kamal -e KAMAL_CONTAINER_NAME=\"app-web-999\" -e KAMAL_VERSION=\"999\" --env ENV1=\"value1\" --env-file .kamal/apps/app/env/roles/web.env --log-opt max-size=\"10m\" --label service=\"app\" --label role=\"web\" --label destination dhh/app:999",
|
|
|
|
|
new_command.run.join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -179,13 +179,13 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
|
|
|
|
|
test "execute in new container" do
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --rm --env-file .kamal/env/roles/app-web.env dhh/app:999 bin/rails db:setup",
|
|
|
|
|
"docker run --rm --env-file .kamal/apps/app/env/roles/web.env dhh/app:999 bin/rails db:setup",
|
|
|
|
|
new_command.execute_in_new_container("bin/rails", "db:setup", env: {}).join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "execute in new container with env" do
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --rm --env-file .kamal/env/roles/app-web.env --env foo=\"bar\" dhh/app:999 bin/rails db:setup",
|
|
|
|
|
"docker run --rm --env-file .kamal/apps/app/env/roles/web.env --env foo=\"bar\" dhh/app:999 bin/rails db:setup",
|
|
|
|
|
new_command.execute_in_new_container("bin/rails", "db:setup", env: { "foo" => "bar" }).join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -194,14 +194,14 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:env]["tags"] = { "tag1" => { "ENV1" => "value1" } }
|
|
|
|
|
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --rm --env ENV1=\"value1\" --env-file .kamal/env/roles/app-web.env dhh/app:999 bin/rails db:setup",
|
|
|
|
|
"docker run --rm --env ENV1=\"value1\" --env-file .kamal/apps/app/env/roles/web.env dhh/app:999 bin/rails db:setup",
|
|
|
|
|
new_command.execute_in_new_container("bin/rails", "db:setup", env: {}).join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "execute in new container with custom options" do
|
|
|
|
|
@config[:servers] = { "web" => { "hosts" => [ "1.1.1.1" ], "options" => { "mount" => "somewhere", "cap-add" => true } } }
|
|
|
|
|
assert_equal \
|
|
|
|
|
"docker run --rm --env-file .kamal/env/roles/app-web.env --mount \"somewhere\" --cap-add dhh/app:999 bin/rails db:setup",
|
|
|
|
|
"docker run --rm --env-file .kamal/apps/app/env/roles/web.env --mount \"somewhere\" --cap-add dhh/app:999 bin/rails db:setup",
|
|
|
|
|
new_command.execute_in_new_container("bin/rails", "db:setup", env: {}).join(" ")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -218,7 +218,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "execute in new container over ssh" do
|
|
|
|
|
assert_match %r{docker run -it --rm --env-file .kamal/env/roles/app-web.env dhh/app:999 bin/rails c},
|
|
|
|
|
assert_match %r{docker run -it --rm --env-file .kamal/apps/app/env/roles/web.env dhh/app:999 bin/rails c},
|
|
|
|
|
new_command.execute_in_new_container_over_ssh("bin/rails", "c", env: {})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -226,13 +226,13 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
@config[:servers] = [ { "1.1.1.1" => "tag1" } ]
|
|
|
|
|
@config[:env]["tags"] = { "tag1" => { "ENV1" => "value1" } }
|
|
|
|
|
|
|
|
|
|
assert_equal "ssh -t root@1.1.1.1 -p 22 'docker run -it --rm --env ENV1=\"value1\" --env-file .kamal/env/roles/app-web.env dhh/app:999 bin/rails c'",
|
|
|
|
|
assert_equal "ssh -t root@1.1.1.1 -p 22 'docker run -it --rm --env ENV1=\"value1\" --env-file .kamal/apps/app/env/roles/web.env dhh/app:999 bin/rails c'",
|
|
|
|
|
new_command.execute_in_new_container_over_ssh("bin/rails", "c", env: {})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "execute in new container with custom options over ssh" do
|
|
|
|
|
@config[:servers] = { "web" => { "hosts" => [ "1.1.1.1" ], "options" => { "mount" => "somewhere", "cap-add" => true } } }
|
|
|
|
|
assert_match %r{docker run -it --rm --env-file .kamal/env/roles/app-web.env --mount \"somewhere\" --cap-add dhh/app:999 bin/rails c},
|
|
|
|
|
assert_match %r{docker run -it --rm --env-file .kamal/apps/app/env/roles/web.env --mount \"somewhere\" --cap-add dhh/app:999 bin/rails c},
|
|
|
|
|
new_command.execute_in_new_container_over_ssh("bin/rails", "c", env: {})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@@ -389,32 +389,32 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|
|
|
|
|
|
|
|
|
test "extract assets" do
|
|
|
|
|
assert_equal [
|
|
|
|
|
:mkdir, "-p", ".kamal/assets/extracted/app-web-999", "&&",
|
|
|
|
|
:mkdir, "-p", ".kamal/apps/app/assets/extracted/web-999", "&&",
|
|
|
|
|
:docker, :stop, "-t 1", "app-web-assets", "2> /dev/null", "|| true", "&&",
|
|
|
|
|
:docker, :run, "--name", "app-web-assets", "--detach", "--rm", "--entrypoint", "sleep", "dhh/app:999", "1000000", "&&",
|
|
|
|
|
:docker, :cp, "-L", "app-web-assets:/public/assets/.", ".kamal/assets/extracted/app-web-999", "&&",
|
|
|
|
|
:docker, :cp, "-L", "app-web-assets:/public/assets/.", ".kamal/apps/app/assets/extracted/web-999", "&&",
|
|
|
|
|
:docker, :stop, "-t 1", "app-web-assets"
|
|
|
|
|
], new_command(asset_path: "/public/assets").extract_assets
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "sync asset volumes" do
|
|
|
|
|
assert_equal [
|
|
|
|
|
:mkdir, "-p", ".kamal/assets/volumes/app-web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-999"
|
|
|
|
|
:mkdir, "-p", ".kamal/apps/app/assets/volumes/web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/apps/app/assets/extracted/web-999", ".kamal/apps/app/assets/volumes/web-999"
|
|
|
|
|
], new_command(asset_path: "/public/assets").sync_asset_volumes
|
|
|
|
|
|
|
|
|
|
assert_equal [
|
|
|
|
|
:mkdir, "-p", ".kamal/assets/volumes/app-web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/assets/extracted/app-web-999", ".kamal/assets/volumes/app-web-998", "|| true", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/assets/extracted/app-web-998", ".kamal/assets/volumes/app-web-999", "|| true"
|
|
|
|
|
:mkdir, "-p", ".kamal/apps/app/assets/volumes/web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/apps/app/assets/extracted/web-999", ".kamal/apps/app/assets/volumes/web-999", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/apps/app/assets/extracted/web-999", ".kamal/apps/app/assets/volumes/web-998", "|| true", ";",
|
|
|
|
|
:cp, "-rnT", ".kamal/apps/app/assets/extracted/web-998", ".kamal/apps/app/assets/volumes/web-999", "|| true"
|
|
|
|
|
], new_command(asset_path: "/public/assets").sync_asset_volumes(old_version: 998)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "clean up assets" do
|
|
|
|
|
assert_equal [
|
|
|
|
|
:find, ".kamal/assets/extracted", "-maxdepth 1", "-name", "'app-web-*'", "!", "-name", "app-web-999", "-exec rm -rf \"{}\" +", ";",
|
|
|
|
|
:find, ".kamal/assets/volumes", "-maxdepth 1", "-name", "'app-web-*'", "!", "-name", "app-web-999", "-exec rm -rf \"{}\" +"
|
|
|
|
|
:find, ".kamal/apps/app/assets/extracted", "-maxdepth 1", "-name", "'web-*'", "!", "-name", "web-999", "-exec rm -rf \"{}\" +", ";",
|
|
|
|
|
:find, ".kamal/apps/app/assets/volumes", "-maxdepth 1", "-name", "'web-*'", "!", "-name", "web-999", "-exec rm -rf \"{}\" +"
|
|
|
|
|
], new_command(asset_path: "/public/assets").clean_up_assets
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|