JOJ3/cmd/joj3/conf.go
张泊明518370910136 7c3b9d9acf
All checks were successful
continuous-integration/drone/push Build is passing
feat: test with submodules
2024-04-03 19:19:54 -04:00

97 lines
1.8 KiB
Go

package main
import (
"log/slog"
"os"
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage"
"github.com/go-git/go-git/v5"
"github.com/koding/multiconfig"
)
type Conf struct {
LogLevel int `default:"0"`
OutputPath string `default:"joj3_result.json"`
SkipGitea bool
GiteaUrl string `default:"https://focs.ji.sjtu.edu.cn/git"`
GiteaToken string `default:""`
GiteaOwner string `default:"tests"`
GiteaRepo string `default:"joj3-dev"`
Stages []struct {
Name string
Executor struct {
Name string
With struct {
Default stage.Cmd
Cases []OptionalCmd
}
}
Parser struct {
Name string
With interface{}
}
}
}
type OptionalCmd struct {
Args *[]string
Env *[]string
Stdin *stage.CmdFile
Stdout *stage.CmdFile
Stderr *stage.CmdFile
CPULimit *uint64
RealCPULimit *uint64
ClockLimit *uint64
MemoryLimit *uint64
StackLimit *uint64
ProcLimit *uint64
CPURateLimit *uint64
CPUSetLimit *string
CopyIn *map[string]stage.CmdFile
CopyInCached *map[string]string
CopyInCwd *bool
CopyOut *[]string
CopyOutCached *[]string
CopyOutMax *uint64
CopyOutDir *string
TTY *bool
StrictMemoryLimit *bool
DataSegmentLimit *bool
AddressSpaceLimit *bool
}
func parseConfFile(path string) Conf {
m := multiconfig.NewWithPath(path)
conf := Conf{}
err := m.Load(&conf)
if err != nil {
slog.Error("parse stages conf", "error", err)
os.Exit(1)
}
return conf
}
func commitMsgToConf() (conf Conf, err error) {
r, err := git.PlainOpen(".")
if err != nil {
return
}
ref, err := r.Head()
if err != nil {
return
}
commit, err := r.CommitObject(ref.Hash())
if err != nil {
return
}
msg := commit.Message
slog.Debug("commit msg to conf", "msg", msg)
// TODO: parse msg to conf name
conf = parseConfFile("conf.toml")
return
}