Fix cache busting setup

By correctly capturing the target variable when compiling the cache buster.

Fixes #11268
This commit is contained in:
Bjørn Erik Pedersen 2023-07-19 15:37:17 +02:00
parent 5bd22ba85f
commit 6bbec90014
2 changed files with 41 additions and 8 deletions

View file

@ -333,11 +333,11 @@ func (c *CacheBuster) CompileConfig(logger loggers.Logger) error {
} }
source := c.Source source := c.Source
target := c.Target
sourceRe, err := regexp.Compile(source) sourceRe, err := regexp.Compile(source)
if err != nil { if err != nil {
return fmt.Errorf("failed to compile cache buster source %q: %w", c.Source, err) return fmt.Errorf("failed to compile cache buster source %q: %w", c.Source, err)
} }
target := c.Target
var compileErr error var compileErr error
debugl := logger.Logger().WithLevel(logg.LevelDebug).WithField(loggers.FieldNameCmd, "cachebuster") debugl := logger.Logger().WithLevel(logg.LevelDebug).WithField(loggers.FieldNameCmd, "cachebuster")
@ -353,23 +353,23 @@ func (c *CacheBuster) CompileConfig(logger loggers.Logger) error {
return nil return nil
} }
groups := m[1:] groups := m[1:]
currentTarget := target
// Replace $1, $2 etc. in target. // Replace $1, $2 etc. in target.
for i, g := range groups { for i, g := range groups {
target = strings.ReplaceAll(target, fmt.Sprintf("$%d", i+1), g) currentTarget = strings.ReplaceAll(target, fmt.Sprintf("$%d", i+1), g)
} }
targetRe, err := regexp.Compile(target) targetRe, err := regexp.Compile(currentTarget)
if err != nil { if err != nil {
compileErr = fmt.Errorf("failed to compile cache buster target %q: %w", target, err) compileErr = fmt.Errorf("failed to compile cache buster target %q: %w", currentTarget, err)
return nil return nil
} }
return func(s string) bool { return func(ss string) bool {
match = targetRe.MatchString(s) match = targetRe.MatchString(ss)
matchString := "no match" matchString := "no match"
if match { if match {
matchString = "match!" matchString = "match!"
} }
logger.Debugf("Matching %q with target %q: %s", s, target, matchString) logger.Debugf("Matching %q with target %q: %s", ss, currentTarget, matchString)
return match return match
} }

View file

@ -164,3 +164,36 @@ func TestBuildConfigCacheBusters(t *testing.T) {
c.Assert(m("json"), qt.IsTrue) c.Assert(m("json"), qt.IsTrue)
} }
func TestBuildConfigCacheBusterstTailwindSetup(t *testing.T) {
c := qt.New(t)
cfg := New()
cfg.Set("build", map[string]interface{}{
"cacheBusters": []map[string]string{
{
"source": "assets/watching/hugo_stats\\.json",
"target": "css",
},
{
"source": "(postcss|tailwind)\\.config\\.js",
"target": "css",
},
{
"source": "assets/.*\\.(js|ts|jsx|tsx)",
"target": "js",
},
{
"source": "assets/.*\\.(.*)$",
"target": "$1",
},
},
})
conf := DecodeBuildConfig(cfg)
l := loggers.NewDefault()
c.Assert(conf.CompileConfig(l), qt.IsNil)
m, err := conf.MatchCacheBuster(l, "assets/watching/hugo_stats.json")
c.Assert(err, qt.IsNil)
c.Assert(m("css"), qt.IsTrue)
}