assayo/main.go
2025-05-25 15:56:24 +03:00

109 lines
2.7 KiB
Go

package main
import (
"fmt"
"os"
"os/exec"
"path/filepath"
)
func showMessage(message string) {
for _, arg := range os.Args {
if arg == "--debug" {
fmt.Println("Assayo: " + message)
break
}
}
}
func checkDirExists(path string) bool {
if _, err := os.Stat(path); os.IsNotExist(err) {
return false
}
return true
}
func getSaveLogCommand() string {
raw := "--raw --numstat"
for _, arg := range os.Args {
if arg == "--no-file" {
raw = ""
break
}
}
return fmt.Sprintf("git --no-pager log %s --oneline --all --reverse --date=iso-strict --pretty=format:\"%%ad>%%aN>%%aE>%%s\"", raw)
}
func getCloneRepoCommand() string {
return "git clone https://github.com/bakhirev/assayo.git && mv ./assayo ./source && mv ./source/build ./assayo && rm -r -f ./source"
}
func Assayo() error {
// folder, when library was saved
sourceDir := "../pkg/mod/github.com/bakhirev/assayo@v0.0.1/"
sourcePath := filepath.Dir(os.Args[0])
// folder, when user run library
distDir := "assayo"
distPath, _ := os.Getwd()
home := filepath.Join(sourcePath, sourceDir)
source := filepath.Join(home, "./assayo")
target := filepath.Join(distPath, distDir)
err := os.Chdir(home)
if err != nil {
fmt.Println("Cant found home dir:", err)
return err
}
// 0. Clone actual report from GIT
if checkDirExists(source) {
showMessage("actual report template already exist")
} else {
commandStr := getCloneRepoCommand()
command := exec.Command("bash", "-c", commandStr)
if err := command.Run(); err != nil {
fmt.Println(commandStr)
return err
}
}
// 1. Copy folder ./assayo from package to ./assayo in project
if checkDirExists(target) {
showMessage("directory with HTML report already exist")
} else {
command := exec.Command("cp", "-r", source, target)
if err := command.Run(); err != nil {
fmt.Println("Error copying directory:", err)
return err
}
}
showMessage("directory with HTML report was created")
// 2. Run 'git log' and save output in string
showMessage("reading git log was started")
os.Chdir(distPath)
commandStr := getSaveLogCommand()
command := exec.Command("bash", "-c", commandStr)
outputBytes, err := command.Output()
if err != nil {
fmt.Println("Error saving git log:", err)
return err
}
showMessage("the file with git log was saved")
// 3. Replace symbols in ./assayo/log.txt
newContent := string(outputBytes)
fileName := filepath.Join(target, "log.txt")
if err := os.WriteFile(fileName, []byte("R(f`"+newContent+"`);"), 0644); err != nil {
fmt.Println("Error writing file:", err)
return err
}
return nil
}
func main() {
Assayo()
}