Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab/ci/rules.gitlab-ci.yml101
-rw-r--r--.gitlab/ci/templates/gem.gitlab-ci.yml14
-rw-r--r--.gitlab/ci/vendored-gems.gitlab-ci.yml156
-rw-r--r--.gitlab/issue_templates/Analytics_Instrumentation_Incident_Template.md (renamed from .gitlab/issue_templates/Analytics_Instrumentation_Incident_Template)0
-rw-r--r--.rubocop_todo/rspec/before_all_role_assignment.yml2
-rw-r--r--app/assets/stylesheets/pages/commits.scss8
-rw-r--r--app/services/auto_merge/merge_when_pipeline_succeeds_service.rb14
-rw-r--r--app/services/system_notes/merge_requests_service.rb2
-rw-r--r--app/views/projects/commit/_signature_badge_user.html.haml21
-rw-r--r--app/views/projects/commit/x509/_signature_badge_user.html.haml19
-rw-r--r--config/feature_flags/development/introduce_rules_with_needs.yml8
-rw-r--r--doc/ci/yaml/index.md3
-rw-r--r--doc/user/project/integrations/mlflow_client.md2
-rw-r--r--gems/gem.gitlab-ci.yml46
-rw-r--r--lib/api/helpers.rb13
-rw-r--r--lib/api/usage_data.rb32
-rw-r--r--lib/gitlab/ci/build/rules.rb11
-rw-r--r--lib/gitlab/sidekiq_middleware/server_metrics.rb2
-rw-r--r--spec/factories/audit_events.rb23
-rw-r--r--spec/lib/api/helpers_spec.rb33
-rw-r--r--spec/lib/gitlab/ci/build/rules_spec.rb53
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb15
-rw-r--r--spec/requests/api/graphql/gitlab_schema_spec.rb4
-rw-r--r--spec/requests/api/usage_data_spec.rb55
-rw-r--r--spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb171
-rw-r--r--spec/services/ci/create_pipeline_service/rules_spec.rb36
-rw-r--r--spec/services/ci/pipeline_trigger_service_spec.rb4
-rw-r--r--spec/services/packages/cleanup/execute_policy_service_spec.rb4
-rw-r--r--spec/simplecov_env.rb1
-rw-r--r--spec/support/shared_examples/services/auto_merge_shared_examples.rb182
-rw-r--r--vendor/gems/attr_encrypted/.gitlab-ci.yml26
-rw-r--r--vendor/gems/bundler-checksum/.gitlab-ci.yml26
-rw-r--r--vendor/gems/cloud_profiler_agent/.gitlab-ci.yml37
-rw-r--r--vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml33
-rw-r--r--vendor/gems/gitlab_active_record/.gitlab-ci.yml33
-rw-r--r--vendor/gems/ipynbdiff/.gitlab-ci.yml42
-rw-r--r--vendor/gems/mail-smtp_pool/.gitlab-ci.yml36
-rw-r--r--vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml37
-rw-r--r--vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml41
-rw-r--r--vendor/gems/omniauth-gitlab/.gitlab-ci.yml41
-rw-r--r--vendor/gems/omniauth-salesforce/.gitlab-ci.yml41
-rw-r--r--vendor/gems/omniauth_crowd/.gitlab-ci.yml41
-rw-r--r--vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml83
-rw-r--r--workhorse/go.mod2
-rw-r--r--workhorse/go.sum4
45 files changed, 589 insertions, 969 deletions
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 1f6858020a0..2c833f0d65b 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -2136,107 +2136,6 @@
- <<: *if-merge-request
changes: *code-backstage-qa-patterns
-########################
-# GitLab monorepo gems #
-########################
-
-.gems:rules:activerecord-gitlab:
- rules:
- - <<: *if-merge-request
- changes: ["gems/activerecord-gitlab/**/*"]
-
-.gems:rules:gitlab-rspec:
- rules:
- - <<: *if-merge-request
- changes: ["gems/gitlab-rspec/**/*"]
-
-.gems:rules:gitlab-utils:
- rules:
- - <<: *if-merge-request
- changes: ["gems/gitlab-utils/**/*"]
-
-#######################
-# Vendored gems rules #
-#######################
-
-.vendor:rules:mail-smtp_pool:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/mail-smtp_pool/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:attr_encrypted:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/attr_encrypted/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:microsoft_graph_mailer:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/microsoft_graph_mailer/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:ipynbdiff:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/ipynbdiff/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:omniauth-azure-oauth2:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/omniauth-azure-oauth2/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:omniauth_crowd:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/omniauth_crowd/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:omniauth-gitlab:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/omniauth-gitlab/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:omniauth-salesforce:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/omniauth-salesforce/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:devise-pbkdf2-encryptable:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/devise-pbkdf2-encryptable/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:gitlab_active_record:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/gitlab_active_record/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:bundler-checksum:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/bundler-checksum/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:cloud_profiler_agent:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/cloud_profiler_agent/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
-.vendor:rules:sidekiq-reliable-fetch:
- rules:
- - <<: *if-merge-request
- changes: ["vendor/gems/sidekiq-reliable-fetch/**/*"]
- - <<: *if-merge-request-labels-run-all-rspec
-
##################
# Releases rules #
##################
diff --git a/.gitlab/ci/templates/gem.gitlab-ci.yml b/.gitlab/ci/templates/gem.gitlab-ci.yml
index c5b1a1ecf45..1f995e8040f 100644
--- a/.gitlab/ci/templates/gem.gitlab-ci.yml
+++ b/.gitlab/ci/templates/gem.gitlab-ci.yml
@@ -2,18 +2,26 @@
#
# Inputs:
# - `gem_name`: The name of the gem, i.e. if the gem is located at `gems/gitlab-rspec`, `gem_name` should be set to `gitlab-rspec`.
+# - `gem_path_prefix`: The prefix of the gem path, i.e. if the gem is located at `vendor/gems/gitlab-rspec`, `gem_path_prefix` should be set to `vendor/gems/`. Defaults to `gems/`.
spec:
inputs:
gem_name:
+ gem_path_prefix:
+ default: "gems/"
---
.gems:rules:$[[inputs.gem_name]]:
rules:
- if: '$CI_MERGE_REQUEST_EVENT_TYPE == "merged_result" || $CI_MERGE_REQUEST_EVENT_TYPE == "detached"'
- changes: ["gems/$[[inputs.gem_name]]/**/*"]
+ changes:
+ - "$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/**/*"
+ - ".gitlab/ci/templates/gem.gitlab-ci.yml"
+ - "gems/gem.gitlab-ci.yml"
gems $[[inputs.gem_name]]:
- extends: .gems:rules:$[[inputs.gem_name]]
+ extends: ".gems:rules:$[[inputs.gem_name]]"
needs: []
trigger:
- include: gems/$[[inputs.gem_name]]/.gitlab-ci.yml
+ include: "$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/.gitlab-ci.yml"
strategy: depend
+ inherit:
+ variables: false
diff --git a/.gitlab/ci/vendored-gems.gitlab-ci.yml b/.gitlab/ci/vendored-gems.gitlab-ci.yml
index 3773a343d6d..3c9dadb8332 100644
--- a/.gitlab/ci/vendored-gems.gitlab-ci.yml
+++ b/.gitlab/ci/vendored-gems.gitlab-ci.yml
@@ -1,103 +1,53 @@
-vendor mail-smtp_pool:
- extends:
- - .vendor:rules:mail-smtp_pool
- needs: []
- trigger:
- include: vendor/gems/mail-smtp_pool/.gitlab-ci.yml
- strategy: depend
-
-vendor attr_encrypted:
- extends:
- - .vendor:rules:attr_encrypted
- needs: []
- trigger:
- include: vendor/gems/attr_encrypted/.gitlab-ci.yml
- strategy: depend
-
-vendor microsoft_graph_mailer:
- extends:
- - .vendor:rules:microsoft_graph_mailer
- needs: []
- trigger:
- include: vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml
- strategy: depend
-
-vendor ipynbdiff:
- extends:
- - .vendor:rules:ipynbdiff
- needs: []
- trigger:
- include: vendor/gems/ipynbdiff/.gitlab-ci.yml
- strategy: depend
-
-vendor omniauth-azure-oauth2:
- extends:
- - .vendor:rules:omniauth-azure-oauth2
- needs: []
- trigger:
- include: vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml
- strategy: depend
-
-vendor omniauth_crowd:
- extends:
- - .vendor:rules:omniauth_crowd
- needs: []
- trigger:
- include: vendor/gems/omniauth_crowd/.gitlab-ci.yml
- strategy: depend
-
-vendor omniauth-gitlab:
- extends:
- - .vendor:rules:omniauth-gitlab
- needs: []
- trigger:
- include: vendor/gems/omniauth-gitlab/.gitlab-ci.yml
- strategy: depend
-
-vendor omniauth-salesforce:
- extends:
- - .vendor:rules:omniauth-salesforce
- needs: []
- trigger:
- include: vendor/gems/omniauth-salesforce/.gitlab-ci.yml
- strategy: depend
-
-vendor devise-pbkdf2-encryptable:
- extends:
- - .vendor:rules:devise-pbkdf2-encryptable
- needs: []
- trigger:
- include: vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml
- strategy: depend
-
-vendor bundler-checksum:
- extends:
- - .vendor:rules:bundler-checksum
- needs: []
- trigger:
- include: vendor/gems/bundler-checksum/.gitlab-ci.yml
- strategy: depend
-
-vendor gitlab_active_record:
- extends:
- - .vendor:rules:gitlab_active_record
- needs: []
- trigger:
- include: vendor/gems/gitlab_active_record/.gitlab-ci.yml
- strategy: depend
-
-vendor cloud_profiler_agent:
- extends:
- - .vendor:rules:cloud_profiler_agent
- needs: []
- trigger:
- include: vendor/gems/cloud_profiler_agent/.gitlab-ci.yml
- strategy: depend
-
-vendor sidekiq-reliable-fetch:
- extends:
- - .vendor:rules:sidekiq-reliable-fetch
- needs: []
- trigger:
- include: vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
- strategy: depend
+include:
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "mail-smtp_pool"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "attr_encrypted"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "microsoft_graph_mailer"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "ipynbdiff"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-azure-oauth2"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth_crowd"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-gitlab"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-salesforce"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "devise-pbkdf2-encryptable"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "bundler-checksum"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "gitlab_active_record"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "cloud_profiler_agent"
+ gem_path_prefix: "vendor/gems/"
+ - local: .gitlab/ci/templates/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "sidekiq-reliable-fetch"
+ gem_path_prefix: "vendor/gems/"
diff --git a/.gitlab/issue_templates/Analytics_Instrumentation_Incident_Template b/.gitlab/issue_templates/Analytics_Instrumentation_Incident_Template.md
index 2ebd5acdcd4..2ebd5acdcd4 100644
--- a/.gitlab/issue_templates/Analytics_Instrumentation_Incident_Template
+++ b/.gitlab/issue_templates/Analytics_Instrumentation_Incident_Template.md
diff --git a/.rubocop_todo/rspec/before_all_role_assignment.yml b/.rubocop_todo/rspec/before_all_role_assignment.yml
index 19b93eaad6d..8e3f8de920c 100644
--- a/.rubocop_todo/rspec/before_all_role_assignment.yml
+++ b/.rubocop_todo/rspec/before_all_role_assignment.yml
@@ -681,7 +681,7 @@ RSpec/BeforeAllRoleAssignment:
- 'ee/spec/services/gitlab_subscriptions/reconciliations/calculate_seat_count_data_service_spec.rb'
- 'ee/spec/services/group_saml/saml_group_links/create_service_spec.rb'
- 'ee/spec/services/groups/destroy_service_spec.rb'
- - 'ee/spec/services/groups/enterprise_users/create_service_spec.rb'
+ - 'ee/spec/services/groups/enterprise_users/associate_service_spec.rb'
- 'ee/spec/services/groups/epics_count_service_spec.rb'
- 'ee/spec/services/groups/transfer_service_spec.rb'
- 'ee/spec/services/ide/schemas_config_service_spec.rb'
diff --git a/app/assets/stylesheets/pages/commits.scss b/app/assets/stylesheets/pages/commits.scss
index b25a5b1c493..8b093e7bb7b 100644
--- a/app/assets/stylesheets/pages/commits.scss
+++ b/app/assets/stylesheets/pages/commits.scss
@@ -307,14 +307,6 @@
}
}
-.gpg-popover-user-link {
- display: flex;
- align-items: center;
- margin-bottom: $gl-padding / 2;
- text-decoration: none;
- color: $gl-text-color;
-}
-
.add-review-item {
.gl-tab-nav-item {
height: 100%;
diff --git a/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb b/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb
index 2bbb8f925a4..cb8e531f0e1 100644
--- a/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb
+++ b/app/services/auto_merge/merge_when_pipeline_succeeds_service.rb
@@ -4,9 +4,7 @@ module AutoMerge
class MergeWhenPipelineSucceedsService < AutoMerge::BaseService
def execute(merge_request)
super do
- if merge_request.saved_change_to_auto_merge_enabled?
- SystemNoteService.merge_when_pipeline_succeeds(merge_request, project, current_user, merge_request.actual_head_pipeline.sha)
- end
+ add_system_note(merge_request)
end
end
@@ -36,12 +34,20 @@ module AutoMerge
def available_for?(merge_request)
super do
- merge_request.actual_head_pipeline&.active?
+ check_availability(merge_request)
end
end
private
+ def add_system_note(merge_request)
+ SystemNoteService.merge_when_pipeline_succeeds(merge_request, project, current_user, merge_request.actual_head_pipeline.sha) if merge_request.saved_change_to_auto_merge_enabled?
+ end
+
+ def check_availability(merge_request)
+ merge_request.actual_head_pipeline&.active?
+ end
+
def notify(merge_request)
notification_service.async.merge_when_pipeline_succeeds(merge_request, current_user) if merge_request.saved_change_to_auto_merge_enabled?
end
diff --git a/app/services/system_notes/merge_requests_service.rb b/app/services/system_notes/merge_requests_service.rb
index 7758c1e8597..d71388a1552 100644
--- a/app/services/system_notes/merge_requests_service.rb
+++ b/app/services/system_notes/merge_requests_service.rb
@@ -181,3 +181,5 @@ module SystemNotes
end
end
end
+
+SystemNotes::MergeRequestsService.prepend_mod_with('SystemNotes::MergeRequestsService')
diff --git a/app/views/projects/commit/_signature_badge_user.html.haml b/app/views/projects/commit/_signature_badge_user.html.haml
deleted file mode 100644
index 656adef6a72..00000000000
--- a/app/views/projects/commit/_signature_badge_user.html.haml
+++ /dev/null
@@ -1,21 +0,0 @@
-- user = signature.signed_by_user
-
-- if user
- = link_to user_path(user), class: 'gpg-popover-user-link' do
- %div
- = user_avatar_without_link(user: user, size: 32)
-
- %div
- %strong= user.name
- %div= user.to_reference
-- elsif signature.gpg? # SSH signatures do not have an email embedded in them
- - user_name = signature.gpg_key_user_name
- - user_email = signature.gpg_key_user_email
- - if user_name && user_email
- = mail_to user_email do
- %div
- = user_avatar_without_link(user_name: user_name, user_email: user_email, size: 32)
-
- %div
- %strong= user_name
- %div= user_email
diff --git a/app/views/projects/commit/x509/_signature_badge_user.html.haml b/app/views/projects/commit/x509/_signature_badge_user.html.haml
deleted file mode 100644
index da749172369..00000000000
--- a/app/views/projects/commit/x509/_signature_badge_user.html.haml
+++ /dev/null
@@ -1,19 +0,0 @@
-- user_email = signature.x509_certificate.email
-- user = signature.signed_by_user
-
-- if user
- = link_to user_path(user), class: 'gpg-popover-user-link' do
- %div
- = user_avatar_without_link(user: user, size: 32)
-
- %div
- %strong= user.name
- %div= user.to_reference
-
-- else
- = mail_to user_email do
- %div
- = user_avatar_without_link(user_email: user_email, size: 32)
-
- %div
- %strong= user_email
diff --git a/config/feature_flags/development/introduce_rules_with_needs.yml b/config/feature_flags/development/introduce_rules_with_needs.yml
deleted file mode 100644
index 8b2940438ee..00000000000
--- a/config/feature_flags/development/introduce_rules_with_needs.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: introduce_rules_with_needs
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/112725
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/394769
-milestone: '16.0'
-type: development
-group: group::pipeline authoring
-default_enabled: false
diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md
index 4a08a9b0a0b..0db2fb0320f 100644
--- a/doc/ci/yaml/index.md
+++ b/doc/ci/yaml/index.md
@@ -3740,7 +3740,8 @@ If the rule matches, then the job is a manual job with `allow_failure: true`.
#### `rules:needs`
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31581) in GitLab 16.0 [with a flag](../../user/feature_flags.md) named `introduce_rules_with_needs`. Disabled by default.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31581) in GitLab 16.0 [with a flag](../../user/feature_flags.md) named `introduce_rules_with_needs`. Disabled by default.
+> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/408871) in GitLab 16.2. Feature flag `introduce_rules_with_needs` removed.
Use `needs` in rules to update a job's [`needs`](#needs) for specific conditions. When a condition matches a rule, the job's `needs` configuration is completely replaced with the `needs` in the rule.
diff --git a/doc/user/project/integrations/mlflow_client.md b/doc/user/project/integrations/mlflow_client.md
index 7afb0f51227..9d354c9a2d9 100644
--- a/doc/user/project/integrations/mlflow_client.md
+++ b/doc/user/project/integrations/mlflow_client.md
@@ -33,7 +33,7 @@ To enable MLflow client integration:
This can be your local environment, CI pipeline, or remote host. For example:
```shell
- export MLFLOW_TRACKING_URI="http://<your gitlab endpoint>/api/v4/projects/<your project id>/ml/mlflow"
+ export MLFLOW_TRACKING_URI="<your gitlab endpoint>/api/v4/projects/<your project id>/ml/mlflow"
export MLFLOW_TRACKING_TOKEN="<your_access_token>"
```
diff --git a/gems/gem.gitlab-ci.yml b/gems/gem.gitlab-ci.yml
index 63be78c6edb..8a0518fa415 100644
--- a/gems/gem.gitlab-ci.yml
+++ b/gems/gem.gitlab-ci.yml
@@ -2,40 +2,64 @@
#
# Inputs
# - `gem_name`: The name of the gem, i.e. if the gem is located at `gems/gitlab-rspec`, `gem_name` should be set to `gitlab-rspec`.
+# - `gem_path_prefix`: The prefix of the gem path, i.e. if the gem is located at `vendor/gems/gitlab-rspec`, `gem_path_prefix` should be set to `vendor/gems/`. Defaults to `gems/`.
spec:
inputs:
gem_name:
+ gem_path_prefix:
+ default: "gems/"
---
workflow:
+ name: '$PIPELINE_NAME'
rules:
- if: $CI_MERGE_REQUEST_ID
+ variables:
+ PIPELINE_NAME: '[$[[inputs.gem_name]] gem] Ruby $RUBY_VERSION $CI_MERGE_REQUEST_EVENT_TYPE MR pipeline'
+
+variables:
+ GIT_DEPTH: "20"
+ # 'GIT_STRATEGY: clone' optimizes the pack-objects cache hit ratio
+ GIT_STRATEGY: "clone"
+ GIT_SUBMODULE_STRATEGY: "none"
+ GET_SOURCES_ATTEMPTS: "3"
+ # Default Ruby version for jobs that don't use .ruby_matrix
+ RUBY_VERSION: "3.1"
default:
image: "ruby:${RUBY_VERSION}"
cache:
key: "$[[inputs.gem_name]]-${RUBY_VERSION}"
paths:
- - "gems/$[[inputs.gem_name]]/vendor/ruby"
+ - "$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/vendor/ruby"
before_script:
- - cd gems/$[[inputs.gem_name]]
+ - cd $[[inputs.gem_path_prefix]]$[[inputs.gem_name]]
- ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
+ - bundle_version=$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1 | sed -e 's/[[:space:]]//')
+ - gem install bundler --version $bundle_version --no-document # Bundler is not installed with the image
- bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- bundle config # Show bundler configuration
- - bundle install -j $(nproc)
+ - bundle install --jobs=$(nproc) --retry=3
-rubocop:
- script:
- - bundle exec rubocop --config .rubocop.yml
+.ruby_matrix:
parallel:
matrix:
- RUBY_VERSION: ["3.0", "3.1", "3.2"]
+rubocop:
+ extends: .ruby_matrix
+ rules:
+ - exists: ["$[[inputs.gem_path_prefix]]$[[inputs.gem_name]]/.rubocop.yml"]
+ script:
+ - bundle exec rubocop --config .rubocop.yml
+
rspec:
+ extends: .ruby_matrix
script:
- bundle exec rspec
- parallel:
- matrix:
- - RUBY_VERSION: ["3.0", "3.1", "3.2"]
+ coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
+ artifacts:
+ expire_in: 31d
+ when: always
+ paths:
+ - coverage/
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index df080c8e666..b616f1b35b3 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -657,6 +657,19 @@ module API
Gitlab::AppLogger.warn("Redis tracking event failed for event: #{event_name}, message: #{error.message}")
end
+ def track_event(event_name, user_id:, namespace_id: nil, project_id: nil)
+ return unless user_id.present?
+
+ Gitlab::InternalEvents.track_event(
+ event_name,
+ user_id: user_id,
+ namespace_id: namespace_id,
+ project_id: project_id
+ )
+ rescue StandardError => error
+ Gitlab::AppLogger.warn("Internal Event tracking event failed for event: #{event_name}, message: #{error.message}")
+ end
+
def order_by_similarity?(allow_unauthorized: true)
params[:order_by] == 'similarity' && params[:search].present? && (allow_unauthorized || current_user.present?)
end
diff --git a/lib/api/usage_data.rb b/lib/api/usage_data.rb
index 3e2023d769f..0a343093c33 100644
--- a/lib/api/usage_data.rb
+++ b/lib/api/usage_data.rb
@@ -53,6 +53,38 @@ module API
status :ok
end
+ desc 'Track gitlab internal events' do
+ detail 'This feature was introduced in GitLab 16.2.'
+ success code: 200
+ failure [
+ { code: 403, message: 'Invalid CSRF token is provided' },
+ { code: 404, message: 'Not found' }
+ ]
+ tags %w[usage_data]
+ end
+ params do
+ requires :event, type: String, desc: 'The event name that should be tracked',
+ documentation: { example: 'i_quickactions_page' }
+ optional :namespace_id, type: Integer, desc: 'Namespace ID',
+ documentation: { example: 1234 }
+ optional :project_id, type: Integer, desc: 'Project ID',
+ documentation: { example: 1234 }
+ end
+ post 'track_event', urgency: :low do
+ event_name = params[:event]
+ namespace_id = params[:namespace_id]
+ project_id = params[:project_id]
+
+ track_event(
+ event_name,
+ user_id: current_user.id,
+ namespace_id: namespace_id,
+ project_id: project_id
+ )
+
+ status :ok
+ end
+
desc 'Get a list of all metric definitions' do
detail 'This feature was introduced in GitLab 13.11.'
success code: 200
diff --git a/lib/gitlab/ci/build/rules.rb b/lib/gitlab/ci/build/rules.rb
index 17b9f30db33..8b503290e6e 100644
--- a/lib/gitlab/ci/build/rules.rb
+++ b/lib/gitlab/ci/build/rules.rb
@@ -32,18 +32,13 @@ module Gitlab
if @rule_list.nil?
Result.new(when: @default_when)
elsif matched_rule = match_rule(pipeline, context)
- result = Result.new(
+ Result.new(
when: matched_rule.attributes[:when] || @default_when,
start_in: matched_rule.attributes[:start_in],
allow_failure: matched_rule.attributes[:allow_failure],
- variables: matched_rule.attributes[:variables]
+ variables: matched_rule.attributes[:variables],
+ needs: matched_rule.attributes[:needs]
)
-
- if Feature.enabled?(:introduce_rules_with_needs, pipeline.project)
- result.needs = matched_rule.attributes[:needs]
- end
-
- result
else
Result.new(when: 'never')
end
diff --git a/lib/gitlab/sidekiq_middleware/server_metrics.rb b/lib/gitlab/sidekiq_middleware/server_metrics.rb
index b3c3c94a0a3..d10ac2799a8 100644
--- a/lib/gitlab/sidekiq_middleware/server_metrics.rb
+++ b/lib/gitlab/sidekiq_middleware/server_metrics.rb
@@ -18,7 +18,7 @@ module Gitlab
SIDEKIQ_QUEUE_DURATION_BUCKETS = [10, 60].freeze
# These labels from Gitlab::SidekiqMiddleware::MetricsHelper are included in SLI metrics
- SIDEKIQ_SLI_LABELS = [:worker, :feature_category, :urgency].freeze
+ SIDEKIQ_SLI_LABELS = [:worker, :feature_category, :urgency, :external_dependencies].freeze
class << self
include ::Gitlab::SidekiqMiddleware::MetricsHelper
diff --git a/spec/factories/audit_events.rb b/spec/factories/audit_events.rb
index 10f60591922..ceb7516441f 100644
--- a/spec/factories/audit_events.rb
+++ b/spec/factories/audit_events.rb
@@ -88,6 +88,29 @@ FactoryBot.define do
end
end
+ trait :instance_event do
+ transient { instance_scope { Gitlab::Audit::InstanceScope.new } }
+
+ entity_type { Gitlab::Audit::InstanceScope.name }
+ entity_id { instance_scope.id }
+ entity_path { instance_scope.full_path }
+ target_details { instance_scope.name }
+ ip_address { IPAddr.new '127.0.0.1' }
+ details do
+ {
+ change: 'project_creation_level',
+ from: nil,
+ to: 'Developers + Maintainers',
+ author_name: user.name,
+ target_id: instance_scope.id,
+ target_type: Gitlab::Audit::InstanceScope.name,
+ target_details: instance_scope.name,
+ ip_address: '127.0.0.1',
+ entity_path: instance_scope.full_path
+ }
+ end
+ end
+
factory :project_audit_event, traits: [:project_event]
factory :group_audit_event, traits: [:group_event]
end
diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb
index 40e80299033..667ee72f821 100644
--- a/spec/lib/api/helpers_spec.rb
+++ b/spec/lib/api/helpers_spec.rb
@@ -609,6 +609,39 @@ RSpec.describe API::Helpers, feature_category: :shared do
end
end
+ describe '#track_event' do
+ let(:user_id) { 345 }
+ let(:namespace_id) { 12 }
+ let(:project_id) { 56 }
+ let(:event_name) { 'i_compliance_dashboard' }
+ let(:unknown_event) { 'unknown' }
+
+ it 'tracks internal event' do
+ expect(Gitlab::InternalEvents).to receive(:track_event).with(
+ event_name,
+ user_id: user_id,
+ namespace_id: namespace_id,
+ project_id: project_id
+ )
+
+ helper.track_event(event_name, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+ end
+
+ it 'logs an exception for unknown event' do
+ expect(Gitlab::AppLogger).to receive(:warn).with(
+ "Internal Event tracking event failed for event: #{unknown_event}, message: Unknown event: #{unknown_event}"
+ )
+
+ helper.track_event(unknown_event, user_id: user_id, namespace_id: namespace_id, project_id: project_id)
+ end
+
+ it 'does not track event for nil user_id' do
+ expect(Gitlab::InternalEvents).not_to receive(:track_event)
+
+ helper.track_event(unknown_event, user_id: nil, namespace_id: namespace_id, project_id: project_id)
+ end
+ end
+
shared_examples '#order_options_with_tie_breaker' do
subject { Class.new.include(described_class).new.order_options_with_tie_breaker }
diff --git a/spec/lib/gitlab/ci/build/rules_spec.rb b/spec/lib/gitlab/ci/build/rules_spec.rb
index 9f191fed581..99577539798 100644
--- a/spec/lib/gitlab/ci/build/rules_spec.rb
+++ b/spec/lib/gitlab/ci/build/rules_spec.rb
@@ -244,59 +244,6 @@ RSpec.describe Gitlab::Ci::Build::Rules, feature_category: :pipeline_composition
when: 'never' }]))
}
end
-
- context 'when feature flag is disabled' do
- before do
- stub_feature_flags(introduce_rules_with_needs: false)
- end
-
- context 'with needs' do
- context 'when single need is specified' do
- let(:rule_list) do
- [{ if: '$VAR == null', needs: [{ name: 'test', artifacts: true, optional: false }] }]
- end
-
- it {
- is_expected.to eq(described_class::Result.new(when: 'on_success'))
- }
- end
-
- context 'when multiple needs are specified' do
- let(:rule_list) do
- [{ if: '$VAR == null',
- needs: [{ name: 'test', artifacts: true, optional: false },
- { name: 'rspec', artifacts: true, optional: false }] }]
- end
-
- it {
- is_expected.to eq(described_class::Result.new(when: 'on_success'))
- }
- end
-
- context 'when there are no needs specified' do
- let(:rule_list) { [{ if: '$VAR == null' }] }
-
- it {
- is_expected.to eq(described_class::Result.new(when: 'on_success'))
- }
- end
-
- context 'when need is specified with additional attibutes' do
- let(:rule_list) do
- [{ if: '$VAR == null', needs: [{
- artifacts: false,
- name: 'test',
- optional: true,
- when: 'never'
- }] }]
- end
-
- it {
- is_expected.to eq(described_class::Result.new(when: 'on_success'))
- }
- end
- end
- end
end
context 'with variables' do
diff --git a/spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb b/spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb
index 5c85f9388f9..9e4df5198a9 100644
--- a/spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware/server_metrics_spec.rb
@@ -72,12 +72,14 @@ RSpec.describe Gitlab::SidekiqMiddleware::ServerMetrics do
{
worker: 'MergeWorker',
urgency: 'high',
- feature_category: 'source_code_management'
+ feature_category: 'source_code_management',
+ external_dependencies: 'no'
},
{
worker: 'Ci::BuildFinishedWorker',
urgency: 'high',
- feature_category: 'continuous_integration'
+ feature_category: 'continuous_integration',
+ external_dependencies: 'no'
}
])
@@ -162,10 +164,12 @@ RSpec.describe Gitlab::SidekiqMiddleware::ServerMetrics do
expect(sidekiq_mem_total_bytes).to receive(:set).with(labels_with_job_status, mem_total_bytes)
expect(Gitlab::Metrics::SidekiqSlis).to receive(:record_execution_apdex).with(labels.slice(:worker,
:feature_category,
- :urgency), monotonic_time_duration)
+ :urgency,
+ :external_dependencies), monotonic_time_duration)
expect(Gitlab::Metrics::SidekiqSlis).to receive(:record_execution_error).with(labels.slice(:worker,
:feature_category,
- :urgency), false)
+ :urgency,
+ :external_dependencies), false)
subject.call(worker, job, :test) { nil }
end
@@ -221,7 +225,8 @@ RSpec.describe Gitlab::SidekiqMiddleware::ServerMetrics do
expect(Gitlab::Metrics::SidekiqSlis).not_to receive(:record_execution_apdex)
expect(Gitlab::Metrics::SidekiqSlis).to receive(:record_execution_error).with(labels.slice(:worker,
:feature_category,
- :urgency), true)
+ :urgency,
+ :external_dependencies), true)
expect { subject.call(worker, job, :test) { raise StandardError, "Failed" } }.to raise_error(StandardError, "Failed")
end
diff --git a/spec/requests/api/graphql/gitlab_schema_spec.rb b/spec/requests/api/graphql/gitlab_schema_spec.rb
index c5286b93251..ad21006f99a 100644
--- a/spec/requests/api/graphql/gitlab_schema_spec.rb
+++ b/spec/requests/api/graphql/gitlab_schema_spec.rb
@@ -264,8 +264,8 @@ RSpec.describe 'GitlabSchema configurations', feature_category: :integrations do
let(:headers) { {} }
before do
- allow(GitlabSchema).to receive(:execute).and_wrap_original do |method, *args|
- mock_schema.execute(*args)
+ allow(GitlabSchema).to receive(:execute).and_wrap_original do |method, *args, **kwargs|
+ mock_schema.execute(*args, **kwargs)
end
end
diff --git a/spec/requests/api/usage_data_spec.rb b/spec/requests/api/usage_data_spec.rb
index 935ddbf4764..c8f1e8d6973 100644
--- a/spec/requests/api/usage_data_spec.rb
+++ b/spec/requests/api/usage_data_spec.rb
@@ -164,6 +164,61 @@ RSpec.describe API::UsageData, feature_category: :service_ping do
end
end
+ describe 'POST /usage_data/track_event' do
+ let(:endpoint) { '/usage_data/track_event' }
+ let(:known_event) { 'i_compliance_dashboard' }
+ let(:unknown_event) { 'unknown' }
+ let(:namespace_id) { 123 }
+ let(:project_id) { 123 }
+
+ context 'without CSRF token' do
+ it 'returns forbidden' do
+ allow(Gitlab::RequestForgeryProtection).to receive(:verified?).and_return(false)
+
+ post api(endpoint, user), params: { event: known_event, namespace_id: namespace_id, project_id: project_id }
+
+ expect(response).to have_gitlab_http_status(:forbidden)
+ end
+ end
+
+ context 'usage_data_api feature not enabled' do
+ it 'returns not_found' do
+ stub_feature_flags(usage_data_api: false)
+
+ post api(endpoint, user), params: { event: known_event, namespace_id: namespace_id, project_id: project_id }
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ context 'without authentication' do
+ it 'returns 401 response' do
+ post api(endpoint), params: { event: known_event, namespace_id: namespace_id, project_id: project_id }
+
+ expect(response).to have_gitlab_http_status(:unauthorized)
+ end
+ end
+
+ context 'with authentication' do
+ before do
+ stub_application_setting(usage_ping_enabled: true)
+ allow(Gitlab::RequestForgeryProtection).to receive(:verified?).and_return(true)
+ end
+
+ context 'with correct params' do
+ it 'returns status ok' do
+ expect(Gitlab::InternalEvents).to receive(:track_event).with(known_event, anything)
+ # allow other events to also get triggered
+ allow(Gitlab::InternalEvents).to receive(:track_event)
+
+ post api(endpoint, user), params: { event: known_event, namespace_id: namespace_id, project_id: project_id }
+
+ expect(response).to have_gitlab_http_status(:ok)
+ end
+ end
+ end
+ end
+
describe 'GET /usage_data/metric_definitions' do
let(:endpoint) { '/usage_data/metric_definitions' }
let(:metric_yaml) do
diff --git a/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb b/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb
index a0b22267960..79c931990bb 100644
--- a/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb
+++ b/spec/services/auto_merge/merge_when_pipeline_succeeds_service_spec.rb
@@ -3,30 +3,7 @@
require 'spec_helper'
RSpec.describe AutoMerge::MergeWhenPipelineSucceedsService, feature_category: :code_review_workflow do
- let_it_be(:user) { create(:user) }
- let_it_be(:project) { create(:project, :repository) }
-
- let(:mr_merge_if_green_enabled) do
- create(:merge_request, merge_when_pipeline_succeeds: true, merge_user: user,
- source_branch: "master", target_branch: 'feature',
- source_project: project, target_project: project, state: "opened")
- end
-
- let(:pipeline) do
- create(:ci_pipeline, ref: mr_merge_if_green_enabled.source_branch, project: project)
- end
-
- let(:service) do
- described_class.new(project, user, commit_message: 'Awesome message')
- end
-
- before_all do
- project.add_maintainer(user)
- end
-
- before do
- allow(MergeWorker).to receive(:with_status).and_return(MergeWorker)
- end
+ include_context 'for auto_merge strategy context'
describe "#available_for?" do
subject { service.available_for?(mr_merge_if_green_enabled) }
@@ -64,152 +41,24 @@ RSpec.describe AutoMerge::MergeWhenPipelineSucceedsService, feature_category: :c
end
describe "#execute" do
- let(:merge_request) do
- create(:merge_request, target_project: project, source_project: project,
- source_branch: "feature", target_branch: 'master')
- end
-
- context 'first time enabling' do
- before do
- allow(merge_request)
- .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
- expect(MailScheduler::NotificationServiceWorker).to receive(:perform_async).with('merge_when_pipeline_succeeds', merge_request, user).once
-
- service.execute(merge_request)
- end
-
- it 'sets the params, merge_user, and flag' do
- expect(merge_request).to be_valid
- expect(merge_request.merge_when_pipeline_succeeds).to be_truthy
- expect(merge_request.merge_params).to include 'commit_message' => 'Awesome message'
- expect(merge_request.merge_user).to be user
- expect(merge_request.auto_merge_strategy).to eq AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS
- end
-
- it 'creates a system note' do
- pipeline = build(:ci_pipeline)
- allow(merge_request).to receive(:actual_head_pipeline) { pipeline }
-
- note = merge_request.notes.last
- expect(note.note).to match "enabled an automatic merge when the pipeline for #{pipeline.sha}"
- end
- end
-
- context 'already approved' do
- let(:service) { described_class.new(project, user, should_remove_source_branch: true) }
- let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch) }
-
- before do
- allow(mr_merge_if_green_enabled)
- .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
-
- allow(mr_merge_if_green_enabled).to receive(:mergeable?)
- .and_return(true)
-
- allow(pipeline).to receive(:success?).and_return(true)
- end
-
- it 'updates the merge params' do
- expect(SystemNoteService).not_to receive(:merge_when_pipeline_succeeds)
- expect(MailScheduler::NotificationServiceWorker).not_to receive(:perform_async).with('merge_when_pipeline_succeeds', any_args)
-
- service.execute(mr_merge_if_green_enabled)
- expect(mr_merge_if_green_enabled.merge_params).to have_key('should_remove_source_branch')
+ it_behaves_like 'auto_merge service #execute', 'merge_when_pipeline_succeeds' do
+ let(:auto_merge_strategy) { AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS }
+ let(:expected_note) do
+ "enabled an automatic merge when the pipeline for #{pipeline.sha}"
end
end
end
describe "#process" do
- let(:merge_request_ref) { mr_merge_if_green_enabled.source_branch }
- let(:merge_request_head) do
- project.commit(mr_merge_if_green_enabled.source_branch).id
- end
-
- context 'when triggered by pipeline with valid ref and sha' do
- let(:triggering_pipeline) do
- create(:ci_pipeline, project: project, ref: merge_request_ref,
- sha: merge_request_head, status: 'success',
- head_pipeline_of: mr_merge_if_green_enabled)
- end
-
- it "merges all merge requests with merge when the pipeline succeeds enabled" do
- allow(mr_merge_if_green_enabled)
- .to receive_messages(head_pipeline: triggering_pipeline, actual_head_pipeline: triggering_pipeline)
-
- expect(MergeWorker).to receive(:perform_async)
- service.process(mr_merge_if_green_enabled)
- end
- end
-
- context 'when triggered by an old pipeline' do
- let(:old_pipeline) do
- create(:ci_pipeline, project: project, ref: merge_request_ref,
- sha: '1234abcdef', status: 'success')
- end
-
- it 'does not merge request' do
- expect(MergeWorker).not_to receive(:perform_async)
- service.process(mr_merge_if_green_enabled)
- end
- end
-
- context 'when triggered by pipeline from a different branch' do
- let(:unrelated_pipeline) do
- create(:ci_pipeline, project: project, ref: 'feature',
- sha: merge_request_head, status: 'success')
- end
-
- it 'does not merge request' do
- expect(MergeWorker).not_to receive(:perform_async)
- service.process(mr_merge_if_green_enabled)
- end
- end
-
- context 'when pipeline is merge request pipeline' do
- let(:pipeline) do
- create(:ci_pipeline, :success,
- source: :merge_request_event,
- ref: mr_merge_if_green_enabled.merge_ref_path,
- merge_request: mr_merge_if_green_enabled,
- merge_requests_as_head_pipeline: [mr_merge_if_green_enabled])
- end
-
- it 'merges the associated merge request' do
- allow(mr_merge_if_green_enabled)
- .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
-
- expect(MergeWorker).to receive(:perform_async)
- service.process(mr_merge_if_green_enabled)
- end
- end
+ it_behaves_like 'auto_merge service #process'
end
- describe "#cancel" do
- before do
- service.cancel(mr_merge_if_green_enabled)
- end
-
- it "resets all the pipeline succeeds params" do
- expect(mr_merge_if_green_enabled.merge_when_pipeline_succeeds).to be_falsey
- expect(mr_merge_if_green_enabled.merge_params).to eq({})
- expect(mr_merge_if_green_enabled.merge_user).to be nil
- end
-
- it 'posts a system note' do
- note = mr_merge_if_green_enabled.notes.last
- expect(note.note).to include 'canceled the automatic merge'
- end
+ describe '#cancel' do
+ it_behaves_like 'auto_merge service #cancel'
end
- describe "#abort" do
- before do
- service.abort(mr_merge_if_green_enabled, 'an error')
- end
-
- it 'posts a system note' do
- note = mr_merge_if_green_enabled.notes.last
- expect(note.note).to include 'aborted the automatic merge'
- end
+ describe '#abort' do
+ it_behaves_like 'auto_merge service #abort'
end
describe 'pipeline integration' do
diff --git a/spec/services/ci/create_pipeline_service/rules_spec.rb b/spec/services/ci/create_pipeline_service/rules_spec.rb
index 87112137675..a81d1487fab 100644
--- a/spec/services/ci/create_pipeline_service/rules_spec.rb
+++ b/spec/services/ci/create_pipeline_service/rules_spec.rb
@@ -452,42 +452,6 @@ RSpec.describe Ci::CreatePipelineService, :yaml_processor_feature_flag_corectnes
expect(job4.needs).to contain_exactly(an_object_having_attributes(name: 'job3'))
end
end
-
- context 'when the FF introduce_rules_with_needs is disabled' do
- before do
- stub_feature_flags(introduce_rules_with_needs: false)
- end
-
- context 'when the `$var` rule matches' do
- it 'creates a pipeline without overridden needs' do
- expect(pipeline).to be_persisted
- expect(build_names).to contain_exactly('job1', 'job2', 'job3', 'job4')
-
- expect(job1.needs).to be_empty
- expect(job2.needs).to be_empty
- expect(job3.needs).to be_empty
- expect(job4.needs).to contain_exactly(an_object_having_attributes(name: 'job1'))
- end
- end
-
- context 'when the `$var` rule does not match' do
- let(:initialization_params) { base_initialization_params.merge(variables_attributes: variables_attributes) }
-
- let(:variables_attributes) do
- [{ key: 'var', secret_value: 'SOME_VAR' }]
- end
-
- it 'creates a pipeline without overridden needs' do
- expect(pipeline).to be_persisted
- expect(build_names).to contain_exactly('job1', 'job2', 'job3', 'job4')
-
- expect(job1.needs).to be_empty
- expect(job2.needs).to be_empty
- expect(job3.needs).to be_empty
- expect(job4.needs).to contain_exactly(an_object_having_attributes(name: 'job1'))
- end
- end
- end
end
end
diff --git a/spec/services/ci/pipeline_trigger_service_spec.rb b/spec/services/ci/pipeline_trigger_service_spec.rb
index b6e07e82bb5..fbd1a765351 100644
--- a/spec/services/ci/pipeline_trigger_service_spec.rb
+++ b/spec/services/ci/pipeline_trigger_service_spec.rb
@@ -23,8 +23,8 @@ RSpec.describe Ci::PipelineTriggerService, feature_category: :continuous_integra
shared_examples 'detecting an unprocessable pipeline trigger' do
context 'when the pipeline was not created successfully' do
let(:fail_pipeline) do
- receive(:execute).and_wrap_original do |original, *args|
- response = original.call(*args)
+ receive(:execute).and_wrap_original do |original, *args, **kwargs|
+ response = original.call(*args, **kwargs)
pipeline = response.payload
pipeline.update!(failure_reason: 'unknown_failure')
diff --git a/spec/services/packages/cleanup/execute_policy_service_spec.rb b/spec/services/packages/cleanup/execute_policy_service_spec.rb
index a083dc0d4ea..249fd50588f 100644
--- a/spec/services/packages/cleanup/execute_policy_service_spec.rb
+++ b/spec/services/packages/cleanup/execute_policy_service_spec.rb
@@ -122,13 +122,13 @@ RSpec.describe Packages::Cleanup::ExecutePolicyService, feature_category: :packa
def mock_service_timeout(on_iteration:)
execute_call_count = 1
expect_next_instances_of(::Packages::MarkPackageFilesForDestructionService, 3) do |service|
- expect(service).to receive(:execute).and_wrap_original do |m, *args|
+ expect(service).to receive(:execute).and_wrap_original do |m, *args, **kwargs|
# timeout if we are on the right iteration
if execute_call_count == on_iteration
service_timeout_response
else
execute_call_count += 1
- m.call(*args)
+ m.call(*args, **kwargs)
end
end
end
diff --git a/spec/simplecov_env.rb b/spec/simplecov_env.rb
index 098c38ff212..47a2f43e30c 100644
--- a/spec/simplecov_env.rb
+++ b/spec/simplecov_env.rb
@@ -70,7 +70,6 @@ module SimpleCovEnv
add_group 'Fixtures', %r{^/(ee/)?db/fixtures}
add_group 'GraphQL', %r{^/(ee/)?app/graphql}
add_group 'Helpers', %r{^/(ee/)?app/helpers}
- add_group 'Initializers', %r{^/(ee/)?config/(initializers|initializers_before_autoloader)}
add_group 'Libraries', %r{^/(ee/)?lib}
add_group 'Mailers', %r{^/(ee/)?app/mailers}
add_group 'Metrics server', %r{^/(ee/)?metrics_server}
diff --git a/spec/support/shared_examples/services/auto_merge_shared_examples.rb b/spec/support/shared_examples/services/auto_merge_shared_examples.rb
new file mode 100644
index 00000000000..b295b65fdd1
--- /dev/null
+++ b/spec/support/shared_examples/services/auto_merge_shared_examples.rb
@@ -0,0 +1,182 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'for auto_merge strategy context' do
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository) }
+
+ let(:mr_merge_if_green_enabled) do
+ create(:merge_request,
+ merge_when_pipeline_succeeds: true,
+ merge_user: user,
+ source_branch: 'master', target_branch: 'feature',
+ source_project: project, target_project: project,
+ state: 'opened')
+ end
+
+ let(:pipeline) { create(:ci_pipeline, ref: mr_merge_if_green_enabled.source_branch, project: project) }
+
+ let(:service) { described_class.new(project, user, commit_message: 'Awesome message') }
+
+ before_all do
+ project.add_maintainer(user)
+ end
+
+ before do
+ allow(MergeWorker).to receive(:with_status).and_return(MergeWorker)
+ end
+end
+
+RSpec.shared_examples 'auto_merge service #execute' do
+ let(:merge_request) do
+ create(:merge_request, target_project: project, source_project: project,
+ source_branch: 'feature', target_branch: 'master')
+ end
+
+ context 'when first time enabling' do
+ before do
+ allow(merge_request)
+ .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
+ allow(MailScheduler::NotificationServiceWorker).to receive(:perform_async)
+
+ service.execute(merge_request)
+ end
+
+ it 'sets the params, merge_user, and flag' do
+ expect(merge_request).to be_valid
+ expect(merge_request.merge_when_pipeline_succeeds).to be_truthy
+ expect(merge_request.merge_params).to include 'commit_message' => 'Awesome message'
+ expect(merge_request.merge_user).to be user
+ expect(merge_request.auto_merge_strategy).to eq auto_merge_strategy
+ end
+
+ it 'schedules a notification' do
+ expect(MailScheduler::NotificationServiceWorker).to have_received(:perform_async).with(
+ 'merge_when_pipeline_succeeds', merge_request, user).once
+ end
+
+ it 'creates a system note' do
+ pipeline = build(:ci_pipeline)
+ allow(merge_request).to receive(:actual_head_pipeline) { pipeline }
+
+ note = merge_request.notes.last
+ expect(note.note).to match expected_note
+ end
+ end
+
+ context 'when already approved' do
+ let(:service) { described_class.new(project, user, should_remove_source_branch: true) }
+ let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch) }
+
+ before do
+ allow(mr_merge_if_green_enabled)
+ .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
+
+ allow(mr_merge_if_green_enabled).to receive(:mergeable?)
+ .and_return(true)
+
+ allow(pipeline).to receive(:success?).and_return(true)
+ end
+
+ it 'updates the merge params' do
+ expect(SystemNoteService).not_to receive(:merge_when_pipeline_succeeds)
+ expect(MailScheduler::NotificationServiceWorker).not_to receive(:perform_async).with(
+ 'merge_when_pipeline_succeeds', any_args)
+
+ service.execute(mr_merge_if_green_enabled)
+ expect(mr_merge_if_green_enabled.merge_params).to have_key('should_remove_source_branch')
+ end
+ end
+end
+
+RSpec.shared_examples 'auto_merge service #process' do
+ let(:merge_request_ref) { mr_merge_if_green_enabled.source_branch }
+ let(:merge_request_head) do
+ project.commit(mr_merge_if_green_enabled.source_branch).id
+ end
+
+ context 'when triggered by pipeline with valid ref and sha' do
+ let(:triggering_pipeline) do
+ create(:ci_pipeline, project: project, ref: merge_request_ref,
+ sha: merge_request_head, status: 'success',
+ head_pipeline_of: mr_merge_if_green_enabled)
+ end
+
+ it "merges all merge requests with merge when the pipeline succeeds enabled" do
+ allow(mr_merge_if_green_enabled)
+ .to receive_messages(head_pipeline: triggering_pipeline, actual_head_pipeline: triggering_pipeline)
+
+ expect(MergeWorker).to receive(:perform_async)
+ service.process(mr_merge_if_green_enabled)
+ end
+ end
+
+ context 'when triggered by an old pipeline' do
+ let(:old_pipeline) do
+ create(:ci_pipeline, project: project, ref: merge_request_ref,
+ sha: '1234abcdef', status: 'success')
+ end
+
+ it 'does not merge request' do
+ expect(MergeWorker).not_to receive(:perform_async)
+ service.process(mr_merge_if_green_enabled)
+ end
+ end
+
+ context 'when triggered by pipeline from a different branch' do
+ let(:unrelated_pipeline) do
+ create(:ci_pipeline, project: project, ref: 'feature',
+ sha: merge_request_head, status: 'success')
+ end
+
+ it 'does not merge request' do
+ expect(MergeWorker).not_to receive(:perform_async)
+ service.process(mr_merge_if_green_enabled)
+ end
+ end
+
+ context 'when pipeline is merge request pipeline' do
+ let(:pipeline) do
+ create(:ci_pipeline, :success,
+ source: :merge_request_event,
+ ref: mr_merge_if_green_enabled.merge_ref_path,
+ merge_request: mr_merge_if_green_enabled,
+ merge_requests_as_head_pipeline: [mr_merge_if_green_enabled])
+ end
+
+ it 'merges the associated merge request' do
+ allow(mr_merge_if_green_enabled)
+ .to receive_messages(head_pipeline: pipeline, actual_head_pipeline: pipeline)
+
+ expect(MergeWorker).to receive(:perform_async)
+ service.process(mr_merge_if_green_enabled)
+ end
+ end
+end
+
+RSpec.shared_examples 'auto_merge service #cancel' do
+ before do
+ service.cancel(mr_merge_if_green_enabled)
+ end
+
+ it "resets all the pipeline succeeds params" do
+ expect(mr_merge_if_green_enabled.merge_when_pipeline_succeeds).to be_falsey
+ expect(mr_merge_if_green_enabled.merge_params).to eq({})
+ expect(mr_merge_if_green_enabled.merge_user).to be nil
+ end
+
+ it 'posts a system note' do
+ note = mr_merge_if_green_enabled.notes.last
+ expect(note.note).to include 'canceled the automatic merge'
+ end
+end
+
+RSpec.shared_examples 'auto_merge service #abort' do
+ before do
+ service.abort(mr_merge_if_green_enabled, 'an error')
+ end
+
+ it 'posts a system note' do
+ note = mr_merge_if_green_enabled.notes.last
+ expect(note.note).to include 'aborted the automatic merge'
+ end
+end
diff --git a/vendor/gems/attr_encrypted/.gitlab-ci.yml b/vendor/gems/attr_encrypted/.gitlab-ci.yml
index 7d954de43a0..c285eef6e64 100644
--- a/vendor/gems/attr_encrypted/.gitlab-ci.yml
+++ b/vendor/gems/attr_encrypted/.gitlab-ci.yml
@@ -1,26 +1,12 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-default:
- image: "ruby:${RUBY_VERSION}"
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "attr_encrypted"
+ gem_path_prefix: "vendor/gems/"
rspec:
- cache:
- key: attr_encrypted-ruby
- paths:
- - vendor/gems/attr_encrypted/vendor/ruby
- before_script:
- - cd vendor/gems/attr_encrypted
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development' # This is set to 'deployment' otherwise
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
script:
- bundle exec rake test
parallel:
matrix:
- - RUBY_VERSION: ["2.7", "3.0", "3.1"]
+ - RUBY_VERSION: ["3.0", "3.1"] # 3.2 isn't supported yet
diff --git a/vendor/gems/bundler-checksum/.gitlab-ci.yml b/vendor/gems/bundler-checksum/.gitlab-ci.yml
index 2de1c5e982c..0ec9a5d94f1 100644
--- a/vendor/gems/bundler-checksum/.gitlab-ci.yml
+++ b/vendor/gems/bundler-checksum/.gitlab-ci.yml
@@ -1,24 +1,10 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "bundler-checksum"
+ gem_path_prefix: "vendor/gems/"
rspec:
- image: "ruby:${RUBY_VERSION}"
- cache:
- key: bundler-checksum
- paths:
- - vendor/gems/bundler-checksum/vendor/ruby
- before_script:
- - cd vendor/gems/bundler-checksum
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
+ extends: .ruby_matrix
script:
- pushd test/project_with_checksum_lock && scripts/test
- parallel:
- matrix:
- - RUBY_VERSION: ["2.7", "3.0", "3.1", "3.2"]
diff --git a/vendor/gems/cloud_profiler_agent/.gitlab-ci.yml b/vendor/gems/cloud_profiler_agent/.gitlab-ci.yml
index 9e508d920e8..aa4638486e5 100644
--- a/vendor/gems/cloud_profiler_agent/.gitlab-ci.yml
+++ b/vendor/gems/cloud_profiler_agent/.gitlab-ci.yml
@@ -1,32 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: cloud_profiler_agent-ruby-${RUBY_VERSION}
- paths:
- - vendor/gems/cloud_profiler_agent/vendor/ruby
- before_script:
- - cd vendor/gems/cloud_profiler_agent
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
-
-rspec-3.2:
- image: "ruby:3.2"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "cloud_profiler_agent"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml b/vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml
index ed5e27f5a8c..c8698943ca9 100644
--- a/vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml
+++ b/vendor/gems/devise-pbkdf2-encryptable/.gitlab-ci.yml
@@ -1,28 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: devise-pbkdf2-encryptable
- paths:
- - vendor/gems/devise-pbkdf2-encryptable/vendor/ruby
- before_script:
- - cd vendor/gems/devise-pbkdf2-encryptable
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "devise-pbkdf2-encryptable"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/gitlab_active_record/.gitlab-ci.yml b/vendor/gems/gitlab_active_record/.gitlab-ci.yml
index a1e883119e8..a9bc04659d7 100644
--- a/vendor/gems/gitlab_active_record/.gitlab-ci.yml
+++ b/vendor/gems/gitlab_active_record/.gitlab-ci.yml
@@ -1,28 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: gitlab_active_record-ruby
- paths:
- - vendor/gems/gitlab_active_record/vendor/ruby
- before_script:
- - cd vendor/gems/gitlab_active_record
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "gitlab_active_record"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/ipynbdiff/.gitlab-ci.yml b/vendor/gems/ipynbdiff/.gitlab-ci.yml
index bf8f8b15c26..dd8f61050bb 100644
--- a/vendor/gems/ipynbdiff/.gitlab-ci.yml
+++ b/vendor/gems/ipynbdiff/.gitlab-ci.yml
@@ -1,34 +1,10 @@
-# You can override the included template(s) by including variable overrides
-# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings
-# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings
-# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings
-# Note that environment variables can be set in several places
-# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "ipynbdiff"
+ gem_path_prefix: "vendor/gems/"
-.rspec:
- cache:
- key: ipynbdiff
- paths:
- - vendor/gems/ipynbdiff/vendor/ruby
- before_script:
- - cd vendor/gems/ipynbdiff
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
+rspec:
+ parallel:
+ matrix:
+ - RUBY_VERSION: ["3.0", "3.1"] # 3.2 isn't supported yet
diff --git a/vendor/gems/mail-smtp_pool/.gitlab-ci.yml b/vendor/gems/mail-smtp_pool/.gitlab-ci.yml
index dee865f3cd6..260bc1aaa1f 100644
--- a/vendor/gems/mail-smtp_pool/.gitlab-ci.yml
+++ b/vendor/gems/mail-smtp_pool/.gitlab-ci.yml
@@ -1,28 +1,10 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "mail-smtp_pool"
+ gem_path_prefix: "vendor/gems/"
-.rspec:
- cache:
- key: mail-smtp_pool-ruby
- paths:
- - vendor/gems/mail-smtp_pool/vendor/ruby
- before_script:
- - cd vendor/gems/mail-smtp_pool
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
+rspec:
+ parallel:
+ matrix:
+ - RUBY_VERSION: ["3.0"] # 3.1 & 3.2 aren't supported yet
diff --git a/vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml b/vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml
index 1b10debb1b9..d1055958749 100644
--- a/vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml
+++ b/vendor/gems/microsoft_graph_mailer/.gitlab-ci.yml
@@ -1,32 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: microsoft_graph_mailer-ruby
- paths:
- - vendor/gems/microsoft_graph_mailer/vendor/ruby
- before_script:
- - cd vendor/gems/microsoft_graph_mailer
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "microsoft_graph_mailer"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml b/vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml
index 816b868915f..b49143ebd33 100644
--- a/vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml
+++ b/vendor/gems/omniauth-azure-oauth2/.gitlab-ci.yml
@@ -1,36 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: omniauth-azure-oauth2
- paths:
- - vendor/gems/omniauth-azure-oauth2/vendor/ruby
- before_script:
- - cd vendor/gems/omniauth-azure-oauth2
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
-
-rspec-3.2:
- image: "ruby:3.2"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-azure-oauth2"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/omniauth-gitlab/.gitlab-ci.yml b/vendor/gems/omniauth-gitlab/.gitlab-ci.yml
index a802029c008..10382723643 100644
--- a/vendor/gems/omniauth-gitlab/.gitlab-ci.yml
+++ b/vendor/gems/omniauth-gitlab/.gitlab-ci.yml
@@ -1,36 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: omniauth-gitlab-ruby
- paths:
- - vendor/gems/omniauth-gitlab/vendor/ruby
- before_script:
- - cd vendor/gems/omniauth-gitlab
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
-
-rspec-3.2:
- image: "ruby:3.2"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-gitlab"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/omniauth-salesforce/.gitlab-ci.yml b/vendor/gems/omniauth-salesforce/.gitlab-ci.yml
index 15e7392e46b..bd630fbdcd0 100644
--- a/vendor/gems/omniauth-salesforce/.gitlab-ci.yml
+++ b/vendor/gems/omniauth-salesforce/.gitlab-ci.yml
@@ -1,36 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: omniauth-salesforce
- paths:
- - vendor/gems/omniauth-salesforce/vendor/ruby
- before_script:
- - cd vendor/gems/omniauth-salesforce
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
-
-rspec-3.2:
- image: "ruby:3.2"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth-salesforce"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/omniauth_crowd/.gitlab-ci.yml b/vendor/gems/omniauth_crowd/.gitlab-ci.yml
index ddc5d2fa5c3..9265f7a04a0 100644
--- a/vendor/gems/omniauth_crowd/.gitlab-ci.yml
+++ b/vendor/gems/omniauth_crowd/.gitlab-ci.yml
@@ -1,36 +1,5 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-.rspec:
- cache:
- key: omniauth_crowd
- paths:
- - vendor/gems/omniauth_crowd/vendor/ruby
- before_script:
- - cd vendor/gems/omniauth_crowd
- - ruby -v # Print out ruby version for debugging
- - gem install bundler --no-document # Bundler is not installed with the image
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development'
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install -j $(nproc)
- script:
- - bundle exec rspec
-
-rspec-2.7:
- image: "ruby:2.7"
- extends: .rspec
-
-rspec-3.0:
- image: "ruby:3.0"
- extends: .rspec
-
-rspec-3.1:
- image: "ruby:3.1"
- extends: .rspec
-
-rspec-3.2:
- image: "ruby:3.2"
- extends: .rspec
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "omniauth_crowd"
+ gem_path_prefix: "vendor/gems/"
diff --git a/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml b/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
index fdf9ccdeb55..9df01687447 100644
--- a/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
+++ b/vendor/gems/sidekiq-reliable-fetch/.gitlab-ci.yml
@@ -1,71 +1,54 @@
-workflow:
- rules:
- - if: $CI_MERGE_REQUEST_ID
-
-default:
- image: ruby:3.0
-
-before_script:
- - cd vendor/gems/sidekiq-reliable-fetch
- - ruby -v
- - which ruby
- - gem install bundler
- - bundle config set --local path 'vendor' # Install dependencies into ./vendor/ruby
- - bundle config set with 'development' # This is set to 'deployment' otherwise
- - bundle config set --local frozen 'true' # Disallow Gemfile.lock changes on CI
- - bundle config # Show bundler configuration
- - bundle install --jobs $(nproc) "${FLAGS[@]}"
-
-variables:
- REDIS_URL: "redis://redis"
+include:
+ - local: gems/gem.gitlab-ci.yml
+ inputs:
+ gem_name: "sidekiq-reliable-fetch"
+ gem_path_prefix: "vendor/gems/"
rspec:
- stage: test
- coverage: '/LOC \((\d+\.\d+%)\) covered.$/'
- script:
- - bundle exec rspec
+ extends:
+ - .with_redis
+ parallel:
+ matrix:
+ - RUBY_VERSION: ["3.0", "3.1"] # 3.2 isn't supported yet
+
+.with_redis:
services:
- redis:alpine
- artifacts:
- expire_in: 31d
- when: always
- paths:
- - coverage/
+ variables:
+ REDIS_URL: "redis://redis"
-.integration:
- stage: test
+.reliability:
+ extends:
+ - .with_redis
+ - .ruby_matrix
script:
- cd tests/reliability
- bundle exec ruby reliability_test.rb
- services:
- - redis:alpine
integration_semi:
- extends: .integration
+ extends: .reliability
variables:
JOB_FETCHER: semi
integration_reliable:
- extends: .integration
+ extends: .reliability
variables:
JOB_FETCHER: reliable
-kill_interruption:
- stage: test
+.interruption:
+ extends:
+ - .with_redis
+ - .ruby_matrix
script:
- cd tests/interruption
- - bundle exec ruby test_kill_signal.rb
- services:
- - redis:alpine
+ - bundle exec ruby "test_${SIGNAL}_signal.rb"
-term_interruption:
- stage: test
- script:
- - cd tests/interruption
- - bundle exec ruby test_term_signal.rb
- services:
- - redis:alpine
+kill_interruption:
+ extends: .interruption
+ variables:
+ SIGNAL: kill
-# rubocop:
-# script:
-# - bundle exec rubocop
+term_interruption:
+ extends: .interruption
+ variables:
+ SIGNAL: term
diff --git a/workhorse/go.mod b/workhorse/go.mod
index 78e36c76da2..000593c6025 100644
--- a/workhorse/go.mod
+++ b/workhorse/go.mod
@@ -26,7 +26,7 @@ require (
github.com/sirupsen/logrus v1.9.3
github.com/smartystreets/goconvey v1.7.2
github.com/stretchr/testify v1.8.4
- gitlab.com/gitlab-org/gitaly/v16 v16.1.0
+ gitlab.com/gitlab-org/gitaly/v16 v16.1.1
gitlab.com/gitlab-org/labkit v1.19.0
gocloud.dev v0.29.0
golang.org/x/image v0.7.0
diff --git a/workhorse/go.sum b/workhorse/go.sum
index bdeb8569f89..03b95b15274 100644
--- a/workhorse/go.sum
+++ b/workhorse/go.sum
@@ -1931,8 +1931,8 @@ github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
-gitlab.com/gitlab-org/gitaly/v16 v16.1.0 h1:4fdzT7tTfBNDSL6T9ZvpHA4A9cNq2GVD3AYxmPYWDd4=
-gitlab.com/gitlab-org/gitaly/v16 v16.1.0/go.mod h1:gfmwpE66X4lwAO/RdchFhNINSwteGFer4loUOa94nQE=
+gitlab.com/gitlab-org/gitaly/v16 v16.1.1 h1:0WFlmCii66ys0723lYkp8ZXp7nWbA2FcNUMK/pOw+fU=
+gitlab.com/gitlab-org/gitaly/v16 v16.1.1/go.mod h1:gfmwpE66X4lwAO/RdchFhNINSwteGFer4loUOa94nQE=
gitlab.com/gitlab-org/labkit v1.19.0 h1:7j5NOHE42R0Eu3Bj2BgfbGf4aN2HXMTmCN7H2wcqqyA=
gitlab.com/gitlab-org/labkit v1.19.0/go.mod h1:zeATDAaSBelPcPLbTTq8J3ZJEHyPTLVBM1q3nva+/W4=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=