refactor: reduce boilerplate logging code using shared logger

This commit is contained in:
Erica Marigold 2022-11-25 20:56:59 +05:30
parent b0a57eed59
commit 87d7112f26
No known key found for this signature in database
GPG key ID: 23CD97ABBBCC5ED2
4 changed files with 51 additions and 34 deletions

View file

@ -7,12 +7,11 @@ import (
"strings" "strings"
"time" "time"
logger "github.com/CompeyDev/wsl-archlinux-manager/util"
"github.com/briandowns/spinner" "github.com/briandowns/spinner"
"github.com/cavaliergopher/grab/v3" "github.com/cavaliergopher/grab/v3"
"github.com/gookit/color"
) )
// TODO:
func VerifySignature(mirrorUrl string) { func VerifySignature(mirrorUrl string) {
bar := spinner.New(spinner.CharSets[14], 100*time.Millisecond) bar := spinner.New(spinner.CharSets[14], 100*time.Millisecond)
bar.Prefix = " " bar.Prefix = " "
@ -22,20 +21,20 @@ func VerifySignature(mirrorUrl string) {
success, _ := pullSig(mirrorUrl) success, _ := pullSig(mirrorUrl)
if !success { if !success {
color.Red.Println("\r ❎ Failed to download signature of RootFS. Refusing to continue.") logger.Error("Failed to download signature of RootFS. Refusing to continue.")
os.Exit(1) os.Exit(1)
} }
userHomeDir, homeDirErr := os.UserHomeDir() userHomeDir, homeDirErr := os.UserHomeDir()
if homeDirErr != nil { if homeDirErr != nil {
color.Red.Println("\r ❎ Failed to fetch installation directory, cannot verify authenticity of RootFS.") logger.Error("Failed to fetch installation directory, cannot verify authenticity of RootFS.")
os.Exit(1) os.Exit(1)
} }
cwd, dirErr := os.Getwd() cwd, dirErr := os.Getwd()
if dirErr != nil { if dirErr != nil {
color.Red.Println("\r ❎ Failed to fetch installation directory, cannot verify authenticity of RootFS.") logger.Error("Failed to fetch installation directory, cannot verify authenticity of RootFS.")
os.Exit(1) os.Exit(1)
} }
@ -46,11 +45,11 @@ func VerifySignature(mirrorUrl string) {
getAuthenticity, authenticityErr := exec.Command("powershell.exe", fmt.Sprintf(`wsl bash -c "cd %s && gpg --keyserver-options auto-key-retrieve --verify archlinux-bootstrap-2022.11.01-x86_64.tar.gz.sig"`, unixWd)).Output() getAuthenticity, authenticityErr := exec.Command("powershell.exe", fmt.Sprintf(`wsl bash -c "cd %s && gpg --keyserver-options auto-key-retrieve --verify archlinux-bootstrap-2022.11.01-x86_64.tar.gz.sig"`, unixWd)).Output()
if authenticityErr != nil { if authenticityErr != nil {
color.Red.Println("\r ❎ Failed to verify authenticity of RootFS. Refusing to continue.") logger.Error("Failed to verify authenticity of RootFS. Refusing to continue.")
os.Exit(1) os.Exit(1)
} }
color.Green.Println("\r ✅ Successfully matched checksums and verified authenticity!") logger.Info("Successfully matched checksums and verified authenticity!")
bar.Stop() bar.Stop()
fmt.Println(strings.Trim(string(getAuthenticity), "\n\r")) fmt.Println(strings.Trim(string(getAuthenticity), "\n\r"))
@ -66,11 +65,11 @@ func pullSig(url string) (isSuccessful bool, error error) {
res, err := grab.Get(".", structuredUrl) res, err := grab.Get(".", structuredUrl)
if err != nil { if err != nil {
color.Red.Println("\r ❎ Failed to download Signature.") logger.Error("Failed to download Signature.")
return false, err return false, err
} }
color.Green.Println("\r ✅ Downloaded Signature", res.Filename) logger.Info(fmt.Sprintf("Downloaded Signature %s", res.Filename))
return true, nil return true, nil
} }

View file

@ -11,9 +11,9 @@ import (
"encoding/json" "encoding/json"
"github.com/CompeyDev/wsl-archlinux-manager/lib/checkers" "github.com/CompeyDev/wsl-archlinux-manager/lib/checkers"
logger "github.com/CompeyDev/wsl-archlinux-manager/util"
"github.com/briandowns/spinner" "github.com/briandowns/spinner"
"github.com/cavaliergopher/grab/v3" "github.com/cavaliergopher/grab/v3"
"github.com/gookit/color"
) )
// TODO: // TODO:
@ -32,7 +32,7 @@ func Build() {
body, reqErr := io.ReadAll(userLocation.Body) body, reqErr := io.ReadAll(userLocation.Body)
if reqErr != nil { if reqErr != nil {
color.Red.Println("\r ❎ An internal error occurred when attempting to pull the RootFS. This is probably a bug; you might want to report this.") logger.Error("An internal error occurred when attempting to pull the RootFS. This is probably a bug; you might want to report this.")
bar.Stop() bar.Stop()
os.Exit(1) os.Exit(1)
} }
@ -57,7 +57,7 @@ func Build() {
parseErr := json.Unmarshal([]byte(body), &resStruct) parseErr := json.Unmarshal([]byte(body), &resStruct)
if parseErr != nil { if parseErr != nil {
color.Red.Println("\r ❎ Failed to parse response body! This is a probably a bug; you might want to report this.") logger.Error("Failed to parse response body! This is a probably a bug; you might want to report this.")
bar.Stop() bar.Stop()
os.Exit(1) os.Exit(1)
} }
@ -68,9 +68,9 @@ func Build() {
isSuccessful_1, _ := pullArchive(mirror) isSuccessful_1, _ := pullArchive(mirror)
if !isSuccessful_1 { if !isSuccessful_1 {
color.Yellow.Println("\r ❎ Attempt #1 to pull RootFS failed, trying again with Worldwide...") logger.Warn("Attempt #1 to pull RootFS failed, trying again with Worldwide mirror...")
bar.Suffix = " Attempt #1 to pull RootFS failed, trying again with Worldwide..." bar.Suffix = " Attempt #1 to pull RootFS failed, trying again with Worldwide mirror..."
bar.Start() bar.Start()
@ -78,7 +78,7 @@ func Build() {
isSuccessful_2, _ := pullArchive(globalMirror) isSuccessful_2, _ := pullArchive(globalMirror)
if !isSuccessful_2 { if !isSuccessful_2 {
color.Red.Println("\r ❎ Attempt #2 to pull RootFS failed. Please try again.") logger.Error("Attempt #2 to pull RootFS failed. Please try again.")
bar.Stop() bar.Stop()
os.Exit(1) os.Exit(1)
} else { } else {
@ -94,12 +94,12 @@ func Build() {
func getMirror(country string) string { func getMirror(country string) string {
resp, err := http.Get("https://archlinux.org/download/") resp, err := http.Get("https://archlinux.org/download/")
if err != nil { if err != nil {
color.Red.Println("❎ Failed to download RootFS.") logger.Error("Failed to download RootFS.")
} }
defer resp.Body.Close() defer resp.Body.Close()
body, err := io.ReadAll(resp.Body) body, err := io.ReadAll(resp.Body)
if err != nil { if err != nil {
color.Red.Println("❎ An internal error occurred when attempting to pull the RootFS. This is probably a bug; you might want to report this.") logger.Error("An internal error occurred when attempting to pull the RootFS. This is probably a bug; you might want to report this.")
} }
mirrorLink := strings.Split(strings.Split(strings.Split(strings.Split(strings.Split(strings.Split(string(body), fmt.Sprintf(`title="%s"`, country))[1], `title="Download from`)[0], fmt.Sprintf(`></span> %s</h5>`, country))[1], `<ul>`)[1], `<li><a href="`)[1], `"`)[0] mirrorLink := strings.Split(strings.Split(strings.Split(strings.Split(strings.Split(strings.Split(string(body), fmt.Sprintf(`title="%s"`, country))[1], `title="Download from`)[0], fmt.Sprintf(`></span> %s</h5>`, country))[1], `<ul>`)[1], `<li><a href="`)[1], `"`)[0]
@ -116,10 +116,10 @@ func pullArchive(url string) (isSuccessful bool, error error) {
res, err := grab.Get(".", structuredUrl) res, err := grab.Get(".", structuredUrl)
if err != nil { if err != nil {
color.Red.Println("\r ❎ Failed to download RootFS.") logger.Error("Failed to download RootFS.")
return false, err return false, err
} }
color.Bold.Println("\r ✅ Downloaded RootFS", res.Filename) logger.Info(fmt.Sprintf("Downloaded RootFS %s", res.Filename))
return true, nil return true, nil
} }

View file

@ -11,6 +11,7 @@ import (
"time" "time"
"github.com/CompeyDev/wsl-archlinux-manager/lib/core" "github.com/CompeyDev/wsl-archlinux-manager/lib/core"
logger "github.com/CompeyDev/wsl-archlinux-manager/util"
"github.com/briandowns/spinner" "github.com/briandowns/spinner"
"github.com/gookit/color" "github.com/gookit/color"
) )
@ -25,12 +26,6 @@ func main() {
} }
} }
func build() {
checks()
}
// TODO: Add colors
func checks() { func checks() {
color.Blueln("======> Pre-installation checks") color.Blueln("======> Pre-installation checks")
fmt.Println("🔃 Running checks...") fmt.Println("🔃 Running checks...")
@ -49,11 +44,11 @@ func checks() {
getAvailability, availabilityErr := exec.Command("powershell.exe", "(Get-WindowsOptionalFeature -Online -FeatureName *Subsystem*).State").Output() getAvailability, availabilityErr := exec.Command("powershell.exe", "(Get-WindowsOptionalFeature -Online -FeatureName *Subsystem*).State").Output()
if availabilityErr != nil { if availabilityErr != nil {
color.Red.Println("\r ❎ Failed to check for WSL availability.") logger.Error("Failed to check for WSL availability.")
} }
if strings.Trim(string(getAvailability), "\n\r") == "Enabled" { if strings.Trim(string(getAvailability), "\n\r") == "Enabled" {
color.Green.Println("\r ✅ WSL is enabled.") logger.Info("WSL is enabled.")
bar.Stop() bar.Stop()
bar.Prefix = " " bar.Prefix = " "
@ -64,12 +59,12 @@ func checks() {
preInstalledDistro, installedDistroErr := exec.Command("powershell.exe", "wsl").Output() preInstalledDistro, installedDistroErr := exec.Command("powershell.exe", "wsl").Output()
if installedDistroErr != nil { if installedDistroErr != nil {
color.Red.Println("\r ❎ Failed to check for preinstalled distributions.") logger.Error("Failed to check for preinstalled distributions.")
bar.Stop() bar.Stop()
} }
if strings.Contains(string(preInstalledDistro), "no installed distributions") { if strings.Contains(string(preInstalledDistro), "no installed distributions") {
color.Red.Println("\r ❎ Preinstalled distributions do exist. (Please make sure the default distribution is Debian-based)") logger.Error("Preinstalled distributions do not exist. (Please make sure the default WSL distribution is Debian-based)")
bar.Stop() bar.Stop()
} }
@ -79,10 +74,9 @@ func checks() {
bar.Suffix = " Creating install directory..." bar.Suffix = " Creating install directory..."
bar.Start() bar.Start()
time.Sleep(300000000) time.Sleep(1 * time.Second)
if homeDirErr != nil { if homeDirErr != nil {
fmt.Println("❎ Failed to initialize installation directory.") logger.Error("Failed to initialize installation directory.")
os.Exit(1)
} }
installDir := path.Join(userHomeDir, ".wslm") installDir := path.Join(userHomeDir, ".wslm")
@ -91,7 +85,7 @@ func checks() {
os.Mkdir(installDir, fs.FileMode(os.O_RDWR)) os.Mkdir(installDir, fs.FileMode(os.O_RDWR))
os.Mkdir(archDir, fs.FileMode(os.O_RDWR)) os.Mkdir(archDir, fs.FileMode(os.O_RDWR))
bar.Stop() bar.Stop()
color.Green.Print("\r ✅ Successfully initialized installation directory.") logger.Info("Successfully initialized installation directory.")
color.Bold.Println("\n✅ Initialized WSLm.") logger.Progress("Initialized WSLm.")
color.Blueln("===============================") color.Blueln("===============================")
} }

24
util/logger.go Normal file
View file

@ -0,0 +1,24 @@
package logger
import (
"os"
"github.com/gookit/color"
)
func Error(log string) {
color.Red.Println("\r ❎ ", log)
os.Exit(1)
}
func Warn(log string) {
color.Yellow.Println("\r ❎ ", log)
}
func Info(log string) {
color.Green.Println("\r ✅ ", log)
}
func Progress(log string) {
color.Bold.Println("\n✅ ", log)
}