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([