Commit af95d309 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Expose cross-project bridge jobs behind a feature flag

This adds a feature flag called `:cross_project_pipeline_triggers` and
makes it possible to fabricate a bridge job, from a CI/CD configuration,
when this feature flag is enabled.
parent aa44c745
# frozen_string_literal: true
module EE
module Gitlab
module Ci
module Config
module Entry
module Jobs
extend ::Gitlab::Utils::Override
override :node_type
def node_type(name)
return ::Gitlab::Ci::Config::Entry::Hidden if hidden?(name)
if bridge?(name)
::EE::Gitlab::Ci::Config::Entry::Bridge
else
::Gitlab::Ci::Config::Entry::Job
end
end
def bridge?(name)
config.fetch(name).key?(:trigger) &&
cross_project_triggers_enabled?
end
def cross_project_triggers_enabled?
::Feature.enabled?(:cross_project_pipeline_triggers, default_enabled: true)
end
end
end
end
end
end
end
require 'spec_helper'
describe Gitlab::Ci::Config::Entry::Jobs do
subject do
described_class.new(
{
'.hidden_job'.to_sym => { script: 'something' },
regular_job: { script: 'something' },
my_trigger: { trigger: 'my/project' }
}
)
end
context 'when cross-project pipeline triggers are enabled' do
before do
stub_feature_flags(cross_project_pipeline_triggers: true)
end
describe '#node_type' do
it 'correctly identifies hidden jobs' do
expect(subject.node_type(:'.hidden_job'))
.to eq ::Gitlab::Ci::Config::Entry::Hidden
end
it 'correctly identifies regular jobs' do
expect(subject.node_type(:regular_job))
.to eq ::Gitlab::Ci::Config::Entry::Job
end
it 'correctly identifies cross-project triggers' do
expect(subject.node_type(:my_trigger))
.to eq ::EE::Gitlab::Ci::Config::Entry::Bridge
end
end
describe '#bridge?' do
it 'returns true when a job is a trigger' do
expect(subject.bridge?(:my_trigger)).to be true
end
it 'returns false when a job is not a trigger' do
expect(subject.bridge?(:regular_job)).to be false
end
end
end
context 'when cross-project pipeline triggers are disabled' do
before do
stub_feature_flags(cross_project_pipeline_triggers: false)
end
describe '#node_type' do
it 'correctly identifies hidden jobs' do
expect(subject.node_type(:'.hidden_job'))
.to eq ::Gitlab::Ci::Config::Entry::Hidden
end
it 'correctly identifies regular jobs' do
expect(subject.node_type(:regular_job))
.to eq ::Gitlab::Ci::Config::Entry::Job
end
it 'does not identify trigger job as a bridge job' do
expect(subject.node_type(:my_trigger))
.to eq ::Gitlab::Ci::Config::Entry::Job
end
end
describe '#bridge?' do
it 'returns false even when a job is a trigger' do
expect(subject.bridge?(:my_trigger)).to be false
end
it 'returns false when a job is not a trigger' do
expect(subject.bridge?(:regular_job)).to be false
end
end
end
end
......@@ -28,11 +28,15 @@ module Gitlab
name.to_s.start_with?('.')
end
def node_type(name)
hidden?(name) ? Entry::Hidden : Entry::Job
end
# rubocop: disable CodeReuse/ActiveRecord
def compose!(deps = nil)
super do
@config.each do |name, config|
node = hidden?(name) ? Entry::Hidden : Entry::Job
node = node_type(name)
factory = ::Gitlab::Config::Entry::Factory.new(node)
.value(config || {})
......@@ -54,3 +58,6 @@ module Gitlab
end
end
end
::Gitlab::Ci::Config::Entry::Jobs
.prepend(::EE::Gitlab::Ci::Config::Entry::Jobs)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment