summaryrefslogtreecommitdiff
path: root/cmd/gonf/cmd_deploy.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gonf/cmd_deploy.go')
-rw-r--r--cmd/gonf/cmd_deploy.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/cmd/gonf/cmd_deploy.go b/cmd/gonf/cmd_deploy.go
new file mode 100644
index 0000000..c541a25
--- /dev/null
+++ b/cmd/gonf/cmd_deploy.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+ "context"
+ "flag"
+ "io"
+ "log/slog"
+ "path/filepath"
+)
+
+func cmdDeploy(ctx context.Context,
+ f *flag.FlagSet,
+ args []string,
+ getenv func(string) string,
+ stdout, stderr io.Writer,
+) error {
+ f.Init(`gonf deploy [-FLAG]
+where FLAG can be one or more of`, flag.ContinueOnError)
+ hostFlag := addHostFlag(f)
+ f.SetOutput(stderr)
+ _ = f.Parse(args)
+ if helpMode {
+ f.SetOutput(stdout)
+ f.Usage()
+ }
+ hostDir, err := hostFlagToHostDir(f, hostFlag)
+ if err != nil {
+ f.Usage()
+ return err
+ }
+ _ = hostDir
+ return runDeploy(ctx, getenv, stdout, stderr, *hostFlag, hostDir)
+}
+
+func runDeploy(ctx context.Context,
+ getenv func(string) string,
+ stdout, stderr io.Writer,
+ hostFlag string,
+ hostDir string,
+) error {
+ sshc, err := newSSHClient(ctx, getenv, hostFlag+":22")
+ if err != nil {
+ slog.Error("deploy", "action", "newSshClient", "error", err)
+ return err
+ }
+ defer func() {
+ if e := sshc.Close(); err == nil {
+ err = e
+ }
+ }()
+
+ if err = sshc.SendFile(ctx, stdout, stderr, filepath.Join(hostDir, hostFlag)); err != nil {
+ slog.Error("deploy", "action", "SendFile", "error", err)
+ }
+
+ return err
+}