这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions docs/development/plugin-triggers.md
Original file line number Diff line number Diff line change
Expand Up @@ -1810,6 +1810,21 @@ set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
# TODO
```

### `procfile-exists`

- Description: Checks if a procfile exists for the specified app
- Invoked by: `internally`
- Arguments: `$APP`
- Example:

```shell
#!/usr/bin/env bash

set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x

# TODO
```

### `proxy-build-config`

- Description: Builds the proxy implementation configuration for a given app
Expand Down
1 change: 1 addition & 0 deletions plugins/20_events/procfile-exists
2 changes: 1 addition & 1 deletion plugins/ps/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SUBCOMMANDS = subcommands/inspect subcommands/rebuild subcommands/report subcommands/restart subcommands/restore subcommands/retire subcommands/scale subcommands/set subcommands/start subcommands/stop
TRIGGERS = triggers/app-restart triggers/core-post-deploy triggers/core-post-extract triggers/install triggers/post-app-clone triggers/post-app-clone-setup triggers/post-app-rename triggers/post-app-rename-setup triggers/post-create triggers/post-delete triggers/post-stop triggers/pre-deploy triggers/procfile-get-command triggers/ps-can-scale triggers/ps-current-scale triggers/ps-set-scale triggers/report
TRIGGERS = triggers/app-restart triggers/core-post-deploy triggers/core-post-extract triggers/install triggers/post-app-clone triggers/post-app-clone-setup triggers/post-app-rename triggers/post-app-rename-setup triggers/post-create triggers/post-delete triggers/post-stop triggers/pre-deploy triggers/procfile-get-command triggers/procfile-exists triggers/ps-can-scale triggers/ps-current-scale triggers/ps-set-scale triggers/report
BUILD = commands subcommands triggers
PLUGIN_NAME = ps

Expand Down
3 changes: 3 additions & 0 deletions plugins/ps/src/triggers/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ func main() {
processType := flag.Arg(1)
port := common.ToInt(flag.Arg(2), 5000)
err = ps.TriggerProcfileGetCommand(appName, processType, port)
case "procfile-exists":
appName := flag.Arg(0)
err = ps.TriggerProcfileExists(appName)
case "ps-can-scale":
appName := flag.Arg(0)
canScale := common.ToBool(flag.Arg(1))
Expand Down
10 changes: 10 additions & 0 deletions plugins/ps/triggers.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ps

import (
"errors"
"fmt"
"os"
"path"
Expand Down Expand Up @@ -259,6 +260,15 @@ func TriggerPreDeploy(appName string, imageTag string) error {
return nil
}

// TriggerProcfileExists checks if a procfile exists
func TriggerProcfileExists(appName string) error {
if hasProcfile(appName) {
return nil
}

return errors.New("Procfile does not exist")
}

// TriggerProcfileGetCommand fetches a command from the procfile
func TriggerProcfileGetCommand(appName string, processType string, port int) error {
if !hasProcfile(appName) {
Expand Down
11 changes: 11 additions & 0 deletions plugins/scheduler-docker-local/scheduler-deploy
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ trigger-scheduler-docker-local-scheduler-deploy() {

DOKKU_START_CMD="$(config_get "$APP" DOKKU_START_CMD || true)"

local PROCFILE_EXISTS=false
if plugn trigger procfile-exists "$APP" 2>/dev/null; then
PROCFILE_EXISTS=true
fi

local DOKKU_WAIT_TO_RETIRE="$(plugn trigger checks-get-property "$APP" wait-to-retire)"
export DOKKU_WAIT_TO_RETIRE

Expand All @@ -54,6 +59,12 @@ trigger-scheduler-docker-local-scheduler-deploy() {
continue
fi

local PROC_CMD=$(plugn trigger procfile-get-command "$APP" "$PROC_TYPE" "5000" 2>/dev/null || echo '')
if [[ "$PROCFILE_EXISTS" == true ]] && [[ "$PROC_CMD" == "" ]]; then
dokku_log_warn "Skipping $PROC_TYPE as it is missing from the current Procfile"
continue
fi

if [[ "$PROC_TYPE" != "web" ]]; then
echo "$PLUGIN_AVAILABLE_PATH/scheduler-docker-local/bin/scheduler-deploy-process $APP $IMAGE_SOURCE_TYPE $IMAGE $IMAGE_TAG $PROC_TYPE $PROC_COUNT" >>"$TMP_FILE"
continue
Expand Down
1 change: 1 addition & 0 deletions tests/apps/python/worker.Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
worker: python3 -u worker.py
18 changes: 18 additions & 0 deletions tests/unit/scheduler-docker-local.bats
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,24 @@ teardown() {
assert_success
}

@test "(scheduler-docker-local) no-web" {
run create_app
echo "output: $output"
echo "status: $status"
assert_success

run /bin/bash -c "dokku ps:set $TEST_APP procfile-path worker.Procfile"
echo "output: $output"
echo "status: $status"
assert_success

run deploy_app
echo "output: $output"
echo "status: $status"
assert_success
assert_output_contains "Skipping web as it is missing from the current Procfile"
}

@test "(scheduler-docker-local) init-process" {
run create_app
echo "output: $output"
Expand Down