121 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package cmd
 | ||
|  | 
 | ||
|  | import (
 | ||
|  | 	"context"
 | ||
|  | 	"errors"
 | ||
|  | 	"fmt"
 | ||
|  | 	"runtime"
 | ||
|  | 
 | ||
|  | 	"code.icod.de/dalu/gomanager/ent"
 | ||
|  | 	"github.com/spf13/cobra"
 | ||
|  | 
 | ||
|  | 	_ "github.com/mattn/go-sqlite3"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | var (
 | ||
|  | 	addUser             = ""
 | ||
|  | 	addGroup            = ""
 | ||
|  | 	addRootPath         = ""
 | ||
|  | 	addBinaryPath       = ""
 | ||
|  | 	addServiceName      = ""
 | ||
|  | 	addBinaryTargetPath = ""
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // addCmd represents the add command
 | ||
|  | var addCmd = &cobra.Command{
 | ||
|  | 	Use:   "add",
 | ||
|  | 	Short: "add a project for watching",
 | ||
|  | 	Long: `add a project for watching
 | ||
|  | Example:
 | ||
|  | A project residing in /var/www/dalu/project
 | ||
|  | with a binary project at /var/www/dalu/project/project
 | ||
|  | and a systemd service named dalu-project.service
 | ||
|  | with the binary being owned by dalu:dalu
 | ||
|  | 
 | ||
|  | gomanager add \
 | ||
|  | --root-path="/var/www/dalu/project" \
 | ||
|  | --binary-path="project" \
 | ||
|  | --service-name="dalu-project.service" \
 | ||
|  | --user="dalu" \
 | ||
|  | --group="dalu"
 | ||
|  | 
 | ||
|  | let's assume we'd like to resulting binary to be moved to /usr/local/bin/project after building
 | ||
|  | we add
 | ||
|  | --binary-target-path="/usr/local/bin/project"
 | ||
|  | 
 | ||
|  | or with short notation:
 | ||
|  | gomanager add \
 | ||
|  | -r="/var/www/dalu/project" \
 | ||
|  | -b="project" \
 | ||
|  | -s="dalu-project.service" \
 | ||
|  | -u="dalu" \
 | ||
|  | -g="dalu"
 | ||
|  | 
 | ||
|  | with moving the compiled binary
 | ||
|  | -t="/usr/local/bin/project"
 | ||
|  | 
 | ||
|  | `,
 | ||
|  | 	RunE: func(cmd *cobra.Command, args []string) error {
 | ||
|  | 		runtime.GOMAXPROCS(1)
 | ||
|  | 		client, err := ent.Open("sqlite3", fmt.Sprintf("file:%s?mode=rwc&cache=private&_fk=1", sqliteFilename))
 | ||
|  | 		if err != nil {
 | ||
|  | 			return fmt.Errorf("failed opening connection to sqlite: %v", err)
 | ||
|  | 		}
 | ||
|  | 		defer client.Close()
 | ||
|  | 
 | ||
|  | 		if addUser == "" {
 | ||
|  | 			return errors.New("user is empty")
 | ||
|  | 		}
 | ||
|  | 		if addGroup == "" {
 | ||
|  | 			return errors.New("group is empty")
 | ||
|  | 		}
 | ||
|  | 		if addRootPath == "" {
 | ||
|  | 			return errors.New("root-path is empty")
 | ||
|  | 		}
 | ||
|  | 		if addBinaryPath == "" {
 | ||
|  | 			return errors.New("binary-path is empty")
 | ||
|  | 		}
 | ||
|  | 		if addServiceName == "" {
 | ||
|  | 			return errors.New("service-name is empty")
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 		p := client.Project.
 | ||
|  | 			Create().
 | ||
|  | 			SetUser(addUser).
 | ||
|  | 			SetGroup(addGroup).
 | ||
|  | 			SetRootPath(addRootPath).
 | ||
|  | 			SetBinaryPath(addBinaryPath).
 | ||
|  | 			SetServiceName(addServiceName)
 | ||
|  | 
 | ||
|  | 		if addBinaryTargetPath != "" {
 | ||
|  | 			p = p.SetMoveToTarget(true).SetBinaryTargetPath(addBinaryTargetPath)
 | ||
|  | 		}
 | ||
|  | 		project, e := p.Save(context.Background())
 | ||
|  | 		if e != nil {
 | ||
|  | 			return e
 | ||
|  | 		}
 | ||
|  | 		fmt.Printf("Saved project with ID: %d\n", project.ID)
 | ||
|  | 		return nil
 | ||
|  | 	},
 | ||
|  | }
 | ||
|  | 
 | ||
|  | func init() {
 | ||
|  | 	rootCmd.AddCommand(addCmd)
 | ||
|  | 
 | ||
|  | 	// Here you will define your flags and configuration settings.
 | ||
|  | 
 | ||
|  | 	// Cobra supports Persistent Flags which will work for this command
 | ||
|  | 	// and all subcommands, e.g.:
 | ||
|  | 	// addCmd.PersistentFlags().String("foo", "", "A help for foo")
 | ||
|  | 
 | ||
|  | 	// Cobra supports local flags which will only run when this command
 | ||
|  | 	// is called directly, e.g.:
 | ||
|  | 	// addCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
 | ||
|  | 	addCmd.Flags().StringVarP(&addRootPath, "root-path", "r", "", "/var/www/code.icod.de/goroot")
 | ||
|  | 	addCmd.Flags().StringVarP(&addServiceName, "service-name", "s", "", "mysystemd.service")
 | ||
|  | 	addCmd.Flags().StringVarP(&addBinaryPath, "binary-path", "b", "", "gomanager or cmd/run/gomanager")
 | ||
|  | 	addCmd.Flags().StringVarP(&addBinaryTargetPath, "binary-target-path", "t", "", "../binaries/gomanager-binary")
 | ||
|  | 	addCmd.Flags().StringVarP(&addUser, "user", "u", "nginx", "www-data")
 | ||
|  | 	addCmd.Flags().StringVarP(&addGroup, "group", "g", "nginx", "www-data")
 | ||
|  | }
 |