feat: repo health check (#16) #17
|
@ -4,6 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/pkg/healthcheck"
|
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/pkg/healthcheck"
|
||||||
|
@ -28,6 +29,13 @@ func (m *multiStringValue) String() string {
|
||||||
return fmt.Sprintf("%v", *m)
|
return fmt.Sprintf("%v", *m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setupSlog() {
|
||||||
|
opts := &slog.HandlerOptions{}
|
||||||
|
handler := slog.NewTextHandler(os.Stderr, opts)
|
||||||
|
logger := slog.New(handler)
|
||||||
|
slog.SetDefault(logger)
|
||||||
|
}
|
||||||
|
|
||||||
// Generally, err is used for runtime errors, and checkRes is used for the result of the checks.
|
// Generally, err is used for runtime errors, and checkRes is used for the result of the checks.
|
||||||
func main() {
|
func main() {
|
||||||
var info []healthcheck.CheckStage
|
var info []healthcheck.CheckStage
|
||||||
|
@ -45,7 +53,7 @@ func main() {
|
||||||
parseMultiValueFlag(&metaFile, "meta", "")
|
parseMultiValueFlag(&metaFile, "meta", "")
|
||||||
parseMultiValueFlag(&releaseTags, "releaseTags", "")
|
parseMultiValueFlag(&releaseTags, "releaseTags", "")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
setupSlog()
|
||||||
tmp = healthcheck.RepoSize()
|
tmp = healthcheck.RepoSize()
|
||||||
info = append(info, tmp)
|
info = append(info, tmp)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
package healthcheck
|
package healthcheck
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// "encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage"
|
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage"
|
||||||
// "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/pkg/healthcheck"
|
|
||||||
"github.com/criyle/go-judge/envexec"
|
"github.com/criyle/go-judge/envexec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package healthcheck
|
package healthcheck
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"log/slog"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ func NonAsciiMsg(root string) (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error openning git repo%w", err)
|
slog.Error("openning git repo", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@ func NonAsciiMsg(root string) (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error getting reference%w", err)
|
slog.Error("getting reference", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
commits, err := repo.Log(&git.LogOptions{From: ref.Hash()})
|
commits, err := repo.Log(&git.LogOptions{From: ref.Hash()})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error getting commits%w", err)
|
slog.Error("getting commits", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ func NonAsciiMsg(root string) (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error converting log to string%w", err)
|
slog.Error("converting log to string", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package healthcheck
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
@ -67,7 +68,7 @@ func ForbiddenCheck(rootDir string, regexList []string, repo string, droneBranch
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = err
|
slog.Error("get forbiddens", "error", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package healthcheck
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -70,7 +71,7 @@ func MetaCheck(rootDir string, fileList []string) (jsonOut CheckStage) {
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = err
|
slog.Error("get metas", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package healthcheck
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -71,7 +72,7 @@ func NonAsciiFiles(root string) (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = err
|
slog.Error("get non-ascii", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package healthcheck
|
package healthcheck
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"log/slog"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -24,7 +24,7 @@ func RepoSize() (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error running git command:%w", err)
|
slog.Error("running git command:", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ func RepoSize() (jsonOut CheckStage) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
jsonOut.StdOut += "Failed"
|
jsonOut.StdOut += "Failed"
|
||||||
jsonOut.ExitCode = 1
|
jsonOut.ExitCode = 1
|
||||||
jsonOut.ErrorLog = fmt.Errorf("Error running git command:%w", err)
|
slog.Error("running git command:", "err", err)
|
||||||
return jsonOut
|
return jsonOut
|
||||||
}
|
}
|
||||||
sum += size
|
sum += size
|
||||||
|
|
|
@ -8,11 +8,10 @@ import (
|
||||||
// For ExitCode, see https://focs.ji.sjtu.edu.cn/git/TAs/resources/src/branch/drone/dronelib.checks
|
// For ExitCode, see https://focs.ji.sjtu.edu.cn/git/TAs/resources/src/branch/drone/dronelib.checks
|
||||||
// 1 for unrecoverable error and 0 for succeses
|
// 1 for unrecoverable error and 0 for succeses
|
||||||
type CheckStage struct {
|
type CheckStage struct {
|
||||||
Name string `json:"name of check"`
|
Name string `json:"name"`
|
||||||
StdOut string `json:"stdout"`
|
StdOut string `json:"stdout"`
|
||||||
ExitCode int `json:"exit code"`
|
ExitCode int `json:"exit code"`
|
||||||
StdErr string `json:"stderr"`
|
StdErr string `json:"stderr"`
|
||||||
ErrorLog error `json:"errorLog"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// addExt appends the specified extension to each file name in the given fileList.
|
// addExt appends the specified extension to each file name in the given fileList.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user