summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/auth/current_user_mode.rb15
-rw-r--r--lib/tasks/gitlab/assets.rake75
2 files changed, 76 insertions, 14 deletions
diff --git a/lib/gitlab/auth/current_user_mode.rb b/lib/gitlab/auth/current_user_mode.rb
index 06ae4d81870..0f327a39f61 100644
--- a/lib/gitlab/auth/current_user_mode.rb
+++ b/lib/gitlab/auth/current_user_mode.rb
@@ -77,7 +77,7 @@ module Gitlab
return false unless user
Gitlab::SafeRequestStore.fetch(admin_mode_rs_key) do
- user.admin? && any_session_with_admin_mode?
+ user.admin? && session_with_admin_mode?
end
end
@@ -136,19 +136,10 @@ module Gitlab
@current_session ||= Gitlab::NamespacedSessionStore.new(SESSION_STORE_KEY)
end
- def any_session_with_admin_mode?
+ def session_with_admin_mode?
return true if bypass_session?
- return true if current_session_data.initiated? && current_session_data[ADMIN_MODE_START_TIME_KEY].to_i > MAX_ADMIN_MODE_TIME.ago.to_i
- all_sessions.any? do |session|
- session[ADMIN_MODE_START_TIME_KEY].to_i > MAX_ADMIN_MODE_TIME.ago.to_i
- end
- end
-
- def all_sessions
- @all_sessions ||= ActiveSession.list_sessions(user).lazy.map do |session|
- Gitlab::NamespacedSessionStore.new(SESSION_STORE_KEY, session.with_indifferent_access )
- end
+ current_session_data.initiated? && current_session_data[ADMIN_MODE_START_TIME_KEY].to_i > MAX_ADMIN_MODE_TIME.ago.to_i
end
def admin_mode_requested_in_grace_period?
diff --git a/lib/tasks/gitlab/assets.rake b/lib/tasks/gitlab/assets.rake
index b398bbe403f..69a3526b872 100644
--- a/lib/tasks/gitlab/assets.rake
+++ b/lib/tasks/gitlab/assets.rake
@@ -1,3 +1,48 @@
+# frozen_string_literal: true
+
+require 'fileutils'
+
+module Tasks
+ module Gitlab
+ module Assets
+ FOSS_ASSET_FOLDERS = %w[app/assets app/views fixtures/emojis vendor/assets/javascripts].freeze
+ EE_ASSET_FOLDERS = %w[ee/app/assets ee/app/views].freeze
+ JS_ASSET_PATTERNS = %w[*.js config/**/*.js].freeze
+ JS_ASSET_FILES = %w[package.json yarn.lock].freeze
+ MASTER_MD5_HASH_FILE = 'master-assets-hash.txt'
+ HEAD_MD5_HASH_FILE = 'assets-hash.txt'
+ PUBLIC_ASSETS_WEBPACK_DIR = 'public/assets/webpack'
+
+ def self.md5_of_assets_impacting_webpack_compilation
+ start_time = Time.now
+ asset_files = assets_impacting_webpack_compilation
+ puts "Generating the MD5 hash for #{assets_impacting_webpack_compilation.size} Webpack-related assets..."
+
+ asset_file_md5s = asset_files.map do |asset_file|
+ Digest::MD5.file(asset_file).hexdigest
+ end
+
+ Digest::MD5.hexdigest(asset_file_md5s.join).tap { |md5| puts "=> MD5 generated in #{Time.now - start_time}: #{md5}" }
+ end
+
+ def self.assets_impacting_webpack_compilation
+ assets_folders = FOSS_ASSET_FOLDERS
+ assets_folders += EE_ASSET_FOLDERS if ::Gitlab.ee?
+
+ asset_files = Dir.glob(JS_ASSET_PATTERNS)
+ asset_files += JS_ASSET_FILES
+
+ assets_folders.each do |folder|
+ asset_files.concat(Dir.glob(["#{folder}/**/*.*"]))
+ end
+
+ asset_files
+ end
+ private_class_method :assets_impacting_webpack_compilation
+ end
+ end
+end
+
namespace :gitlab do
namespace :assets do
desc 'GitLab | Assets | Compile all frontend assets'
@@ -8,9 +53,35 @@ namespace :gitlab do
yarn:check
gettext:po_to_json
rake:assets:precompile
- webpack:compile
+ gitlab:assets:compile_webpack_if_needed
gitlab:assets:fix_urls
- ].each(&Gitlab::TaskHelpers.method(:invoke_and_time_task))
+ ].each(&::Gitlab::TaskHelpers.method(:invoke_and_time_task))
+ end
+
+ desc 'GitLab | Assets | Compile all Webpack assets'
+ task :compile_webpack_if_needed do
+ FileUtils.mv(Tasks::Gitlab::Assets::HEAD_MD5_HASH_FILE, Tasks::Gitlab::Assets::MASTER_MD5_HASH_FILE, force: true)
+
+ master_assets_md5 =
+ if File.exist?(Tasks::Gitlab::Assets::MASTER_MD5_HASH_FILE)
+ File.read(Tasks::Gitlab::Assets::MASTER_MD5_HASH_FILE)
+ else
+ 'missing!'
+ end
+
+ head_assets_md5 = Tasks::Gitlab::Assets.md5_of_assets_impacting_webpack_compilation.tap do |md5|
+ File.write(Tasks::Gitlab::Assets::HEAD_MD5_HASH_FILE, md5)
+ end
+
+ puts "Webpack assets MD5 for `master`: #{master_assets_md5}"
+ puts "Webpack assets MD5 for `HEAD`: #{head_assets_md5}"
+
+ public_assets_webpack_dir_exists = Dir.exist?(Tasks::Gitlab::Assets::PUBLIC_ASSETS_WEBPACK_DIR)
+
+ if head_assets_md5 != master_assets_md5 || !public_assets_webpack_dir_exists
+ FileUtils.rm_r(Tasks::Gitlab::Assets::PUBLIC_ASSETS_WEBPACK_DIR) if public_assets_webpack_dir_exists
+ Rake::Task['webpack:compile'].invoke
+ end
end
desc 'GitLab | Assets | Clean up old compiled frontend assets'