57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package common
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
type AutogitConfig struct {
|
|
Workflows []string // [pr, direct, test]
|
|
Organization string
|
|
GitProjectName string // Organization/GitProjectName.git is PrjGit
|
|
Branch string // branch name of PkgGit that aligns with PrjGit submodules
|
|
}
|
|
|
|
func ReadWorkflowConfigs(reader io.Reader) ([]*AutogitConfig, error) {
|
|
data, err := io.ReadAll(reader)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error reading config file. err: %w", err)
|
|
}
|
|
|
|
var config []*AutogitConfig
|
|
if err = json.Unmarshal(data, &config); err != nil {
|
|
return nil, fmt.Errorf("Error parsing config file. err: %w", err)
|
|
}
|
|
|
|
availableWorkflows := []string{"pr", "direct", "test"}
|
|
for _, workflow := range config {
|
|
for _, w := range workflow.Workflows {
|
|
if !slices.Contains(availableWorkflows, w) {
|
|
return nil, fmt.Errorf(
|
|
"Invalid Workflow '%s'. Only available workflows are: %s",
|
|
w, strings.Join(availableWorkflows, " "),
|
|
)
|
|
}
|
|
}
|
|
if len(workflow.GitProjectName) == 0 {
|
|
workflow.GitProjectName = DefaultGitPrj
|
|
}
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
func ReadWorkflowConfigsFile(filename string) ([]*AutogitConfig, error) {
|
|
file, err := os.Open(filename)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Cannot open config file for reading. err: %w", err)
|
|
}
|
|
defer file.Close()
|
|
|
|
return ReadWorkflowConfigs(file)
|
|
}
|