add dry-run cli argument | add buildfile.Reader.Execute() error
This commit is contained in:
parent
ff06cccb89
commit
464b2539d2
|
@ -6,10 +6,11 @@ import (
|
||||||
"git.xdrm.io/xdrm-brackets/nix-amer/internal/instruction"
|
"git.xdrm.io/xdrm-brackets/nix-amer/internal/instruction"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetArgs() (*instruction.ExecutionContext, string, error) {
|
func GetArgs() (*instruction.ExecutionContext, string, bool, error) {
|
||||||
setupFlags(flag.CommandLine)
|
setupFlags(flag.CommandLine)
|
||||||
|
|
||||||
longPack := flag.String("package", "", "")
|
longPack := flag.String("package", "", "")
|
||||||
|
dryRun := flag.Bool("dry-run", false, "")
|
||||||
longServ := flag.String("service", "", "")
|
longServ := flag.String("service", "", "")
|
||||||
pack := flag.String("p", "", "")
|
pack := flag.String("p", "", "")
|
||||||
serv := flag.String("s", "", "")
|
serv := flag.String("s", "", "")
|
||||||
|
@ -17,21 +18,21 @@ func GetArgs() (*instruction.ExecutionContext, string, error) {
|
||||||
|
|
||||||
// 1. fail on missing build file
|
// 1. fail on missing build file
|
||||||
if len(flag.Args()) < 1 {
|
if len(flag.Args()) < 1 {
|
||||||
return nil, "", fmt.Errorf("missing buildfile")
|
return nil, "", false, fmt.Errorf("missing buildfile")
|
||||||
}
|
}
|
||||||
buildfile := flag.Arg(0)
|
buildfile := flag.Arg(0)
|
||||||
|
|
||||||
// 2. override short version with long
|
// 2. override short version with long
|
||||||
if longPack != nil && len(*longPack) > 0 {
|
if len(*longPack) > 0 {
|
||||||
pack = longPack
|
pack = longPack
|
||||||
}
|
}
|
||||||
if longServ != nil && len(*longServ) > 0 {
|
if len(*longServ) > 0 {
|
||||||
serv = longServ
|
serv = longServ
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. fail on missing mandatory fields
|
// 3. fail on missing mandatory fields
|
||||||
if pack == nil || len(*pack) < 1 {
|
if len(*pack) < 1 {
|
||||||
return nil, "", fmt.Errorf("missing -package")
|
return nil, "", false, fmt.Errorf("missing -package")
|
||||||
}
|
}
|
||||||
// if serv == nil || len(*serv) < 1 { // default service
|
// if serv == nil || len(*serv) < 1 { // default service
|
||||||
// return nil, "", fmt.Errorf("missing -service")
|
// return nil, "", fmt.Errorf("missing -service")
|
||||||
|
@ -40,12 +41,12 @@ func GetArgs() (*instruction.ExecutionContext, string, error) {
|
||||||
// 3. Load context
|
// 3. Load context
|
||||||
ctx, err := instruction.CreateContext(*pack, *serv)
|
ctx, err := instruction.CreateContext(*pack, *serv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", false, err
|
||||||
}
|
}
|
||||||
/*DEBUG*/ //fmt.Printf("package: '%s' | '%s'\n", fpackage, lpackage)
|
/*DEBUG*/ //fmt.Printf("package: '%s' | '%s'\n", fpackage, lpackage)
|
||||||
/*DEBUG*/ //fmt.Printf("service: '%s' | '%s'\n", fservice, lservice)
|
/*DEBUG*/ //fmt.Printf("service: '%s' | '%s'\n", fservice, lservice)
|
||||||
|
|
||||||
return ctx, buildfile, nil
|
return ctx, buildfile, *dryRun, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupFlags(f *flag.FlagSet) {
|
func setupFlags(f *flag.FlagSet) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ func help() {
|
||||||
fmt.Printf("\tnix-amer - the automatic setup tool you need\n")
|
fmt.Printf("\tnix-amer - the automatic setup tool you need\n")
|
||||||
|
|
||||||
fmt.Printf("\n%s\n", clifmt.Color(1, "SYNOPSIS", true))
|
fmt.Printf("\n%s\n", clifmt.Color(1, "SYNOPSIS", true))
|
||||||
fmt.Printf("\tnix-amer [-p <package-manager>] [-s <service-manager>] <buildfile>\n")
|
fmt.Printf("\tnix-amer [-p <package-manager>] [-s <service-manager>] [-dry-run] <buildfile>\n")
|
||||||
fmt.Printf("\tnix-amer -help\n")
|
fmt.Printf("\tnix-amer -help\n")
|
||||||
fmt.Printf("\tnix-amer -h\n")
|
fmt.Printf("\tnix-amer -h\n")
|
||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
|
@ -35,6 +35,8 @@ func help() {
|
||||||
fmt.Printf("\t-s, -service\n\t Define which service manager to use ; the default\n")
|
fmt.Printf("\t-s, -service\n\t Define which service manager to use ; the default\n")
|
||||||
fmt.Printf("\t value is 'systemd'. initd is not yet supported.\n")
|
fmt.Printf("\t value is 'systemd'. initd is not yet supported.\n")
|
||||||
fmt.Printf("\n")
|
fmt.Printf("\n")
|
||||||
|
fmt.Printf("\t-dry-run\n\t Do not execute, only check the buildfile and arguments.\n")
|
||||||
|
fmt.Printf("\n")
|
||||||
|
|
||||||
fmt.Printf("%s\n", clifmt.Color(1, "AUTHORS", true))
|
fmt.Printf("%s\n", clifmt.Color(1, "AUTHORS", true))
|
||||||
fmt.Printf("\tnix-amer has been entirely designed and developped by xdrm-brackets\n")
|
fmt.Printf("\tnix-amer has been entirely designed and developped by xdrm-brackets\n")
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
// Manage arguments
|
// Manage arguments
|
||||||
ctx, bf, err := GetArgs()
|
ctx, bf, dryRun, err := GetArgs()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("%s", err)
|
fmt.Printf("%s", err)
|
||||||
return
|
return
|
||||||
|
@ -25,13 +25,29 @@ func main() {
|
||||||
defer bfreader.Close()
|
defer bfreader.Close()
|
||||||
|
|
||||||
// 2. parse buildfile
|
// 2. parse buildfile
|
||||||
_, err = buildfile.NewReader(ctx, bfreader)
|
instructions, err := buildfile.NewReader(ctx, bfreader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("%s%s\n", bf, err)
|
fmt.Printf("%s%s\n", bf, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
clifmt.Align("build file")
|
clifmt.Align("build file")
|
||||||
fmt.Printf("%s\n", clifmt.Color(32, "parsed"))
|
fmt.Printf("%s\n", clifmt.Color(32, "valid"))
|
||||||
|
|
||||||
|
// stop here if dry run
|
||||||
|
if dryRun {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Execute
|
||||||
|
clifmt.Align("execution")
|
||||||
|
fmt.Printf("start\n")
|
||||||
|
err = instructions.Execute()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("%s\n", clifmt.Warn(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
clifmt.Align("execution")
|
||||||
|
fmt.Printf("%s\n", clifmt.Color(32, "finished"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package buildfile
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"git.xdrm.io/xdrm-brackets/nix-amer/internal/instruction"
|
"git.xdrm.io/xdrm-brackets/nix-amer/internal/instruction"
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -63,3 +64,21 @@ func NewReader(ctx *instruction.ExecutionContext, buildfile io.Reader) (*Reader,
|
||||||
|
|
||||||
return r, nil
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Execute the current buildfile instruction by instruction
|
||||||
|
func (r *Reader) Execute() error {
|
||||||
|
|
||||||
|
// 1. update package list
|
||||||
|
err := r.Context.PackageManager.Fetch()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot fetch packages | %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. upgrade packages
|
||||||
|
err = r.Context.PackageManager.Upgrade()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upgrade | %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
package instruction
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
type update struct{}
|
|
||||||
|
|
||||||
func (d *update) Build(_args string) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d update) Exec(ctx ExecutionContext) ([]byte, error) {
|
|
||||||
|
|
||||||
// fetch packages
|
|
||||||
err := ctx.PackageManager.Fetch()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot fetch packages | %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// update packages
|
|
||||||
err = ctx.PackageManager.Upgrade()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot upgrade | %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
Loading…
Reference in New Issue