From 8bcb027efc780250578ffdff93362ee092d3caa8 Mon Sep 17 00:00:00 2001 From: Sytze Harkema Date: Mon, 21 Feb 2022 09:44:50 +0100 Subject: [PATCH] feat: remove go dependency for every build step --- Makefile | 1 + sg/generate.go | 3 ++- sg/makefile.go | 13 ++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 9d4fd0cf..414395b0 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,7 @@ $(sagefile): @cd .sage && go mod tidy && go run . .PHONY: sage +sage: $(shell git clean -fxq $(sagefile)) sage: $(sagefile) .PHONY: update-sage diff --git a/sg/generate.go b/sg/generate.go index be477167..99697361 100644 --- a/sg/generate.go +++ b/sg/generate.go @@ -14,6 +14,7 @@ import ( // GenerateMakefiles defines which Makefiles should be generated. func GenerateMakefiles(mks ...Makefile) { ctx := WithLogger(context.Background(), NewLogger("sage")) + Logger(ctx).Println("building binary and generating Makefiles...") if len(mks) == 0 { panic("no makefiles to generate, see https://github.com/einride/sage#readme for more info") } @@ -67,7 +68,7 @@ func GenerateMakefiles(mks ...Makefile) { mk := codegen.NewMakefile(codegen.FileConfig{ GeneratedBy: "go.einride.tech/sage", }) - if err := generateMakefile(mk, pkg, v, mks...); err != nil { + if err := generateMakefile(ctx, mk, pkg, v, mks...); err != nil { panic(err) } if err := os.WriteFile(v.Path, mk.RawContent(), 0o600); err != nil { diff --git a/sg/makefile.go b/sg/makefile.go index d9cc4fef..46cb4c74 100644 --- a/sg/makefile.go +++ b/sg/makefile.go @@ -1,6 +1,7 @@ package sg import ( + "context" "fmt" "go/ast" "go/doc" @@ -43,7 +44,7 @@ func (m Makefile) defaultTargetName() string { return result } -func generateMakefile(g *codegen.File, pkg *doc.Package, mk Makefile, mks ...Makefile) error { +func generateMakefile(ctx context.Context, g *codegen.File, pkg *doc.Package, mk Makefile, mks ...Makefile) error { includePath, err := filepath.Rel(filepath.Dir(mk.Path), FromSageDir()) if err != nil { return err @@ -56,11 +57,17 @@ func generateMakefile(g *codegen.File, pkg *doc.Package, mk Makefile, mks ...Mak g.P() g.P("sagefile := ", filepath.Join(includePath, binDir, sageFileBinary)) g.P() - g.P(".PHONY: $(sagefile)") - g.P("$(sagefile):") + + dependencies := fmt.Sprintf(" %s/go.mod %s/*.go", includePath, includePath) + if strings.TrimSpace(Output(Command(ctx, "go", "list", "-m"))) == "go.einride.tech/sage" { + g.P(".PHONY: $(sagefile)") + dependencies = "" + } + g.P("$(sagefile):", dependencies) g.P("\t@cd ", includePath, " && go mod tidy && go run .") g.P() g.P(".PHONY: sage") + g.P("sage: $(shell git clean -fxq $(sagefile))") g.P("sage: $(sagefile)") g.P() g.P(".PHONY: update-sage")