-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
56 lines (45 loc) · 1.6 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package main
import (
"os"
"os/exec"
"github.com/alecthomas/kingpin"
"github.com/quantcdn/entrypoint-node/internal/backend"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var (
app = kingpin.New("entrypoint-node", "Docker entrypoint to start Node applications.")
cmds = kingpin.Arg("commands", "Node JS commands to execute.").Strings()
dir = kingpin.Flag("dir", "Directory to execute node commands in.").String()
url = kingpin.Flag("url", "The backend url.").Envar("NEXT_PUBLIC_DRUPAL_BASE_URL").String()
retry = kingpin.Flag("retry", "Times to retry the backend connection.").Default("10").Envar("BACKEND_RETRY").Int()
delay = kingpin.Flag("delay", "Delay between backend requests.").Default("5").Envar("BACKEND_DELAY").Int()
)
func main() {
kingpin.Version("0.0.1")
kingpin.Parse()
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
log.Info().Str("directory", *dir).Strs("commands", *cmds).Msg("attempting to start application")
if *url != "" {
log.Info().Str("backend", *url).Int("retry", *retry).Int("delay", *delay).Msg("validating connectivity")
// We need to determine connectivity to the datasource.
if !backend.Connect(*url, *delay, *retry) {
log.Error().Msg("unable to connect to backend")
os.Exit(1)
}
log.Info().Msg("backend connection ok")
}
for _, cmd := range *cmds {
args := []string{"npm"}
if *dir != "" {
args = append(args, []string{"--prefix", *dir}...)
}
args = append(args, []string{"run", cmd}...)
c := exec.Command(args[0], args[1:]...)
c.Stdout = os.Stdout
c.Stderr = os.Stderr
if err := c.Run(); err != nil {
os.Exit(1)
}
}
}