diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index 1ffbd0020bb55e1da78c737373bf918db6805f30..40d1b475013521cc4a4aa7e8799eb6083290ea24 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -17,9 +17,7 @@ module Ci
 
     def initialize(config, path = nil)
       @ci_config = Gitlab::Ci::Config.new(config)
-      @config = @ci_config.to_hash
-
-      @path = path
+      @config, @path = @ci_config.to_hash, path
 
       unless @ci_config.valid?
         raise ValidationError, @ci_config.errors.first
diff --git a/lib/gitlab/ci/config/node/global.rb b/lib/gitlab/ci/config/node/global.rb
index a2649e2c90569ea9cd05925e0b46ac3559ab2d4c..f59a967b1efef7c004b88492d98982634a980741 100644
--- a/lib/gitlab/ci/config/node/global.rb
+++ b/lib/gitlab/ci/config/node/global.rb
@@ -50,7 +50,7 @@ module Gitlab
             compose_jobs!
           end
 
-          def compose_stages!
+          def compose_jobs!
             factory = Node::Factory.new(Node::Jobs)
             factory.value(@config.except(*nodes.keys))
             factory.with(key: :jobs, parent: self, global: self)
@@ -59,7 +59,14 @@ module Gitlab
             @entries[:jobs] = factory.create!
           end
 
-          def compose_jobs!
+          def compose_stages!
+            ##
+            # Deprecated `:types` key workaround - if types are defined and
+            # stages are not defined we use types definition as stages.
+            #
+            # Otherwise we use stages in favor of types, and remove types from
+            # processing.
+            #
             if types_defined? && !stages_defined?
               @entries[:stages] = @entries[:types]
             end