Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
e0baa17c0f
commit
f2e90d6c48
|
|
@ -13,7 +13,6 @@ Capybara/VisibilityMatcher:
|
|||
- 'ee/spec/support/shared_examples/views/issuable_bulk_dropdown_shared_examples.rb'
|
||||
- 'ee/spec/views/registrations/welcome/show.html.haml_spec.rb'
|
||||
- 'spec/features/dashboard/merge_requests_spec.rb'
|
||||
- 'spec/features/dashboard/todos/todos_spec.rb'
|
||||
- 'spec/features/groups/group_settings_spec.rb'
|
||||
- 'spec/features/issues/user_creates_branch_and_merge_request_spec.rb'
|
||||
- 'spec/features/issues/user_creates_issue_spec.rb'
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ Layout/ClassStructure:
|
|||
- 'app/models/environment_status.rb'
|
||||
- 'app/models/error_tracking/project_error_tracking_setting.rb'
|
||||
- 'app/models/gpg_key.rb'
|
||||
- 'app/models/hooks/web_hook.rb'
|
||||
- 'app/models/identity.rb'
|
||||
- 'app/models/integrations/buildkite.rb'
|
||||
- 'app/models/integrations/clickup.rb'
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ Layout/LineBreakAfterFinalMixin:
|
|||
- 'ee/app/workers/active_user_count_threshold_worker.rb'
|
||||
- 'ee/app/workers/analytics/value_stream_dashboard/count_worker.rb'
|
||||
- 'ee/app/workers/arkose/blocked_users_report_worker.rb'
|
||||
- 'ee/app/workers/elastic_indexing_control_worker.rb'
|
||||
- 'ee/app/workers/geo/metrics_update_worker.rb'
|
||||
- 'ee/app/workers/geo/sidekiq_cron_config_worker.rb'
|
||||
- 'ee/app/workers/gitlab_subscriptions/notify_seats_exceeded_batch_worker.rb'
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'app/models/concerns/integrations/slack_mattermost_fields.rb'
|
||||
- 'app/models/concerns/spammable.rb'
|
||||
- 'app/models/concerns/taskable.rb'
|
||||
- 'app/models/integrations/bamboo.rb'
|
||||
- 'app/models/integrations/diffblue_cover.rb'
|
||||
- 'app/models/integrations/gitlab_slack_application.rb'
|
||||
- 'app/models/integrations/hangouts_chat.rb'
|
||||
|
|
@ -216,10 +215,8 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'ee/spec/lib/gitlab/geo/every_repository_type_replicated_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/git_access_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/licenses/submit_license_usage_data_banner_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/llm/chain/agents/zero_shot/qa_evaluation_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/llm/chain/tools/refactor_code/executor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/llm/chain/tools/summarize_comments/executor_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/llm/completions/chat_real_requests_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/package_metadata/connector/base_data_file_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/subscription_portal/clients/graphql_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/usage/metrics/instrumentations/count_deployment_approvals_metric_spec.rb'
|
||||
|
|
@ -323,7 +320,6 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'ee/spec/services/security/token_revocation_service_spec.rb'
|
||||
- 'ee/spec/support/llm.rb'
|
||||
- 'ee/spec/support/shared_examples/lib/gitlab/llm/chain/slash_command_tool_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/lib/gitlab/secrets_check_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/requests/api/graphql/ci/queueing_history_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/requests/identity_verification_shared_examples.rb'
|
||||
- 'ee/spec/support/shared_examples/services/audit_events/streaming/headers_operations_shared_examples.rb'
|
||||
|
|
@ -377,7 +373,6 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'lib/gitlab/database/partitioning/sliding_list_strategy.rb'
|
||||
- 'lib/gitlab/database/query_analyzers/prevent_cross_database_modification.rb'
|
||||
- 'lib/gitlab/database/query_analyzers/restrict_allowed_schemas.rb'
|
||||
- 'lib/gitlab/github_import/importer/events/changed_reviewer.rb'
|
||||
- 'lib/gitlab/hook_data/base_builder.rb'
|
||||
- 'lib/gitlab/i18n/po_linter.rb'
|
||||
- 'lib/gitlab/mailgun/webhook_processors/member_invites.rb'
|
||||
|
|
@ -483,7 +478,6 @@ Layout/LineEndStringConcatenationIndentation:
|
|||
- 'spec/graphql/mutations/merge_requests/update_spec.rb'
|
||||
- 'spec/graphql/resolvers/timelog_resolver_spec.rb'
|
||||
- 'spec/graphql/types/ci/job_trace_type_spec.rb'
|
||||
- 'spec/graphql/types/project_type_spec.rb'
|
||||
- 'spec/helpers/appearances_helper_spec.rb'
|
||||
- 'spec/helpers/application_settings_helper_spec.rb'
|
||||
- 'spec/helpers/emails_helper_spec.rb'
|
||||
|
|
|
|||
|
|
@ -135,7 +135,6 @@ Layout/LineLength:
|
|||
- 'app/models/group.rb'
|
||||
- 'app/models/incident_management/project_incident_management_setting.rb'
|
||||
- 'app/models/instance_configuration.rb'
|
||||
- 'app/models/integrations/asana.rb'
|
||||
- 'app/models/integrations/chat_message/merge_message.rb'
|
||||
- 'app/models/integrations/chat_message/note_message.rb'
|
||||
- 'app/models/integrations/chat_message/pipeline_message.rb'
|
||||
|
|
@ -593,7 +592,6 @@ Layout/LineLength:
|
|||
- 'ee/app/models/concerns/ee/issuable_link.rb'
|
||||
- 'ee/app/models/concerns/elastic/application_versioned_search.rb'
|
||||
- 'ee/app/models/concerns/elastic/repositories_search.rb'
|
||||
- 'ee/app/models/concerns/geo/replicable_model.rb'
|
||||
- 'ee/app/models/concerns/geo/verification_state.rb'
|
||||
- 'ee/app/models/concerns/geo/verification_state_definition.rb'
|
||||
- 'ee/app/models/concerns/issue_widgets/acts_like_requirement.rb'
|
||||
|
|
@ -617,11 +615,8 @@ Layout/LineLength:
|
|||
- 'ee/app/models/ee/merge_request/metrics.rb'
|
||||
- 'ee/app/models/ee/merge_request_diff.rb'
|
||||
- 'ee/app/models/ee/milestone_release.rb'
|
||||
- 'ee/app/models/ee/packages/package_file.rb'
|
||||
- 'ee/app/models/ee/pages_deployment.rb'
|
||||
- 'ee/app/models/ee/project.rb'
|
||||
- 'ee/app/models/ee/snippet_repository.rb'
|
||||
- 'ee/app/models/ee/terraform/state_version.rb'
|
||||
- 'ee/app/models/ee/upload.rb'
|
||||
- 'ee/app/models/ee/user.rb'
|
||||
- 'ee/app/models/ee/vulnerability.rb'
|
||||
|
|
@ -1969,7 +1964,6 @@ Layout/LineLength:
|
|||
- 'lib/api/helpers/custom_attributes.rb'
|
||||
- 'lib/api/helpers/file_upload_helpers.rb'
|
||||
- 'lib/api/helpers/groups_helpers.rb'
|
||||
- 'lib/api/helpers/integrations_helpers.rb'
|
||||
- 'lib/api/helpers/label_helpers.rb'
|
||||
- 'lib/api/helpers/members_helpers.rb'
|
||||
- 'lib/api/helpers/merge_requests_helpers.rb'
|
||||
|
|
@ -4321,7 +4315,6 @@ Layout/LineLength:
|
|||
- 'spec/workers/packages/nuget/extraction_worker_spec.rb'
|
||||
- 'spec/workers/personal_access_tokens/expired_notification_worker_spec.rb'
|
||||
- 'spec/workers/personal_access_tokens/expiring_worker_spec.rb'
|
||||
- 'spec/workers/post_receive_spec.rb'
|
||||
- 'spec/workers/projects/post_creation_worker_spec.rb'
|
||||
- 'spec/workers/propagate_integration_inherit_descendant_worker_spec.rb'
|
||||
- 'spec/workers/remove_expired_members_worker_spec.rb'
|
||||
|
|
|
|||
|
|
@ -82,7 +82,6 @@ Naming/HeredocDelimiterNaming:
|
|||
- 'spec/models/ci/bridge_spec.rb'
|
||||
- 'spec/models/commit_spec.rb'
|
||||
- 'spec/models/concerns/ci/maskable_spec.rb'
|
||||
- 'spec/models/integrations/asana_spec.rb'
|
||||
- 'spec/models/ssh_host_key_spec.rb'
|
||||
- 'spec/services/ci/create_downstream_pipeline_service_spec.rb'
|
||||
- 'spec/services/ci/create_pipeline_service/cache_spec.rb'
|
||||
|
|
@ -105,4 +104,3 @@ Naming/HeredocDelimiterNaming:
|
|||
- 'spec/support/shared_examples/models/taskable_shared_examples.rb'
|
||||
- 'spec/support/shared_examples/services/packages/debian/generate_distribution_shared_examples.rb'
|
||||
- 'spec/tasks/gitlab/db/decomposition/rollback/bump_ci_sequences_rake_spec.rb'
|
||||
- 'spec/workers/post_receive_spec.rb'
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ Performance/StringIdentifierArgument:
|
|||
- 'ee/spec/models/namespace_setting_spec.rb'
|
||||
- 'ee/spec/models/project_feature_spec.rb'
|
||||
- 'ee/spec/models/project_import_data_spec.rb'
|
||||
- 'ee/spec/models/project_import_state_spec.rb'
|
||||
- 'ee/spec/policies/audit_events/group/namespace_filter_policy_spec.rb'
|
||||
- 'ee/spec/policies/project_policy_spec.rb'
|
||||
- 'ee/spec/requests/api/dependency_proxy/packages/maven_spec.rb'
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ Rails/Date:
|
|||
- 'app/models/concerns/milestoneish.rb'
|
||||
- 'app/models/deploy_token.rb'
|
||||
- 'app/serializers/entity_date_helper.rb'
|
||||
- 'app/services/ci/catalog/resources/aggregate_last30_day_usage_service.rb'
|
||||
- 'app/services/members/invitation_reminder_email_service.rb'
|
||||
- 'app/services/projects/fetch_statistics_increment_service.rb'
|
||||
- 'app/services/users/activity_service.rb'
|
||||
|
|
@ -242,6 +241,5 @@ Rails/Date:
|
|||
- 'spec/tasks/gitlab/tokens/manage_expiry_task_spec.rb'
|
||||
- 'spec/validators/future_date_validator_spec.rb'
|
||||
- 'spec/views/user_settings/ssh_keys/_key_details.html.haml_spec.rb'
|
||||
- 'spec/workers/ci/catalog/resources/aggregate_last30_day_usage_worker_spec.rb'
|
||||
- 'spec/workers/issue_due_scheduler_worker_spec.rb'
|
||||
- 'spec/workers/members/expiring_email_notification_worker_spec.rb'
|
||||
|
|
|
|||
|
|
@ -68,7 +68,6 @@ Rails/EnumSyntax:
|
|||
- 'app/models/environment.rb'
|
||||
- 'app/models/error_tracking/error.rb'
|
||||
- 'app/models/event.rb'
|
||||
- 'app/models/hooks/web_hook.rb'
|
||||
- 'app/models/integrations/jira.rb'
|
||||
- 'app/models/integrations/jira_tracker_data.rb'
|
||||
- 'app/models/internal_id.rb'
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ Rails/Pluck:
|
|||
- 'ee/spec/controllers/projects/feature_flag_issues_controller_spec.rb'
|
||||
- 'ee/spec/features/projects/new_project_spec.rb'
|
||||
- 'ee/spec/graphql/api/vulnerabilities_spec.rb'
|
||||
- 'ee/spec/helpers/ee/geo_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/operations_helper_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/import_export/group/tree_saver_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/custom_file_templates_spec.rb'
|
||||
|
|
|
|||
|
|
@ -245,7 +245,6 @@ RSpec/BeEq:
|
|||
- 'ee/spec/models/ee/user_spec.rb'
|
||||
- 'ee/spec/models/elastic/migration_record_spec.rb'
|
||||
- 'ee/spec/models/environment_spec.rb'
|
||||
- 'ee/spec/models/geo_node_spec.rb'
|
||||
- 'ee/spec/models/geo_node_status_spec.rb'
|
||||
- 'ee/spec/models/gitlab/seat_link_data_spec.rb'
|
||||
- 'ee/spec/models/gitlab_subscription_spec.rb'
|
||||
|
|
@ -537,7 +536,6 @@ RSpec/BeEq:
|
|||
- 'qa/spec/specs/allure_report_spec.rb'
|
||||
- 'qa/spec/support/loglinking_spec.rb'
|
||||
- 'qa/spec/support/repeater_spec.rb'
|
||||
- 'qa/spec/tools/ci/qa_changes_spec.rb'
|
||||
- 'spec/bin/audit_event_type_spec.rb'
|
||||
- 'spec/bin/feature_flag_spec.rb'
|
||||
- 'spec/config/application_spec.rb'
|
||||
|
|
@ -1031,6 +1029,8 @@ RSpec/BeEq:
|
|||
- 'spec/lib/system_check/app/gitlab_resque_config_exists_check_spec.rb'
|
||||
- 'spec/lib/system_check/app/table_truncate_check_spec.rb'
|
||||
- 'spec/lib/uploaded_file_spec.rb'
|
||||
- 'spec/migrations/20230929155123_migrate_disable_merge_trains_value_spec.rb'
|
||||
- 'spec/migrations/20240419140530_set_trusted_extern_uid_to_false_for_existing_bitbucket_identities_spec.rb'
|
||||
- 'spec/mailers/notify_spec.rb'
|
||||
- 'spec/migrations/20240508085441_re_add_redirect_routes_path_index_spec.rb'
|
||||
- 'spec/migrations/20240603152046_delete_bitbucket_identities_with_untrusted_extern_uid_spec.rb'
|
||||
|
|
|
|||
|
|
@ -1241,7 +1241,6 @@ RSpec/BeforeAllRoleAssignment:
|
|||
- 'spec/services/merge_requests/update_reviewers_service_spec.rb'
|
||||
- 'spec/services/notes/build_service_spec.rb'
|
||||
- 'spec/services/notes/create_service_spec.rb'
|
||||
- 'spec/services/notes/quick_actions_service_spec.rb'
|
||||
- 'spec/services/notification_recipients/builder/new_note_spec.rb'
|
||||
- 'spec/services/notification_service_spec.rb'
|
||||
- 'spec/services/packages/mark_packages_for_destruction_service_spec.rb'
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ RSpec/ChangeByZero:
|
|||
- 'ee/spec/services/vulnerabilities/manually_create_service_spec.rb'
|
||||
- 'ee/spec/services/vulnerabilities/security_finding/create_merge_request_service_spec.rb'
|
||||
- 'ee/spec/services/work_items/legacy_epics/related_epic_links/create_service_spec.rb'
|
||||
- 'ee/spec/support/shared_examples/models/concerns/verifiable_model_with_separate_table_shared_examples.rb'
|
||||
- 'ee/spec/workers/observability/alert_query_worker_spec.rb'
|
||||
- 'ee/spec/workers/security/store_security_reports_by_project_worker_spec.rb'
|
||||
- 'spec/controllers/admin/clusters_controller_spec.rb'
|
||||
|
|
|
|||
|
|
@ -155,7 +155,6 @@ RSpec/ContainExactly:
|
|||
- 'spec/models/concerns/members/enumerable_spec.rb'
|
||||
- 'spec/models/design_management/version_spec.rb'
|
||||
- 'spec/models/group_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/models/member_spec.rb'
|
||||
- 'spec/models/members/members/members_with_parents_spec.rb'
|
||||
- 'spec/models/organizations/organization_spec.rb'
|
||||
|
|
|
|||
|
|
@ -2862,7 +2862,6 @@ RSpec/ContextWording:
|
|||
- 'spec/workers/packages/nuget/extraction_worker_spec.rb'
|
||||
- 'spec/workers/packages/rubygems/extraction_worker_spec.rb'
|
||||
- 'spec/workers/pages_domain_removal_cron_worker_spec.rb'
|
||||
- 'spec/workers/post_receive_spec.rb'
|
||||
- 'spec/workers/project_export_worker_spec.rb'
|
||||
- 'spec/workers/projects/git_garbage_collect_worker_spec.rb'
|
||||
- 'spec/workers/projects/post_creation_worker_spec.rb'
|
||||
|
|
|
|||
|
|
@ -429,7 +429,6 @@ RSpec/ExampleWithoutDescription:
|
|||
- 'spec/models/incident_management/timeline_event_spec.rb'
|
||||
- 'spec/models/incident_management/timeline_event_tag_spec.rb'
|
||||
- 'spec/models/integration_spec.rb'
|
||||
- 'spec/models/integrations/bugzilla_spec.rb'
|
||||
- 'spec/models/integrations/drone_ci_spec.rb'
|
||||
- 'spec/models/integrations/jira_cloud_app_spec.rb'
|
||||
- 'spec/models/integrations/teamcity_spec.rb'
|
||||
|
|
@ -533,7 +532,6 @@ RSpec/ExampleWithoutDescription:
|
|||
- 'spec/services/notes/post_process_service_spec.rb'
|
||||
- 'spec/services/notification_service_spec.rb'
|
||||
- 'spec/services/packages/create_dependency_service_spec.rb'
|
||||
- 'spec/services/packages/nuget/extract_remote_metadata_file_service_spec.rb'
|
||||
- 'spec/services/packages/protection/create_rule_service_spec.rb'
|
||||
- 'spec/services/packages/protection/delete_rule_service_spec.rb'
|
||||
- 'spec/services/packages/protection/update_rule_service_spec.rb'
|
||||
|
|
|
|||
|
|
@ -223,7 +223,6 @@ RSpec/ExpectChange:
|
|||
- 'spec/models/diff_note_spec.rb'
|
||||
- 'spec/models/environment_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_log_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/models/integrations/confluence_spec.rb'
|
||||
- 'spec/models/integrations/drone_ci_spec.rb'
|
||||
- 'spec/models/label_spec.rb'
|
||||
|
|
|
|||
|
|
@ -412,7 +412,6 @@ RSpec/ExpectInHook:
|
|||
- 'spec/workers/incident_management/close_incident_worker_spec.rb'
|
||||
- 'spec/workers/integrations/create_external_cross_reference_worker_spec.rb'
|
||||
- 'spec/workers/packages/helm/extraction_worker_spec.rb'
|
||||
- 'spec/workers/post_receive_spec.rb'
|
||||
- 'spec/workers/projects/git_garbage_collect_worker_spec.rb'
|
||||
- 'spec/workers/projects/refresh_build_artifacts_size_statistics_worker_spec.rb'
|
||||
- 'spec/workers/run_pipeline_schedule_worker_spec.rb'
|
||||
|
|
|
|||
|
|
@ -584,7 +584,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/lib/gitlab/cidr_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/custom_file_templates_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/customers_dot/jwt_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/data_builder/vulnerability_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/elastic/elasticsearch_enabled_cache_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/elastic/snippet_search_results_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/email/handler/create_note_handler_spec.rb'
|
||||
|
|
@ -746,7 +745,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/concerns/scim_paginatable_spec.rb'
|
||||
- 'ee/spec/models/concerns/timebox_spec.rb'
|
||||
- 'ee/spec/models/container_registry/event_spec.rb'
|
||||
- 'ee/spec/models/container_repository_spec.rb'
|
||||
- 'ee/spec/models/dast_site_spec.rb'
|
||||
- 'ee/spec/models/dast_site_token_spec.rb'
|
||||
- 'ee/spec/models/dast_site_validation_spec.rb'
|
||||
|
|
@ -762,10 +760,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/ee/appearance_spec.rb'
|
||||
- 'ee/spec/models/ee/approvable_spec.rb'
|
||||
- 'ee/spec/models/ee/ci/build_dependencies_spec.rb'
|
||||
- 'ee/spec/models/ee/ci/pipeline_artifact_spec.rb'
|
||||
- 'ee/spec/models/ee/ci/secure_file_spec.rb'
|
||||
- 'ee/spec/models/ee/dependency_proxy/blob_spec.rb'
|
||||
- 'ee/spec/models/ee/dependency_proxy/manifest_spec.rb'
|
||||
- 'ee/spec/models/ee/description_version_spec.rb'
|
||||
- 'ee/spec/models/ee/event_collection_spec.rb'
|
||||
- 'ee/spec/models/ee/event_spec.rb'
|
||||
|
|
@ -774,7 +768,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/ee/incident_management/project_incident_management_setting_spec.rb'
|
||||
- 'ee/spec/models/ee/key_spec.rb'
|
||||
- 'ee/spec/models/ee/label_spec.rb'
|
||||
- 'ee/spec/models/ee/lfs_object_spec.rb'
|
||||
- 'ee/spec/models/ee/list_spec.rb'
|
||||
- 'ee/spec/models/ee/members_preloader_spec.rb'
|
||||
- 'ee/spec/models/ee/merge_request/metrics_spec.rb'
|
||||
|
|
@ -782,7 +775,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/ee/namespace_statistics_spec.rb'
|
||||
- 'ee/spec/models/ee/namespaces/namespace_ban_spec.rb'
|
||||
- 'ee/spec/models/ee/notification_setting_spec.rb'
|
||||
- 'ee/spec/models/ee/pages_deployment_spec.rb'
|
||||
- 'ee/spec/models/ee/preloaders/group_policy_preloader_spec.rb'
|
||||
- 'ee/spec/models/ee/project_authorization_spec.rb'
|
||||
- 'ee/spec/models/ee/protected_ref_spec.rb'
|
||||
|
|
@ -810,7 +802,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/incident_management/oncall_schedule_spec.rb'
|
||||
- 'ee/spec/models/incident_management/oncall_shift_spec.rb'
|
||||
- 'ee/spec/models/incident_management/pending_escalations/issue_spec.rb'
|
||||
- 'ee/spec/models/instance_security_dashboard_spec.rb'
|
||||
- 'ee/spec/models/integrations/chat_message/vulnerability_message_spec.rb'
|
||||
- 'ee/spec/models/integrations/github/remote_project_spec.rb'
|
||||
- 'ee/spec/models/integrations/github/status_message_spec.rb'
|
||||
|
|
@ -825,7 +816,6 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/merge_requests/external_status_check_spec.rb'
|
||||
- 'ee/spec/models/milestone_release_spec.rb'
|
||||
- 'ee/spec/models/namespace_limit_spec.rb'
|
||||
- 'ee/spec/models/packages/package_file_spec.rb'
|
||||
- 'ee/spec/models/path_lock_spec.rb'
|
||||
- 'ee/spec/models/preloaders/environments/protected_environment_preloader_spec.rb'
|
||||
- 'ee/spec/models/productivity_analytics_spec.rb'
|
||||
|
|
@ -837,11 +827,9 @@ RSpec/FeatureCategory:
|
|||
- 'ee/spec/models/requirements_management/requirement_spec.rb'
|
||||
- 'ee/spec/models/saml_group_link_spec.rb'
|
||||
- 'ee/spec/models/security/training_provider_spec.rb'
|
||||
- 'ee/spec/models/snippet_repository_spec.rb'
|
||||
- 'ee/spec/models/status_page/project_setting_spec.rb'
|
||||
- 'ee/spec/models/status_page/published_incident_spec.rb'
|
||||
- 'ee/spec/models/storage_shard_spec.rb'
|
||||
- 'ee/spec/models/upload_spec.rb'
|
||||
- 'ee/spec/models/uploads/local_spec.rb'
|
||||
- 'ee/spec/models/user_permission_export_upload_spec.rb'
|
||||
- 'ee/spec/models/user_preference_spec.rb'
|
||||
|
|
@ -2433,7 +2421,6 @@ RSpec/FeatureCategory:
|
|||
- 'spec/lib/gitlab/diff/file_collection/merge_request_diff_base_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/file_collection_sorter_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/file_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/formatters/image_formatter_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/formatters/text_formatter_spec.rb'
|
||||
- 'spec/lib/gitlab/diff/inline_diff_markdown_marker_spec.rb'
|
||||
|
|
@ -2673,7 +2660,6 @@ RSpec/FeatureCategory:
|
|||
- 'spec/lib/gitlab/instrumentation/redis_spec.rb'
|
||||
- 'spec/lib/gitlab/internal_post_receive/response_spec.rb'
|
||||
- 'spec/lib/gitlab/issuable/clone/attributes_rewriter_spec.rb'
|
||||
- 'spec/lib/gitlab/issuable/clone/copy_resource_events_service_spec.rb'
|
||||
- 'spec/lib/gitlab/issuable_metadata_spec.rb'
|
||||
- 'spec/lib/gitlab/issuable_sorter_spec.rb'
|
||||
- 'spec/lib/gitlab/issuables_count_for_state_spec.rb'
|
||||
|
|
@ -3629,7 +3615,6 @@ RSpec/FeatureCategory:
|
|||
- 'spec/rubocop/cop/gitlab/keys_first_and_values_first_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/module_with_instance_variables_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/namespaced_class_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/no_code_coverage_comment_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/policy_rule_boolean_spec.rb'
|
||||
- 'spec/rubocop/cop/gitlab/predicate_memoization_spec.rb'
|
||||
|
|
|
|||
|
|
@ -2461,14 +2461,10 @@ RSpec/NamedSubject:
|
|||
- 'spec/models/group_deploy_key_spec.rb'
|
||||
- 'spec/models/group_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_log_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/models/import_export_upload_spec.rb'
|
||||
- 'spec/models/import_failure_spec.rb'
|
||||
- 'spec/models/incident_management/project_incident_management_setting_spec.rb'
|
||||
- 'spec/models/instance_configuration_spec.rb'
|
||||
- 'spec/models/integrations/asana_spec.rb'
|
||||
- 'spec/models/integrations/bamboo_spec.rb'
|
||||
- 'spec/models/integrations/bugzilla_spec.rb'
|
||||
- 'spec/models/integrations/buildkite_spec.rb'
|
||||
- 'spec/models/integrations/campfire_spec.rb'
|
||||
- 'spec/models/integrations/chat_message/alert_message_spec.rb'
|
||||
|
|
@ -3112,7 +3108,6 @@ RSpec/NamedSubject:
|
|||
- 'spec/services/packages/rubygems/process_gem_service_spec.rb'
|
||||
- 'spec/services/packages/update_tags_service_spec.rb'
|
||||
- 'spec/services/personal_access_tokens/create_service_spec.rb'
|
||||
- 'spec/services/personal_access_tokens/last_used_service_spec.rb'
|
||||
- 'spec/services/personal_access_tokens/revoke_service_spec.rb'
|
||||
- 'spec/services/post_receive_service_spec.rb'
|
||||
- 'spec/services/projects/alerting/notify_service_spec.rb'
|
||||
|
|
|
|||
|
|
@ -126,7 +126,6 @@ RSpec/NoExpectationExample:
|
|||
- 'spec/models/ci/pipeline_spec.rb'
|
||||
- 'spec/models/deploy_key_spec.rb'
|
||||
- 'spec/models/group_spec.rb'
|
||||
- 'spec/models/integrations/bamboo_spec.rb'
|
||||
- 'spec/models/integrations/pipelines_email_spec.rb'
|
||||
- 'spec/models/remote_mirror_spec.rb'
|
||||
- 'spec/models/repository_spec.rb'
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ RSpec/RepeatedSubjectCall:
|
|||
- 'ee/spec/services/sbom/ingestion/tasks/ingest_occurrences_spec.rb'
|
||||
- 'ee/spec/services/sbom/ingestion/tasks/ingest_sources_spec.rb'
|
||||
- 'ee/spec/services/security/orchestration/assign_service_spec.rb'
|
||||
- 'ee/spec/workers/namespaces/cascade_duo_features_enabled_worker_spec.rb'
|
||||
- 'ee/spec/workers/search/zoekt/lost_node_event_worker_spec.rb'
|
||||
- 'spec/controllers/admin/runners_controller_spec.rb'
|
||||
- 'spec/controllers/concerns/page_limiter_spec.rb'
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ RSpec/ReturnFromStub:
|
|||
- 'ee/spec/requests/groups/protected_environments_controller_spec.rb'
|
||||
- 'ee/spec/services/deployments/auto_rollback_service_spec.rb'
|
||||
- 'ee/spec/services/geo/framework_repository_sync_service_spec.rb'
|
||||
- 'ee/spec/services/groups/destroy_service_spec.rb'
|
||||
- 'ee/spec/services/ide/schemas_config_service_spec.rb'
|
||||
- 'ee/spec/services/merge_requests/build_service_spec.rb'
|
||||
- 'ee/spec/services/merge_trains/create_pipeline_service_spec.rb'
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ RSpec/VerifiedDoubleReference:
|
|||
- 'ee/spec/models/productivity_analytics_spec.rb'
|
||||
- 'ee/spec/models/repository_spec.rb'
|
||||
- 'ee/spec/policies/global_policy_spec.rb'
|
||||
- 'ee/spec/requests/admin/geo/replicables_controller_spec.rb'
|
||||
- 'ee/spec/requests/api/ai/duo_workflows/workflows_spec.rb'
|
||||
- 'ee/spec/requests/api/code_suggestions_spec.rb'
|
||||
- 'ee/spec/requests/api/graphql/google_cloud/artifact_registry/docker_image_spec.rb'
|
||||
|
|
|
|||
|
|
@ -665,8 +665,6 @@ RSpec/VerifiedDoubles:
|
|||
- 'spec/models/environment_spec.rb'
|
||||
- 'spec/models/event_spec.rb'
|
||||
- 'spec/models/external_issue_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/models/integrations/asana_spec.rb'
|
||||
- 'spec/models/integrations/chat_message/pipeline_message_spec.rb'
|
||||
- 'spec/models/integrations/jira_spec.rb'
|
||||
- 'spec/models/integrations/microsoft_teams_spec.rb'
|
||||
|
|
@ -910,7 +908,6 @@ RSpec/VerifiedDoubles:
|
|||
- 'spec/workers/new_merge_request_worker_spec.rb'
|
||||
- 'spec/workers/pages_domain_ssl_renewal_worker_spec.rb'
|
||||
- 'spec/workers/pages_domain_verification_worker_spec.rb'
|
||||
- 'spec/workers/post_receive_spec.rb'
|
||||
- 'spec/workers/project_cache_worker_spec.rb'
|
||||
- 'spec/workers/projects/after_import_worker_spec.rb'
|
||||
- 'spec/workers/propagate_integration_group_worker_spec.rb'
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ Style/BlockDelimiters:
|
|||
- 'spec/models/ci/group_variable_spec.rb'
|
||||
- 'spec/models/container_registry/protection/rule_spec.rb'
|
||||
- 'spec/models/environment_status_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/models/incident_management/timeline_event_tag_spec.rb'
|
||||
- 'spec/models/packages/npm/metadatum_spec.rb'
|
||||
- 'spec/models/packages/protection/rule_spec.rb'
|
||||
|
|
@ -45,4 +44,3 @@ Style/BlockDelimiters:
|
|||
- 'spec/presenters/tree_entry_presenter_spec.rb'
|
||||
- 'spec/requests/api/graphql/mutations/container_registry/protection/rule/create_spec.rb'
|
||||
- 'spec/requests/jira_connect/subscriptions_controller_spec.rb'
|
||||
- 'spec/services/packages/nuget/extract_remote_metadata_file_service_spec.rb'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Style/EmptyElse:
|
|||
- 'app/models/resource_state_event.rb'
|
||||
- 'app/models/resource_timebox_event.rb'
|
||||
- 'app/services/award_emojis/add_service.rb'
|
||||
- 'app/workers/post_receive.rb'
|
||||
- 'config/initializers/doorkeeper_openid_connect.rb'
|
||||
- 'ee/app/helpers/ee/kerberos_helper.rb'
|
||||
- 'ee/app/services/gitlab_subscriptions/check_future_renewal_service.rb'
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ Style/FormatString:
|
|||
- 'app/models/design_management/design.rb'
|
||||
- 'app/models/diff_note.rb'
|
||||
- 'app/models/diff_viewer/base.rb'
|
||||
- 'app/models/integrations/asana.rb'
|
||||
- 'app/models/integrations/chat_message/pipeline_message.rb'
|
||||
- 'app/models/integrations/datadog.rb'
|
||||
- 'app/models/integrations/emails_on_push.rb'
|
||||
|
|
|
|||
|
|
@ -432,7 +432,6 @@ Style/GuardClause:
|
|||
- 'lib/gitlab/instrumentation/global_search_api.rb'
|
||||
- 'lib/gitlab/instrumentation/rate_limiting_gates.rb'
|
||||
- 'lib/gitlab/instrumentation/uploads.rb'
|
||||
- 'lib/gitlab/issuable/clone/copy_resource_events_service.rb'
|
||||
- 'lib/gitlab/legacy_github_import/client.rb'
|
||||
- 'lib/gitlab/legacy_github_import/issuable_formatter.rb'
|
||||
- 'lib/gitlab/marginalia.rb'
|
||||
|
|
|
|||
|
|
@ -383,10 +383,7 @@ Style/IfUnlessModifier:
|
|||
- 'ee/lib/gitlab/geo/replication/blob_downloader.rb'
|
||||
- 'ee/lib/gitlab/geo/replicator.rb'
|
||||
- 'ee/lib/gitlab/graphql/aggregations/epics/lazy_epic_aggregate.rb'
|
||||
- 'ee/lib/gitlab/graphql/aggregations/issuables/lazy_links_aggregate.rb'
|
||||
- 'ee/lib/gitlab/graphql/aggregations/security_orchestration_policies/lazy_dast_profile_aggregate.rb'
|
||||
- 'ee/lib/gitlab/graphql/aggregations/vulnerabilities/lazy_user_notes_count_aggregate.rb'
|
||||
- 'ee/lib/gitlab/graphql/aggregations/vulnerability_statistics/lazy_aggregate.rb'
|
||||
- 'ee/lib/gitlab/graphql/loaders/bulk_epic_aggregate_loader.rb'
|
||||
- 'ee/lib/gitlab/path_locks_finder.rb'
|
||||
- 'ee/lib/gitlab/sitemaps/generator.rb'
|
||||
|
|
|
|||
|
|
@ -397,7 +397,6 @@ Style/InlineDisableAnnotation:
|
|||
- 'app/models/event.rb'
|
||||
- 'app/models/group.rb'
|
||||
- 'app/models/group_deploy_key.rb'
|
||||
- 'app/models/hooks/web_hook.rb'
|
||||
- 'app/models/hooks/web_hook_log.rb'
|
||||
- 'app/models/integrations/google_play.rb'
|
||||
- 'app/models/issue.rb'
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Style/NumberedParameters:
|
|||
- 'app/helpers/hooks_helper.rb'
|
||||
- 'app/models/active_session.rb'
|
||||
- 'app/models/bulk_imports/entity.rb'
|
||||
- 'app/models/hooks/web_hook.rb'
|
||||
- 'app/models/integrations/clickup.rb'
|
||||
- 'app/models/integrations/datadog.rb'
|
||||
- 'app/models/integrations/youtrack.rb'
|
||||
|
|
@ -58,7 +57,6 @@ Style/NumberedParameters:
|
|||
- 'spec/lib/gitlab/web_hooks/recursion_detection_spec.rb'
|
||||
- 'spec/lib/gitlab/zentao/client_spec.rb'
|
||||
- 'spec/models/bulk_imports/entity_spec.rb'
|
||||
- 'spec/models/hooks/web_hook_spec.rb'
|
||||
- 'spec/requests/api/graphql/mutations/issues/set_crm_contacts_spec.rb'
|
||||
- 'spec/requests/api/graphql/project/merge_request_spec.rb'
|
||||
- 'spec/requests/api/groups_spec.rb'
|
||||
|
|
|
|||
|
|
@ -169,7 +169,6 @@ Style/RedundantSelf:
|
|||
- 'ee/app/models/ee/group.rb'
|
||||
- 'ee/app/models/ee/issue.rb'
|
||||
- 'ee/app/models/ee/member.rb'
|
||||
- 'ee/app/models/ee/packages/package_file.rb'
|
||||
- 'ee/app/models/ee/project.rb'
|
||||
- 'ee/app/models/ee/project_import_state.rb'
|
||||
- 'ee/app/models/ee/snippet_repository.rb'
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ Style/SuperArguments:
|
|||
- 'app/models/concerns/time_trackable.rb'
|
||||
- 'app/models/current.rb'
|
||||
- 'app/models/hooks/service_hook.rb'
|
||||
- 'app/models/hooks/web_hook.rb'
|
||||
- 'app/models/integrations/discord.rb'
|
||||
- 'app/models/integrations/matrix.rb'
|
||||
- 'app/models/integrations/microsoft_teams.rb'
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ Style/SymbolProc:
|
|||
- 'ee/lib/gitlab/geo/oauth/logout_state.rb'
|
||||
- 'ee/spec/factories/issues.rb'
|
||||
- 'ee/spec/features/billings/qrtly_reconciliation_alert_spec.rb'
|
||||
- 'ee/spec/helpers/ee/geo_helper_spec.rb'
|
||||
- 'ee/spec/helpers/ee/registrations_helper_spec.rb'
|
||||
- 'ee/spec/lib/ee/gitlab/search_results_spec.rb'
|
||||
- 'ee/spec/lib/gitlab/elastic/document_reference_spec.rb'
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ It picks reviewers and maintainers from the list at the
|
|||
[engineering projects](https://handbook.gitlab.com/handbook/engineering/projects/)
|
||||
page, with these behaviors:
|
||||
|
||||
- It doesn't pick people whose Slack or [GitLab status](../user/profile/index.md#set-your-current-status):
|
||||
- It doesn't pick people whose Slack or [GitLab status](../user/profile/index.md#set-your-status):
|
||||
- Contains the string `OOO`, `PTO`, `Parental Leave`, `Friends and Family`, or `Conference`.
|
||||
- Emoji is from one of these categories:
|
||||
- **On leave** - 🌴 `palm_tree`, 🏖️ `beach`, ⛱ `beach_umbrella`, 🏖 `beach_with_umbrella`, 🌞 `sun_with_face`, 🎡 `ferris_wheel`, 🏙 `cityscape`
|
||||
|
|
@ -125,7 +125,7 @@ page, with these behaviors:
|
|||
- It doesn't pick people who are already assigned a number of reviews that is equal to
|
||||
or greater than their chosen "review limit". The review limit is the maximum number of
|
||||
reviews people are ready to handle at a time. Set a review limit by using one of the following
|
||||
as a Slack or [GitLab status](../user/profile/index.md#set-your-current-status):
|
||||
as a Slack or [GitLab status](../user/profile/index.md#set-your-status):
|
||||
- 2️⃣ - `two`
|
||||
- 3️⃣ - `three`
|
||||
- 4️⃣ - `four`
|
||||
|
|
@ -143,7 +143,7 @@ page, with these behaviors:
|
|||
branch name (unless their out-of-office (`OOO`) status changes, as in point 1). It
|
||||
removes leading `ce-` and `ee-`, and trailing `-ce` and `-ee`, so
|
||||
that it can be stable for backport branches.
|
||||
- People whose Slack or [GitLab status](../user/profile/index.md#set-your-current-status) emoji
|
||||
- People whose Slack or [GitLab status](../user/profile/index.md#set-your-status) emoji
|
||||
is Ⓜ `:m:`are only suggested as reviewers on projects they are a maintainer of.
|
||||
|
||||
The [Roulette dashboard](https://gitlab-org.gitlab.io/gitlab-roulette/) contains:
|
||||
|
|
|
|||
|
|
@ -121,6 +121,10 @@ The above methods make use of the [BulkAssignService](https://gitlab.com/gitlab-
|
|||
1. Purchase the GitLab Duo Pro add-on using the same test credit card from the above steps.
|
||||
1. Go back to <https://staging.gitlab.com> and verify that your group has access to Duo Pro by navigating to `Settings > GitLab Duo` and managing seats.
|
||||
|
||||
### Setup instructions to use the Duo Enteprise add-on with a **staging** GitLab.com account
|
||||
|
||||
Internal use only: Given that purchasing a license for Duo Enterprise is not self-serviceable, post a request in the **#g_provision** Slack channel to grant access to your customer staging account with a Duo Enterprise license.
|
||||
|
||||
### Video demonstrations of installing and using Code Suggestions in IDEs
|
||||
|
||||
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
|
||||
|
|
|
|||
|
|
@ -138,6 +138,10 @@ Pipelines now include a GitLab Advanced SAST job.
|
|||
|
||||
## Vulnerability code flow
|
||||
|
||||
> - Introduced in GitLab 17.3 [with several flags](../../../administration/feature_flags.md). Enabled by default.
|
||||
> - Enabled on GitLab Self-Managed and GitLab Dedicated in GitLab 17.7.
|
||||
> - Generally available in GitLab 17.7. All feature flags removed.
|
||||
|
||||
For specific types of vulnerabilities, GitLab Advanced SAST provides code flow information.
|
||||
A vulnerability's code flow is the path the data takes from the user input (source) to the vulnerable line of code (sink), through all assignments, manipulation, and sanitization.
|
||||
This information helps you understand and evaluate the vulnerability's context, impact, and risk.
|
||||
|
|
@ -155,18 +159,6 @@ The code flow information is shown the **Code flow** tab and includes:
|
|||
|
||||

|
||||
|
||||
### Code flow feature availability
|
||||
|
||||
The code flow view is integrated into each view where vulnerability details are shown.
|
||||
On GitLab Self-Managed, you can activate the view by [enabling the required feature flags](../../../administration/feature_flags.md#how-to-enable-and-disable-features-behind-flags) starting in the minimum version shown.
|
||||
|
||||
| Location | Availability on GitLab.com | Availability on GitLab Self-Managed | Feature flags required |
|
||||
|-------------------------------------------------------------------|-----------------------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------|
|
||||
| [Vulnerability Report](../vulnerability_report/index.md) | Enabled by default in GitLab 17.3 | Enabled by default in GitLab 17.6. Available in GitLab 17.3 or later. | `vulnerability_code_flow` |
|
||||
| [Merge request widget](index.md#merge-request-widget) | Enabled by default in GitLab 17.6 | Enabled by default in GitLab 17.6. Available in GitLab 17.5 or later. | Both `vulnerability_code_flow` and `pipeline_vulnerability_code_flow` |
|
||||
| [Pipeline security report](../vulnerability_report/pipeline.md) | Enabled by default in GitLab 17.6 | Enabled by default in GitLab 17.6. Available in GitLab 17.5 or later. | Both `vulnerability_code_flow` and `pipeline_vulnerability_code_flow` |
|
||||
| [Merge request changes view](index.md#merge-request-changes-view) | Enabled by default in GitLab 17.7 | Enabled by default in GitLab 17.7. Available in GitLab 17.7 or later. | Both `vulnerability_code_flow` and `mr_vulnerability_code_flow` |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter issues while using GitLab Advanced SAST, refer to the [troubleshooting guide](troubleshooting.md).
|
||||
|
|
|
|||
|
|
@ -228,43 +228,26 @@ To add your name pronunciation:
|
|||
1. In the **Pronunciation** text box, enter how your name is pronounced. The pronunciation must be plain text and 255 characters or less.
|
||||
1. Select **Update profile settings**.
|
||||
|
||||
## Set your current status
|
||||
## Set your status
|
||||
|
||||
You can provide a custom status message for your user profile along with an emoji that describes it.
|
||||
This may be helpful when you are out of office or otherwise not available.
|
||||
Set your status to let others know your availability. Others can see your status when they hover over your avatar, name, or username. Your status is publicly visible even if you've [made your user profile page private](#make-your-user-profile-page-private).
|
||||
|
||||
Your status is publicly visible even if your [profile is private](#make-your-user-profile-page-private).
|
||||
Your status consists of the following elements. You can use each separately to indicate your status.
|
||||
|
||||
- An emoji to indicate your status.
|
||||
- A message that describes your availability. You can include emoji codes like `:palm_tree:` or `:bulb:`. Maximum of 100 characters.
|
||||
- A checkbox that adds a `Busy` badge to your status.
|
||||
|
||||
To set your current status:
|
||||
|
||||
1. On the left sidebar, select your avatar.
|
||||
1. Select **Set status** or, if you have already set a status, **Edit status**.
|
||||
1. Set the desired emoji and status message. Status messages must be plain text and 100 characters or less.
|
||||
They can also contain emoji codes like, `I'm on vacation :palm_tree:`.
|
||||
1. Select a value from the **Clear status after** dropdown list.
|
||||
1. Select **Set status**. Alternatively, you can select **Remove status** to remove your user status entirely.
|
||||
1. Select **Set status**. If you've previously set a status, select **Edit status** instead.
|
||||
1. Optional. Enter a status message.
|
||||
1. Optional. Select the **Set yourself as busy** checkbox.
|
||||
1. Optional. Select a value from the **Clear status after** dropdown list.
|
||||
1. Select **Set status**.
|
||||
|
||||
You can also set your current status from [your user settings](#access-your-user-settings) or by [using the API](../../api/users.md#set-your-user-status).
|
||||
|
||||
If you select the **Busy** checkbox, remember to clear it when you become available again.
|
||||
|
||||
## Set a busy status indicator
|
||||
|
||||
To indicate to others that you are busy, you can set an indicator.
|
||||
|
||||
To set the busy status indicator, either:
|
||||
|
||||
- Set it directly:
|
||||
1. On the left sidebar, select your avatar.
|
||||
1. Select **Set status** or, if you have already set a status, **Edit status**.
|
||||
1. Select the **Set yourself as busy** checkbox.
|
||||
|
||||
- Set it on your profile:
|
||||
1. On the left sidebar, select your avatar.
|
||||
1. Select **Edit profile**.
|
||||
1. In the **Current status** section, select the **Set yourself as busy** checkbox.
|
||||
|
||||
The busy status is displayed next to your name, every time your name is shown in the user interface.
|
||||
Your status is updated. You can also set your status from the [user settings](#access-your-user-settings) page or with the [Users API](../../api/users.md#set-your-user-status).
|
||||
|
||||
## Set your time zone
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ To set up infrastructure for workspaces:
|
|||
1. Point [`dns_zone`](gitlab_agent_configuration.md#dns_zone) and `*.<dns_zone>`
|
||||
to the load balancer exposed by the Ingress controller.
|
||||
This load balancer must support WebSockets.
|
||||
1. [Set up the GitLab workspaces proxy](set_up_workspaces_proxy.md).
|
||||
1. [Set up the GitLab workspaces proxy](set_up_gitlab_agent_and_proxies.md).
|
||||
1. Optional. [Configure sudo access for a workspace](#configure-sudo-access-for-a-workspace).
|
||||
1. Optional. [Configure support for private container registries](#configure-support-for-private-container-registries).
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ Prerequisites:
|
|||
- You must enable SSH access for the images specified in your [devfile](index.md#devfile).
|
||||
For more information, see [update your workspace container image](#update-your-workspace-container-image).
|
||||
- You must configure a TCP load balancer that points to the GitLab workspaces proxy.
|
||||
For more information, see [update your DNS records](set_up_workspaces_proxy.md#update-your-dns-records).
|
||||
For more information, see [update your DNS records](set_up_gitlab_agent_and_proxies.md#update-your-dns-records).
|
||||
|
||||
To connect to a workspace with an SSH client:
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ When you [set up workspace infrastructure](configuration.md#set-up-workspace-inf
|
|||
|
||||
Prerequisites:
|
||||
|
||||
- You must complete the setup steps in [Tutorial: Set up GitLab agent and proxies](set_up_gitlab_agent_and_proxies.md).
|
||||
- The agent configuration must have the `remote_development` module enabled, and the required fields of this module must be correctly set. For more information, see [workspace settings](#workspace-settings).
|
||||
- The agent must be **allowed** in a group for the purpose of creating workspaces. During workspace creation, users can select allowed agents that are associated with any parent group of the workspace project.
|
||||
- The workspace creator must have the Developer role to the project of the agent.
|
||||
|
|
@ -111,7 +112,7 @@ you can use any configured agent in `top-level-group` and in any of its subgroup
|
|||
|-------------------------------------------------------------------------------------------|----------|-----------------------------------------|-------------|
|
||||
| [`enabled`](#enabled) | Yes | `false` | Indicates whether remote development is enabled for the GitLab agent. |
|
||||
| [`dns_zone`](#dns_zone) | Yes | None | DNS zone where workspaces are available. |
|
||||
| [`gitlab_workspaces_proxy`](#gitlab_workspaces_proxy) | No | `gitlab-workspaces` | Namespace where [`gitlab-workspaces-proxy`](set_up_workspaces_proxy.md) is installed. |
|
||||
| [`gitlab_workspaces_proxy`](#gitlab_workspaces_proxy) | No | `gitlab-workspaces` | Namespace where [`gitlab-workspaces-proxy`](set_up_gitlab_agent_and_proxies.md) is installed. |
|
||||
| [`network_policy`](#network_policy) | No | See [`network_policy`](#network_policy) | Firewall rules for workspaces. |
|
||||
| [`default_resources_per_workspace_container`](#default_resources_per_workspace_container) | No | `{}` | Default requests and limits for CPU and memory per workspace container. |
|
||||
| [`max_resources_per_workspace`](#max_resources_per_workspace) | No | `{}` | Maximum requests and limits for CPU and memory per workspace. |
|
||||
|
|
@ -163,7 +164,7 @@ remote_development:
|
|||
### `gitlab_workspaces_proxy`
|
||||
|
||||
Use this setting to define the namespace where
|
||||
[`gitlab-workspaces-proxy`](set_up_workspaces_proxy.md) is installed.
|
||||
[`gitlab-workspaces-proxy`](set_up_gitlab_agent_and_proxies.md) is installed.
|
||||
The default value for `gitlab_workspaces_proxy.namespace` is `gitlab-workspaces`.
|
||||
|
||||
**Example configuration:**
|
||||
|
|
|
|||
|
|
@ -1,88 +1,13 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Remote Development
|
||||
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
|
||||
description: "Set up the GitLab agent to create and manage workspaces in a project."
|
||||
redirect_to: 'set_up_gitlab_agent_and_proxies.md'
|
||||
remove_date: '2025-04-20'
|
||||
---
|
||||
|
||||
# Tutorial: Set up the GitLab agent for workspaces
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
This tutorial shows you how to set up the GitLab agent
|
||||
so users can create and manage workspaces in a project.
|
||||
For this tutorial, the following hierarchy is used:
|
||||
This document was moved to [another location](set_up_gitlab_agent_and_proxies.md).
|
||||
|
||||
```mermaid
|
||||
%%{init: {'theme':'neutral'}}%%
|
||||
graph TD;
|
||||
classDef active fill:lightgreen, stroke:#green, color:green, stroke-width:1px;
|
||||
|
||||
topGroup[Top-level group]
|
||||
subGroup[Subgroup]
|
||||
workspaceProject[Workspace project]
|
||||
agentProject[Agent project]
|
||||
workspaceAgent[Workspace agent]
|
||||
|
||||
topGroup --> subGroup
|
||||
|
||||
subGroup --> workspaceProject
|
||||
subGroup --> agentProject
|
||||
agentProject -.- workspaceAgent
|
||||
|
||||
class workspaceProject active;
|
||||
```
|
||||
|
||||
To set up the GitLab agent for workspaces, you will:
|
||||
|
||||
1. [Configure the `remote_development` module in the agent project](#configure-the-remote_development-module-in-the-agent-project).
|
||||
1. [Allow the GitLab agent in a group](#allow-the-gitlab-agent-in-a-group).
|
||||
1. [Grant workspace users the necessary permissions](#grant-workspace-users-the-necessary-permissions).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- You must install the GitLab agent.
|
||||
For more information, see [set up workspace infrastructure](configuration.md#set-up-workspace-infrastructure).
|
||||
- You must have administrator access to the instance or the Owner role for the group.
|
||||
|
||||
## Configure the `remote_development` module in the agent project
|
||||
|
||||
To configure the `remote_development` module in the agent project:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
1. In your project, create a `.gitlab/agents/<agentName>/config.yaml` file.
|
||||
`agentName` is the name of the agent you configured when you set up workspace infrastructure.
|
||||
1. In `config.yaml`, use the following configuration for [workspace settings](gitlab_agent_configuration.md#workspace-settings):
|
||||
|
||||
```yaml
|
||||
remote_development:
|
||||
enabled: true
|
||||
dns_zone: "<workspaces.example.dev>" # DNS zone of the URL where workspaces are available
|
||||
```
|
||||
|
||||
Next, you'll allow the GitLab agent in a group.
|
||||
|
||||
## Allow the GitLab agent in a group
|
||||
|
||||
When you allow an agent in a group, the group and its subgroups can use that agent.
|
||||
Carefully consider the group where you allow the GitLab agent.
|
||||
|
||||
To allow the GitLab agent in a group:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your group.
|
||||
1. On the left sidebar, select **Settings > Workspaces**.
|
||||
1. In the **Group agents** section, select the **All agents** tab.
|
||||
1. For the GitLab agent, select **Allow**.
|
||||
1. On the confirmation dialog, select **Allow agent**.
|
||||
|
||||
Now it's time to grant workspace users the necessary permissions to create and manage workspaces.
|
||||
|
||||
## Grant workspace users the necessary permissions
|
||||
|
||||
You can grant users with at least the Developer role for the workspace and agent projects
|
||||
the necessary permissions to create and manage workspaces.
|
||||
|
||||
To grant workspace users the necessary permissions, see:
|
||||
|
||||
- [Add users to a project](../project/members/index.md#add-users-to-a-project).
|
||||
- [Add users to a group](../group/index.md#add-users-to-a-group).
|
||||
|
||||
You've done it! Users can now create and manage workspaces in a project.
|
||||
<!-- This redirect file can be deleted after <2025-04-20>. -->
|
||||
<!-- Redirects that point to other docs in the same project expire in three months. -->
|
||||
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,317 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Remote Development
|
||||
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
|
||||
description: "Create a GitLab workspaces proxy to authenticate and authorize workspaces in your cluster."
|
||||
---
|
||||
|
||||
# Tutorial: Set up GitLab agent and proxies
|
||||
|
||||
This tutorial shows you how to:
|
||||
|
||||
- Set up the GitLab agent so users can create and manage workspaces in a project.
|
||||
- Set up the GitLab workspaces proxy to authenticate and authorize [workspaces](index.md)
|
||||
in your cluster.
|
||||
|
||||
NOTE:
|
||||
You must complete the setup steps in this tutorial before you can configure a GitLab agent to support workspaces.
|
||||
After completing the tutorial, use [GitLab agent configuration](gitlab_agent_configuration.md) to configure
|
||||
your GitLab agent.
|
||||
|
||||
## Before you begin
|
||||
|
||||
Before starting this tutorial, you must have:
|
||||
|
||||
- Administrator access to your GitLab instance or the Owner role for your group.
|
||||
- An installed Ingress controller.
|
||||
- A running Kubernetes cluster.
|
||||
- `helm` 3.11.0 or later and `kubectl` on your local machine.
|
||||
- The GitLab agent installed in your cluster.
|
||||
For installation instructions, see [set up workspace infrastructure](configuration.md#set-up-workspace-infrastructure).
|
||||
- Access to configure a wildcard domain in your DNS provider.
|
||||
For example, `*.workspaces.example.dev` is required for workspace access.
|
||||
|
||||
For this tutorial, the following hierarchy is used:
|
||||
|
||||
```mermaid
|
||||
%%{init: {'theme':'neutral'}}%%
|
||||
graph TD;
|
||||
classDef active fill:lightgreen, stroke:#green, color:green, stroke-width:1px;
|
||||
|
||||
topGroup[Top-level group]
|
||||
subGroup[Subgroup]
|
||||
workspaceProject[Workspace project]
|
||||
agentProject[Agent project]
|
||||
workspaceAgent[Workspace agent]
|
||||
|
||||
topGroup --> subGroup
|
||||
|
||||
subGroup --> workspaceProject
|
||||
subGroup --> agentProject
|
||||
agentProject -.- workspaceAgent
|
||||
|
||||
class workspaceProject active;
|
||||
```
|
||||
|
||||
## Configure the GitLab agent for workspaces
|
||||
|
||||
To configure the `remote_development` module in the agent project:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your project.
|
||||
1. In your project, create a `.gitlab/agents/<agentName>/config.yaml` file.
|
||||
`agentName` is the name of the agent you configured when you set up workspace infrastructure.
|
||||
1. In `config.yaml`, use the following configuration for workspace settings:
|
||||
|
||||
```yaml
|
||||
remote_development:
|
||||
enabled: true
|
||||
dns_zone: "<workspaces.example.dev>" # DNS zone of the URL where workspaces are available
|
||||
```
|
||||
|
||||
## Allow the GitLab agent in your group
|
||||
|
||||
When you allow an agent in a group, the group and its subgroups can use that agent.
|
||||
Carefully consider the group where you allow the GitLab agent.
|
||||
|
||||
To allow your GitLab agent in a group and its subgroups:
|
||||
|
||||
1. On the left sidebar, select **Search or go to** and find your group.
|
||||
1. Select **Settings > Workspaces**.
|
||||
1. In the **Group agents** section, select the **All agents** tab.
|
||||
1. For the GitLab agent, select **Allow**.
|
||||
1. On the confirmation dialog, select **Allow agent**.
|
||||
|
||||
## Grant workspace permissions
|
||||
|
||||
Grant users with at least the Developer role for the workspace and agent projects
|
||||
the necessary permissions to create and manage workspaces. You can:
|
||||
|
||||
- [Add users to a project](../project/members/index.md#add-users-to-a-project)
|
||||
- [Add users to a group](../group/index.md#add-users-to-a-group)
|
||||
|
||||
## Generate TLS certificates
|
||||
|
||||
A wildcard domain is required for workspace access because each workspace gets its own subdomain.
|
||||
You must generate TLS certificates for:
|
||||
|
||||
- The domain `gitlab-workspaces-proxy` listens on (`GITLAB_WORKSPACES_PROXY_DOMAIN`).
|
||||
- The wildcard domain where workspaces are available (`GITLAB_WORKSPACES_WILDCARD_DOMAIN`).
|
||||
|
||||
For example, if your base domain is `workspaces.example.dev`:
|
||||
|
||||
- The `GITLAB_WORKSPACES_PROXY_DOMAIN` is `workspaces.example.dev`.
|
||||
- The `GITLAB_WORKSPACES_WILDCARD_DOMAIN` is `*.workspaces.example.dev`.
|
||||
- Individual workspaces are available at URLs like `workspace-1.workspaces.example.dev`.
|
||||
|
||||
You can generate certificates from any certificate authority.
|
||||
If [`cert-manager`](https://cert-manager.io/docs/) is configured for your Kubernetes cluster,
|
||||
you can use it to create and renew TLS certificates automatically.
|
||||
|
||||
To generate certificates manually:
|
||||
|
||||
1. Install [Certbot](https://certbot.eff.org/) to enable HTTPS:
|
||||
|
||||
```shell
|
||||
brew install certbot
|
||||
```
|
||||
|
||||
1. Generate Let's Encrypt certificates with ACME DNS and create `TXT` records in your DNS provider:
|
||||
|
||||
```shell
|
||||
export EMAIL="YOUR_EMAIL@example.dev"
|
||||
export GITLAB_WORKSPACES_PROXY_DOMAIN="workspaces.example.dev"
|
||||
export GITLAB_WORKSPACES_WILDCARD_DOMAIN="*.workspaces.example.dev"
|
||||
|
||||
certbot -d "${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
-m "${EMAIL}" \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work \
|
||||
--manual \
|
||||
--preferred-challenges dns certonly
|
||||
|
||||
certbot -d "${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
-m "${EMAIL}" \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work \
|
||||
--manual \
|
||||
--preferred-challenges dns certonly
|
||||
```
|
||||
|
||||
1. Set the following environment variables with the certificate directories from the output:
|
||||
|
||||
```shell
|
||||
export WORKSPACES_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/fullchain.pem"
|
||||
export WORKSPACES_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/privkey.pem"
|
||||
export WILDCARD_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/fullchain.pem"
|
||||
export WILDCARD_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/privkey.pem"
|
||||
```
|
||||
|
||||
Depending on your environment, the `certbot` command might save the certificate and key on a different path.
|
||||
To get the exact path, run:
|
||||
|
||||
```shell
|
||||
certbot certificates \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work
|
||||
```
|
||||
|
||||
NOTE:
|
||||
You must renew your certificates when they expire.
|
||||
For example, Let's Encrypt certificates expire after three months.
|
||||
To automatically renew certificates, see [`cert-manager`](https://cert-manager.io/docs/).
|
||||
|
||||
## Register a GitLab OAuth application
|
||||
|
||||
To register an application on your GitLab instance:
|
||||
|
||||
1. [Configure GitLab as an OAuth 2.0 identity provider](../../integration/oauth_provider.md).
|
||||
1. Set the redirect URI to `https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback`.
|
||||
1. Select the **Trusted** checkbox.
|
||||
1. Set the scopes to `api`, `read_user`, `openid`, and `profile`.
|
||||
1. Export your configuration values:
|
||||
|
||||
```shell
|
||||
export GITLAB_URL="https://gitlab.com"
|
||||
export CLIENT_ID="your_application_id"
|
||||
export CLIENT_SECRET="your_application_secret"
|
||||
export REDIRECT_URI="https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback"
|
||||
export SIGNING_KEY="make_up_a_random_key_consisting_of_letters_numbers_and_special_chars"
|
||||
```
|
||||
|
||||
1. Store the client ID and generated secret securely. For examples, in 1Password.
|
||||
|
||||
## Generate an SSH host key
|
||||
|
||||
To generate an RSA key:
|
||||
|
||||
```shell
|
||||
ssh-keygen -f ssh-host-key -N '' -t rsa
|
||||
export SSH_HOST_KEY=$(pwd)/ssh-host-key
|
||||
```
|
||||
|
||||
As an alternative, you can also generate an ECDSA key.
|
||||
|
||||
## Create Kubernetes secrets
|
||||
|
||||
To create Kubernetes secrets:
|
||||
|
||||
```shell
|
||||
kubectl create namespace gitlab-workspaces
|
||||
|
||||
kubectl create secret generic gitlab-workspaces-proxy-config \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--from-literal="auth.client_id=${CLIENT_ID}" \
|
||||
--from-literal="auth.client_secret=${CLIENT_SECRET}" \
|
||||
--from-literal="auth.host=${GITLAB_URL}" \
|
||||
--from-literal="auth.redirect_uri=${REDIRECT_URI}" \
|
||||
--from-literal="auth.signing_key=${SIGNING_KEY}" \
|
||||
--from-literal="ssh.host_key=$(cat ${SSH_HOST_KEY})"
|
||||
|
||||
kubectl create secret tls gitlab-workspace-proxy-tls \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--cert="${WORKSPACES_DOMAIN_CERT}" \
|
||||
--key="${WORKSPACES_DOMAIN_KEY}"
|
||||
|
||||
kubectl create secret tls gitlab-workspace-proxy-wildcard-tls \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--cert="${WILDCARD_DOMAIN_CERT}" \
|
||||
--key="${WILDCARD_DOMAIN_KEY}"
|
||||
```
|
||||
|
||||
## Install the proxy Helm chart
|
||||
|
||||
To install the Helm chart for the proxy:
|
||||
|
||||
1. Add the `helm` repository:
|
||||
|
||||
```shell
|
||||
helm repo add gitlab-workspaces-proxy \
|
||||
https://gitlab.com/api/v4/projects/gitlab-org%2fworkspaces%2fgitlab-workspaces-proxy/packages/helm/devel
|
||||
```
|
||||
|
||||
For Helm chart 0.1.13 and earlier, use the following command:
|
||||
|
||||
```shell
|
||||
helm repo add gitlab-workspaces-proxy \
|
||||
https://gitlab.com/api/v4/projects/gitlab-org%2fremote-development%2fgitlab-workspaces-proxy/packages/helm/devel
|
||||
```
|
||||
|
||||
1. Install the chart:
|
||||
|
||||
```shell
|
||||
helm repo update
|
||||
|
||||
helm upgrade --install gitlab-workspaces-proxy \
|
||||
gitlab-workspaces-proxy/gitlab-workspaces-proxy \
|
||||
--version=0.1.16 \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--set="ingress.enabled=true" \
|
||||
--set="ingress.hosts[0].host=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
--set="ingress.hosts[0].paths[0].path=/" \
|
||||
--set="ingress.hosts[0].paths[0].pathType=ImplementationSpecific" \
|
||||
--set="ingress.hosts[1].host=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
--set="ingress.hosts[1].paths[0].path=/" \
|
||||
--set="ingress.hosts[1].paths[0].pathType=ImplementationSpecific" \
|
||||
--set="ingress.tls[0].hosts[0]=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
--set="ingress.tls[0].secretName=gitlab-workspace-proxy-tls" \
|
||||
--set="ingress.tls[1].hosts[0]=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
--set="ingress.tls[1].secretName=gitlab-workspace-proxy-wildcard-tls" \
|
||||
--set="ingress.className=nginx"
|
||||
```
|
||||
|
||||
If you're using a different Ingress class, modify the `ingress.className` parameter.
|
||||
|
||||
## Verify your setup
|
||||
|
||||
1. Verify the Ingress configuration for the `gitlab-workspaces` namespace:
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces get ingress
|
||||
```
|
||||
|
||||
1. Verify the pods are running:
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces get pods
|
||||
```
|
||||
|
||||
## Update your DNS records
|
||||
|
||||
To update your DNS records:
|
||||
|
||||
1. Point `${GITLAB_WORKSPACES_PROXY_DOMAIN}` and `${GITLAB_WORKSPACES_WILDCARD_DOMAIN}`
|
||||
to the load balancer exposed by the Ingress controller.
|
||||
1. Check if `gitlab-workspaces-proxy` is accessible:
|
||||
|
||||
```shell
|
||||
curl --verbose --location ${GITLAB_WORKSPACES_PROXY_DOMAIN}
|
||||
```
|
||||
|
||||
This command returns a `400 Bad Request` error until you create a workspace.
|
||||
|
||||
1. From another terminal, check the proxy logs::
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces logs -f -l app.kubernetes.io/name=gitlab-workspaces-proxy
|
||||
```
|
||||
|
||||
This command returns a `could not find upstream workspace upstream not found` error until you create a workspace.
|
||||
|
||||
## Update the GitLab agent configuration
|
||||
|
||||
If you deploy the Helm chart for the proxy to a namespace other than `gitlab-workspaces`,
|
||||
update your [GitLab agent configuration](gitlab_agent_configuration.md):
|
||||
|
||||
```yaml
|
||||
remote_development:
|
||||
gitlab_workspaces_proxy:
|
||||
namespace: "<custom-gitlab-workspaces-proxy-namespace>"
|
||||
```
|
||||
|
||||
## Related topics
|
||||
|
||||
- [Configure workspaces](configuration.md)
|
||||
- [GitLab agent configuration](gitlab_agent_configuration.md)
|
||||
|
|
@ -1,255 +1,13 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Remote Development
|
||||
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
|
||||
description: "Create a GitLab workspaces proxy to authenticate and authorize workspaces in your cluster."
|
||||
redirect_to: 'set_up_gitlab_agent_and_proxies.md'
|
||||
remove_date: '2025-04-20'
|
||||
---
|
||||
|
||||
# Tutorial: Set up the GitLab workspaces proxy
|
||||
<!-- markdownlint-disable -->
|
||||
|
||||
In this tutorial, you'll learn how to set up the GitLab workspaces proxy
|
||||
to authenticate and authorize [workspaces](index.md) in your cluster.
|
||||
This document was moved to [another location](set_up_gitlab_agent_and_proxies.md).
|
||||
|
||||
To set up `gitlab-workspaces-proxy`, you're going to:
|
||||
|
||||
1. [Generate TLS certificates](#generate-tls-certificates).
|
||||
1. [Register an app on your GitLab instance](#register-an-app-on-your-gitlab-instance).
|
||||
1. [Generate an SSH host key](#generate-an-ssh-host-key).
|
||||
1. [Create Kubernetes secrets](#create-kubernetes-secrets).
|
||||
1. [Install the Helm chart for the proxy](#install-the-helm-chart-for-the-proxy).
|
||||
1. [Verify Kubernetes resources](#verify-kubernetes-resources).
|
||||
1. [Update your DNS records](#update-your-dns-records).
|
||||
1. [Update the GitLab agent configuration](#update-the-gitlab-agent-configuration).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- An installed Ingress controller
|
||||
- A running Kubernetes cluster
|
||||
- `helm` 3.11.0 and later and `kubectl` on your local machine
|
||||
|
||||
## Generate TLS certificates
|
||||
|
||||
You must generate TLS certificates for:
|
||||
|
||||
- The domain `gitlab-workspaces-proxy` listens on (`GITLAB_WORKSPACES_PROXY_DOMAIN`).
|
||||
- The domain workspaces are available on (`GITLAB_WORKSPACES_WILDCARD_DOMAIN`).
|
||||
|
||||
You can generate certificates from any certificate authority.
|
||||
If [`cert-manager`](https://cert-manager.io/docs/) is configured for your Kubernetes cluster,
|
||||
you can use it to create and renew TLS certificates automatically.
|
||||
Alternatively, to generate TLS certificates manually:
|
||||
|
||||
1. Install [Certbot](https://certbot.eff.org/) to enable HTTPS:
|
||||
|
||||
```shell
|
||||
brew install certbot
|
||||
```
|
||||
|
||||
1. Generate Let's Encrypt certificates with ACME DNS and create `TXT` records in your DNS provider:
|
||||
|
||||
```shell
|
||||
export EMAIL="YOUR_EMAIL@example.dev"
|
||||
export GITLAB_WORKSPACES_PROXY_DOMAIN="workspaces.example.dev"
|
||||
export GITLAB_WORKSPACES_WILDCARD_DOMAIN="*.workspaces.example.dev"
|
||||
|
||||
certbot -d "${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
-m "${EMAIL}" \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work \
|
||||
--manual \
|
||||
--preferred-challenges dns certonly
|
||||
|
||||
certbot -d "${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
-m "${EMAIL}" \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work \
|
||||
--manual \
|
||||
--preferred-challenges dns certonly
|
||||
```
|
||||
|
||||
1. Update the following environment variables with the certificate directories from the output:
|
||||
|
||||
```shell
|
||||
export WORKSPACES_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/fullchain.pem"
|
||||
export WORKSPACES_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/privkey.pem"
|
||||
export WILDCARD_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/fullchain.pem"
|
||||
export WILDCARD_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/privkey.pem"
|
||||
```
|
||||
|
||||
Depending on your environment, the `certbot` command might save the certificate and key on a different path.
|
||||
To get the exact path, check the output of the following command:
|
||||
|
||||
```shell
|
||||
certbot certificates \
|
||||
--config-dir ~/.certbot/config \
|
||||
--logs-dir ~/.certbot/logs \
|
||||
--work-dir ~/.certbot/work
|
||||
```
|
||||
|
||||
NOTE:
|
||||
You must renew your certificates when they expire.
|
||||
For example, Let's Encrypt certificates are valid for three months by default.
|
||||
To renew certificates automatically, see [`cert-manager`](https://cert-manager.io/docs/).
|
||||
|
||||
Now that you've generated the certificates, it's time to register an app on your GitLab instance.
|
||||
|
||||
## Register an app on your GitLab instance
|
||||
|
||||
To register an app on your GitLab instance:
|
||||
|
||||
1. [Configure GitLab as an OAuth 2.0 identity provider](../../integration/oauth_provider.md).
|
||||
1. Set the redirect URI to `https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback`.
|
||||
1. Select the **Trusted** checkbox.
|
||||
1. Set the scopes to `api`, `read_user`, `openid`, and `profile`.
|
||||
1. Export your `GITLAB_URL`, `CLIENT_ID`, `CLIENT_SECRET`, `REDIRECT_URI`, and `SIGNING_KEY`:
|
||||
|
||||
```shell
|
||||
export GITLAB_URL="https://gitlab.com"
|
||||
export CLIENT_ID="your_application_id"
|
||||
export CLIENT_SECRET="your_application_secret"
|
||||
export REDIRECT_URI="https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback"
|
||||
export SIGNING_KEY="make_up_a_random_key_consisting_of_letters_numbers_and_special_chars"
|
||||
```
|
||||
|
||||
1. Store the client ID and generated secret in a safe place (for example, 1Password).
|
||||
|
||||
Next, you'll generate an SSH host key.
|
||||
|
||||
## Generate an SSH host key
|
||||
|
||||
To generate an RSA key, run this command:
|
||||
|
||||
```shell
|
||||
ssh-keygen -f ssh-host-key -N '' -t rsa
|
||||
export SSH_HOST_KEY=$(pwd)/ssh-host-key
|
||||
```
|
||||
|
||||
You can also generate an ECDSA key instead.
|
||||
|
||||
Next, you'll create Kubernetes secrets for the proxy.
|
||||
|
||||
## Create Kubernetes secrets
|
||||
|
||||
To create Kubernetes secrets:
|
||||
|
||||
```shell
|
||||
kubectl create namespace gitlab-workspaces
|
||||
|
||||
kubectl create secret generic gitlab-workspaces-proxy-config \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--from-literal="auth.client_id=${CLIENT_ID}" \
|
||||
--from-literal="auth.client_secret=${CLIENT_SECRET}" \
|
||||
--from-literal="auth.host=${GITLAB_URL}" \
|
||||
--from-literal="auth.redirect_uri=${REDIRECT_URI}" \
|
||||
--from-literal="auth.signing_key=${SIGNING_KEY}" \
|
||||
--from-literal="ssh.host_key=$(cat ${SSH_HOST_KEY})"
|
||||
|
||||
kubectl create secret tls gitlab-workspace-proxy-tls \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--cert="${WORKSPACES_DOMAIN_CERT}" \
|
||||
--key="${WORKSPACES_DOMAIN_KEY}"
|
||||
|
||||
kubectl create secret tls gitlab-workspace-proxy-wildcard-tls \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--cert="${WILDCARD_DOMAIN_CERT}" \
|
||||
--key="${WILDCARD_DOMAIN_KEY}"
|
||||
```
|
||||
|
||||
Now it's time to install the Helm chart for the proxy.
|
||||
|
||||
## Install the Helm chart for the proxy
|
||||
|
||||
To install the Helm chart for the proxy:
|
||||
|
||||
1. Add the `helm` repository:
|
||||
|
||||
```shell
|
||||
helm repo add gitlab-workspaces-proxy \
|
||||
https://gitlab.com/api/v4/projects/gitlab-org%2fworkspaces%2fgitlab-workspaces-proxy/packages/helm/devel
|
||||
```
|
||||
|
||||
For Helm chart 0.1.13 and earlier, use the following command:
|
||||
|
||||
```shell
|
||||
helm repo add gitlab-workspaces-proxy \
|
||||
https://gitlab.com/api/v4/projects/gitlab-org%2fremote-development%2fgitlab-workspaces-proxy/packages/helm/devel
|
||||
```
|
||||
|
||||
1. Modify the `ingress.className` parameter if you're using a different Ingress class:
|
||||
|
||||
```shell
|
||||
helm repo update
|
||||
|
||||
helm upgrade --install gitlab-workspaces-proxy \
|
||||
gitlab-workspaces-proxy/gitlab-workspaces-proxy \
|
||||
--version=0.1.16 \
|
||||
--namespace="gitlab-workspaces" \
|
||||
--set="ingress.enabled=true" \
|
||||
--set="ingress.hosts[0].host=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
--set="ingress.hosts[0].paths[0].path=/" \
|
||||
--set="ingress.hosts[0].paths[0].pathType=ImplementationSpecific" \
|
||||
--set="ingress.hosts[1].host=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
--set="ingress.hosts[1].paths[0].path=/" \
|
||||
--set="ingress.hosts[1].paths[0].pathType=ImplementationSpecific" \
|
||||
--set="ingress.tls[0].hosts[0]=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \
|
||||
--set="ingress.tls[0].secretName=gitlab-workspace-proxy-tls" \
|
||||
--set="ingress.tls[1].hosts[0]=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \
|
||||
--set="ingress.tls[1].secretName=gitlab-workspace-proxy-wildcard-tls" \
|
||||
--set="ingress.className=nginx"
|
||||
```
|
||||
|
||||
Let's now verify Kubernetes resources.
|
||||
|
||||
## Verify Kubernetes resources
|
||||
|
||||
1. Verify the Ingress class, hosts, address, and port for the `gitlab-workspaces` namespace:
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces get ingress
|
||||
```
|
||||
|
||||
1. Verify the pods are running:
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces get pods
|
||||
```
|
||||
|
||||
You can now start updating your DNS records.
|
||||
|
||||
## Update your DNS records
|
||||
|
||||
To update your DNS records:
|
||||
|
||||
1. Point `${GITLAB_WORKSPACES_PROXY_DOMAIN}` and `${GITLAB_WORKSPACES_WILDCARD_DOMAIN}`
|
||||
to the load balancer exposed by the Ingress controller.
|
||||
1. From a terminal, run this command to check if `gitlab-workspaces-proxy` is accessible:
|
||||
|
||||
```shell
|
||||
curl --verbose --location ${GITLAB_WORKSPACES_PROXY_DOMAIN}
|
||||
```
|
||||
|
||||
This command returns a `400 Bad Request` error until you create a workspace in GitLab.
|
||||
|
||||
1. From another terminal, run this command:
|
||||
|
||||
```shell
|
||||
kubectl -n gitlab-workspaces logs -f -l app.kubernetes.io/name=gitlab-workspaces-proxy
|
||||
```
|
||||
|
||||
The logs show a `could not find upstream workspace upstream not found` error.
|
||||
|
||||
## Update the GitLab agent configuration
|
||||
|
||||
If you deploy the Helm chart for the proxy to any namespace other than `gitlab-workspaces`,
|
||||
update the namespace in the [GitLab agent configuration](gitlab_agent_configuration.md):
|
||||
|
||||
```yaml
|
||||
remote_development:
|
||||
gitlab_workspaces_proxy:
|
||||
namespace: "<custom-gitlab-workspaces-proxy-namespace>"
|
||||
```
|
||||
|
||||
You're all set! You can now use the GitLab workspaces proxy to
|
||||
authenticate and authorize [workspaces](index.md) in your cluster.
|
||||
<!-- This redirect file can be deleted after <2025-04-20>. -->
|
||||
<!-- Redirects that point to other docs in the same project expire in three months. -->
|
||||
<!-- Redirects that point to docs in a different project or site (for example, link is not relative and starts with `https:`) expire in one year. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue