Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
aeea252f44
commit
c05f1d2fbb
12 changed files with 100 additions and 26 deletions
|
@ -33,15 +33,25 @@ qa:selectors:
|
||||||
script:
|
script:
|
||||||
- bundle exec bin/qa Test::Sanity::Selectors
|
- bundle exec bin/qa Test::Sanity::Selectors
|
||||||
|
|
||||||
qa:auto_quarantine:
|
qa:master-auto-quarantine-dequarantine:
|
||||||
extends:
|
extends:
|
||||||
- .qa-job-base
|
- .qa-job-base
|
||||||
rules:
|
rules:
|
||||||
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
|
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
|
||||||
script:
|
script:
|
||||||
- bundle exec confiner -r .confiner/quarantine.yml
|
- bundle exec confiner -r .confiner/master.yml
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
|
qa:nightly-auto-quarantine-dequarantine:
|
||||||
|
extends:
|
||||||
|
- .qa-job-base
|
||||||
|
rules:
|
||||||
|
- if: '$QA_TRIGGER_AUTO_QUARANTINE =~ /true|yes|1/i'
|
||||||
|
script:
|
||||||
|
- bundle exec confiner -r .confiner/nightly.yml
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
|
||||||
qa:selectors-as-if-foss:
|
qa:selectors-as-if-foss:
|
||||||
extends:
|
extends:
|
||||||
- qa:selectors
|
- qa:selectors
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AddMigrationPlanIndexToContainerRepositories < Gitlab::Database::Migration[1.0]
|
||||||
|
INDEX_NAME = 'idx_container_repos_on_migration_state_migration_plan_created'
|
||||||
|
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def up
|
||||||
|
add_concurrent_index :container_repositories,
|
||||||
|
[:migration_state, :migration_plan, :created_at],
|
||||||
|
name: INDEX_NAME
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_concurrent_index_by_name :container_repositories, INDEX_NAME
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class PrepareIndexForCiJobArtifactsUnlockedWithExpireAt < Gitlab::Database::Migration[1.0]
|
||||||
|
TABLE_NAME = 'ci_job_artifacts'
|
||||||
|
INDEX_NAME = 'index_ci_job_artifacts_on_expire_at_for_removal'
|
||||||
|
CONDITIONS = 'locked = 0 AND expire_at IS NOT NULL'
|
||||||
|
|
||||||
|
def up
|
||||||
|
prepare_async_index TABLE_NAME, [:expire_at], where: CONDITIONS, name: INDEX_NAME
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
unprepare_async_index_by_name TABLE_NAME, INDEX_NAME
|
||||||
|
end
|
||||||
|
end
|
1
db/schema_migrations/20220322035654
Normal file
1
db/schema_migrations/20220322035654
Normal file
|
@ -0,0 +1 @@
|
||||||
|
b37315953ac3cdc6d75f5287a4c264ebdee932f19cfe975f5d2c57b353da35d9
|
1
db/schema_migrations/20220325000000
Normal file
1
db/schema_migrations/20220325000000
Normal file
|
@ -0,0 +1 @@
|
||||||
|
fd738cf8a5642f96dc67a294dcf913d797b580a19f35d5ef76573c63bf2dd920
|
|
@ -26472,6 +26472,8 @@ CREATE INDEX idx_container_repos_on_exp_cleanup_status_project_id_start_date ON
|
||||||
|
|
||||||
CREATE INDEX idx_container_repos_on_import_started_at_when_importing ON container_repositories USING btree (migration_import_started_at) WHERE (migration_state = 'importing'::text);
|
CREATE INDEX idx_container_repos_on_import_started_at_when_importing ON container_repositories USING btree (migration_import_started_at) WHERE (migration_state = 'importing'::text);
|
||||||
|
|
||||||
|
CREATE INDEX idx_container_repos_on_migration_state_migration_plan_created ON container_repositories USING btree (migration_state, migration_plan, created_at);
|
||||||
|
|
||||||
CREATE INDEX idx_container_repos_on_pre_import_done_at_when_pre_import_done ON container_repositories USING btree (migration_pre_import_done_at) WHERE (migration_state = 'pre_import_done'::text);
|
CREATE INDEX idx_container_repos_on_pre_import_done_at_when_pre_import_done ON container_repositories USING btree (migration_pre_import_done_at) WHERE (migration_state = 'pre_import_done'::text);
|
||||||
|
|
||||||
CREATE INDEX idx_container_repos_on_pre_import_started_at_when_pre_importing ON container_repositories USING btree (migration_pre_import_started_at) WHERE (migration_state = 'pre_importing'::text);
|
CREATE INDEX idx_container_repos_on_pre_import_started_at_when_pre_importing ON container_repositories USING btree (migration_pre_import_started_at) WHERE (migration_state = 'pre_importing'::text);
|
||||||
|
|
|
@ -7,9 +7,8 @@ disqus_identifier: 'https://docs.gitlab.com/ee/workflow/repository_mirroring.htm
|
||||||
|
|
||||||
# Repository mirroring **(FREE)**
|
# Repository mirroring **(FREE)**
|
||||||
|
|
||||||
You can _mirror_ a repository to and from external sources. You can select which
|
You can _mirror_ a repository to and from external sources. You can select which repository
|
||||||
repository serves as the source, and modify which parts of the repository are copied.
|
serves as the source. Branches, tags, and commits can be mirrored.
|
||||||
Branches, tags, and commits can be mirrored.
|
|
||||||
|
|
||||||
Several mirroring methods exist:
|
Several mirroring methods exist:
|
||||||
|
|
||||||
|
@ -23,11 +22,7 @@ Mirror a repository when:
|
||||||
copy of your project at its previous home, configure your GitLab repository as a
|
copy of your project at its previous home, configure your GitLab repository as a
|
||||||
[push mirror](push.md). Changes you make to your GitLab repository are copied to
|
[push mirror](push.md). Changes you make to your GitLab repository are copied to
|
||||||
the old location.
|
the old location.
|
||||||
- Your GitLab project is private, but some components can be shared publicly.
|
- Your GitLab instance is private, but you want to open-source some projects.
|
||||||
Configure your primary repository as a [push mirror](push.md) and push the portions
|
|
||||||
you want to make public. With this configuration, you can open-source specific
|
|
||||||
projects, contribute back to the open-source community, and protect the sensitive
|
|
||||||
parts of your project.
|
|
||||||
- You migrated to GitLab, but the canonical version of your project is somewhere else.
|
- You migrated to GitLab, but the canonical version of your project is somewhere else.
|
||||||
Configure your GitLab repository as a [pull mirror](pull.md) of the other project.
|
Configure your GitLab repository as a [pull mirror](pull.md) of the other project.
|
||||||
Your GitLab repository pulls copies of the commits, tags, and branches of project.
|
Your GitLab repository pulls copies of the commits, tags, and branches of project.
|
||||||
|
|
|
@ -2,6 +2,17 @@
|
||||||
|
|
||||||
module ContainerRegistry
|
module ContainerRegistry
|
||||||
module Migration
|
module Migration
|
||||||
|
# Some container repositories do not have a plan associated with them, they will be imported with
|
||||||
|
# the free tiers
|
||||||
|
FREE_TIERS = ['free', 'early_adopter', nil].freeze
|
||||||
|
PREMIUM_TIERS = %w[premium bronze silver premium_trial].freeze
|
||||||
|
ULTIMATE_TIERS = %w[ultimate gold ultimate_trial].freeze
|
||||||
|
PLAN_GROUPS = {
|
||||||
|
'free' => FREE_TIERS,
|
||||||
|
'premium' => PREMIUM_TIERS,
|
||||||
|
'ultimate' => ULTIMATE_TIERS
|
||||||
|
}.freeze
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
delegate :container_registry_import_max_tags_count, to: ::Gitlab::CurrentSettings
|
delegate :container_registry_import_max_tags_count, to: ::Gitlab::CurrentSettings
|
||||||
delegate :container_registry_import_max_retries, to: ::Gitlab::CurrentSettings
|
delegate :container_registry_import_max_retries, to: ::Gitlab::CurrentSettings
|
||||||
|
@ -46,8 +57,8 @@ module ContainerRegistry
|
||||||
0
|
0
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.target_plan
|
def self.target_plans
|
||||||
Plan.find_by_name(target_plan_name)
|
PLAN_GROUPS[target_plan_name]
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.all_plans?
|
def self.all_plans?
|
||||||
|
|
19
qa/.confiner/nightly.yml
Normal file
19
qa/.confiner/nightly.yml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
- name: Quarantine E2E tests in Nightly that fail consistently
|
||||||
|
plugin:
|
||||||
|
name: gitlab
|
||||||
|
args:
|
||||||
|
threshold: 3
|
||||||
|
private_token: $QA_GITLAB_CI_TOKEN
|
||||||
|
project_id: gitlab-org/quality/nightly # https://gitlab.com/gitlab-org/quality/nightly/
|
||||||
|
target_project: gitlab-org/gitlab
|
||||||
|
failure_issue_labels: QA,Quality,found:nightly
|
||||||
|
failure_issue_prefix: "Failure in "
|
||||||
|
pwd: qa
|
||||||
|
timeout: 30
|
||||||
|
ref: master
|
||||||
|
environment:
|
||||||
|
name: nightly
|
||||||
|
pattern: 'pipeline: :nightly'
|
||||||
|
job_pattern: '^((?!quarantine).)*$'
|
||||||
|
actions:
|
||||||
|
- quarantine
|
|
@ -154,15 +154,21 @@ RSpec.describe ContainerRegistry::Migration do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.target_plan' do
|
describe '.target_plans' do
|
||||||
let_it_be(:plan) { create(:plan) }
|
subject { described_class.target_plans }
|
||||||
|
|
||||||
before do
|
where(:target_plan, :result) do
|
||||||
stub_application_setting(container_registry_import_target_plan: plan.name)
|
'free' | described_class::FREE_TIERS
|
||||||
|
'premium' | described_class::PREMIUM_TIERS
|
||||||
|
'ultimate' | described_class::ULTIMATE_TIERS
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns the matching application_setting' do
|
with_them do
|
||||||
expect(described_class.target_plan).to eq(plan)
|
before do
|
||||||
|
stub_application_setting(container_registry_import_target_plan: target_plan)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to eq(result) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1274,7 +1274,7 @@ RSpec.describe ContainerRepository, :aggregate_failures do
|
||||||
subject { described_class.ready_for_import }
|
subject { described_class.ready_for_import }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_application_setting(container_registry_import_target_plan: root_group.actual_plan_name)
|
stub_application_setting(container_registry_import_target_plan: valid_container_repository.migration_plan)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'works' do
|
it 'works' do
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
RSpec.shared_context 'importable repositories' do
|
RSpec.shared_context 'importable repositories' do
|
||||||
let_it_be(:root_group) { create(:group) }
|
let_it_be(:valid_container_repository) { create(:container_repository, created_at: 2.days.ago, migration_plan: 'free') }
|
||||||
let_it_be(:group) { create(:group, parent_id: root_group.id) }
|
let_it_be(:valid_container_repository2) { create(:container_repository, created_at: 1.year.ago, migration_plan: 'free') }
|
||||||
let_it_be(:project) { create(:project, namespace: group) }
|
let_it_be(:importing_container_repository) { create(:container_repository, :importing, created_at: 2.days.ago, migration_plan: 'free') }
|
||||||
let_it_be(:valid_container_repository) { create(:container_repository, project: project, created_at: 2.days.ago) }
|
let_it_be(:new_container_repository) { create(:container_repository, migration_plan: 'free') }
|
||||||
let_it_be(:valid_container_repository2) { create(:container_repository, project: project, created_at: 1.year.ago) }
|
|
||||||
let_it_be(:importing_container_repository) { create(:container_repository, :importing, project: project, created_at: 2.days.ago) }
|
|
||||||
let_it_be(:new_container_repository) { create(:container_repository, project: project) }
|
|
||||||
|
|
||||||
let_it_be(:denied_root_group) { create(:group) }
|
let_it_be(:denied_root_group) { create(:group) }
|
||||||
let_it_be(:denied_group) { create(:group, parent_id: denied_root_group.id) }
|
let_it_be(:denied_group) { create(:group, parent_id: denied_root_group.id) }
|
||||||
|
|
Loading…
Reference in a new issue