feat: modify the deployment task if the detected entrypoint is tini
Closes #4522
This commit is contained in:
@@ -38,7 +38,12 @@ Each "phase" has different expectations and limitations:
|
||||
- Priming or invalidating cache stores
|
||||
- Running database migrations
|
||||
|
||||
Additionally, if using a Dockerfile with an `ENTRYPOINT`, the deployment task is passed to that entrypoint as is.
|
||||
Additionally, if using a Dockerfile with an `ENTRYPOINT`, the deployment task is passed to that entrypoint as is. The exceptions are if the entrypoint is one of the following:
|
||||
|
||||
- `["/tini", "--"]`
|
||||
- `["/bin/tini", "--"]`
|
||||
- `["/usr/bin/tini", "--"]`
|
||||
- `["/usr/local/bin/tini", "--"]`
|
||||
|
||||
Please keep the above in mind when utilizing deployment tasks.
|
||||
|
||||
|
||||
@@ -16,8 +16,16 @@ import (
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func constructScript(command string, shell string, isHerokuishImage bool, isCnbImage bool, hasEntrypoint bool) []string {
|
||||
if hasEntrypoint {
|
||||
func constructScript(command string, shell string, isHerokuishImage bool, isCnbImage bool, dockerfileEntrypoint string) []string {
|
||||
nonSkippableEntrypoints := map[string]bool{
|
||||
"ENTRYPOINT [\"/tini\",\"--\"]": true,
|
||||
"ENTRYPOINT [\"/bin/tini\",\"--\"]": true,
|
||||
"ENTRYPOINT [\"/usr/bin/tini\",\"--\"]": true,
|
||||
"ENTRYPOINT [\"/usr/local/bin/tini\",\"--\"]": true,
|
||||
}
|
||||
|
||||
cannotSkip := nonSkippableEntrypoints[dockerfileEntrypoint]
|
||||
if dockerfileEntrypoint != "" && !cannotSkip {
|
||||
words, err := shellquote.Split(strings.TrimSpace(command))
|
||||
if err != nil {
|
||||
common.LogWarn(fmt.Sprintf("Skipping command construction for app with ENTRYPOINT: %v", err.Error()))
|
||||
@@ -180,9 +188,8 @@ func executeScript(appName string, image string, imageTag string, phase string)
|
||||
dockerfileCommand, _ = getCommandFromImage(image)
|
||||
}
|
||||
|
||||
hasEntrypoint := dockerfileEntrypoint != ""
|
||||
dokkuAppShell := getDokkuAppShell(appName)
|
||||
script := constructScript(command, dokkuAppShell, isHerokuishImage, isCnbImage, hasEntrypoint)
|
||||
script := constructScript(command, dokkuAppShell, isHerokuishImage, isCnbImage, dockerfileEntrypoint)
|
||||
|
||||
imageSourceType := "dockerfile"
|
||||
if isHerokuishImage {
|
||||
|
||||
@@ -85,3 +85,69 @@ teardown() {
|
||||
assert_success
|
||||
assert_output_contains '"SECRET_KEY": "fjdkslafjdk"'
|
||||
}
|
||||
|
||||
@test "(app-json) tini test" {
|
||||
if ! dokku plugin:installed postgres; then
|
||||
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-postgres.git"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
fi
|
||||
|
||||
if ! dokku plugin:installed redis; then
|
||||
run /bin/bash -c "dokku plugin:install https://github.com/dokku/dokku-redis.git"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
fi
|
||||
|
||||
run /bin/bash -c "dokku config:set $TEST_APP SECRET_KEY_BASE=derp OTP_SECRET=1234"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku postgres:create $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku postgres:link $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku redis:create $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku redis:link $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku git:from-image $TEST_APP tootsuite/mastodon:v3.3.0"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku postgres:unlink $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku redis:unlink $TEST_APP $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku --force postgres:destroy $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
|
||||
run /bin/bash -c "dokku --force redis:destroy $TEST_APP"
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_success
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user