diff --git a/public/templates/header.tpl b/public/templates/header.tpl
index bd7a330b6c..17d1f98e6d 100644
--- a/public/templates/header.tpl
+++ b/public/templates/header.tpl
@@ -6,7 +6,7 @@
-
+
{link_tags}
diff --git a/src/meta.js b/src/meta.js
index f0573d5d64..e8711eda41 100644
--- a/src/meta.js
+++ b/src/meta.js
@@ -236,11 +236,18 @@ var fs = require('fs'),
callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
} else {
Meta.js.minify(function () {
- callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
+ callback(null, [
+ path.relative(path.join(__dirname, '../public'), Meta.js.minFile) + (meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : '')
+ ]);
});
}
});
} else {
+ if (meta.config['cache-buster']) {
+ scripts = scripts.map(function(script) {
+ return script + '?v=' + meta.config['cache-buster'];
+ });
+ }
callback(null, scripts);
}
});
diff --git a/src/webserver.js b/src/webserver.js
index f2a1c4f858..9ed1323ba8 100644
--- a/src/webserver.js
+++ b/src/webserver.js
@@ -85,7 +85,7 @@ var path = require('path'),
linkTags = utils.buildLinkTags(defaultLinkTags.concat(options.linkTags || [])),
templateValues = {
cssSrc: meta.config['theme:src'] || nconf.get('relative_path') + '/vendor/bootstrap/css/bootstrap.min.css',
- pluginCSS: plugins.cssFiles.map(function(file) { return { path: file }; }),
+ pluginCSS: plugins.cssFiles.map(function(file) { return { path: file + (meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : '') }; }),
title: meta.config.title || '',
description: meta.config.description || '',
'brand:logo': meta.config['brand:logo'] || '',
@@ -97,7 +97,8 @@ var path = require('path'),
meta_tags: metaString,
link_tags: linkTags,
clientScripts: clientScripts,
- navigation: custom_header.navigation
+ navigation: custom_header.navigation,
+ 'cache-buster': meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : ''
};
var uid = '0';
@@ -124,6 +125,23 @@ var path = require('path'),
app.enable('minification');
}
+ // Configure cache-buster timestamp
+ require('child_process').exec('git describe --tags', {
+ cwd: path.join(__dirname, '../')
+ }, function(err, stdOut) {
+ if (!err) {
+ meta.config['cache-buster'] = stdOut.trim();
+
+ if (global.env === 'development') {
+ winston.info('[init] Cache buster value set to: ' + stdOut);
+ }
+ } else {
+ if (global.env === 'development') {
+ winston.warn('[init] Cache buster not set');
+ }
+ }
+ });
+
// Middlewares
app.configure(function() {
async.series([