diff options
Diffstat (limited to 'qa/qa/runtime/release.rb')
-rw-r--r-- | qa/qa/runtime/release.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/qa/qa/runtime/release.rb b/qa/qa/runtime/release.rb new file mode 100644 index 00000000000..d64b478a41a --- /dev/null +++ b/qa/qa/runtime/release.rb @@ -0,0 +1,45 @@ +module QA + module Runtime + ## + # Class that is responsible for plugging CE/EE extensions in, depending on + # environment variable GITLAB_RELEASE that should be present in the runtime + # environment. + # + # We need that to reduce the probability of conflicts when merging + # CE to EE. + # + class Release + UnspecifiedReleaseError = Class.new(StandardError) + + def initialize(version = ENV['GITLAB_RELEASE']) + @version = version.to_s.upcase + + unless %w[CE EE].include?(@version) + raise UnspecifiedReleaseError, 'GITLAB_RELEASE env not defined!' + end + + begin + require "#{version.downcase}/strategy" + rescue LoadError + # noop + end + end + + def has_strategy? + QA.const_defined?("#{@version}::Strategy") + end + + def strategy + QA.const_get("#{@version}::Strategy") + end + + def self.method_missing(name, *args) + @release ||= self.new + + if @release.has_strategy? + @release.strategy.public_send(name, *args) + end + end + end + end +end |