summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-03-04 12:18:47 +0000
committerRémy Coutable <remy@rymai.me>2016-03-04 12:18:47 +0000
commitb763c65eff0412051b29d7ea3290b1a12d575c53 (patch)
treee708bbf6f121ffdde6ddcca37103b8df9c7602e1
parentf8c4dc97230c520df077c1274fd8d88680da5242 (diff)
parent0196c949f7f3ebbdfad2dff7f497635fdfeddccf (diff)
downloadgitlab-ce-b763c65eff0412051b29d7ea3290b1a12d575c53.tar.gz
Merge branch 'fix/invalidate-builds-badge-cache' into 'master'
Invalidate cache for builds badge This fixes cache issue with badges (we should not cache badge images). Closes #13982 See merge request !3086
-rw-r--r--CHANGELOG3
-rw-r--r--app/controllers/projects/badges_controller.rb13
-rw-r--r--features/project/badges/build.feature5
-rw-r--r--features/steps/project/badges/build.rb4
4 files changed, 25 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index d61c5e74f3a..1dc6f6f6874 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -13,6 +13,9 @@ v 8.6.0 (unreleased)
- Don't show Issues/MRs from archived projects in Groups view
- Increase the notes polling timeout over time (Roberto Dip)
+v 8.5.4 (unreleased)
+ - Do not cache requests for badges (including builds badge)
+
v 8.5.3
- Flush repository caches before renaming projects
diff --git a/app/controllers/projects/badges_controller.rb b/app/controllers/projects/badges_controller.rb
index a4dd94b941c..dc9c96df003 100644
--- a/app/controllers/projects/badges_controller.rb
+++ b/app/controllers/projects/badges_controller.rb
@@ -1,4 +1,6 @@
class Projects::BadgesController < Projects::ApplicationController
+ before_action :set_no_cache
+
def build
respond_to do |format|
format.html { render_404 }
@@ -8,4 +10,15 @@ class Projects::BadgesController < Projects::ApplicationController
end
end
end
+
+ private
+
+ def set_no_cache
+ expires_now
+
+ # Add some deprecated headers for older agents
+ #
+ response.headers['Pragma'] = 'no-cache'
+ response.headers['Expires'] = 'Fri, 01 Jan 1990 00:00:00 GMT'
+ end
end
diff --git a/features/project/badges/build.feature b/features/project/badges/build.feature
index 9417f62d680..bcf80ed620e 100644
--- a/features/project/badges/build.feature
+++ b/features/project/badges/build.feature
@@ -20,3 +20,8 @@ Feature: Project Badges Build
And project has another build that is running
When I display builds badge for a master branch
Then I should see a build running badge
+
+ Scenario: I want to see a fresh badge on each request
+ Given recent build is successful
+ When I display builds badge for a master branch
+ Then I should see a badge that has not been cached
diff --git a/features/steps/project/badges/build.rb b/features/steps/project/badges/build.rb
index cbfc35bed65..47540f356e9 100644
--- a/features/steps/project/badges/build.rb
+++ b/features/steps/project/badges/build.rb
@@ -20,6 +20,10 @@ class Spinach::Features::ProjectBadgesBuild < Spinach::FeatureSteps
expect_badge('running')
end
+ step 'I should see a badge that has not been cached' do
+ expect(page.response_headers).to include('Cache-Control' => 'no-cache')
+ end
+
def expect_badge(status)
svg = Nokogiri::XML.parse(page.body)
expect(page.response_headers).to include('Content-Type' => 'image/svg+xml')