focalboard/build/gowork/main.go
Mustafa Kara e7b5830a20
Modify go.work file to include multi-product architecture repositories by default (#3516)
* 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>
2022-08-03 12:28:07 +03:00

102 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
}