e7b5830a20
* Fix pipelines and makefile to build multi-product architecture repositories Signed-off-by: Mustafa Kara <mustafa.kara@mattermost.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com> Co-authored-by: wiggin77 <wiggin77@warpmail.net>
101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
filename = "go.work"
|
|
)
|
|
|
|
func main() {
|
|
force := false
|
|
if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "-f" {
|
|
force = true
|
|
}
|
|
|
|
if _, err := os.Stat(filename); err == nil && !force {
|
|
// go.work already exists and force flag not specified
|
|
fmt.Fprintln(os.Stdout, "go.work already exists and -f (force) not specified; nothing to do.")
|
|
os.Exit(0)
|
|
}
|
|
|
|
f, err := os.Create(filename)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error creating %s: %s", filename, err.Error())
|
|
os.Exit(-1)
|
|
}
|
|
defer f.Close()
|
|
|
|
isCI := isCI()
|
|
content := makeGoWork(isCI)
|
|
|
|
_, err = f.WriteString(content)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error writing %s: %s", filename, err.Error())
|
|
os.Exit(-1)
|
|
}
|
|
|
|
fmt.Fprintln(os.Stdout, "go.work written successfully.")
|
|
fmt.Fprintln(os.Stdout, content)
|
|
}
|
|
|
|
func makeGoWork(ci bool) string {
|
|
repos := map[string]string{
|
|
"../mattermost-server": "EXCLUDE_SERVER",
|
|
"../enterprise": "EXCLUDE_ENTERPRISE",
|
|
"./mattermost-plugin": "EXCLUDE_PLUGIN",
|
|
}
|
|
|
|
var b strings.Builder
|
|
|
|
b.WriteString("go 1.18\n\n")
|
|
b.WriteString("use ./server\n")
|
|
|
|
for repo, envVarName := range repos {
|
|
if !isEnvVarTrue(envVarName, true) {
|
|
b.WriteString(fmt.Sprintf("use %s\n", repo))
|
|
}
|
|
}
|
|
|
|
if ci {
|
|
b.WriteString("use ./linux\n")
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
func isCI() bool {
|
|
vars := map[string]bool{
|
|
// var name: must_be_true (false means being defined is enough)
|
|
"CIRCLECI": true,
|
|
"GITHUB_ACTIONS": true,
|
|
"GITLAB_CI": false,
|
|
"TRAVIS": true,
|
|
}
|
|
|
|
for name, mustBeTrue := range vars {
|
|
if isEnvVarTrue(name, mustBeTrue) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func isEnvVarTrue(name string, mustBeTrue bool) bool {
|
|
val, ok := os.LookupEnv(name)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
if !mustBeTrue {
|
|
return true
|
|
}
|
|
|
|
switch strings.ToLower(val) {
|
|
case "t", "1", "true", "y", "yes":
|
|
return true
|
|
}
|
|
return false
|
|
}
|