Adding linting rules for cache value

This commit is contained in:
Don Olmstead 2015-08-07 15:21:39 -07:00 committed by Olmstead
parent 5f718691ad
commit 7189d1390e
2 changed files with 43 additions and 0 deletions

View file

@ -22,6 +22,7 @@ var lintRules = [...]lintRule{
expectTrustedPublish,
expectTrustedDeploy,
expectTrustedNotify,
expectCacheInWorkspace,
}
// Lint runs all lint rules against the Yaml Config.
@ -105,6 +106,22 @@ func expectTrustedNotify(c *common.Config) error {
return nil
}
// lint rule that fails if the cache directories are not contained
// in the workspace.
func expectCacheInWorkspace(c *common.Config) error {
for _, step := range c.Build.Cache {
cleaned := filepath.Clean(step)
if strings.Index(cleaned, "../") != -1 {
return fmt.Errorf("Cache must point to a path in the workspace")
} else if cleaned == "." {
return fmt.Errorf("Cannot cache the workspace")
}
}
return nil
}
func LintPlugins(c *common.Config, opts *Opts) error {
if len(opts.Whitelist) == 0 {
return nil

View file

@ -88,6 +88,32 @@ func Test_Linter(t *testing.T) {
g.Assert(Lint(c) == nil).IsTrue()
})
g.It("Should pass with path inside workspace", func() {
c := &common.Config{
Build: &common.Step{
Cache: []string{".git","/.git","/.git/../.git/../.git"},
},
}
g.Assert(expectCacheInWorkspace(c) == nil).IsTrue()
})
g.It("Should fail with path outside workspace", func() {
c := &common.Config{
Build: &common.Step{
Cache: []string{".git","/.git","../../.git"},
},
}
g.Assert(expectCacheInWorkspace(c) != nil).IsTrue()
})
g.It("Should fail when caching workspace directory", func() {
c := &common.Config{
Build: &common.Step{
Cache: []string{".git",".git/../"},
},
}
g.Assert(expectCacheInWorkspace(c) != nil).IsTrue()
})
})
}