Commit b794d017 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'lm-clean-up-one-d-matrix-ff' into 'master'

Cleans up one_dimensional_matrix feature flag

See merge request gitlab-org/gitlab!45445
parents 8492a3dd 6991f72c
...@@ -205,13 +205,8 @@ class CommitStatus < ApplicationRecord ...@@ -205,13 +205,8 @@ class CommitStatus < ApplicationRecord
# 'rspec:linux: 1/10' => 'rspec:linux' # 'rspec:linux: 1/10' => 'rspec:linux'
common_name = name.to_s.gsub(%r{\d+[\s:\/\\]+\d+\s*}, '') common_name = name.to_s.gsub(%r{\d+[\s:\/\\]+\d+\s*}, '')
if ::Gitlab::Ci::Features.one_dimensional_matrix_enabled?
# 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux' # 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux'
common_name.gsub!(%r{: \[.*\]\s*\z}, '') common_name.gsub!(%r{: \[.*\]\s*\z}, '')
else
# 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux: [aws]'
common_name.gsub!(%r{: \[.*, .*\]\s*\z}, '')
end
common_name.strip! common_name.strip!
common_name common_name
......
---
name: one_dimensional_matrix
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42170
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/256062
type: development
group: group::pipeline authoring
default_enabled: true
...@@ -3574,9 +3574,6 @@ There can be from 2 to 50 jobs. ...@@ -3574,9 +3574,6 @@ There can be from 2 to 50 jobs.
[In GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/26362) and later, [In GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/26362) and later,
you can have one-dimensional matrices with a single job. you can have one-dimensional matrices with a single job.
The ability to have one-dimensional matrices is [deployed behind a feature flag](../../user/feature_flags.md),
enabled by default. It's enabled on GitLab.com. For self-managed GitLab instances,
administrators can opt to disable it by [disabling the `one_dimensional_matrix:` feature flag](../../administration/feature_flags.md). **(CORE ONLY)**
Every job gets the same `CI_NODE_TOTAL` [environment variable](../variables/README.md#predefined-environment-variables) value, and a unique `CI_NODE_INDEX` value. Every job gets the same `CI_NODE_TOTAL` [environment variable](../variables/README.md#predefined-environment-variables) value, and a unique `CI_NODE_INDEX` value.
......
...@@ -14,7 +14,7 @@ module Gitlab ...@@ -14,7 +14,7 @@ module Gitlab
validations do validations do
validates :config, variables: { array_values: true } validates :config, variables: { array_values: true }
validates :config, length: { validates :config, length: {
minimum: :minimum, minimum: 1,
too_short: 'requires at least %{count} items' too_short: 'requires at least %{count} items'
} }
end end
...@@ -28,10 +28,6 @@ module Gitlab ...@@ -28,10 +28,6 @@ module Gitlab
.map { |key, value| [key.to_s, Array(value).map(&:to_s)] } .map { |key, value| [key.to_s, Array(value).map(&:to_s)] }
.to_h .to_h
end end
def minimum
::Gitlab::Ci::Features.one_dimensional_matrix_enabled? ? 1 : 2
end
end end
end end
end end
......
...@@ -59,10 +59,6 @@ module Gitlab ...@@ -59,10 +59,6 @@ module Gitlab
::Feature.enabled?(:ci_trace_log_invalid_chunks, project, type: :ops, default_enabled: false) ::Feature.enabled?(:ci_trace_log_invalid_chunks, project, type: :ops, default_enabled: false)
end end
def self.one_dimensional_matrix_enabled?
::Feature.enabled?(:one_dimensional_matrix, default_enabled: true)
end
def self.manual_bridges_enabled?(project) def self.manual_bridges_enabled?(project)
::Feature.enabled?(:ci_manual_bridges, project, default_enabled: true) ::Feature.enabled?(:ci_manual_bridges, project, default_enabled: true)
end end
......
...@@ -46,12 +46,6 @@ RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do ...@@ -46,12 +46,6 @@ RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do
end end
end end
context 'with one_dimensional_matrix feature flag enabled' do
before do
stub_feature_flags(one_dimensional_matrix: true)
matrix.compose!
end
context 'when entry config has only one variable with multiple values' do context 'when entry config has only one variable with multiple values' do
let(:config) do let(:config) do
[ [
...@@ -113,76 +107,6 @@ RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do ...@@ -113,76 +107,6 @@ RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do
end end
end end
end end
end
context 'with one_dimensional_matrix feature flag disabled' do
before do
stub_feature_flags(one_dimensional_matrix: false)
matrix.compose!
end
context 'when entry config has only one variable with multiple values' do
let(:config) do
[
{
'VAR_1' => %w[build test]
}
]
end
describe '#valid?' do
it { is_expected.not_to be_valid }
end
describe '#errors' do
it 'returns error about too many jobs' do
expect(matrix.errors)
.to include('variables config requires at least 2 items')
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
end
end
context 'when entry config has only one variable with one value' do
let(:config) do
[
{
'VAR_1' => %w[test]
}
]
end
describe '#valid?' do
it { is_expected.not_to be_valid }
end
describe '#errors' do
it 'returns no errors' do
expect(matrix.errors)
.to include('variables config requires at least 2 items')
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
end
end
end
end
end
context 'when config value has wrong type' do context 'when config value has wrong type' do
let(:config) { {} } let(:config) { {} }
......
# frozen_string_literal: true # frozen_string_literal: true
# After Feature one_dimensional_matrix is removed, this can be changed back to fast_spec_helper require 'fast_spec_helper'
require 'spec_helper'
require_dependency 'active_model' require_dependency 'active_model'
RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
...@@ -46,11 +45,7 @@ RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do ...@@ -46,11 +45,7 @@ RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
end end
end end
context 'with one_dimensional_matrix feature flag enabled' do
context 'with only one variable' do context 'with only one variable' do
before do
stub_feature_flags(one_dimensional_matrix: true)
end
let(:config) { { VAR: 'test' } } let(:config) { { VAR: 'test' } }
describe '#valid?' do describe '#valid?' do
...@@ -66,52 +61,4 @@ RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do ...@@ -66,52 +61,4 @@ RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
end end
end end
end end
context 'with one_dimensional_matrix feature flag disabled' do
context 'when entry value is not correct' do
before do
stub_feature_flags(one_dimensional_matrix: false)
end
shared_examples 'invalid variables' do |message|
describe '#errors' do
it 'saves errors' do
expect(entry.errors).to include(message)
end
end
describe '#valid?' do
it 'is not valid' do
expect(entry).not_to be_valid
end
end
end
context 'with array' do
let(:config) { [:VAR, 'test'] }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
context 'with empty array' do
let(:config) { { VAR: 'test', VAR2: [] } }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
context 'with nested array' do
let(:config) { { VAR: 'test', VAR2: [1, [2]] } }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
context 'with one_dimensional_matrix feature flag disabled' do
context 'with only one variable' do
let(:config) { { VAR: 'test' } }
it_behaves_like 'invalid variables', /variables config requires at least 2 items/
end
end
end
end
end
end end
...@@ -493,11 +493,8 @@ RSpec.describe CommitStatus do ...@@ -493,11 +493,8 @@ RSpec.describe CommitStatus do
end end
end end
context 'with the one_dimensional_matrix feature flag disabled' do
describe '#group_name' do describe '#group_name' do
before do using RSpec::Parameterized::TableSyntax
stub_feature_flags(one_dimensional_matrix: false)
end
let(:commit_status) do let(:commit_status) do
build(:commit_status, pipeline: pipeline, stage: 'test') build(:commit_status, pipeline: pipeline, stage: 'test')
...@@ -505,95 +502,43 @@ RSpec.describe CommitStatus do ...@@ -505,95 +502,43 @@ RSpec.describe CommitStatus do
subject { commit_status.group_name } subject { commit_status.group_name }
tests = { where(:name, :group_name) do
'rspec:windows' => 'rspec:windows', 'rspec:windows' | 'rspec:windows'
'rspec:windows 0' => 'rspec:windows 0', 'rspec:windows 0' | 'rspec:windows 0'
'rspec:windows 0 test' => 'rspec:windows 0 test', 'rspec:windows 0 test' | 'rspec:windows 0 test'
'rspec:windows 0 1' => 'rspec:windows', 'rspec:windows 0 1' | 'rspec:windows'
'rspec:windows 0 1 name' => 'rspec:windows name', 'rspec:windows 0 1 name' | 'rspec:windows name'
'rspec:windows 0/1' => 'rspec:windows', 'rspec:windows 0/1' | 'rspec:windows'
'rspec:windows 0/1 name' => 'rspec:windows name', 'rspec:windows 0/1 name' | 'rspec:windows name'
'rspec:windows 0:1' => 'rspec:windows', 'rspec:windows 0:1' | 'rspec:windows'
'rspec:windows 0:1 name' => 'rspec:windows name', 'rspec:windows 0:1 name' | 'rspec:windows name'
'rspec:windows 10000 20000' => 'rspec:windows', 'rspec:windows 10000 20000' | 'rspec:windows'
'rspec:windows 0 : / 1' => 'rspec:windows', 'rspec:windows 0 : / 1' | 'rspec:windows'
'rspec:windows 0 : / 1 name' => 'rspec:windows name', 'rspec:windows 0 : / 1 name' | 'rspec:windows name'
'0 1 name ruby' => 'name ruby', '0 1 name ruby' | 'name ruby'
'0 :/ 1 name ruby' => 'name ruby', '0 :/ 1 name ruby' | 'name ruby'
'rspec: [aws]' => 'rspec: [aws]', 'rspec: [aws]' | 'rspec'
'rspec: [aws] 0/1' => 'rspec: [aws]', 'rspec: [aws] 0/1' | 'rspec'
'rspec: [aws, max memory]' => 'rspec', 'rspec: [aws, max memory]' | 'rspec'
'rspec:linux: [aws, max memory, data]' => 'rspec:linux', 'rspec:linux: [aws, max memory, data]' | 'rspec:linux'
'rspec: [inception: [something, other thing], value]' => 'rspec', 'rspec: [inception: [something, other thing], value]' | 'rspec'
'rspec:windows 0/1: [name, other]' => 'rspec:windows', 'rspec:windows 0/1: [name, other]' | 'rspec:windows'
'rspec:windows: [name, other] 0/1' => 'rspec:windows', 'rspec:windows: [name, other] 0/1' | 'rspec:windows'
'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows', 'rspec:windows: [name, 0/1] 0/1' | 'rspec:windows'
'rspec:windows: [0/1, name]' => 'rspec:windows', 'rspec:windows: [0/1, name]' | 'rspec:windows'
'rspec:windows: [, ]' => 'rspec:windows', 'rspec:windows: [, ]' | 'rspec:windows'
'rspec:windows: [name]' => 'rspec:windows: [name]', 'rspec:windows: [name]' | 'rspec:windows'
'rspec:windows: [name,other]' => 'rspec:windows: [name,other]' 'rspec:windows: [name,other]' | 'rspec:windows'
}
tests.each do |name, group_name|
it "'#{name}' puts in '#{group_name}'" do
commit_status.name = name
is_expected.to eq(group_name)
end
end
end
end end
context 'with one_dimensional_matrix feature flag enabled' do with_them do
describe '#group_name' do it "#{params[:name]} puts in #{params[:group_name]}" do
before do
stub_feature_flags(one_dimensional_matrix: true)
end
let(:commit_status) do
build(:commit_status, pipeline: pipeline, stage: 'test')
end
subject { commit_status.group_name }
tests = {
'rspec:windows' => 'rspec:windows',
'rspec:windows 0' => 'rspec:windows 0',
'rspec:windows 0 test' => 'rspec:windows 0 test',
'rspec:windows 0 1' => 'rspec:windows',
'rspec:windows 0 1 name' => 'rspec:windows name',
'rspec:windows 0/1' => 'rspec:windows',
'rspec:windows 0/1 name' => 'rspec:windows name',
'rspec:windows 0:1' => 'rspec:windows',
'rspec:windows 0:1 name' => 'rspec:windows name',
'rspec:windows 10000 20000' => 'rspec:windows',
'rspec:windows 0 : / 1' => 'rspec:windows',
'rspec:windows 0 : / 1 name' => 'rspec:windows name',
'0 1 name ruby' => 'name ruby',
'0 :/ 1 name ruby' => 'name ruby',
'rspec: [aws]' => 'rspec',
'rspec: [aws] 0/1' => 'rspec',
'rspec: [aws, max memory]' => 'rspec',
'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
'rspec: [inception: [something, other thing], value]' => 'rspec',
'rspec:windows 0/1: [name, other]' => 'rspec:windows',
'rspec:windows: [name, other] 0/1' => 'rspec:windows',
'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
'rspec:windows: [0/1, name]' => 'rspec:windows',
'rspec:windows: [, ]' => 'rspec:windows',
'rspec:windows: [name]' => 'rspec:windows',
'rspec:windows: [name,other]' => 'rspec:windows'
}
tests.each do |name, group_name|
it "'#{name}' puts in '#{group_name}'" do
commit_status.name = name commit_status.name = name
is_expected.to eq(group_name) is_expected.to eq(group_name)
end end
end end
end end
end
describe '#detailed_status' do describe '#detailed_status' do
let(:user) { create(:user) } let(:user) { create(:user) }
......
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