Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
4f58fd4dd8
commit
0d8f91280e
|
|
@ -3620,31 +3620,7 @@ Gitlab/BoundedContexts:
|
|||
- 'ee/lib/arkose/data_exchange_payload.rb'
|
||||
- 'ee/lib/arkose/logger.rb'
|
||||
- 'ee/lib/arkose/verify_response.rb'
|
||||
- 'ee/lib/audit/application_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/base_changes_auditor.rb'
|
||||
- 'ee/lib/audit/changes.rb'
|
||||
- 'ee/lib/audit/ci/artifact_download_auditor.rb'
|
||||
- 'ee/lib/audit/compliance_framework_changes_auditor.rb'
|
||||
- 'ee/lib/audit/details.rb'
|
||||
- 'ee/lib/audit/external_status_check_changes_auditor.rb'
|
||||
- 'ee/lib/audit/group_changes_auditor.rb'
|
||||
- 'ee/lib/audit/group_merge_request_approval_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/merge_request_before_destroy_auditor.rb'
|
||||
- 'ee/lib/audit/merge_request_destroy_auditor.rb'
|
||||
- 'ee/lib/audit/namespace_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/project_changes_auditor.rb'
|
||||
- 'ee/lib/audit/project_ci_cd_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/project_feature_changes_auditor.rb'
|
||||
- 'ee/lib/audit/project_security_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/project_setting_changes_auditor.rb'
|
||||
- 'ee/lib/audit/protected_branches_changes_auditor.rb'
|
||||
- 'ee/lib/audit/protected_environment_authorization_rule_changes_auditor.rb'
|
||||
- 'ee/lib/audit/push_rules/base_push_rules_changes_auditor.rb'
|
||||
- 'ee/lib/audit/push_rules/group_push_rules_changes_auditor.rb'
|
||||
- 'ee/lib/audit/push_rules/project_push_rules_changes_auditor.rb'
|
||||
- 'ee/lib/audit/unauthenticated_security_event_auditor.rb'
|
||||
- 'ee/lib/audit/user_password_reset_auditor.rb'
|
||||
- 'ee/lib/audit/user_setting_changes_auditor.rb'
|
||||
- 'ee/lib/bulk_imports/epic_object_creator.rb'
|
||||
- 'ee/lib/bulk_imports/groups/graphql/get_iterations_query.rb'
|
||||
- 'ee/lib/bulk_imports/groups/pipelines/epics_pipeline.rb'
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ Layout/LineContinuationSpacing:
|
|||
- 'ee/spec/graphql/mutations/requirements_management/export_requirements_spec.rb'
|
||||
- 'ee/spec/helpers/ee/labels_helper_spec.rb'
|
||||
- 'ee/spec/helpers/push_rules_helper_spec.rb'
|
||||
- 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/ci/pipeline/quota/size_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/ci/pipeline/chain/limit/size_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/git_access_spec.rb'
|
||||
|
|
|
|||
|
|
@ -172,8 +172,6 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'ee/lib/api/iterations.rb'
|
||||
- 'ee/lib/api/protected_environments.rb'
|
||||
- 'ee/lib/api/vulnerability_findings.rb'
|
||||
- 'ee/lib/audit/merge_request_before_destroy_auditor.rb'
|
||||
- 'ee/lib/audit/protected_environment_authorization_rule_changes_auditor.rb'
|
||||
- 'ee/lib/ee/api/features.rb'
|
||||
- 'ee/lib/ee/api/helpers/groups_helpers.rb'
|
||||
- 'ee/lib/ee/gitlab/auth/ldap/access.rb'
|
||||
|
|
@ -225,14 +223,12 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'ee/spec/helpers/ee/profiles_helper_spec.rb'
|
||||
- 'ee/spec/helpers/routing/pseudonymization_helper_spec.rb'
|
||||
- 'ee/spec/helpers/users/identity_verification_helper_spec.rb'
|
||||
- 'ee/spec/lib/audit/merge_request_before_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/merge_request_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/protected_environment_authorization_rule_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/ci/parsers/security/validators/schema_validator_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/ci/pipeline/quota/size_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/ci/status/build/manual_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/namespace_storage_size_error_message_spec.rb'
|
||||
- 'ee/spec/lib/environments/protected_environment_authorization_rule_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/ci/config/entry/secret_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/ci/pipeline/chain/limit/size_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/ci/yaml_processor_spec.rb'
|
||||
|
|
|
|||
|
|
@ -262,7 +262,6 @@ RSpec/BeforeAllRoleAssignment:
|
|||
- 'ee/spec/helpers/tree_helper_spec.rb'
|
||||
- 'ee/spec/helpers/vulnerabilities_helper_spec.rb'
|
||||
- 'ee/spec/lib/analytics/group_activity_calculator_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_feature_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/common/pipelines/boards_pipeline_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/groups/pipelines/epics_pipeline_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
|
||||
|
|
@ -281,6 +280,7 @@ RSpec/BeforeAllRoleAssignment:
|
|||
- 'ee/spec/lib/gitlab/llm/chain/tools/gitlab_documentation/executor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/quick_actions/users_extractor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/reference_extractor_spec.rb'
|
||||
- 'ee/spec/lib/projects/project_feature_changes_auditor_spec.rb'
|
||||
- 'ee/spec/models/analytics/cycle_analytics/group_level_spec.rb'
|
||||
- 'ee/spec/models/dast/profile_schedule_spec.rb'
|
||||
- 'ee/spec/models/ee/award_emoji_spec.rb'
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
---
|
||||
# Cop supports --autocorrect.
|
||||
RSpec/ChangeByZero:
|
||||
Details: grace period
|
||||
Exclude:
|
||||
- 'ee/spec/controllers/groups/todos_controller_spec.rb'
|
||||
- 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_vulnerabilities_feedback_to_vulnerabilities_state_transition_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/scim/group/deprovisioning_service_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/background_migration/create_vulnerability_links_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/models/ee/project_member_spec.rb'
|
||||
- 'ee/spec/models/search/zoekt/repository_spec.rb'
|
||||
- 'ee/spec/requests/api/admin/search/zoekt_spec.rb'
|
||||
|
|
|
|||
|
|
@ -4,13 +4,6 @@ RSpec/ExpectChange:
|
|||
Exclude:
|
||||
- 'ee/spec/graphql/mutations/boards/update_spec.rb'
|
||||
- 'ee/spec/graphql/mutations/incident_management/issuable_resource_link/create_spec.rb'
|
||||
- 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/group_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_ci_cd_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_feature_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/protected_branches_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/common/pipelines/boards_pipeline_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_cadences_pipeline_spec.rb'
|
||||
- 'ee/spec/lib/bulk_imports/groups/pipelines/iterations_pipeline_spec.rb'
|
||||
|
|
@ -22,7 +15,11 @@ RSpec/ExpectChange:
|
|||
- 'ee/spec/lib/gitlab/compliance_management/violations/approved_by_merge_request_author_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/instrumentation/elasticsearch_transport_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/legacy_github_import/project_creator_spec.rb'
|
||||
- 'ee/spec/lib/projects/project_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/projects/project_feature_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/projects/project_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/quality/seeders/vulnerabilities_spec.rb'
|
||||
- 'ee/spec/lib/repositories/protected_branches_changes_auditor_spec.rb'
|
||||
- 'ee/spec/mailers/license_mailer_spec.rb'
|
||||
- 'ee/spec/models/ee/ci/pending_build_spec.rb'
|
||||
- 'ee/spec/models/ee/group_spec.rb'
|
||||
|
|
|
|||
|
|
@ -420,10 +420,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/lib/api/entities/protected_environments/approval_rule_for_summary_spec.rb'
|
||||
- 'ee/spec/lib/api/entities/protected_environments/approval_rule_spec.rb'
|
||||
- 'ee/spec/lib/api/entities/protected_environments/deploy_access_level_spec.rb'
|
||||
- 'ee/spec/lib/audit/base_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/group_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/banzai/filter/cross_project_issuable_information_filter_spec.rb'
|
||||
- 'ee/spec/lib/banzai/filter/jira_private_image_link_filter_spec.rb'
|
||||
- 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb'
|
||||
|
|
|
|||
|
|
@ -226,15 +226,7 @@ RSpec/NamedSubject:
|
|||
- 'ee/spec/lib/api/entities/protected_environments/approval_rule_for_summary_spec.rb'
|
||||
- 'ee/spec/lib/api/entities/protected_environments/approval_rule_spec.rb'
|
||||
- 'ee/spec/lib/api/entities/protected_environments/deploy_access_level_spec.rb'
|
||||
- 'ee/spec/lib/audit/base_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/merge_request_before_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/merge_request_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/project_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/protected_environment_authorization_rule_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/push_rules/group_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/push_rules/project_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit_events/base_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit_events/external_destination_streamer_spec.rb'
|
||||
- 'ee/spec/lib/audit_events/strategies/amazon_s3_destination_strategy_spec.rb'
|
||||
- 'ee/spec/lib/audit_events/strategies/external_destination_strategy_spec.rb'
|
||||
|
|
@ -317,6 +309,7 @@ RSpec/NamedSubject:
|
|||
- 'ee/spec/lib/elastic/latest/wiki_instance_proxy_spec.rb'
|
||||
- 'ee/spec/lib/elastic/multi_version_class_proxy_spec.rb'
|
||||
- 'ee/spec/lib/elastic/multi_version_instance_proxy_spec.rb'
|
||||
- 'ee/spec/lib/environments/protected_environment_authorization_rule_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/distinct_stage_loader_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/request_params_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/analytics/cycle_analytics/summary/change_failure_rate_spec.rb'
|
||||
|
|
@ -458,8 +451,13 @@ RSpec/NamedSubject:
|
|||
- 'ee/spec/lib/gitlab/usage_data_metrics_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/vulnerability_scanning/track_cvs_service_spec.rb'
|
||||
- 'ee/spec/lib/gitlab_subscriptions/upcoming_reconciliation_entity_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/merge_request_before_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/merge_request_destroy_auditor_spec.rb'
|
||||
- 'ee/spec/lib/omni_auth/strategies/kerberos_spec.rb'
|
||||
- 'ee/spec/lib/product_analytics/settings_spec.rb'
|
||||
- 'ee/spec/lib/projects/project_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/repositories/project_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/sidebars/groups/menus/epics_menu_spec.rb'
|
||||
- 'ee/spec/lib/sidebars/groups/menus/security_compliance_menu_spec.rb'
|
||||
- 'ee/spec/lib/sidebars/projects/menus/learn_gitlab_menu_spec.rb'
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ RSpec/ScatteredLet:
|
|||
- 'ee/spec/graphql/types/vulnerability_request_type_spec.rb'
|
||||
- 'ee/spec/graphql/types/vulnerability_response_type_spec.rb'
|
||||
- 'ee/spec/helpers/ee/subscribable_banner_helper_spec.rb'
|
||||
- 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/ee/api/helpers/members_helpers_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/ci/parsers/security/dast_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/code_owners/loader_spec.rb'
|
||||
|
|
@ -17,6 +16,7 @@ RSpec/ScatteredLet:
|
|||
- 'ee/spec/lib/gitlab/insights/reducers/label_count_per_period_reducer_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/approval_project_rules_with_user_metric_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/usage_data_metrics_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/models/approval_wrapped_any_approver_rule_spec.rb'
|
||||
- 'ee/spec/models/dast_site_validation_spec.rb'
|
||||
- 'ee/spec/models/ee/ci/build_dependencies_spec.rb'
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
---
|
||||
RSpec/SubjectDeclaration:
|
||||
Details: grace period
|
||||
Exclude:
|
||||
- 'ee/spec/finders/app_sec/fuzzing/coverage/corpuses_finder_spec.rb'
|
||||
- 'ee/spec/helpers/ee/lock_helper_spec.rb'
|
||||
- 'ee/spec/helpers/nav/new_dropdown_helper_spec.rb'
|
||||
- 'ee/spec/helpers/users/group_callouts_helper_spec.rb'
|
||||
- 'ee/spec/lib/audit/compliance_framework_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/ee/api/helpers/notes_helpers_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/expiring_subscription_message_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/geo/geo_node_status_check_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/llm/concerns/exponential_backoff_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/external_status_check_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/merge_requests/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- 'ee/spec/models/ee/event_collection_spec.rb'
|
||||
- 'ee/spec/models/ee/group_spec.rb'
|
||||
- 'ee/spec/models/integrations/github/status_message_spec.rb'
|
||||
|
|
|
|||
|
|
@ -1492,7 +1492,7 @@ Style/InlineDisableAnnotation:
|
|||
- 'ee/lib/api/ldap_group_links.rb'
|
||||
- 'ee/lib/api/license.rb'
|
||||
- 'ee/lib/api/saml_group_links.rb'
|
||||
- 'ee/lib/audit/changes.rb'
|
||||
- 'ee/lib/audit_events/changes.rb'
|
||||
- 'ee/lib/banzai/filter/references/iteration_reference_filter.rb'
|
||||
- 'ee/lib/ee/api/entities/experiment.rb'
|
||||
- 'ee/lib/ee/api/group_boards.rb'
|
||||
|
|
@ -1603,8 +1603,6 @@ Style/InlineDisableAnnotation:
|
|||
- 'ee/spec/helpers/analytics/analytics_dashboards_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/dashboard_helper_spec.rb'
|
||||
- 'ee/spec/initializers/fog_google_https_private_urls_spec.rb'
|
||||
- 'ee/spec/lib/audit/push_rules/group_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/audit/push_rules/project_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/background_migration/backfill_iteration_cadence_id_for_boards_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/background_migration/delete_invalid_epic_issues_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch_spec.rb'
|
||||
|
|
@ -1629,6 +1627,8 @@ Style/InlineDisableAnnotation:
|
|||
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_secure_pipelines_metric_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_security_scans_metric_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/protected_environment_approval_rules_required_approvals_average_metric_spec.rb'
|
||||
- 'ee/spec/lib/repositories/group_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/lib/repositories/project_push_rules_changes_auditor_spec.rb'
|
||||
- 'ee/spec/mailers/emails/enterprise_users_spec.rb'
|
||||
- 'ee/spec/mailers/emails/merge_requests_spec.rb'
|
||||
- 'ee/spec/mailers/emails/okr_spec.rb'
|
||||
|
|
|
|||
|
|
@ -389,7 +389,7 @@
|
|||
{"name":"mini_histogram","version":"0.3.1","platform":"ruby","checksum":"6a114b504e4618b0e076cc672996036870f7cc6f16b8e5c25c0c637726d2dd94"},
|
||||
{"name":"mini_magick","version":"4.12.0","platform":"ruby","checksum":"67302fa84e63f1002b71416a8466968ed0f33d22f5d42962a0c09a9f1c3a906a"},
|
||||
{"name":"mini_mime","version":"1.1.2","platform":"ruby","checksum":"a54aec0cc7438a03a850adb00daca2bdb60747f839e28186994df057cea87151"},
|
||||
{"name":"mini_portile2","version":"2.8.5","platform":"ruby","checksum":"7a37db8ae758086c3c3ac3a59c036704d331e965d5e106635e4a42d6e66089ce"},
|
||||
{"name":"mini_portile2","version":"2.8.7","platform":"ruby","checksum":"13eef5ab459bbfd33d61e539564ec25a9c2cf593b0a5ea6d4d7ef8c19b162ee0"},
|
||||
{"name":"minitest","version":"5.11.3","platform":"ruby","checksum":"78e18aa2c49c58e9bc53c54a0b900e87ad0a96394e92fbbfa58d3ff860a68f45"},
|
||||
{"name":"mixlib-cli","version":"2.1.8","platform":"ruby","checksum":"e6f27be34d580f6ed71731ca46b967e57793a627131c1f6e1ed2dad39ea3bdf9"},
|
||||
{"name":"mixlib-config","version":"3.0.27","platform":"ruby","checksum":"d7748b1898e4f16502afec1de00b5ad65c6de405114b1b0c65ec61b1a9100148"},
|
||||
|
|
@ -423,17 +423,17 @@
|
|||
{"name":"nio4r","version":"2.7.0","platform":"java","checksum":"3f2e515e928ceeef7668e1f64fc3bfef1417a5ec0908d8e69f2c6d486284e04d"},
|
||||
{"name":"nio4r","version":"2.7.0","platform":"ruby","checksum":"9586a685eca8246d6406e712a525e705d15bb88f709d78fc3f141e864df97276"},
|
||||
{"name":"no_proxy_fix","version":"0.1.2","platform":"ruby","checksum":"4e9b4c31bb146de7fcf347dc1087bb13ac2039b56d50aa019e61036256abcd00"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"aarch64-linux","checksum":"8cd981dfd4bea4f519ceebb885cf3b422b71c059d841c039d327e73b19247f53"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"arm-linux","checksum":"c68d861155c40777eee3eb4efbb375d665c8c889cebd5cd1ba32f30a8aac6c21"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"arm64-darwin","checksum":"10c08f246085709790ea628b5fa031cf23dadd843e173711b335ba6287b59d0a"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"java","checksum":"f76f2dc353993862d07eccfc5561e373e8058d62e265bae9bcf4f4793c35c9e2"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"ruby","checksum":"341388184e975d091e6e38ce3f3b3388bfb7e4ac3d790efd8e39124844040bd1"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x64-mingw-ucrt","checksum":"5c59792f7f5f8a76e17a87b89b9057544853a6f713b692a75b7f8895a854b74f"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x64-mingw32","checksum":"286950458a58bdf09bb3a800ac16f0aa361aa9a6c9a63bcd71e98e3c34d314a8"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86-linux","checksum":"159107da8a35f1fc22ee5b78d70da9bda4098a3771a29beac3f727cafd5041cb"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86-mingw32","checksum":"27d3d96f53b3fa1da9c4d9d69fffadc34abf7350a8e22be61a7483f15f065438"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86_64-darwin","checksum":"237aa89b9ef6b8e014f197167677926ebc4bdb9cafb2b101399d8001fda4fa43"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86_64-linux","checksum":"6f55093bb47e75d412138f4b9462f960d3aad96cb6b43dbe9a3de62c2d31a742"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"aarch64-linux","checksum":"78778d35f165b59513be31c0fe232c63a82cf97626ffba695b5f822e5da1d74b"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"arm-linux","checksum":"c84cdb9e3aa44c35bbb981b20175838c4b2066c26c5cb118f31f177168a42fc3"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"arm64-darwin","checksum":"276dcea1b988a5b22b5acc1ba901d24b8e908c40b71dccd5d54a2ae279480dad"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"java","checksum":"044c45ca46abc2b6135a85ab39a546ff2f0434d43142bc59b83e5b1068876a42"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"ruby","checksum":"f819cbfdfb0a7b19c9c52c6f2ca63df0e58a6125f4f139707b586b9511d7fe95"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x64-mingw-ucrt","checksum":"01ed785392f9cbdfd45e0e5ef6ad6d2c80a6128672589448f18952168bd68e56"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x64-mingw32","checksum":"d8fd5c675743b85354c9098117bfa9e703c7cacab8c33e5190104ea8218ad1ec"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86-linux","checksum":"dddbf1c1ef99ce9fab98302b14f8bacb703e6f16e89b99f05ecee8a1fca23664"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86-mingw32","checksum":"b6517d995b024739cbb81251a26866d40e1ccb151936b5bb0977e7487f4e617c"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86_64-darwin","checksum":"630732b80fc572690eab50c73a1f18988f3ac401ed0b67ca9956ba2b1e2c3faa"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86_64-linux","checksum":"9e1e428641d5942af877c60b418c71163560e9feb4a5c4015f3230a8b86a40f6"},
|
||||
{"name":"notiffany","version":"0.1.3","platform":"ruby","checksum":"d37669605b7f8dcb04e004e6373e2a780b98c776f8eb503ac9578557d7808738"},
|
||||
{"name":"numerizer","version":"0.2.0","platform":"ruby","checksum":"e58076d5ee5370417b7e52d9cb25836d62acd1b8d9a194c308707986c1705d7b"},
|
||||
{"name":"oauth","version":"0.5.6","platform":"ruby","checksum":"4085fe28e0c5e2434135e00a6555294fd2a4ff96a98d1bdecdcd619fc6368dff"},
|
||||
|
|
@ -527,8 +527,8 @@
|
|||
{"name":"puma","version":"6.4.3","platform":"ruby","checksum":"24a4645c006811d83f2480057d1f54a96e7627b6b90e1c99b260b9dc630eb43e"},
|
||||
{"name":"pyu-ruby-sasl","version":"0.0.3.3","platform":"ruby","checksum":"5683a6bc5738db5a1bf5ceddeaf545405fb241b4184dd4f2587e679a7e9497e5"},
|
||||
{"name":"raabro","version":"1.4.0","platform":"ruby","checksum":"d4fa9ff5172391edb92b242eed8be802d1934b1464061ae5e70d80962c5da882"},
|
||||
{"name":"racc","version":"1.6.2","platform":"java","checksum":"0880781e7dfde09e665d0b6160b583e01ed52fcc2955d7891447d33c2d1d2cf1"},
|
||||
{"name":"racc","version":"1.6.2","platform":"ruby","checksum":"58d26b3666382396fea84d33dc0639b7ee8d704156a52f8f22681f07b2f94f26"},
|
||||
{"name":"racc","version":"1.8.1","platform":"java","checksum":"54f2e6d1e1b91c154013277d986f52a90e5ececbe91465d29172e49342732b98"},
|
||||
{"name":"racc","version":"1.8.1","platform":"ruby","checksum":"4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f"},
|
||||
{"name":"rack","version":"2.2.10","platform":"ruby","checksum":"e4a5ee3f8f2ba45614a4498114d6dc7da1c51a0f0dd810d891906ea71d3aa72b"},
|
||||
{"name":"rack-accept","version":"0.4.5","platform":"ruby","checksum":"66247b5449db64ebb93ae2ec4af4764b87d1ae8a7463c7c68893ac13fa8d4da2"},
|
||||
{"name":"rack-attack","version":"6.7.0","platform":"ruby","checksum":"3ca47e8f66cd33b2c96af53ea4754525cd928ed3fa8da10ee6dad0277791d77c"},
|
||||
|
|
|
|||
|
|
@ -1143,7 +1143,7 @@ GEM
|
|||
mini_histogram (0.3.1)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.8.5)
|
||||
mini_portile2 (2.8.7)
|
||||
minitest (5.11.3)
|
||||
mixlib-cli (2.1.8)
|
||||
mixlib-config (3.0.27)
|
||||
|
|
@ -1186,7 +1186,7 @@ GEM
|
|||
netrc (0.11.0)
|
||||
nio4r (2.7.0)
|
||||
no_proxy_fix (0.1.2)
|
||||
nokogiri (1.16.0)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
notiffany (0.1.3)
|
||||
|
|
@ -1453,7 +1453,7 @@ GEM
|
|||
nio4r (~> 2.0)
|
||||
pyu-ruby-sasl (0.0.3.3)
|
||||
raabro (1.4.0)
|
||||
racc (1.6.2)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-accept (0.4.5)
|
||||
rack (>= 0.4)
|
||||
|
|
|
|||
|
|
@ -393,7 +393,7 @@
|
|||
{"name":"mini_histogram","version":"0.3.1","platform":"ruby","checksum":"6a114b504e4618b0e076cc672996036870f7cc6f16b8e5c25c0c637726d2dd94"},
|
||||
{"name":"mini_magick","version":"4.12.0","platform":"ruby","checksum":"67302fa84e63f1002b71416a8466968ed0f33d22f5d42962a0c09a9f1c3a906a"},
|
||||
{"name":"mini_mime","version":"1.1.2","platform":"ruby","checksum":"a54aec0cc7438a03a850adb00daca2bdb60747f839e28186994df057cea87151"},
|
||||
{"name":"mini_portile2","version":"2.8.5","platform":"ruby","checksum":"7a37db8ae758086c3c3ac3a59c036704d331e965d5e106635e4a42d6e66089ce"},
|
||||
{"name":"mini_portile2","version":"2.8.7","platform":"ruby","checksum":"13eef5ab459bbfd33d61e539564ec25a9c2cf593b0a5ea6d4d7ef8c19b162ee0"},
|
||||
{"name":"minitest","version":"5.11.3","platform":"ruby","checksum":"78e18aa2c49c58e9bc53c54a0b900e87ad0a96394e92fbbfa58d3ff860a68f45"},
|
||||
{"name":"mixlib-cli","version":"2.1.8","platform":"ruby","checksum":"e6f27be34d580f6ed71731ca46b967e57793a627131c1f6e1ed2dad39ea3bdf9"},
|
||||
{"name":"mixlib-config","version":"3.0.27","platform":"ruby","checksum":"d7748b1898e4f16502afec1de00b5ad65c6de405114b1b0c65ec61b1a9100148"},
|
||||
|
|
@ -428,17 +428,17 @@
|
|||
{"name":"nio4r","version":"2.7.0","platform":"java","checksum":"3f2e515e928ceeef7668e1f64fc3bfef1417a5ec0908d8e69f2c6d486284e04d"},
|
||||
{"name":"nio4r","version":"2.7.0","platform":"ruby","checksum":"9586a685eca8246d6406e712a525e705d15bb88f709d78fc3f141e864df97276"},
|
||||
{"name":"no_proxy_fix","version":"0.1.2","platform":"ruby","checksum":"4e9b4c31bb146de7fcf347dc1087bb13ac2039b56d50aa019e61036256abcd00"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"aarch64-linux","checksum":"8cd981dfd4bea4f519ceebb885cf3b422b71c059d841c039d327e73b19247f53"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"arm-linux","checksum":"c68d861155c40777eee3eb4efbb375d665c8c889cebd5cd1ba32f30a8aac6c21"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"arm64-darwin","checksum":"10c08f246085709790ea628b5fa031cf23dadd843e173711b335ba6287b59d0a"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"java","checksum":"f76f2dc353993862d07eccfc5561e373e8058d62e265bae9bcf4f4793c35c9e2"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"ruby","checksum":"341388184e975d091e6e38ce3f3b3388bfb7e4ac3d790efd8e39124844040bd1"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x64-mingw-ucrt","checksum":"5c59792f7f5f8a76e17a87b89b9057544853a6f713b692a75b7f8895a854b74f"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x64-mingw32","checksum":"286950458a58bdf09bb3a800ac16f0aa361aa9a6c9a63bcd71e98e3c34d314a8"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86-linux","checksum":"159107da8a35f1fc22ee5b78d70da9bda4098a3771a29beac3f727cafd5041cb"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86-mingw32","checksum":"27d3d96f53b3fa1da9c4d9d69fffadc34abf7350a8e22be61a7483f15f065438"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86_64-darwin","checksum":"237aa89b9ef6b8e014f197167677926ebc4bdb9cafb2b101399d8001fda4fa43"},
|
||||
{"name":"nokogiri","version":"1.16.0","platform":"x86_64-linux","checksum":"6f55093bb47e75d412138f4b9462f960d3aad96cb6b43dbe9a3de62c2d31a742"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"aarch64-linux","checksum":"78778d35f165b59513be31c0fe232c63a82cf97626ffba695b5f822e5da1d74b"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"arm-linux","checksum":"c84cdb9e3aa44c35bbb981b20175838c4b2066c26c5cb118f31f177168a42fc3"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"arm64-darwin","checksum":"276dcea1b988a5b22b5acc1ba901d24b8e908c40b71dccd5d54a2ae279480dad"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"java","checksum":"044c45ca46abc2b6135a85ab39a546ff2f0434d43142bc59b83e5b1068876a42"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"ruby","checksum":"f819cbfdfb0a7b19c9c52c6f2ca63df0e58a6125f4f139707b586b9511d7fe95"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x64-mingw-ucrt","checksum":"01ed785392f9cbdfd45e0e5ef6ad6d2c80a6128672589448f18952168bd68e56"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x64-mingw32","checksum":"d8fd5c675743b85354c9098117bfa9e703c7cacab8c33e5190104ea8218ad1ec"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86-linux","checksum":"dddbf1c1ef99ce9fab98302b14f8bacb703e6f16e89b99f05ecee8a1fca23664"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86-mingw32","checksum":"b6517d995b024739cbb81251a26866d40e1ccb151936b5bb0977e7487f4e617c"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86_64-darwin","checksum":"630732b80fc572690eab50c73a1f18988f3ac401ed0b67ca9956ba2b1e2c3faa"},
|
||||
{"name":"nokogiri","version":"1.16.7","platform":"x86_64-linux","checksum":"9e1e428641d5942af877c60b418c71163560e9feb4a5c4015f3230a8b86a40f6"},
|
||||
{"name":"notiffany","version":"0.1.3","platform":"ruby","checksum":"d37669605b7f8dcb04e004e6373e2a780b98c776f8eb503ac9578557d7808738"},
|
||||
{"name":"numerizer","version":"0.2.0","platform":"ruby","checksum":"e58076d5ee5370417b7e52d9cb25836d62acd1b8d9a194c308707986c1705d7b"},
|
||||
{"name":"oauth","version":"0.5.6","platform":"ruby","checksum":"4085fe28e0c5e2434135e00a6555294fd2a4ff96a98d1bdecdcd619fc6368dff"},
|
||||
|
|
@ -537,8 +537,8 @@
|
|||
{"name":"puma","version":"6.4.3","platform":"ruby","checksum":"24a4645c006811d83f2480057d1f54a96e7627b6b90e1c99b260b9dc630eb43e"},
|
||||
{"name":"pyu-ruby-sasl","version":"0.0.3.3","platform":"ruby","checksum":"5683a6bc5738db5a1bf5ceddeaf545405fb241b4184dd4f2587e679a7e9497e5"},
|
||||
{"name":"raabro","version":"1.4.0","platform":"ruby","checksum":"d4fa9ff5172391edb92b242eed8be802d1934b1464061ae5e70d80962c5da882"},
|
||||
{"name":"racc","version":"1.6.2","platform":"java","checksum":"0880781e7dfde09e665d0b6160b583e01ed52fcc2955d7891447d33c2d1d2cf1"},
|
||||
{"name":"racc","version":"1.6.2","platform":"ruby","checksum":"58d26b3666382396fea84d33dc0639b7ee8d704156a52f8f22681f07b2f94f26"},
|
||||
{"name":"racc","version":"1.8.1","platform":"java","checksum":"54f2e6d1e1b91c154013277d986f52a90e5ececbe91465d29172e49342732b98"},
|
||||
{"name":"racc","version":"1.8.1","platform":"ruby","checksum":"4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f"},
|
||||
{"name":"rack","version":"2.2.10","platform":"ruby","checksum":"e4a5ee3f8f2ba45614a4498114d6dc7da1c51a0f0dd810d891906ea71d3aa72b"},
|
||||
{"name":"rack-accept","version":"0.4.5","platform":"ruby","checksum":"66247b5449db64ebb93ae2ec4af4764b87d1ae8a7463c7c68893ac13fa8d4da2"},
|
||||
{"name":"rack-attack","version":"6.7.0","platform":"ruby","checksum":"3ca47e8f66cd33b2c96af53ea4754525cd928ed3fa8da10ee6dad0277791d77c"},
|
||||
|
|
|
|||
|
|
@ -1157,7 +1157,7 @@ GEM
|
|||
mini_histogram (0.3.1)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.8.5)
|
||||
mini_portile2 (2.8.7)
|
||||
minitest (5.11.3)
|
||||
mixlib-cli (2.1.8)
|
||||
mixlib-config (3.0.27)
|
||||
|
|
@ -1201,7 +1201,7 @@ GEM
|
|||
netrc (0.11.0)
|
||||
nio4r (2.7.0)
|
||||
no_proxy_fix (0.1.2)
|
||||
nokogiri (1.16.0)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
notiffany (0.1.3)
|
||||
|
|
@ -1470,7 +1470,7 @@ GEM
|
|||
nio4r (~> 2.0)
|
||||
pyu-ruby-sasl (0.0.3.3)
|
||||
raabro (1.4.0)
|
||||
racc (1.6.2)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-accept (0.4.5)
|
||||
rack (>= 0.4)
|
||||
|
|
|
|||
|
|
@ -83,14 +83,6 @@ export default {
|
|||
arrowIconName() {
|
||||
return this.isCollapsed ? 'chevron-right' : 'chevron-down';
|
||||
},
|
||||
bodyClass() {
|
||||
return [
|
||||
'gl-border-1',
|
||||
'gl-border-t-solid',
|
||||
'gl-border-gray-100',
|
||||
{ 'gl-hidden': this.isCollapsed },
|
||||
];
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['deleteImage']),
|
||||
|
|
@ -112,9 +104,9 @@ export default {
|
|||
|
||||
<template>
|
||||
<gl-card
|
||||
class="collapsible-card border gl-mb-5 gl-p-0"
|
||||
header-class="gl-flex gl-items-center gl-border-b-0 gl-py-3"
|
||||
:body-class="bodyClass"
|
||||
class="gl-mb-5"
|
||||
:header-class="['gl-flex', 'gl-items-center', { 'gl-border-b-0 gl-rounded-base': isCollapsed }]"
|
||||
:body-class="{ 'gl-hidden': isCollapsed }"
|
||||
>
|
||||
<gl-modal
|
||||
body-class="!gl-pb-0 !gl-min-h-6"
|
||||
|
|
@ -150,17 +142,15 @@ export default {
|
|||
|
||||
<template #header>
|
||||
<div class="gl-flex gl-w-full gl-flex-row gl-justify-between">
|
||||
<div class="gl-flex gl-w-full gl-flex-row gl-items-center">
|
||||
<div class="gl-flex gl-w-full gl-flex-row gl-items-center gl-gap-2">
|
||||
<gl-button
|
||||
class="collapsible-card-btn gl-flex !gl-text-inherit gl-no-underline !gl-shadow-none hover:!gl-text-blue-800"
|
||||
:aria-label="filename"
|
||||
variant="link"
|
||||
category="tertiary"
|
||||
:icon="arrowIconName"
|
||||
size="small"
|
||||
data-testid="collapse-button"
|
||||
@click="toggleCollapsed"
|
||||
>
|
||||
<gl-icon class="gl-mr-2" :name="arrowIconName" />
|
||||
</gl-button>
|
||||
/>
|
||||
<gl-link v-if="url" :href="url" target="_blank" data-testid="metric-image-label-span">
|
||||
{{ urlText == null || urlText == '' ? filename : urlText }}
|
||||
<gl-icon name="external-link" class="gl-align-middle" />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
@import './avatar';
|
||||
@import './action_card_component';
|
||||
@import './collapsible_card';
|
||||
@import './content_editor';
|
||||
@import './deployment_instance';
|
||||
@import './detail_page';
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
.collapsible-card {
|
||||
.collapsible-card-btn {
|
||||
color: $gl-text-color;
|
||||
|
||||
&:hover {
|
||||
color: $blue-600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -69,10 +69,7 @@ class Member < ApplicationRecord
|
|||
end
|
||||
|
||||
scope :in_hierarchy, ->(source) do
|
||||
for_self_and_descendants(source.root_ancestor)
|
||||
end
|
||||
|
||||
scope :for_self_and_descendants, ->(source) do
|
||||
source = source.root_ancestor
|
||||
groups = source.self_and_descendants
|
||||
group_members = Member.default_scoped.where(source: groups).select(*Member.cached_column_list)
|
||||
|
||||
|
|
@ -82,6 +79,18 @@ class Member < ApplicationRecord
|
|||
Member.default_scoped.from_union([group_members, project_members]).merge(self)
|
||||
end
|
||||
|
||||
scope :for_self_and_descendants, ->(group, columns = Member.cached_column_list) do
|
||||
return self if group.blank?
|
||||
|
||||
group_members = where(source_id: group.self_and_descendant_ids, source_type: GroupMember::SOURCE_TYPE)
|
||||
project_members = where(source_id: group.all_project_ids, source_type: ProjectMember::SOURCE_TYPE)
|
||||
|
||||
Member.unscoped.from_union([
|
||||
group_members.select(*columns),
|
||||
project_members.select(*columns)
|
||||
], remove_duplicates: false)
|
||||
end
|
||||
|
||||
scope :including_user_ids, ->(user_ids) do
|
||||
where(user_id: user_ids)
|
||||
end
|
||||
|
|
@ -90,6 +99,10 @@ class Member < ApplicationRecord
|
|||
where.not(user_id: user_ids)
|
||||
end
|
||||
|
||||
scope :count_by_access_level, ->(column_name = nil) do
|
||||
group(:access_level).count(column_name)
|
||||
end
|
||||
|
||||
# This scope encapsulates (most of) the conditions a row in the member table
|
||||
# must satisfy if it is a valid permission. Of particular note:
|
||||
#
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ module Ci
|
|||
graphql_project_on_demand_scan_counts_path(project)
|
||||
]
|
||||
|
||||
etag_paths << commit_pipelines_path(project, pipeline.commit) unless pipeline.commit.nil?
|
||||
etag_paths << commit_pipelines_path(project, pipeline.commit) if pipeline.sha && pipeline.commit.present?
|
||||
|
||||
each_pipelines_merge_request_path(pipeline) do |path|
|
||||
etag_paths << path
|
||||
|
|
@ -93,7 +93,7 @@ module Ci
|
|||
pipeline.upstream_and_all_downstreams.includes(project: [:route, { namespace: :route }]).each do |relative_pipeline| # rubocop: disable CodeReuse/ActiveRecord
|
||||
etag_paths << project_pipeline_path(relative_pipeline.project, relative_pipeline)
|
||||
etag_paths << graphql_pipeline_path(relative_pipeline)
|
||||
etag_paths << graphql_pipeline_sha_path(relative_pipeline.sha)
|
||||
etag_paths << graphql_pipeline_sha_path(relative_pipeline.sha) if relative_pipeline.sha
|
||||
end
|
||||
|
||||
store.touch(*etag_paths)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
- statistics_buttons = @project.statistics_buttons(show_auto_devops_callout: show_auto_devops_callout)
|
||||
|
||||
%aside.project-page-sidebar{ data: { testid: 'project-page-sidebar' } }
|
||||
.project-page-sidebar-block.home-panel-home-desc.gl-py-4.gl-border-b.gl-border-gray-50{ class: '!gl-pt-2' }
|
||||
%h2.gl-text-base.gl-font-bold.gl-leading-reset.gl-text-gray-900.gl-m-0.gl-mb-1= s_('ProjectPage|Project information')
|
||||
.project-page-sidebar-block.home-panel-home-desc.gl-py-4.gl-border-b.gl-border-b-subtle{ class: '!gl-pt-2' }
|
||||
%h2.gl-text-base.gl-font-bold.gl-leading-reset.gl-text-strong.gl-m-0.gl-mb-1= s_('ProjectPage|Project information')
|
||||
-# Project description
|
||||
- if @project.description.present?
|
||||
.home-panel-description.gl-break-words
|
||||
|
|
@ -43,18 +43,18 @@
|
|||
|
||||
-# Invite members
|
||||
- if @project.empty_repo? && can_admin_project_member?(@project)
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-gray-50
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-b-subtle
|
||||
= render "invite_members_empty_project"
|
||||
|
||||
-# Buttons
|
||||
- if can?(current_user, :read_code, @project) && !@project.empty_repo? && anchor_buttons.any?
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-gray-50
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-b-subtle
|
||||
%nav.project-stats
|
||||
= render 'stat_anchor_list', anchors: anchor_buttons
|
||||
|
||||
-# Buttons
|
||||
- if can?(current_user, :read_code, @project) && has_project_shortcut_buttons && (@project.empty_repo? ? statistics_empty_buttons.any? : statistics_buttons.any?)
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-gray-50
|
||||
.project-page-sidebar-block.gl-py-4.gl-border-b.gl-border-b-subtle
|
||||
.project-buttons.gl-mb-2.js-show-on-project-root{ data: { testid: 'project-buttons' } }
|
||||
- if @project.empty_repo?
|
||||
= render 'stat_anchor_list', anchors: statistics_empty_buttons, project_buttons: true
|
||||
|
|
@ -66,5 +66,5 @@
|
|||
|
||||
-# Project created
|
||||
.project-page-sidebar-block.gl-py-4
|
||||
%p.gl-font-bold.gl-text-gray-900.gl-m-0.gl-mb-1= s_('ProjectPage|Created on')
|
||||
%p.gl-font-bold.gl-text-strong.gl-m-0.gl-mb-1= s_('ProjectPage|Created on')
|
||||
%span= @project.created_at.to_date.to_fs(:long)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIsKnownExploitToPmCveEnrichment < Gitlab::Database::Migration[2.2]
|
||||
milestone '17.6'
|
||||
|
||||
def change
|
||||
add_column :pm_cve_enrichment, :is_known_exploit, :boolean, default: false, null: false
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIndexOnMembersSourceAccessLevelMemberRole < Gitlab::Database::Migration[2.2]
|
||||
disable_ddl_transaction!
|
||||
milestone '17.6'
|
||||
|
||||
INDEX_NAME = "index_members_on_source_and_access_level_and_member_role"
|
||||
|
||||
def up
|
||||
columns = [:source_id, :source_type, :access_level]
|
||||
add_concurrent_index(:members, columns, name: INDEX_NAME, where: 'member_role_id IS NULL')
|
||||
end
|
||||
|
||||
def down
|
||||
remove_concurrent_index_by_name :members, INDEX_NAME
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
6867b1ad0163f9de7e1d94aefe28626c182f41ab5262e3023b5da72247ad74f4
|
||||
|
|
@ -0,0 +1 @@
|
|||
b71c65841b6fc8c3f3bc285e5d9d0b5a5d04abadf61517443457a03ef231b694
|
||||
|
|
@ -16922,6 +16922,7 @@ CREATE TABLE pm_cve_enrichment (
|
|||
created_at timestamp with time zone NOT NULL,
|
||||
updated_at timestamp with time zone NOT NULL,
|
||||
cve text NOT NULL,
|
||||
is_known_exploit boolean DEFAULT false NOT NULL,
|
||||
CONSTRAINT check_16651e3ffb CHECK ((char_length(cve) <= 24))
|
||||
);
|
||||
|
||||
|
|
@ -30518,6 +30519,8 @@ CREATE INDEX index_members_on_member_role_id ON members USING btree (member_role
|
|||
|
||||
CREATE INDEX index_members_on_requested_at ON members USING btree (requested_at);
|
||||
|
||||
CREATE INDEX index_members_on_source_and_access_level_and_member_role ON members USING btree (source_id, source_type, access_level) WHERE (member_role_id IS NULL);
|
||||
|
||||
CREATE INDEX index_members_on_source_and_type_and_access_level ON members USING btree (source_id, source_type, type, access_level);
|
||||
|
||||
CREATE INDEX index_members_on_source_and_type_and_id ON members USING btree (source_id, source_type, type, id) WHERE (invite_token IS NULL);
|
||||
|
|
|
|||
|
|
@ -4,15 +4,12 @@ group: Authentication
|
|||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Use Atlassian Crowd as an authentication provider (deprecated)
|
||||
# Use Atlassian Crowd as an authentication provider
|
||||
|
||||
DETAILS:
|
||||
**Tier:** Free, Premium, Ultimate
|
||||
**Offering:** Self-managed
|
||||
|
||||
WARNING:
|
||||
This feature was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/369117) in GitLab 15.3 and is [planned for removal in 18.0](https://gitlab.com/gitlab-org/gitlab/-/issues/457241).
|
||||
|
||||
Authenticate to GitLab using the Atlassian Crowd OmniAuth provider. Enabling
|
||||
this provider also allows Crowd authentication for Git-over-https requests.
|
||||
|
||||
|
|
@ -54,7 +51,6 @@ this provider also allows Crowd authentication for Git-over-https requests.
|
|||
gitlab_rails['omniauth_providers'] = [
|
||||
{
|
||||
name: "crowd",
|
||||
# label: "Provider name", # optional label for login button, defaults to "Crowd"
|
||||
args: {
|
||||
crowd_server_url: "CROWD_SERVER_URL",
|
||||
application_name: "YOUR_APP_NAME",
|
||||
|
|
@ -68,7 +64,6 @@ this provider also allows Crowd authentication for Git-over-https requests.
|
|||
|
||||
```yaml
|
||||
- { name: 'crowd',
|
||||
# label: 'Provider name', # optional label for login button, defaults to "Crowd"
|
||||
args: {
|
||||
crowd_server_url: 'CROWD_SERVER_URL',
|
||||
application_name: 'YOUR_APP_NAME',
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ Rejecting a user:
|
|||
|
||||
## View users pending role promotion
|
||||
|
||||
When [user promotion management](../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval) is enabled, any user added or promoted to a billable role will be pending administrator approval.
|
||||
If [administrator approval for role promotions](../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To view users pending role promotion:
|
||||
|
||||
|
|
|
|||
|
|
@ -45,14 +45,7 @@ When you reply to the notification email, your email client:
|
|||
### GitLab receives your reply to the notification email
|
||||
|
||||
When GitLab receives your reply, it looks for the "reply key" in the
|
||||
following headers, in this order:
|
||||
|
||||
1. `To` header
|
||||
1. `References` header
|
||||
1. `Delivered-To` header
|
||||
1. `Envelope-To` header
|
||||
1. `X-Envelope-To` header
|
||||
1. `Received` header
|
||||
[list of accepted headers](incoming_email.md#accepted-headers).
|
||||
|
||||
If it finds a reply key, it leaves your reply as a comment on
|
||||
the entity the notification was about (issue, merge request, commit...).
|
||||
|
|
|
|||
|
|
@ -62,23 +62,30 @@ Prerequisites:
|
|||
To configure a self-hosted model:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin**.
|
||||
1. Select **AI-powered features**.
|
||||
- If the **AI-powered features** menu item is not available, synchronize your
|
||||
1. Select **Self-hosted models**.
|
||||
- If the **Self-hosted models** menu item is not available, synchronize your
|
||||
subscription after purchase:
|
||||
1. On the left sidebar, select **Subscription**.
|
||||
1. In **Subscription details**, to the right of **Last sync**, select
|
||||
synchronize subscription (**{retry}**).
|
||||
1. Select **Models**.
|
||||
1. Select **New self-hosted model**.
|
||||
1. Select **Add self-hosted model**.
|
||||
1. Complete the fields:
|
||||
- Enter the model name, for example, `Mistral`.
|
||||
- From the **Model family** dropdown list, select the model. Only GitLab-approved models
|
||||
- **Deployment name**: Enter a name to uniquely identify the model deployment, for example, `Mixtral-8x7B-it-v0.1 on GCP`.
|
||||
- **Model family**: Select the model family the deployment belongs to. Only GitLab-approved models
|
||||
are in this list.
|
||||
- For **Endpoint**, select the self-hosted model endpoint. For example, the
|
||||
server hosting the model.
|
||||
- Optional. For **API token**, add an API key if you need one to access the model.
|
||||
- Optional. For **Model identifier**, enter the cloud provider where the model is hosted, and the name the cloud provider uses for that model (for example: `anthropic/claude-3-5-sonnet-20240620`).
|
||||
1. Select **Create model**.
|
||||
- **Endpoint**: Enter the URL where the model is hosted.
|
||||
- For models hosted through vLLM, it is essential to suffix the URL with `/v1`.
|
||||
- **API key**: Optional. Add an API key if you need one to access the model.
|
||||
- **Model identifier (optional)**: Optional. The model identifier is based on your deployment method:
|
||||
|
||||
| Deployment method | Format | Example |
|
||||
|-------------|---------|---------|
|
||||
| vLLM | `custom_openai/<name of the model served through vLLM>` | `custom_openai/Mixtral-8x7B-Instruct-v0.1` |
|
||||
| Bedrock | `bedrock/<model ID of the model>` | `bedrock/mistral.mixtral-8x7b-instruct-v0:1` |
|
||||
| Azure | `azure/<model ID of the model>` | `azure/gpt-35-turbo` |
|
||||
| Others | The field is optional | |
|
||||
|
||||
1. Select **Create self-hosted model**.
|
||||
|
||||
## Configure GitLab Duo features to use self-hosted models
|
||||
|
||||
|
|
@ -89,21 +96,19 @@ Prerequisites:
|
|||
### View configured features
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin**.
|
||||
1. Select **AI-powered features**.
|
||||
- If the **AI-powered features** menu item is not available, synchronize your
|
||||
1. Select **Self-hosted models**.
|
||||
- If the **Self-hosted models** menu item is not available, synchronize your
|
||||
subscription after purchase:
|
||||
1. On the left sidebar, select **Subscription**.
|
||||
1. In **Subscription details**, to the right of **Last sync**, select
|
||||
synchronize subscription (**{retry}**).
|
||||
1. Select **Features**.
|
||||
1. Select the **AI-powered features** tab.
|
||||
|
||||
### Configure the feature to use a self-hosted model
|
||||
|
||||
Configure the GitLab Duo feature to send queries to the configured self-hosted model:
|
||||
|
||||
1. In **Features**, for the feature you want to set, select **Edit**.
|
||||
For example, **Code Generation**.
|
||||
1. Select the model provider for the feature:
|
||||
- From the list, select **Self-Hosted Model**.
|
||||
- Choose the self-hosted model you want to use, for example, `Mistral`.
|
||||
1. Select **Save Changes**.
|
||||
1. On the left sidebar, at the bottom, select **Admin**.
|
||||
1. Select **Self-hosted models**.
|
||||
1. Select the **AI-powered features** tab.
|
||||
1. For the feature you want to configure, from the dropdown list, choose the self-hosted model you want to use. For example, `Mistral`.
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ You can limit GitLab access to a subset of the LDAP users on your LDAP server.
|
|||
|
||||
See the [documentation on setting up an LDAP user filter](../auth/ldap/index.md#set-up-ldap-user-filter) for more information.
|
||||
|
||||
## Enable role promotion approval
|
||||
## Turn on administrator approval for role promotions
|
||||
|
||||
DETAILS:
|
||||
**Tier:** Ultimate
|
||||
|
|
@ -264,16 +264,26 @@ DETAILS:
|
|||
FLAG:
|
||||
The availability of this feature is controlled by a feature flag.
|
||||
|
||||
In the **Ultimate** tier, [non billable roles](../../subscriptions/gitlab_com/index.md#billable-users), can be promoted to a billable role in any Project or Group, resulting in the increase of billable seats, without admins having any control on this promotion.
|
||||
To prevent existing users of the subscription from being promoted to a billable role, you can enable role promotion approval.
|
||||
To prevent existing users from being promoted into a billable role in a project or group,
|
||||
turn on administrator approval for role promotions. You can then approve or reject promotion requests
|
||||
that are [pending administrator approval](../moderate_users.md#view-users-pending-role-promotion).
|
||||
|
||||
When this setting is enabled, any existing user of the subscription when added to a [group](../../user/group/index.md#add-users-to-a-group) or [project](../../user/project/members/index.md#add-users-to-a-project) on a [billable role](../../subscriptions/gitlab_com/index.md#billable-users) will be [pending administrator approval](../moderate_users.md#view-users-pending-role-promotion).
|
||||
- If an administrator adds a user to a group or project:
|
||||
- If the new user role is [billable](../../subscriptions/self_managed/index.md#billable-users),
|
||||
all other membership requests for that user are automatically approved.
|
||||
- If the new user role is not billable, other requests for that user remain pending until administrator
|
||||
approval.
|
||||
|
||||
Promotions or updates of user roles for users that already occupy a billable seat do not require administrator approval.
|
||||
- If a user who isn't an administrator adds a user to a group or project:
|
||||
- If the user does not have any billable role in any group or project, and is added or promoted to a billable role,
|
||||
their request remains [pending until administrator approval(../moderate_users.md#view-users-pending-role-promotion).
|
||||
- If the user already has a billable role, administrator approval is not required.
|
||||
|
||||
If the user is added to a group or project by an administrator, any membership requests for this user to any other group or project will be approved automatically.
|
||||
Prerequisites:
|
||||
|
||||
To enable role promotion approval:
|
||||
- You must be an administrator.
|
||||
|
||||
To turn on approvals for role promotions:
|
||||
|
||||
1. On the left sidebar, at the bottom, select **Admin**.
|
||||
1. Select **Settings > General**.
|
||||
|
|
@ -282,7 +292,9 @@ To enable role promotion approval:
|
|||
|
||||
### Known issues
|
||||
|
||||
When you turn on role promotion approval, the billable count can still increase if a user [requests access to a group](../../user/group/index.md) and is approved by the group Owner on a [billable role](../../subscriptions/gitlab_com/index.md#billable-users).
|
||||
When a user [requests access to a group](../../user/group/index.md), the initial role assigned is Developer.
|
||||
If this access is approved by a user with the Owner role for the group and the user becomes a member of the group, the billable count
|
||||
increases if this user did not have a billable role previously.
|
||||
|
||||
<!-- ## Troubleshooting
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ When there was any error sending the email:
|
|||
```
|
||||
|
||||
NOTE:
|
||||
When the setting **[Manage non-billable promotions](../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval)** is enabled, new invited members with billable roles must be approved by an administrator.
|
||||
If [administrator approval for role promotions](../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To enable **Manage non-billable promotions**,
|
||||
you must first enable the `enable_member_promotion_management` application setting.
|
||||
|
|
|
|||
|
|
@ -627,7 +627,7 @@ Example response:
|
|||
```
|
||||
|
||||
NOTE:
|
||||
When the setting **[Manage non-billable promotions](../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval)** is enabled, new invited members with billable roles must be approved by an administrator.
|
||||
If [administrator approval for role promotions](../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To enable **Manage Non-Billable Promotions**,
|
||||
you must first enable the `enable_member_promotion_management` application setting.
|
||||
|
|
@ -717,7 +717,7 @@ Example response:
|
|||
```
|
||||
|
||||
NOTE:
|
||||
When the setting **[Manage non-billable promotions](../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval)** is enabled, new invited users with billable roles must be approved by an administrator.
|
||||
If [administrator approval for role promotions](../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To enable **Manage non-billable promotions**,
|
||||
you must first enable the `enable_member_promotion_management` application setting.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments"
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
@ -17,7 +17,7 @@ is revoked and you cannot use the token anymore.
|
|||
|
||||
Use a CI/CD job token to authenticate with certain GitLab features from running jobs.
|
||||
The token receives the same access level as the user that triggered the pipeline,
|
||||
but has access to fewer resources than a personal access token. A user can cause a job to run
|
||||
but has [access to fewer resources](#job-token-feature-access) than a personal access token. A user can cause a job to run
|
||||
with an action like pushing a commit, triggering a manual job, or being the owner of a scheduled pipeline.
|
||||
This user must have a [role that has the required privileges](../../user/permissions.md#cicd)
|
||||
to access the resources.
|
||||
|
|
@ -29,6 +29,10 @@ If a project is public or internal, you can access some features without being o
|
|||
For example, you can fetch artifacts from the project's public pipelines.
|
||||
This access can also [be restricted](#limit-job-token-scope-for-public-or-internal-projects).
|
||||
|
||||
## Job token feature access
|
||||
|
||||
The CI/CD job token can only access the following features and API endpoints:
|
||||
|
||||
| Feature | Additional details |
|
||||
|-------------------------------------------------------------------------------------------------------|--------------------|
|
||||
| [Container registry API](../../api/container_registry.md) | The token is scoped to the container registry of the job's project only. |
|
||||
|
|
@ -40,7 +44,7 @@ This access can also [be restricted](#limit-job-token-scope-for-public-or-intern
|
|||
| [Package registry](../../user/packages/package_registry/index.md#to-build-packages) | |
|
||||
| [Packages API](../../api/packages.md) | `GET` requests are public by default. |
|
||||
| [Pipeline triggers](../../api/pipeline_triggers.md) | Used with the `token=` parameter to [trigger a multi-project pipeline](../pipelines/downstream_pipelines.md#trigger-a-multi-project-pipeline-by-using-the-api). |
|
||||
| [Update pipeline metadata API endpoint](../../api/pipelines.md#update-pipeline-metadata) | To update pipeline metadata. |
|
||||
| [Update pipeline metadata API endpoint](../../api/pipelines.md#update-pipeline-metadata) | To update pipeline metadata. |
|
||||
| [Release links API](../../api/releases/links.md) | |
|
||||
| [Releases API](../../api/releases/index.md) | `GET` requests are public by default. |
|
||||
| [Secure files](../secure_files/index.md#use-secure-files-in-cicd-jobs) | The `download-secure-files` tool authenticates with a CI/CD job token by default. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
ignore_in_report: true
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
type: concepts, howto
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
stage: Govern
|
||||
stage: Software Supply Chain Security
|
||||
group: Pipeline Security
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
||||
---
|
||||
|
|
|
|||
|
|
@ -546,6 +546,19 @@ class AiFeaturesCatalogue
|
|||
}.freeze
|
||||
```
|
||||
|
||||
## Reuse the existing AI components for multiple models
|
||||
|
||||
We thrive optimizing AI components, such as prompt, input/output parser, tools/function-calling, for each LLM,
|
||||
however, diverging the components for each model could increase the maintenance overhead.
|
||||
Hence, it's generally advised to reuse the existing components for multiple models as long as it doesn't degrade a feature quality.
|
||||
Here are the rules of thumbs:
|
||||
|
||||
1. Iterate on the existing prompt template for multiple models. Do _NOT_ introduce a new one unless it causes a quality degredation for a particular model.
|
||||
1. Iterate on the existing input/output parsers and tools/functions-calling for multiple models. Do _NOT_ introduce a new one unless it causes a quality degredation for a particular model.
|
||||
1. If a quality degredation is detected for a particular model, the shared component should be diverged for the particular model.
|
||||
|
||||
An [example](https://gitlab.com/gitlab-org/modelops/applied-ml/code-suggestions/ai-assist/-/issues/713) of this case is that we can apply Claude specific CoT optimization to the other models such as Mixtral as long as it doesn't cause a quality degredation.
|
||||
|
||||
## How to migrate an existing action to the AI Gateway
|
||||
|
||||
AI actions were initially implemented inside the GitLab monolith. As part of our
|
||||
|
|
|
|||
|
|
@ -393,7 +393,7 @@ Prerequisites:
|
|||
|
||||
- You must have the Owner role for the group.
|
||||
- If [sign-up is disabled](../../administration/settings/sign_up_restrictions.md#disable-new-sign-ups), an administrator must add the user by email first.
|
||||
- If [promotion management](../../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval) is enabled, an administrator must approve the invite.
|
||||
- If [administrator for role promotions](../../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, an administrator must approve the invite.
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your group.
|
||||
1. Select **Manage > Members**.
|
||||
|
|
@ -431,7 +431,7 @@ This tab includes users who:
|
|||
|
||||
### View users pending promotion
|
||||
|
||||
When [promotion management](../../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval) is enabled, an administrator must approve the membership requests of users who would become billable users in the subscription.
|
||||
If [administrator approval for role promotions](../../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To view users pending promotion:
|
||||
|
||||
|
|
|
|||
|
|
@ -122,8 +122,6 @@ If you are an administrator, you can create group access tokens in the Rails con
|
|||
|
||||
> - Ability to view revoked tokens [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/462217) in GitLab 17.3 [with a flag](../../../administration/feature_flags.md) named `retain_resource_access_token_user_after_revoke`. Disabled by default.
|
||||
|
||||
You can use either the UI or the Rails console to revoke a group access token.
|
||||
|
||||
In GitLab 17.3 and later, if you enable the `retain_resource_access_token_user_after_revoke`
|
||||
feature flag, you can view both active and inactive revoked group access tokens
|
||||
on the access tokens page. If you do not enable the feature flag, you can only view
|
||||
|
|
@ -147,21 +145,6 @@ To revoke a group access token:
|
|||
1. Select **Settings > Access tokens**.
|
||||
1. Next to the group access token to revoke, select **Revoke** (**{remove}**).
|
||||
|
||||
### Use the Rails console
|
||||
|
||||
Prerequisites:
|
||||
|
||||
- You must be an administrator.
|
||||
|
||||
To revoke a group access token, run the following command in a
|
||||
[Rails console](../../../administration/operations/rails_console.md):
|
||||
|
||||
```ruby
|
||||
bot = User.find_by(username: 'group_109_bot') # the owner of the token you want to revoke
|
||||
token = bot.personal_access_tokens.last # the token you want to revoke
|
||||
token.revoke!
|
||||
```
|
||||
|
||||
## Scopes for a group access token
|
||||
|
||||
> - `k8s_proxy` [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/422408) in GitLab 16.4 [with a flag](../../../administration/feature_flags.md) named `k8s_proxy_pat`. Enabled by default.
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ Prerequisites:
|
|||
- You must have the Owner or Maintainer role.
|
||||
- [Group membership lock](../../group/access_and_permissions.md#prevent-members-from-being-added-to-projects-in-a-group) must be disabled.
|
||||
- If [sign-up is disabled](../../../administration/settings/sign_up_restrictions.md#disable-new-sign-ups), an administrator must add the user by email first.
|
||||
- If [promotion management](../../../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval) is enabled, an administrator must approve the invite.
|
||||
- If [approval for role promotion](../../../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is enabled, an administrator must approve the invite.
|
||||
|
||||
To add a user to a project:
|
||||
|
||||
|
|
@ -125,7 +125,7 @@ The Owner [role](../../permissions.md#project-members-permissions) can be added
|
|||
|
||||
### View users pending promotion
|
||||
|
||||
When [promotion management](../../../administration/settings/sign_up_restrictions.md#enable-role-promotion-approval) is enabled, an administrator must approve the membership requests of users who would become billable users in the subscription.
|
||||
If [administrator approval for role promotions](../../../administration/settings/sign_up_restrictions.md#turn-on-administrator-approval-for-role-promotions) is turned on, membership requests that promote existing users into a billable role require administrator approval.
|
||||
|
||||
To view users pending promotion:
|
||||
|
||||
|
|
|
|||
|
|
@ -1044,7 +1044,7 @@ or completely separately.
|
|||
|
||||
::EndTabs
|
||||
|
||||
1. [Deprecated in GitLab 16.0 and planned for removal in 17.0)](../../../update/deprecations.md#sidekiq-delivery-method-for-incoming_email-and-service_desk_email-is-deprecated):
|
||||
1. [Deprecated in GitLab 16.0 and planned for removal in 18.0)](../../../update/deprecations.md#sidekiq-delivery-method-for-incoming_email-and-service_desk_email-is-deprecated):
|
||||
If you experience issues with the `webhook` setup, use `sidekiq` to deliver the email payload directly to GitLab Sidekiq using Redis.
|
||||
|
||||
::Tabs
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ GEM
|
|||
marcel (1.0.2)
|
||||
method_source (1.0.0)
|
||||
mini_mime (1.1.5)
|
||||
mini_portile2 (2.8.5)
|
||||
mini_portile2 (2.8.7)
|
||||
minitest (5.17.0)
|
||||
net-imap (0.4.4)
|
||||
date
|
||||
|
|
@ -152,7 +152,7 @@ GEM
|
|||
net-smtp (0.4.0)
|
||||
net-protocol
|
||||
nio4r (2.5.9)
|
||||
nokogiri (1.15.4)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
parallel (1.22.1)
|
||||
|
|
@ -168,7 +168,7 @@ GEM
|
|||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
public_suffix (5.0.3)
|
||||
racc (1.6.2)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ GEM
|
|||
multi_xml (0.6.0)
|
||||
net-http (0.4.1)
|
||||
uri
|
||||
nokogiri (1.15.4)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
parallel (1.26.3)
|
||||
|
|
@ -105,7 +105,7 @@ GEM
|
|||
rouge
|
||||
unparser
|
||||
public_suffix (5.0.1)
|
||||
racc (1.7.1)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
|
|
|
|||
|
|
@ -63,9 +63,9 @@ GEM
|
|||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
method_source (1.0.0)
|
||||
mini_portile2 (2.8.2)
|
||||
mini_portile2 (2.8.7)
|
||||
minitest (5.18.0)
|
||||
nokogiri (1.15.2)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
parallel (1.23.0)
|
||||
|
|
@ -75,7 +75,7 @@ GEM
|
|||
coderay
|
||||
parser
|
||||
unparser
|
||||
racc (1.6.2)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
|
|
|
|||
|
|
@ -74,9 +74,9 @@ GEM
|
|||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
method_source (1.0.0)
|
||||
mini_portile2 (2.8.2)
|
||||
mini_portile2 (2.8.7)
|
||||
minitest (5.18.1)
|
||||
nokogiri (1.16.0)
|
||||
nokogiri (1.16.7)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
parallel (1.23.0)
|
||||
|
|
@ -88,7 +88,7 @@ GEM
|
|||
parser
|
||||
unparser
|
||||
public_suffix (5.0.0)
|
||||
racc (1.7.1)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
|
|
|
|||
|
|
@ -49872,7 +49872,7 @@ msgstr ""
|
|||
msgid "SecurityOrchestration|For large groups, there may be a significant delay in applying policy changes to pre-existing merge requests. Policy changes typically apply almost immediately for newly created merge requests."
|
||||
msgstr ""
|
||||
|
||||
msgid "SecurityOrchestration|Group with id: %{id}"
|
||||
msgid "SecurityOrchestration|Group ID: %{id}"
|
||||
msgstr ""
|
||||
|
||||
msgid "SecurityOrchestration|Groups"
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ GEM
|
|||
byebug (~> 11.0)
|
||||
pry (>= 0.13, < 0.15)
|
||||
public_suffix (6.0.0)
|
||||
racc (1.8.0)
|
||||
racc (1.8.1)
|
||||
rack (2.2.10)
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
exports[`Metrics upload item render the metrics image component 1`] = `
|
||||
<gl-card-stub
|
||||
bodyclass="gl-border-1,gl-border-t-solid,gl-border-gray-100,[object Object]"
|
||||
class="border collapsible-card gl-mb-5 gl-p-0"
|
||||
bodyclass="[object Object]"
|
||||
class="gl-mb-5"
|
||||
footerclass=""
|
||||
headerclass="gl-flex gl-items-center gl-border-b-0 gl-py-3"
|
||||
headerclass="gl-flex,gl-items-center,[object Object]"
|
||||
>
|
||||
<gl-modal-stub
|
||||
actioncancel="[object Object]"
|
||||
|
|
|
|||
|
|
@ -297,7 +297,6 @@ RSpec.describe Member, feature_category: :groups_and_projects do
|
|||
describe '.for_self_and_descendants' do
|
||||
let(:expected_members) do
|
||||
[
|
||||
project_member,
|
||||
subgroup_member,
|
||||
subgroup_project_member
|
||||
]
|
||||
|
|
|
|||
|
|
@ -122,6 +122,30 @@ RSpec.describe Ci::ExpirePipelineCacheService, feature_category: :continuous_int
|
|||
end
|
||||
end
|
||||
|
||||
context 'when pipeline does not have sha' do
|
||||
let(:pipeline_without_sha) { create(:ci_pipeline, project: project) }
|
||||
|
||||
before do
|
||||
pipeline_without_sha.update_column(:sha, nil)
|
||||
end
|
||||
|
||||
it 'does not raise an error' do
|
||||
expect { subject.execute(pipeline_without_sha) }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context 'when pipeline does not have commit' do
|
||||
let(:pipeline_without_commit) { create(:ci_pipeline, project: project) }
|
||||
|
||||
before do
|
||||
allow(pipeline_without_commit).to receive(:commit).and_return(nil)
|
||||
end
|
||||
|
||||
it 'does not raise an error' do
|
||||
expect { subject.execute(pipeline_without_commit) }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
def expect_touched_etag_caching_paths(*paths)
|
||||
expect_next_instance_of(Gitlab::EtagCaching::Store) do |store|
|
||||
expect(store).to receive(:touch).and_wrap_original do |m, *args|
|
||||
|
|
|
|||
|
|
@ -6,13 +6,11 @@ RSpec.describe WorkItems::DataSync::CloneService, feature_category: :team_planni
|
|||
let_it_be(:group) { create(:group) }
|
||||
let_it_be(:project) { create(:project, group: group) }
|
||||
let_it_be(:target_project) { create(:project, group: group) }
|
||||
let_it_be_with_reload(:issue_work_item) { create(:work_item, :opened, project: project) }
|
||||
let_it_be(:task_work_item) { create(:work_item, :task, project: project) }
|
||||
let_it_be_with_reload(:original_work_item) { create(:work_item, :opened, project: project) }
|
||||
let_it_be(:source_project_member) { create(:user, reporter_of: project) }
|
||||
let_it_be(:target_project_member) { create(:user, reporter_of: target_project) }
|
||||
let_it_be(:projects_member) { create(:user, reporter_of: [project, target_project]) }
|
||||
|
||||
let(:original_work_item) { issue_work_item }
|
||||
let(:target_namespace) { target_project.project_namespace.reload }
|
||||
|
||||
let(:service) do
|
||||
|
|
@ -99,7 +97,7 @@ RSpec.describe WorkItems::DataSync::CloneService, feature_category: :team_planni
|
|||
end
|
||||
|
||||
context 'when cloning unsupported work item type' do
|
||||
let(:original_work_item) { task_work_item }
|
||||
let_it_be(:original_work_item) { create(:work_item, :task, project: project) }
|
||||
|
||||
it 'does not raise error' do
|
||||
expect { service.execute }.not_to raise_error
|
||||
|
|
@ -170,12 +168,7 @@ RSpec.describe WorkItems::DataSync::CloneService, feature_category: :team_planni
|
|||
end
|
||||
|
||||
it_behaves_like 'cloneable and moveable work item'
|
||||
|
||||
context 'with specific widgets' do
|
||||
let!(:assignees) { [source_project_member, target_project_member, projects_member] }
|
||||
|
||||
it_behaves_like 'cloneable and moveable widget data'
|
||||
end
|
||||
it_behaves_like 'cloneable and moveable widget data'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,13 +6,11 @@ RSpec.describe WorkItems::DataSync::MoveService, feature_category: :team_plannin
|
|||
let_it_be(:group) { create(:group) }
|
||||
let_it_be(:project) { create(:project) }
|
||||
let_it_be(:target_project) { create(:project, group: group) }
|
||||
let_it_be_with_reload(:issue_work_item) { create(:work_item, :opened, project: project) }
|
||||
let_it_be(:task_work_item) { create(:work_item, :task, project: project) }
|
||||
let_it_be_with_reload(:original_work_item) { create(:work_item, :opened, project: project) }
|
||||
let_it_be(:source_project_member) { create(:user, reporter_of: project) }
|
||||
let_it_be(:target_project_member) { create(:user, reporter_of: target_project) }
|
||||
let_it_be(:projects_member) { create(:user, reporter_of: [project, target_project]) }
|
||||
|
||||
let(:original_work_item) { issue_work_item }
|
||||
let(:target_namespace) { target_project.project_namespace.reload }
|
||||
|
||||
let(:service) do
|
||||
|
|
@ -99,7 +97,7 @@ RSpec.describe WorkItems::DataSync::MoveService, feature_category: :team_plannin
|
|||
end
|
||||
|
||||
context 'when moving unsupported work item type' do
|
||||
let(:original_work_item) { task_work_item }
|
||||
let_it_be_with_reload(:original_work_item) { create(:work_item, :task, project: project) }
|
||||
|
||||
it 'does not raise error' do
|
||||
expect { service.execute }.not_to raise_error
|
||||
|
|
@ -170,12 +168,7 @@ RSpec.describe WorkItems::DataSync::MoveService, feature_category: :team_plannin
|
|||
end
|
||||
|
||||
it_behaves_like 'cloneable and moveable work item'
|
||||
|
||||
context 'with specific widgets' do
|
||||
let!(:assignees) { [source_project_member, target_project_member, projects_member] }
|
||||
|
||||
it_behaves_like 'cloneable and moveable widget data'
|
||||
end
|
||||
it_behaves_like 'cloneable and moveable widget data'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -347,10 +347,6 @@ RSpec.configure do |config|
|
|||
# See https://gitlab.com/gitlab-org/gitlab/-/issues/457283
|
||||
stub_feature_flags(duo_chat_requires_licensed_seat_sm: false)
|
||||
|
||||
# This flag is for [Selectively disable by actor](https://docs.gitlab.com/ee/development/feature_flags/controls.html#selectively-disable-by-actor).
|
||||
# Hence, it should not enable by default in test.
|
||||
stub_feature_flags(v2_chat_agent_integration_override: false) if Gitlab.ee?
|
||||
|
||||
# Experimental merge request dashboard
|
||||
stub_feature_flags(merge_request_dashboard: false)
|
||||
|
||||
|
|
|
|||
|
|
@ -745,7 +745,7 @@
|
|||
- './ee/spec/lib/arkose/verify_response_spec.rb'
|
||||
- './ee/spec/lib/audit/changes_spec.rb'
|
||||
- './ee/spec/lib/audit/details_spec.rb'
|
||||
- './ee/spec/lib/audit/external_status_check_changes_auditor_spec.rb'
|
||||
- './ee/spec/lib/merge_requests/external_status_check_changes_auditor_spec.rb'
|
||||
- './ee/spec/lib/audit/group_merge_request_approval_setting_changes_auditor_spec.rb'
|
||||
- './ee/spec/lib/banzai/filter/cross_project_issuable_information_filter_spec.rb'
|
||||
- './ee/spec/lib/banzai/filter/issuable_reference_expansion_filter_spec.rb'
|
||||
|
|
|
|||
|
|
@ -50,38 +50,36 @@ end
|
|||
RSpec.shared_examples 'cloneable and moveable widget data' do
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
|
||||
def set_assignees
|
||||
original_work_item.assignee_ids = assignees.map(&:id)
|
||||
end
|
||||
|
||||
def work_item_assignees(work_item)
|
||||
work_item.reload.assignees
|
||||
end
|
||||
|
||||
def work_item_award_emoji(work_item)
|
||||
work_item.reload.award_emoji.order(user_id: :asc, name: :asc).pluck(:user_id, :name)
|
||||
work_item.reload.award_emoji.pluck(:user_id, :name)
|
||||
end
|
||||
|
||||
where(:widget_name, :eval_value, :before_lambda, :expected_data, :operations) do
|
||||
:assignees | :work_item_assignees | -> { set_assignees } | ref(:assignees) | [ref(:move), ref(:clone)]
|
||||
:award_emoji | :work_item_award_emoji | -> {} | ref(:award_emojis) | [ref(:move)]
|
||||
where(:widget_name, :eval_value, :expected_data, :operations) do
|
||||
:assignees | :work_item_assignees | ref(:assignees) | [ref(:move), ref(:clone)]
|
||||
:award_emoji | :work_item_award_emoji | ref(:award_emojis) | [ref(:move)]
|
||||
end
|
||||
|
||||
let(:move) { WorkItems::DataSync::MoveService }
|
||||
let(:clone) { WorkItems::DataSync::CloneService }
|
||||
|
||||
let_it_be(:users) { create_list(:user, 3) }
|
||||
let_it_be(:milestone) { create(:milestone) }
|
||||
let_it_be(:thumbs_ups) { create_list(:award_emoji, 2, name: 'thumbsup', awardable: original_work_item) }
|
||||
let_it_be(:thumbs_downs) { create_list(:award_emoji, 2, name: 'thumbsdown', awardable: original_work_item) }
|
||||
let_it_be(:award_emojis) { original_work_item.reload.award_emoji.pluck(:user_id, :name) }
|
||||
|
||||
let_it_be(:assignees) do
|
||||
original_work_item.assignee_ids = users.map(&:id)
|
||||
# set assignees and return assigned users as `expected_data` for later comparison.
|
||||
users
|
||||
end
|
||||
|
||||
with_them do
|
||||
context "with widget" do
|
||||
let(:move) { WorkItems::DataSync::MoveService }
|
||||
let(:clone) { WorkItems::DataSync::CloneService }
|
||||
let!(:thumbs_ups) { create_list(:award_emoji, 2, name: 'thumbsup', awardable: original_work_item) }
|
||||
let!(:thumbs_downs) { create_list(:award_emoji, 2, name: 'thumbsdown', awardable: original_work_item) }
|
||||
|
||||
let!(:award_emojis) do
|
||||
original_work_item.reload.award_emoji.order(user_id: :asc, name: :asc).pluck(:user_id, :name)
|
||||
end
|
||||
|
||||
before do
|
||||
instance_exec(&before_lambda)
|
||||
end
|
||||
|
||||
it 'clones and moves widget data' do
|
||||
new_work_item = service.execute[:work_item]
|
||||
widget_value = send(eval_value, new_work_item)
|
||||
|
|
|
|||
Loading…
Reference in New Issue