Skip to content

Commit d3457c9

Browse files
committed
fix: generate also depends on generate-* targets
This also fixes a blindspot in the check-dirty target, which would miss stale artifacts if they were generated by additional "generate-*" targets. Signed-off-by: Maja Bojarska <maja.bojarska@siderolabs.com>
1 parent c1cf61e commit d3457c9

2 files changed

Lines changed: 54 additions & 2 deletions

File tree

internal/project/js/protobuf.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,15 @@ func (proto *Protobuf) CompileMakefile(output *makefile.Output) error {
7676
return nil
7777
}
7878

79-
output.Target("generate-" + proto.Name()).
79+
targetName := "generate-" + proto.Name()
80+
output.Target(targetName).
8081
Description("Generate .proto definitions.").
8182
Script("@$(MAKE) local-$@ DEST=./")
8283

84+
if output.HasTarget("generate") {
85+
output.Target("generate").Depends(targetName)
86+
}
87+
8388
return nil
8489
}
8590

@@ -194,7 +199,9 @@ func (proto *Protobuf) CompileLefthook(output *lefthook.Output) error {
194199
output.Hook(lefthook.HookGroupPreCommit).
195200
Group(lefthook.PreCommitFixStage).
196201
WithParallel(false).
197-
Job().WithName("generate " + proto.Name()).WithRun("make generate-" + proto.Name()).WithStageFixed()
202+
Job().
203+
WithName("generate " + proto.Name()).
204+
WithRun("make generate-" + proto.Name()).WithStageFixed()
198205

199206
return nil
200207
}

internal/project/js/protobuf_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,51 @@ func TestProtobufInterfaces(t *testing.T) {
2424
assert.Implements(t, (*lefthook.Compiler)(nil), new(js.Protobuf))
2525
}
2626

27+
func TestProtobufMakefileGenerateDepends(t *testing.T) {
28+
for _, tt := range []struct {
29+
name string
30+
registerCheckDirty bool
31+
wantDepends bool
32+
}{
33+
{
34+
name: "generate target depends on generate-frontend",
35+
registerCheckDirty: true,
36+
wantDepends: true,
37+
},
38+
{
39+
name: "no generate target leaves generate-frontend orphan",
40+
registerCheckDirty: false,
41+
wantDepends: false,
42+
},
43+
} {
44+
t.Run(tt.name, func(t *testing.T) {
45+
proto := js.NewProtobuf(&meta.Options{}, "frontend")
46+
proto.Specs = []js.ProtoSpec{{Source: "api.proto"}}
47+
48+
output := makefile.NewOutput()
49+
50+
if tt.registerCheckDirty {
51+
output.Target("generate")
52+
}
53+
54+
require.NoError(t, proto.CompileMakefile(output))
55+
56+
var buf bytes.Buffer
57+
58+
require.NoError(t, output.GenerateFile("Makefile", &buf))
59+
60+
rendered := buf.String()
61+
assert.Contains(t, rendered, "generate-frontend:")
62+
63+
if tt.wantDepends {
64+
assert.Contains(t, rendered, "generate: generate-frontend")
65+
} else {
66+
assert.NotContains(t, rendered, "generate:")
67+
}
68+
})
69+
}
70+
}
71+
2772
func TestProtobufLefthook(t *testing.T) {
2873
proto := js.NewProtobuf(&meta.Options{}, "frontend")
2974

0 commit comments

Comments
 (0)