122 lines
3.1 KiB
Go
122 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.einride.tech/sage/sg"
|
|
"go.einride.tech/sage/tools/sgconvco"
|
|
"go.einride.tech/sage/tools/sggit"
|
|
"go.einride.tech/sage/tools/sggo"
|
|
"go.einride.tech/sage/tools/sggolangcilint"
|
|
"go.einride.tech/sage/tools/sggoreleaser"
|
|
"go.einride.tech/sage/tools/sggosemanticrelease"
|
|
"go.einride.tech/sage/tools/sgmdformat"
|
|
"go.einride.tech/sage/tools/sgyamlfmt"
|
|
)
|
|
|
|
func main() {
|
|
sg.GenerateMakefiles(
|
|
sg.Makefile{
|
|
Path: sg.FromGitRoot("Makefile"),
|
|
DefaultTarget: All,
|
|
},
|
|
sg.Makefile{
|
|
Namespace: Proto{},
|
|
DefaultTarget: Proto.All,
|
|
Path: sg.FromGitRoot("examples", "proto", "Makefile"),
|
|
},
|
|
)
|
|
}
|
|
|
|
func All(ctx context.Context) error {
|
|
sg.Deps(ctx, ConvcoCheck, GoLint, GoTest, FormatMarkdown, FormatYAML)
|
|
sg.SerialDeps(ctx, Proto.All, TypescriptLint)
|
|
sg.SerialDeps(ctx, GoModTidy, GitVerifyNoDiff)
|
|
return nil
|
|
}
|
|
|
|
func FormatYAML(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("formatting YAML files...")
|
|
return sgyamlfmt.Run(ctx)
|
|
}
|
|
|
|
func GoModTidy(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("tidying Go module files...")
|
|
return sg.Command(ctx, "go", "mod", "tidy", "-v").Run()
|
|
}
|
|
|
|
func GoTest(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("running Go tests...")
|
|
return sggo.TestCommand(ctx).Run()
|
|
}
|
|
|
|
func GoLint(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("linting Go files...")
|
|
return sggolangcilint.Run(ctx)
|
|
}
|
|
|
|
func GoLintFix(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("fixing Go files...")
|
|
return sggolangcilint.Fix(ctx)
|
|
}
|
|
|
|
func FormatMarkdown(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("formatting Markdown files...")
|
|
return sgmdformat.Command(ctx).Run()
|
|
}
|
|
|
|
func ConvcoCheck(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("checking git commits...")
|
|
return sgconvco.Command(ctx, "check", "origin/master..HEAD").Run()
|
|
}
|
|
|
|
func GitVerifyNoDiff(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("verifying that git has no diff...")
|
|
return sggit.VerifyNoDiff(ctx)
|
|
}
|
|
|
|
func TypescriptLint(ctx context.Context) error {
|
|
sg.Logger(ctx).Println("linting typescript files...")
|
|
return eslintCommand(
|
|
ctx,
|
|
"--config",
|
|
sg.FromGitRoot(".eslintrc.js"),
|
|
"--quiet",
|
|
"examples/proto/gen/typescript/**/*.ts",
|
|
).Run()
|
|
}
|
|
|
|
func SemanticRelease(ctx context.Context, repo string, dry bool) error {
|
|
sg.Logger(ctx).Println("triggering release...")
|
|
args := []string{
|
|
"--allow-initial-development-versions",
|
|
"--allow-no-changes",
|
|
"--ci-condition=default",
|
|
"--provider=github",
|
|
"--provider-opt=slug=" + repo,
|
|
}
|
|
if dry {
|
|
args = append(args, "--dry")
|
|
}
|
|
return sggosemanticrelease.Command(ctx, args...).Run()
|
|
}
|
|
|
|
func GoReleaser(ctx context.Context, snapshot bool) error {
|
|
sg.Logger(ctx).Println("building Go binary releases...")
|
|
if err := sggit.Command(ctx, "fetch", "--force", "--tags").Run(); err != nil {
|
|
return err
|
|
}
|
|
args := []string{
|
|
"release",
|
|
"--clean",
|
|
}
|
|
if len(sggit.Tags(ctx)) == 0 && !snapshot {
|
|
sg.Logger(ctx).Printf("no git tag found for %s, forcing snapshot mode", sggit.ShortSHA(ctx))
|
|
snapshot = true
|
|
}
|
|
if snapshot {
|
|
args = append(args, "--snapshot")
|
|
}
|
|
return sggoreleaser.Command(ctx, args...).Run()
|
|
}
|