refactor: implement a simple progressbar instead of bubbletea

This commit is contained in:
Patryk Hegenberg 2025-01-15 14:28:36 +01:00
parent 0504d88775
commit 339dba4e13
11 changed files with 104 additions and 116 deletions

View file

@ -1,8 +1,6 @@
package main package main
import ( import (
// "fmt"
// "log"
"os/exec" "os/exec"
) )
@ -12,22 +10,10 @@ func (c *CargoManager) Install(packages []string) error {
if len(packages) == 0 { if len(packages) == 0 {
return nil return nil
} }
// fmt.Printf("\nInstalliere %s-Pakete...\n", c.Name())
err := installWithProgress(c, packages) err := installWithProgress(c, packages)
if err != nil { if err != nil {
return err return err
} }
// for _, pkg := range packages {
// err := installPackageWithProgress(pkg, func() error {
// cmd := exec.Command("cargo", "install", pkg)
// return cmd.Run()
// })
// if err != nil {
// log.Printf("Fehler bei der Installation von %s: %v", pkg, err)
// }
// }
// fmt.Println("Installation abgeschlossen")
return nil return nil
} }

View file

@ -2,7 +2,6 @@ package main
import ( import (
"fmt" "fmt"
// "log"
"os/exec" "os/exec"
) )
@ -16,22 +15,10 @@ func (f *FlatpakManager) Install(packages []string) error {
if len(packages) == 0 { if len(packages) == 0 {
return nil return nil
} }
// fmt.Printf("\nInstalliere %s-Pakete...\n", f.Name())
err := installWithProgress(f, packages) err := installWithProgress(f, packages)
if err != nil { if err != nil {
return err return err
} }
// for _, pkg := range packages {
// err := installPackageWithProgress(pkg, func() error {
// cmd := exec.Command("flatpak", "install", "-y", pkg)
// return cmd.Run()
// })
// if err != nil {
// log.Printf("Fehler bei der Installation von %s: %v", pkg, err)
// }
// }
// fmt.Println("Installation abgeschlossen")
return nil return nil
} }

1
go.mod
View file

@ -28,6 +28,7 @@ require (
github.com/huandu/xstrings v1.3.2 // indirect github.com/huandu/xstrings v1.3.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/magefile/mage v1.15.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-localereader v0.0.1 // indirect

2
go.sum
View file

@ -58,6 +58,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=

View file

@ -1,8 +1,6 @@
package main package main
import ( import (
// "fmt"
// "log"
"os/exec" "os/exec"
) )
@ -12,22 +10,10 @@ func (g *GolangManager) Install(packages []string) error {
if len(packages) == 0 { if len(packages) == 0 {
return nil return nil
} }
// fmt.Printf("\nInstalliere %s-Pakete...\n", g.Name())
err := installWithProgress(g, packages) err := installWithProgress(g, packages)
if err != nil { if err != nil {
return err return err
} }
// for _, pkg := range packages {
// err := installPackageWithProgress(pkg, func() error {
// cmd := exec.Command("go", "install", pkg+"@latest")
// return cmd.Run()
// })
// if err != nil {
// log.Printf("Fehler bei der Installation von %s: %v", pkg, err)
// }
// }
// fmt.Println("Installation abgeschlossen")
return nil return nil
} }

View file

@ -2,7 +2,6 @@ package main
import ( import (
"fmt" "fmt"
// "log"
"os/exec" "os/exec"
) )
@ -12,22 +11,10 @@ func (h *HomebrewManager) Install(packages []string) error {
if len(packages) == 0 { if len(packages) == 0 {
return nil return nil
} }
// fmt.Printf("\nInstalliere %s-Pakete...\n", h.Name())
err := installWithProgress(h, packages) err := installWithProgress(h, packages)
if err != nil { if err != nil {
return err return err
} }
// for _, pkg := range packages {
// err := installPackageWithProgress(pkg, func() error {
// cmd := exec.Command("brew", "install", pkg)
// return cmd.Run()
// })
// if err != nil {
// log.Printf("Fehler bei der Installation von %s: %v", pkg, err)
// }
// }
// fmt.Println("Installation abgeschlossen")
return nil return nil
} }

58
magefile.go Normal file
View file

@ -0,0 +1,58 @@
//go:build mage
// +build mage
package main
import (
"fmt"
"os"
"os/exec"
"github.com/magefile/mage/mg" // mg contains helpful utility functions, like Deps
)
// Default target to run when none is specified
// If not set, running mage will list available targets
// var Default = Build
// A build step that requires additional params, or platform specific steps for example
func Build() error {
mg.Deps(InstallDeps)
fmt.Println("Building...")
cmd := exec.Command("go", "build", "-o", "MyApp", ".")
return cmd.Run()
}
// A custom install step if you need your bin someplace other than go/bin
func Install() error {
mg.Deps(Build)
fmt.Println("Installing...")
return os.Rename("./MyApp", "/usr/bin/MyApp")
}
// Manage your deps, or running package managers.
func InstallDeps() error {
fmt.Println("Installing Deps...")
cmd := exec.Command("go", "get", "github.com/stretchr/piglatin")
return cmd.Run()
}
// Clean up after yourself
func Clean() {
fmt.Println("Cleaning...")
os.RemoveAll("MyApp")
}
// Use gofmt to format your code
func Format() error {
fmt.Println("Checking Format")
cmd := exec.Command("gofmt", "./")
return cmd.Run()
}
// get linting information from golangci-lint
func Lint() error {
fmt.Println("Linting...")
cmd := exec.Command("golangci-lint", "./...")
return cmd.Run()
}

View file

@ -1,17 +1,13 @@
package main package main
import ( import (
"fmt" "log"
"os" "os"
"github.com/Delta456/box-cli-maker/v2"
) )
func main() { func main() {
Box := box.New(box.Config{Px: 2, Py: 5, Type: "Single"})
Box.Print("System Setup", "Configure and install your predefined system")
if err := rootCmd.Execute(); err != nil { if err := rootCmd.Execute(); err != nil {
fmt.Println(err) log.Println(err)
os.Exit(1) os.Exit(1)
} }
} }

14
pipx.go
View file

@ -1,8 +1,6 @@
package main package main
import ( import (
// "fmt"
// "log"
"os/exec" "os/exec"
) )
@ -13,22 +11,10 @@ func (p *PipxManager) Install(packages []string) error {
return nil return nil
} }
// fmt.Printf("\nInstalliere %s-Pakete...\n", p.Name())
err := installWithProgress(p, packages) err := installWithProgress(p, packages)
if err != nil { if err != nil {
return err return err
} }
// for _, pkg := range packages {
// err := installPackageWithProgress(pkg, func() error {
// cmd := exec.Command("pipx", "install", pkg)
// return cmd.Run()
// })
// if err != nil {
// log.Printf("Fehler bei der Installation von %s: %v", pkg, err)
// }
// }
// fmt.Println("Installation abgeschlossen")
return nil return nil
} }

3
tui.go
View file

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"log" "log"
// tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/huh" "github.com/charmbracelet/huh"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
@ -19,7 +18,7 @@ var (
unavailablePackages []string unavailablePackages []string
) )
type installedItemMsg string // type installedItemMsg string
type installedPkgMsg string type installedPkgMsg string

View file

@ -2,11 +2,12 @@ package main
import ( import (
"fmt" "fmt"
"io" // "io"
"net/http" "log"
// "net/http"
"os" "os"
"os/exec" "os/exec"
"runtime" // "runtime"
"github.com/charmbracelet/huh" "github.com/charmbracelet/huh"
"github.com/schollz/progressbar/v3" "github.com/schollz/progressbar/v3"
@ -30,36 +31,36 @@ func getSudoPassword() (string, error) {
return password, nil return password, nil
} }
func downloadGolang(golangVersion string) error { // func downloadGolang(golangVersion string) error {
var link string // var link string
if runtime.GOARCH == "arm64" { // if runtime.GOARCH == "arm64" {
link = "https://go.dev/dl/go" + golangVersion + ".linux-arm64.tar.gz" // link = "https://go.dev/dl/go" + golangVersion + ".linux-arm64.tar.gz"
} else { // } else {
link = "https://go.dev/dl/go" + golangVersion + ".linux-amd64.tar.gz" // link = "https://go.dev/dl/go" + golangVersion + ".linux-amd64.tar.gz"
} // }
resp, err := http.Get(link) // resp, err := http.Get(link)
if err != nil { // if err != nil {
return fmt.Errorf("fehler beim Herunterladen von Go: %v", err) // return fmt.Errorf("fehler beim Herunterladen von Go: %v", err)
} // }
defer resp.Body.Close() // defer resp.Body.Close()
if resp.StatusCode != http.StatusOK { // if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unerwarteter HTTP-Status: %s", resp.Status) // return fmt.Errorf("unerwarteter HTTP-Status: %s", resp.Status)
} // }
outFile, err := os.Create("go" + golangVersion + ".linux-" + runtime.GOARCH + ".tar.gz") // outFile, err := os.Create("go" + golangVersion + ".linux-" + runtime.GOARCH + ".tar.gz")
if err != nil { // if err != nil {
return fmt.Errorf("fehler beim Erstellen der Ausgabedatei: %v", err) // return fmt.Errorf("fehler beim Erstellen der Ausgabedatei: %v", err)
} // }
defer outFile.Close() // defer outFile.Close()
_, err = io.Copy(outFile, resp.Body) // _, err = io.Copy(outFile, resp.Body)
if err != nil { // if err != nil {
return fmt.Errorf("fehler beim Schreiben der Ausgabedatei: %v", err) // return fmt.Errorf("fehler beim Schreiben der Ausgabedatei: %v", err)
} // }
return nil // return nil
} // }
func max(a, b int) int { func max(a, b int) int {
if a > b { if a > b {
@ -68,15 +69,15 @@ func max(a, b int) int {
return b return b
} }
func installPackageWithProgress(name string, installFunc func() error) error { // func installPackageWithProgress(name string, installFunc func() error) error {
err := installFunc() // err := installFunc()
if err != nil { // if err != nil {
fmt.Printf("\r❌ %s\n", name) // fmt.Printf("\r❌ %s\n", name)
return err // return err
} // }
fmt.Printf("\r✓ %s\n", name) // fmt.Printf("\r✓ %s\n", name)
return nil // return nil
} // }
func executeShellCommand(command string, env string) error { func executeShellCommand(command string, env string) error {
cmd := exec.Command("bash", "-c", command) cmd := exec.Command("bash", "-c", command)
@ -92,10 +93,9 @@ func executeShellCommand(command string, env string) error {
func installWithProgress(manager PackageManager, packages []string) error { func installWithProgress(manager PackageManager, packages []string) error {
bar := progressbar.Default(int64(len(packages)), "Installiere "+manager.Name()+"-Pakete...") bar := progressbar.Default(int64(len(packages)), "Installiere "+manager.Name()+"-Pakete...")
for _, pkg := range packages { for _, pkg := range packages {
// fmt.Printf("Installing %s...\n", pkg)
err := manager.InstallPackage(pkg) err := manager.InstallPackage(pkg)
if err != nil { if err != nil {
fmt.Printf("Error installing %s: %v\n", pkg, err) log.Printf("\nError installing %s: %v\n", pkg, err)
} }
bar.Add(1) bar.Add(1)
} }