Skip to content

Commit 919245a

Browse files
committed
feat(lint): add rule to check for sccache/enable users
This pipeline is intended for local devel use only. Using it in elastic will, at best, slow things down by caching things unnecessarily. There may be other side-effects as well - let's just block them. Signed-off-by: dann frazier <dann.frazier@chainguard.dev>
1 parent 4be5d20 commit 919245a

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

pkg/lint/rules.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ var (
7676
)
7777

7878
const gitCheckout = "git-checkout"
79+
const sccacheEnable = "sccache/enable"
7980

8081
// AllRules is a list of all available rules to evaluate.
8182
var AllRules = func(l *Linter) Rules { //nolint:gocyclo
@@ -527,6 +528,17 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo
527528
return nil
528529
},
529530
},
531+
{
532+
Name: "sccache-enabled",
533+
Description: "sccache/enable is for local devel-use only",
534+
Severity: SeverityError,
535+
LintFunc: func(c config.Configuration) error {
536+
if anyPipelineUses(c, sccacheEnable) {
537+
return fmt.Errorf("scacche/enable pipeline exists")
538+
}
539+
return nil
540+
},
541+
},
530542
{
531543
Name: "valid-update-schedule",
532544
Description: "update schedule config should contain a valid period",
@@ -630,6 +642,37 @@ func pickPipelinesUsing(uses string, pipelines []config.Pipeline) []*config.Pipe
630642
return retval
631643
}
632644

645+
func anyPipelineUses(c config.Configuration, uses string) bool {
646+
for index := range len(c.Pipeline) {
647+
if c.Pipeline[index].Uses == uses {
648+
return true
649+
}
650+
}
651+
if c.Test != nil {
652+
for index := range len(c.Test.Pipeline) {
653+
if c.Test.Pipeline[index].Uses == uses {
654+
return true
655+
}
656+
}
657+
}
658+
for spindex := range c.Subpackages {
659+
sp := c.Subpackages[spindex]
660+
for index := range len(sp.Pipeline) {
661+
if sp.Pipeline[index].Uses == uses {
662+
return true
663+
}
664+
}
665+
if sp.Test != nil {
666+
for index := range len(sp.Test.Pipeline) {
667+
if sp.Test.Pipeline[index].Uses == uses {
668+
return true
669+
}
670+
}
671+
}
672+
}
673+
return false
674+
}
675+
633676
func containsKey(parentNode *yaml.Node, key string) error {
634677
it := yit.FromNode(parentNode).
635678
ValuesForMap(yit.WithValue(key), yit.All)

0 commit comments

Comments
 (0)