diff --git a/.golangci.yml b/.golangci.yml index 4f0753b..30984b2 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,11 +6,13 @@ linters: # here some dropped deprecated checks # reduce warning messages - deadcode + - execinquery - exhaustivestruct - golint - ifshort - interfacer - maligned + - mnd - nosnakecase - scopelint - structcheck diff --git a/cmd/yap/command/build.go b/cmd/yap/command/build.go index 968d904..a602bf5 100644 --- a/cmd/yap/command/build.go +++ b/cmd/yap/command/build.go @@ -1,16 +1,14 @@ package command import ( - "fmt" - "log" "path/filepath" "strings" - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/parser" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/project" "github.com/M0Rf30/yap/pkg/source" + "github.com/M0Rf30/yap/pkg/utils" "github.com/spf13/cobra" ) @@ -22,7 +20,6 @@ var ( Args: cobra.MinimumNArgs(2), Run: func(_ *cobra.Command, args []string) { fullJSONPath, _ := filepath.Abs(args[1]) - split := strings.Split(args[0], "-") distro := split[0] release := "" @@ -34,29 +31,18 @@ var ( mpc := project.MultipleProject{} err := mpc.MultiProject(distro, release, fullJSONPath) if err != nil { - fmt.Printf("%sโŒ :: %sError:\n%s", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - log.Fatal(err) + utils.Logger.Error(err.Error()) } if project.CleanBuild { if err := mpc.Clean(); err != nil { - fmt.Printf("%sโŒ :: %sError:\n%s", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - log.Fatal(err) + utils.Logger.Error(err.Error(), + utils.Logger.Args("error", err)) } } if err := mpc.BuildAll(); err != nil { - fmt.Printf("%sโŒ :: %sError:\n%s", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - log.Fatal(err) + utils.Logger.Error(err.Error()) } }, } diff --git a/cmd/yap/command/completion.go b/cmd/yap/command/completion.go index 10c428a..d25e67f 100644 --- a/cmd/yap/command/completion.go +++ b/cmd/yap/command/completion.go @@ -1,9 +1,9 @@ package command import ( - "log" "os" + "github.com/M0Rf30/yap/pkg/utils" "github.com/spf13/cobra" ) @@ -50,17 +50,20 @@ $ yap completion zsh > "${fpath[1]}/_yap" case "bash": err := cmd.Root().GenBashCompletion(os.Stdout) if err != nil { - log.Fatal(err) + utils.Logger.Fatal("failed to generate bash completion", + utils.Logger.Args("error", err)) } case "fish": err := cmd.Root().GenFishCompletion(os.Stdout, true) if err != nil { - log.Fatal(err) + utils.Logger.Fatal("failed to generate fish completion", + utils.Logger.Args("error", err)) } case "zsh": err := cmd.Root().GenZshCompletion(os.Stdout) if err != nil { - log.Fatal(err) + utils.Logger.Fatal("failed to generate zsh completion", + utils.Logger.Args("error", err)) } } }, diff --git a/cmd/yap/command/container.go b/cmd/yap/command/container.go index 93419ea..4c2c5a4 100644 --- a/cmd/yap/command/container.go +++ b/cmd/yap/command/container.go @@ -1,8 +1,6 @@ package command import ( - "log" - "github.com/M0Rf30/yap/pkg/utils" "github.com/spf13/cobra" ) @@ -14,7 +12,8 @@ var containerCmd = &cobra.Command{ Args: cobra.MinimumNArgs(1), Run: func(_ *cobra.Command, args []string) { err := utils.PullContainers(args[0]) - log.Fatal(err) + utils.Logger.Fatal("failed to pull containers", + utils.Logger.Args("error", err)) }, } diff --git a/cmd/yap/command/list_targets.go b/cmd/yap/command/list_targets.go index 52a9a05..c808ef5 100644 --- a/cmd/yap/command/list_targets.go +++ b/cmd/yap/command/list_targets.go @@ -1,9 +1,8 @@ package command import ( - "fmt" - "github.com/M0Rf30/yap/pkg/constants" + "github.com/pterm/pterm" "github.com/spf13/cobra" ) @@ -18,7 +17,7 @@ var listTargetsCmd = &cobra.Command{ func ListTargets() { for _, release := range constants.Releases { - fmt.Println(release) + pterm.Println(release) } } diff --git a/cmd/yap/command/prepare.go b/cmd/yap/command/prepare.go index b077823..930bb09 100644 --- a/cmd/yap/command/prepare.go +++ b/cmd/yap/command/prepare.go @@ -1,14 +1,12 @@ package command import ( - "fmt" - "log" "strings" - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/packer" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/project" + "github.com/M0Rf30/yap/pkg/utils" "github.com/spf13/cobra" ) @@ -27,25 +25,20 @@ var ( packageManager := packer.GetPackageManager(&pkgbuild.PKGBUILD{}, distro) if !project.SkipSyncDeps { if err := packageManager.Update(); err != nil { - log.Fatal(err) + utils.Logger.Error(err.Error(), + utils.Logger.Args("error", err)) } } err := packageManager.PrepareEnvironment(GoLang) if err != nil { - log.Fatal(err) + utils.Logger.Error(err.Error()) } - fmt.Printf("%s๐Ÿช› :: %sBasic build environment successfully prepared%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Info("basic build environment successfully prepared") if GoLang { - fmt.Printf("%s๐Ÿช› :: %sGO successfully installed%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Info("go successfully installed") } }, } diff --git a/cmd/yap/command/version.go b/cmd/yap/command/version.go index f2ac6eb..d8ac511 100644 --- a/cmd/yap/command/version.go +++ b/cmd/yap/command/version.go @@ -1,8 +1,8 @@ package command import ( - "fmt" - + "github.com/pterm/pterm" + "github.com/pterm/pterm/putils" "github.com/spf13/cobra" ) @@ -11,7 +11,19 @@ var versionCmd = &cobra.Command{ Short: "Print the version number of Yap", Long: `All software has versions. This is Yap's`, Run: func(_ *cobra.Command, _ []string) { - fmt.Println("Yap v1.9") + logo, _ := pterm.DefaultBigText.WithLetters( + putils.LettersFromStringWithStyle("Y", pterm.NewStyle(pterm.FgBlue)), + putils.LettersFromStringWithStyle("A", pterm.NewStyle(pterm.FgLightBlue)), + putils.LettersFromStringWithStyle("P", pterm.NewStyle(pterm.FgLightCyan))). + Srender() + + pterm.DefaultCenter.Print(logo) + + pterm.DefaultCenter.Print( + pterm.DefaultHeader.WithFullWidth().WithMargin(10).Sprint("Yet Another Packager")) + + pterm.Println("Version v1.9") + pterm.Println("Coded with \u2764 by M0Rf30") }, } diff --git a/go.mod b/go.mod index 974f83f..952e936 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/mholt/archiver/v4 v4.0.0-alpha.8.0.20240408183022-de08bfa4c558 github.com/otiai10/copy v1.14.0 github.com/pkg/errors v0.9.1 + github.com/pterm/pterm v0.12.79 github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.9.0 mvdan.cc/sh/v3 v3.8.0 @@ -24,6 +25,9 @@ require ( ) require ( + atomicgo.dev/cursor v0.2.0 // indirect + atomicgo.dev/keyboard v0.2.9 // indirect + atomicgo.dev/schedule v0.1.0 // indirect dario.cat/mergo v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v1.0.0 // indirect @@ -33,6 +37,7 @@ require ( github.com/bodgit/sevenzip v1.4.3 // indirect github.com/bodgit/windows v1.0.1 // indirect github.com/cloudflare/circl v1.3.7 // indirect + github.com/containerd/console v1.0.3 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dsnet/compress v0.0.1 // indirect @@ -43,6 +48,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/gookit/color v1.5.4 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -51,10 +57,13 @@ require ( github.com/klauspost/compress v1.16.7 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/leodido/go-urn v1.4.0 // indirect + github.com/lithammer/fuzzysearch v1.1.8 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/nwaples/rardecode/v2 v2.0.0-beta.2 // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rivo/uniseg v0.4.4 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.2.2 // indirect github.com/sorairolake/lzip-go v0.3.1 // indirect @@ -62,6 +71,7 @@ require ( github.com/therootcompany/xz v1.0.1 // indirect github.com/ulikunitz/xz v0.5.12 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect golang.org/x/crypto v0.21.0 // indirect golang.org/x/net v0.22.0 // indirect diff --git a/go.sum b/go.sum index d317f7f..26217e4 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,11 @@ +atomicgo.dev/assert v0.0.2 h1:FiKeMiZSgRrZsPo9qn/7vmr7mCsh5SZyXY4YGYiYwrg= +atomicgo.dev/assert v0.0.2/go.mod h1:ut4NcI3QDdJtlmAxQULOmA13Gz6e2DWbSAS8RUOmNYQ= +atomicgo.dev/cursor v0.2.0 h1:H6XN5alUJ52FZZUkI7AlJbUc1aW38GWZalpYRPpoPOw= +atomicgo.dev/cursor v0.2.0/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= +atomicgo.dev/keyboard v0.2.9 h1:tOsIid3nlPLZ3lwgG8KZMp/SFmr7P0ssEN5JUsm78K8= +atomicgo.dev/keyboard v0.2.9/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= +atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs= +atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -19,6 +27,15 @@ dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs= +github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8= +github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII= +github.com/MarvinJWendt/testza v0.2.10/go.mod h1:pd+VWsoGUiFtq+hRKSU1Bktnn+DMCSrDrXDpX2bG66k= +github.com/MarvinJWendt/testza v0.2.12/go.mod h1:JOIegYyV7rX+7VZ9r77L/eH6CfJHHzXjB69adAhzZkI= +github.com/MarvinJWendt/testza v0.3.0/go.mod h1:eFcL4I0idjtIx8P9C6KkAuLgATNKpX4/2oUqKc6bF2c= +github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYewEjXsvsVUPbE= +github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4= +github.com/MarvinJWendt/testza v0.5.2/go.mod h1:xu53QFE5sCdjtMCKk8YMQ2MnymimEctc4n3EjyIYvEY= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= @@ -32,6 +49,7 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= github.com/bodgit/plumbing v1.3.0 h1:pf9Itz1JOQgn7vEOE7v7nlEfBykYqvUYioC61TwWCFU= github.com/bodgit/plumbing v1.3.0/go.mod h1:JOTb4XiRu5xfnmdnDJo6GmSbSbtSyufrsyZFByMtKEs= github.com/bodgit/sevenzip v1.4.3 h1:46Rb9vCYdpceC1U+GIR0bS3hP2/Xv8coKFDeLJySV/A= @@ -49,6 +67,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -123,6 +143,10 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -143,7 +167,13 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= +github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -155,6 +185,11 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= +github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mholt/archiver/v4 v4.0.0-alpha.8.0.20240408183022-de08bfa4c558 h1:mm89WXPE/mac3dHr0uNa6rfuJ3xAwveCv7a+lrfszHQ= github.com/mholt/archiver/v4 v4.0.0-alpha.8.0.20240408183022-de08bfa4c558/go.mod h1:/PrlQ8Ei1tfloDN9iyxK26Z++5EX1M29t6eEEvHKoIo= github.com/nwaples/rardecode/v2 v2.0.0-beta.2 h1:e3mzJFJs4k83GXBEiTaQ5HgSc/kOK8q0rDaRO0MPaOk= @@ -174,11 +209,24 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI= +github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg= +github.com/pterm/pterm v0.12.30/go.mod h1:MOqLIyMOgmTDz9yorcYbcw+HsgoZo3BQfg2wtl3HEFE= +github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEejaWgXU= +github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE= +github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8= +github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s= +github.com/pterm/pterm v0.12.79 h1:lH3yrYMhdpeqX9y5Ep1u7DejyHy7NSQg9qrBjF9dFT4= +github.com/pterm/pterm v0.12.79/go.mod h1:1v/gzOF1N0FsjbgTHZ1wVycRkKiatFvJSJC4IGaQAAo= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -195,6 +243,8 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= @@ -207,6 +257,9 @@ github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -232,6 +285,8 @@ golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -305,8 +360,11 @@ golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -317,6 +375,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -333,6 +393,7 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -410,8 +471,10 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/apk/apk.go b/pkg/apk/apk.go index 6fc8a8f..60bf3be 100644 --- a/pkg/apk/apk.go +++ b/pkg/apk/apk.go @@ -70,7 +70,7 @@ func (a *Apk) Install(artifactsPath string) error { pkgFilePath := filepath.Join(artifactsPath, a.PKGBUILD.PkgName, arch, pkgName) - if err := utils.Exec("", + if err := utils.Exec(true, "apk", "add", "--allow-untrusted", @@ -109,7 +109,7 @@ func (a *Apk) PrepareEnvironment(golang bool) error { args = append(args, "go") } - return utils.Exec("", "apk", args...) + return utils.Exec(true, "", "apk", args...) } // Update updates the APK package manager's package database. @@ -121,14 +121,14 @@ func (a *Apk) Update() error { // apkBuild compiles the APK package using 'abuild-keygen' and 'abuild'. // It returns an error if any compilation step fails. func (a *Apk) apkBuild(artifactsPath string) error { - if err := utils.Exec(a.apkDir, + if err := utils.Exec(true, a.apkDir, "abuild-keygen", "-n", "-a"); err != nil { return err } - if err := utils.Exec(a.apkDir, + if err := utils.Exec(true, a.apkDir, "abuild", "-F", "-K", diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index c19aff4..c8d35a9 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -1,9 +1,6 @@ package builder import ( - "fmt" - - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/source" "github.com/M0Rf30/yap/pkg/utils" @@ -21,10 +18,7 @@ func (builder *Builder) Compile(noBuild bool) error { return err } - fmt.Printf("%s๐Ÿ–ง :: %sRetrieving sources ...%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Info("retrieving sources ...") if err := builder.getSources(); err != nil { return err @@ -32,17 +26,17 @@ func (builder *Builder) Compile(noBuild bool) error { if !noBuild { if err := processFunction(builder.PKGBUILD.Prepare, - "Preparing"); err != nil { + "preparing"); err != nil { return err } if err := processFunction(builder.PKGBUILD.Build, - "Building"); err != nil { + "building"); err != nil { return err } if err := processFunction(builder.PKGBUILD.Package, - "Generating package"); err != nil { + "generating package"); err != nil { return err } } @@ -59,11 +53,7 @@ func processFunction(pkgbuildFunction, message string) error { return nil } - fmt.Printf("%s๐Ÿ“ฆ :: %s%s ...%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - message, - string(constants.ColorWhite)) + utils.Logger.Info(message) return utils.RunScript(" set -e\n" + pkgbuildFunction) } diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go index a83ca33..0704b65 100644 --- a/pkg/constants/constants.go +++ b/pkg/constants/constants.go @@ -1,9 +1,6 @@ package constants import ( - "log" - "strings" - "github.com/M0Rf30/yap/pkg/set" ) @@ -54,46 +51,3 @@ var ( PackagersSet = set.NewSet() CleanPrevious = false ) - -// init initializes the package. -// -// It iterates over the Releases slice and adds each release to the ReleasesSet set. -// It also extracts the distribution name from each release and adds it to the Distros slice. -// The function then iterates over the Distros slice and assigns the corresponding package manager -// to each distribution in the DistroPackageManager map. -// If a distribution does not have a supported package manager, the function prints an error message -// and exits the program. -// Finally, it adds each package manager to the PackagersSet set. -func init() { - var packageManager string - - for _, release := range Releases { - ReleasesSet.Add(release) - distro := strings.Split(release, "_")[0] - Distros = append(Distros, distro) - DistrosSet.Add(distro) - } - - for _, distro := range Distros { - switch DistroToPackageManager[distro] { - case "alpine": - packageManager = "apk" - case "debian": - packageManager = "apt" - case "pacman": - packageManager = "pacman" - case "redhat": - packageManager = "yum" - default: - log.Fatalf("%sโŒ :: %sfailed to find supported package manager for %s\n", - string(ColorBlue), - string(ColorYellow), distro) - } - - DistroPackageManager[distro] = packageManager - } - - for _, packageManager := range PackageManagers { - PackagersSet.Add(packageManager) - } -} diff --git a/pkg/dpkg/dpkg.go b/pkg/dpkg/dpkg.go index 56854ae..20c9c5e 100644 --- a/pkg/dpkg/dpkg.go +++ b/pkg/dpkg/dpkg.go @@ -8,7 +8,6 @@ import ( "strings" "text/template" - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/options" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/utils" @@ -139,7 +138,7 @@ func (d *Deb) dpkgDeb(artifactPath string) error { d.PKGBUILD.PkgName, d.PKGBUILD.PkgVer, d.PKGBUILD.PkgRel, arch)) - if err := utils.Exec("", + if err := utils.Exec(true, "", "dpkg-deb", "-b", "-Zzstd", @@ -171,10 +170,7 @@ func (d *Deb) Prepare(makeDepends []string) error { func (d *Deb) Strip() error { var tmplBytesBuffer bytes.Buffer - fmt.Printf("%s๐Ÿงน :: %sStripping binaries ...%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Info("Stripping binaries ...") tmpl := template.New("strip") @@ -287,7 +283,7 @@ func (d *Deb) Install(artifactsPath string) error { d.PKGBUILD.PkgName, d.PKGBUILD.PkgVer, d.PKGBUILD.PkgRel, arch)) - if err := utils.Exec("", "apt-get", "install", "-y", artifactFilePath); err != nil { + if err := utils.Exec(false, "", "apt-get", "install", "-y", artifactFilePath); err != nil { return err } } @@ -306,7 +302,7 @@ func (d *Deb) PrepareEnvironment(golang bool) error { } args = append(args, buildEnvironmentDeps...) - if err := utils.Exec("", "apt-get", args...); err != nil { + if err := utils.Exec(false, "", "apt-get", args...); err != nil { return err } diff --git a/pkg/packer/packer.go b/pkg/packer/packer.go index f490564..9ca5a2f 100644 --- a/pkg/packer/packer.go +++ b/pkg/packer/packer.go @@ -1,14 +1,13 @@ package packer import ( - "log" - "github.com/M0Rf30/yap/pkg/apk" "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/dpkg" "github.com/M0Rf30/yap/pkg/pacman" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/rpm" + "github.com/M0Rf30/yap/pkg/utils" ) // Packer is the common interface implemented by all package managers. @@ -55,10 +54,8 @@ func GetPackageManager(pkgBuild *pkgbuild.PKGBUILD, distro string) Packer { PKGBUILD: pkgBuild, } default: - log.Fatalf("%sโŒ :: %sunknown unsupported system.%s", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Fatal("unknown unsupported", + utils.Logger.Args("distro", distro)) } return nil diff --git a/pkg/pacman/pacman.go b/pkg/pacman/pacman.go index 6768942..66d1f5c 100644 --- a/pkg/pacman/pacman.go +++ b/pkg/pacman/pacman.go @@ -64,7 +64,7 @@ func (p *Pacman) Install(artifactsPath string) error { pkgFilePath := filepath.Join(artifactsPath, pkgName) - if err := utils.Exec("", + if err := utils.Exec(false, "", "pacman", "-U", "--noconfirm", @@ -106,7 +106,7 @@ func (p *Pacman) PrepareEnvironment(golang bool) error { args = append(args, "go") } - return utils.Exec("", "pacman", args...) + return utils.Exec(false, "", "pacman", args...) } // Update updates the Pacman package manager. @@ -124,5 +124,5 @@ func (p *Pacman) Update() error { // Returns: // - error: An error if any occurred during the execution of the makepkg command. func (p *Pacman) pacmanBuild() error { - return utils.Exec(p.pacmanDir, "makepkg", "-ef") + return utils.Exec(true, p.pacmanDir, "makepkg", "-ef") } diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index 4cf2793..5318ee2 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -1,11 +1,9 @@ package parser import ( - "fmt" "os" "path/filepath" - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/pkgbuild" "github.com/M0Rf30/yap/pkg/utils" "github.com/otiai10/copy" @@ -37,9 +35,8 @@ func ParseFile(distro, release, startDir, home string) (*pkgbuild.PKGBUILD, erro } if err != nil { - fmt.Printf("%sโŒ :: %sfailed to get root directory from %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), home) + utils.Logger.Error("failed to get root directory", + utils.Logger.Args("path", home)) return nil, err } diff --git a/pkg/pkgbuild/pkgbuild.go b/pkg/pkgbuild/pkgbuild.go index ddb4ac4..508d69e 100644 --- a/pkg/pkgbuild/pkgbuild.go +++ b/pkg/pkgbuild/pkgbuild.go @@ -2,7 +2,6 @@ package pkgbuild import ( "fmt" - "log" "os" "path/filepath" "strings" @@ -137,14 +136,14 @@ func (pkgBuild *PKGBUILD) GetDepends(packageManager string, args, makeDepends [] args = append(args, makeDepends...) - return utils.Exec("", packageManager, args...) + return utils.Exec(false, "", packageManager, args...) } // GetUpdates reads the package manager name and its arguments to perform // a sync with remotes and consequently retrieve updates. // It returns any error if encountered. func (pkgBuild *PKGBUILD) GetUpdates(packageManager string, args ...string) error { - return utils.Exec("", packageManager, args...) + return utils.Exec(false, "", packageManager, args...) } // Init initializes the PKGBUILD struct. @@ -168,34 +167,23 @@ func (pkgBuild *PKGBUILD) Validate() { if !pkgBuild.validateLicense() { isValid = false - fmt.Printf("%s%s โŒ :: %sinvalid SPDX license identifier%s\n", - pkgBuild.PkgName, - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - - fmt.Println("You can find valid SPDX license identifiers here") - fmt.Println("๐ŸŒ https://spdx.org/licenses/") + utils.Logger.Error("invalid SPDX license identifier", utils.Logger.Args("pkgname", pkgBuild.PkgName)) + utils.Logger.Info("you can find valid SPDX license identifiers here", + utils.Logger.Args("๐ŸŒ", "https://spdx.org/licenses/")) } if len(pkgBuild.SourceURI) != len(pkgBuild.HashSums) { isValid = false - fmt.Printf("%s%s โŒ :: %snumber of sources and hashsums differs%s\n", - pkgBuild.PkgName, - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Error("number of sources and hashsums differs", + utils.Logger.Args("pkgname", pkgBuild.PkgName)) } if pkgBuild.Package == "" { isValid = false - fmt.Printf("%s%s โŒ :: %smissing package() function%s\n", - pkgBuild.PkgName, - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + utils.Logger.Error("missing package() function", + utils.Logger.Args("pkgname", pkgBuild.PkgName)) } if !isValid { @@ -298,9 +286,8 @@ func (pkgBuild *PKGBUILD) mapVariables(key string, data any) { } if err != nil { - log.Fatalf("%sโŒ :: %sfailed to set variable %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), key) + utils.Logger.Fatal("failed to set variable", + utils.Logger.Args("variable", key)) } } @@ -358,15 +345,11 @@ func (pkgBuild *PKGBUILD) setMainFolders() { } if err := os.Setenv("pkgdir", pkgBuild.PackageDir); err != nil { - log.Fatalf("%sโŒ :: %sfailed to set variable pkgdir\n", - string(constants.ColorBlue), - string(constants.ColorYellow)) + utils.Logger.Fatal("failed to set variable pkgdir") } if err := os.Setenv("srcdir", pkgBuild.SourceDir); err != nil { - log.Fatalf("%sโŒ :: %sfailed to set variable srcdir\n", - string(constants.ColorBlue), - string(constants.ColorYellow)) + utils.Logger.Fatal("failed to set variable srcdir") } } diff --git a/pkg/project/project.go b/pkg/project/project.go index a1be38d..23c5085 100644 --- a/pkg/project/project.go +++ b/pkg/project/project.go @@ -2,13 +2,10 @@ package project import ( "encoding/json" - "fmt" "io" - "log" "path/filepath" "github.com/M0Rf30/yap/pkg/builder" - "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/packer" "github.com/M0Rf30/yap/pkg/parser" "github.com/M0Rf30/yap/pkg/pkgbuild" @@ -97,14 +94,9 @@ func (mpc *MultipleProject) BuildAll() error { continue } - fmt.Printf("%s๐Ÿš€ :: %sMaking package: %s\t%s %s-%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - proj.Builder.PKGBUILD.PkgName, - proj.Builder.PKGBUILD.PkgVer, - proj.Builder.PKGBUILD.PkgRel, - ) + utils.Logger.Info("making package", utils.Logger.Args("name", proj.Builder.PKGBUILD.PkgName, + "pkgver", proj.Builder.PKGBUILD.PkgVer, + "pkgrel", proj.Builder.PKGBUILD.PkgRel)) if err := proj.Builder.Compile(NoBuild); err != nil { return err @@ -117,14 +109,9 @@ func (mpc *MultipleProject) BuildAll() error { } if proj.HasToInstall { - fmt.Printf("%s๐Ÿค“ :: %sInstalling package: %s%s %s-%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - proj.Builder.PKGBUILD.PkgName, - proj.Builder.PKGBUILD.PkgVer, - proj.Builder.PKGBUILD.PkgRel, - ) + utils.Logger.Info("installing package", utils.Logger.Args("pkgname", proj.Builder.PKGBUILD.PkgName, + "pkgver", proj.Builder.PKGBUILD.PkgVer, + "pkgrel", proj.Builder.PKGBUILD.PkgRel)) if err := proj.PackageManager.Install(mpc.Output); err != nil { return err @@ -223,13 +210,8 @@ func (mpc *MultipleProject) checkPkgsRange(fromPkgName, toPkgName string) { } if fromPkgName != "" && toPkgName != "" && firstIndex > lastIndex { - log.Fatalf("%sโŒ :: %sInvalid package order: %s%s should be built before %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - toPkgName, - fromPkgName, - ) + utils.Logger.Fatal("invalid package order: %s should be built before %s", + utils.Logger.Args(fromPkgName, toPkgName)) } } @@ -275,12 +257,8 @@ func (mpc *MultipleProject) findPackageInProjects(pkgName string) int { } if !matchFound { - log.Fatalf("%sโŒ :: %spackage not found: %s%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - pkgName, - ) + utils.Logger.Fatal("package not found", + utils.Logger.Args("pkgname", pkgName)) } return index diff --git a/pkg/rpm/rpm.go b/pkg/rpm/rpm.go index c4f7049..68925c6 100644 --- a/pkg/rpm/rpm.go +++ b/pkg/rpm/rpm.go @@ -97,7 +97,7 @@ func (r *RPM) Install(artifactsPath string) error { pkgFilePath := filepath.Join(artifactsPath, RPMArchs[arch], pkgName) - if err := utils.Exec("", + if err := utils.Exec(false, "", "yum", "install", "-y", @@ -120,7 +120,7 @@ func (r *RPM) PrepareEnvironment(golang bool) error { } args = append(args, buildEnvironmentDeps...) - if err := utils.Exec("", "yum", args...); err != nil { + if err := utils.Exec(false, "", "yum", args...); err != nil { return err } @@ -350,5 +350,5 @@ func (r *RPM) rpmBuild() error { args = append(args, "--quiet") } - return utils.Exec(r.specsDir, "rpmbuild", args...) + return utils.Exec(false, r.specsDir, "rpmbuild", args...) } diff --git a/pkg/source/source.go b/pkg/source/source.go index 1299a2b..889213f 100644 --- a/pkg/source/source.go +++ b/pkg/source/source.go @@ -9,13 +9,11 @@ import ( "io" "os" "path/filepath" - "strconv" "strings" "github.com/M0Rf30/yap/pkg/constants" "github.com/M0Rf30/yap/pkg/utils" "github.com/go-git/go-git/v5/plumbing" - "github.com/pkg/errors" ) var ( @@ -64,11 +62,11 @@ func (src *Source) Get() error { switch sourceType { case "http", "https", "ftp", constants.Git: if !utils.Exists(sourceFilePath) { - _ = src.getURL(sourceType, sourceFilePath, SSHPassword) + return src.getURL(sourceType, sourceFilePath, SSHPassword) } case "file": default: - return errors.New("unsupported source type") + return fmt.Errorf("unsupported source type") } if err := src.validateSource(sourceFilePath); err != nil { @@ -179,16 +177,13 @@ func (src *Source) symlinkSources(symlinkSource string) error { // It takes the source file path as a parameter and returns an error if any. func (src *Source) validateSource(sourceFilePath string) error { info, err := os.Stat(sourceFilePath) + if err != nil { return fmt.Errorf("failed to open file for hash: %w", err) } if src.Hash == "SKIP" || info.IsDir() { - fmt.Printf("%s:: %sSkip integrity check for %s\t%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - src.SourceItemURI) + utils.Logger.Info("skip integrity check for", utils.Logger.Args("source", src.SourceItemURI)) return nil } @@ -201,7 +196,7 @@ func (src *Source) validateSource(sourceFilePath string) error { case 128: hashSum = sha512.New() default: - return errors.Wrapf(errors.New("invalid hash length: %s"), strconv.Itoa(len(src.Hash))) + return fmt.Errorf("unsupported hash length: %d", len(src.Hash)) } file, err := utils.Open(filepath.Clean(sourceFilePath)) @@ -218,14 +213,10 @@ func (src *Source) validateSource(sourceFilePath string) error { hexSum := hex.EncodeToString(sum) if hexSum != src.Hash { - return errors.Wrapf(errors.New("hash verification failed"), src.SourceItemPath) + return fmt.Errorf("hash verification failed: %s", src.SourceItemPath) } - fmt.Printf("%s:: %sIntegrity check for %s\t%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - src.SourceItemURI) + utils.Logger.Info("integrity check for", utils.Logger.Args("source", src.SourceItemURI)) return nil } diff --git a/pkg/utils/file.go b/pkg/utils/file.go index 8f1519d..3e7e3b1 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -2,12 +2,9 @@ package utils import ( "fmt" - "log" "os" "path/filepath" "strings" - - "github.com/M0Rf30/yap/pkg/constants" ) // Chmod changes the file mode of the specified path. @@ -21,11 +18,7 @@ import ( func Chmod(path string, perm os.FileMode) error { err := os.Chmod(path, perm) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to chmod '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to chmod", Logger.Args("path", path)) return err } @@ -41,12 +34,9 @@ func Create(path string) (*os.File, error) { cleanFilePath := filepath.Clean(path) file, err := os.Create(cleanFilePath) + if err != nil { - fmt.Printf("%sโŒ :: %sfailed to create '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to create path", Logger.Args("path", path)) } return file, err @@ -68,11 +58,7 @@ func CreateWrite(path, data string) error { _, err = file.WriteString(data) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to write to file '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to write to file", Logger.Args("path", path)) return err } @@ -127,11 +113,8 @@ func GetDirSize(path string) (int64, error) { err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { if err != nil { - log.Fatalf("%sโŒ :: %sfailed to get dir size '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Fatal("failed to get dir size", + Logger.Args("path", path)) } if !info.IsDir() { @@ -174,11 +157,8 @@ func MkdirAll(path string) error { //#nosec err := os.MkdirAll(path, 0o755) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to mkdir '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to make directory", + Logger.Args("path", path)) return err } @@ -195,11 +175,8 @@ func Open(path string) (*os.File, error) { file, err := os.Open(cleanFilePath) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to open file '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to open file", + Logger.Args("path", path)) } return file, err @@ -212,11 +189,8 @@ func Open(path string) (*os.File, error) { func RemoveAll(path string) error { err := os.RemoveAll(path) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to remove '%s'%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - path, - string(constants.ColorWhite)) + Logger.Error("failed to remove", + Logger.Args("path", path)) return err } diff --git a/pkg/utils/proc.go b/pkg/utils/proc.go index 27b83f2..950f67c 100644 --- a/pkg/utils/proc.go +++ b/pkg/utils/proc.go @@ -13,10 +13,14 @@ import ( // - arg: optional arguments to be passed to the command. // // It returns an error if the command execution fails. -func Exec(dir, name string, arg ...string) error { - cmd := exec.Command(name, arg...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr +func Exec(excludeStdout bool, dir, name string, args ...string) error { + cmd := exec.Command(name, args...) + cmd.Stdout = MultiPrinter.Writer + cmd.Stderr = MultiPrinter.Writer + + if excludeStdout { + cmd.Stdout = nil + } if dir != "" { cmd.Dir = dir diff --git a/pkg/utils/strings.go b/pkg/utils/strings.go index 1ac0b21..4d730cd 100644 --- a/pkg/utils/strings.go +++ b/pkg/utils/strings.go @@ -1,11 +1,8 @@ package utils import ( - "fmt" - "log" "strings" - "github.com/M0Rf30/yap/pkg/constants" "mvdan.cc/sh/v3/syntax" ) @@ -20,9 +17,8 @@ func StringifyArray(node *syntax.Assign) []string { for index := range node.Array.Elems { if err := printer.Print(out, node.Array.Elems[index].Value); err != nil { - fmt.Printf("%sโŒ :: %sunable to parse array element: %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), out.String()) + Logger.Error("unable to parse array element", + Logger.Args("name", out.String())) } out.WriteString(" ") @@ -41,9 +37,8 @@ func StringifyAssign(node *syntax.Assign) string { printer := syntax.NewPrinter(syntax.Indent(2)) if err := printer.Print(out, node.Value); err != nil { - fmt.Printf("%sโŒ :: %sunable to parse variable: %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), out.String()) + Logger.Error("unable to parse variable", + Logger.Args("name", out.String())) } return strings.Trim(out.String(), "\"") @@ -59,9 +54,8 @@ func StringifyFuncDecl(node *syntax.FuncDecl) string { err := printer.Print(out, node.Body) if err != nil { - log.Fatalf("%sโŒ :: %sunable to parse function: %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), out.String()) + Logger.Error("unable to parse function", + Logger.Args("name", out.String())) } funcDecl := strings.Trim(out.String(), "{\n}") diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index bb5bc98..6ed8b99 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "io" - "log" "net/url" "os" "path/filepath" @@ -17,6 +16,7 @@ import ( "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/transport/ssh" "github.com/mholt/archiver/v4" + "github.com/pterm/pterm" "mvdan.cc/sh/v3/expand" "mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/syntax" @@ -25,16 +25,16 @@ import ( const goArchivePath = "/tmp/go.tar.gz" const goExecutable = "/usr/bin/go" +var Logger = pterm.DefaultLogger.WithLevel(pterm.LogLevelInfo) +var MultiPrinter = pterm.DefaultMultiPrinter + // CheckGO checks if the GO executable is already installed. // // It does not take any parameters. // It returns a boolean value indicating whether the GO executable is already installed. func CheckGO() bool { if _, err := os.Stat(goExecutable); err == nil { - fmt.Printf("%s๐Ÿช› :: %sGO is already installed%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + Logger.Info("go is already installed") return true } @@ -50,72 +50,43 @@ func CheckGO() bool { func Download(destination, uri string) error { // create client client := grab.NewClient() - req, err := grab.NewRequest(destination, uri) + req, err := grab.NewRequest(destination, uri) if err != nil { - return err + return fmt.Errorf("download failed: %s", err) } - // start download - fmt.Printf("%s๐Ÿ“ฅ :: %sDownloading %s\t%v\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - req.URL(), - ) - resp := client.Do(req) - fmt.Printf("%s๐Ÿ“ฅ :: %sResponse: %s\t%v\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - resp.HTTPResponse.Status, - ) + if resp.HTTPResponse == nil { + Logger.Fatal("download failed: no response", Logger.Args("error", resp.Err())) + } - fmt.Printf("%s๐Ÿ“ฅ :: %sDownload in progress: %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - ) + // start download + Logger.Info("downloading", Logger.Args("url", req.URL())) + Logger.Info("response", Logger.Args("response", resp.HTTPResponse.Status)) + Logger.Info("download in progress") // start UI loop ticker := time.NewTicker(500 * time.Millisecond) + progressBar, _ := pterm.DefaultProgressbar.Start() Loop: for { select { - case <-ticker.C: - fmt.Printf("\033[2K\r%d.1 of %d.1 MB | %.2f %%", - resp.BytesComplete()/1024/1024, - resp.Size()/1024/1024, - 100*resp.Progress(), - ) - case <-resp.Done: + progressBar.Current = 100 + Logger.Info("download completed", Logger.Args("destination", destination)) + progressBar.Stop() // download is complete break Loop - } - } - - // check for errors - if err = resp.Err(); err != nil { - fmt.Printf("%sโŒ :: %sdownload failed: %s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - return err + case <-ticker.C: + progressBar.Current = int(100 * resp.Progress()) + } } defer ticker.Stop() - fmt.Printf("\n%s๐Ÿ“ฅ :: %sDownload saved: %s\t%v\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - destination, - ) - return err } @@ -134,13 +105,7 @@ func GitClone(dloadFilePath, sourceItemURI, sshPassword string, URL: sourceItemURI, } - // start download - fmt.Printf("%s๐Ÿ“ฅ :: %sCloning %s\t%v\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite), - sourceItemURI, - ) + Logger.Info("cloning", Logger.Args("repo", sourceItemURI)) if Exists(dloadFilePath) { _, err := ggit.PlainOpenWithOptions(dloadFilePath, &ggit.PlainOpenOptions{ @@ -159,14 +124,8 @@ func GitClone(dloadFilePath, sourceItemURI, sshPassword string, publicKey, err := ssh.NewPublicKeysFromFile("git", sshKeyPath, sshPassword) if err != nil { - fmt.Printf("%sโŒ :: %sfailed to load ssh key%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) - fmt.Printf("%s:: %sTry to use an ssh-password with the -p flag%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + Logger.Error("failed to load ssh key") + Logger.Warn("try to use an ssh-password with the -p") return err } @@ -196,7 +155,7 @@ func GOSetup() error { err := Download(goArchivePath, constants.GoArchiveURL) if err != nil { - log.Panic(err) + Logger.Fatal("download failed", Logger.Args("error", err)) } err = Unarchive(goArchivePath, "/usr/lib") @@ -219,10 +178,7 @@ func GOSetup() error { return err } - fmt.Printf("%s๐Ÿช› :: %sGO successfully installed%s\n", - string(constants.ColorBlue), - string(constants.ColorYellow), - string(constants.ColorWhite)) + Logger.Info("go successfully installed") return err } @@ -239,7 +195,7 @@ func PullContainers(target string) error { } if _, err := os.Stat(containerApp); err == nil { - return Exec("", containerApp, args...) + return Exec(false, "", containerApp, args...) } return nil @@ -252,12 +208,22 @@ func PullContainers(target string) error { func RunScript(cmds string) error { script, _ := syntax.NewParser().Parse(strings.NewReader(cmds), "") + if _, err := MultiPrinter.Start(); err != nil { + return err + } + runner, _ := interp.New( interp.Env(expand.ListEnviron(os.Environ()...)), - interp.StdIO(nil, os.Stdout, os.Stdout), + interp.StdIO(nil, MultiPrinter.Writer, MultiPrinter.Writer), ) - return runner.Run(context.TODO(), script) + err := runner.Run(context.TODO(), script) + + if _, err := MultiPrinter.Stop(); err != nil { + return err + } + + return err } // Unarchive is a function that takes a source file and a destination. It opens