From 7249e308dc6bc20d200ad60ce2d02585bb8af043 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 28 Nov 2024 03:29:35 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- GITALY_SERVER_VERSION | 2 +- Gemfile.checksum | 4 +- Gemfile.lock | 4 +- Gemfile.next.checksum | 4 +- Gemfile.next.lock | 4 +- .../error_tracking/events_tracking.js | 10 +- .../import_groups/components/import_table.vue | 4 +- .../popover/components/comment_popover.vue | 2 +- .../popover/components/issue_popover.vue | 6 +- .../popover/components/milestone_popover.vue | 8 +- .../popover/components/mr_popover.vue | 4 +- .../graphql/constants.js | 1 - .../customizable_dashboard.fragment.graphql | 24 -- .../customizable_dashboards.fragment.graphql | 10 - ..._all_customizable_dashboards.query.graphql | 20 -- .../get_customizable_dashboard.query.graphql | 21 -- .../customizable_dashboard/utils.js | 132 +--------- app/models/concerns/ci/deployable.rb | 21 ++ .../deployments/update_environment_service.rb | 12 +- .../recalculate_auto_stop_service.rb | 39 +++ app/workers/all_queues.yml | 9 + .../recalculate_auto_stop_worker.rb | 20 ++ config/events/view_errors_list.yml | 8 + config/sidekiq_queues.yml | 2 + ...em_access_group_microsoft_applications.yml | 12 + ...ss_group_microsoft_graph_access_tokens.yml | 12 + .../system_access_microsoft_applications.yml | 4 +- ...m_access_microsoft_graph_access_tokens.yml | 6 +- ...tem_access_group_microsoft_applications.rb | 22 ++ ...ess_group_microsoft_graph_access_tokens.rb | 21 ++ ...d_member_role_id_to_project_group_links.rb | 10 + ..._to_member_roles_on_project_group_links.rb | 16 ++ ...o_project_group_links_on_member_role_id.rb | 16 ++ ...key_group_microsoft_graph_access_tokens.rb | 17 ++ ...plication_microsoft_graph_access_tokens.rb | 19 ++ db/schema_migrations/20241106114853 | 1 + db/schema_migrations/20241106115015 | 1 + db/schema_migrations/20241115075017 | 1 + db/schema_migrations/20241121033259 | 1 + db/schema_migrations/20241121033758 | 1 + db/schema_migrations/20241122093316 | 1 + db/schema_migrations/20241122093341 | 1 + db/structure.sql | 90 ++++++- .../backup_restore/backup_cli.md | 2 +- .../dedicated/hosted_runners.md | 2 +- .../runbooks/planned_failover_multi_node.md | 2 +- .../runbooks/planned_failover_single_node.md | 2 +- doc/administration/gitaly/recovery.md | 2 +- doc/administration/operations/puma.md | 2 +- .../container_registry_metadata_database.md | 4 +- doc/administration/pages/index.md | 12 +- .../postgresql/multiple_databases.md | 2 +- .../settings/import_and_export_settings.md | 2 +- .../rate_limit_on_organizations_api.md | 2 +- doc/administration/silent_mode/index.md | 4 +- doc/api/bulk_imports.md | 2 +- doc/api/dependencies.md | 2 +- doc/api/google_cloud_integration.md | 2 +- .../epic_work_items_api_migration_guide.md | 2 +- doc/api/groups.md | 4 +- doc/api/integrations.md | 8 +- doc/api/merge_request_approvals.md | 4 +- doc/api/organizations.md | 4 +- doc/api/project_import_export.md | 2 +- doc/api/projects.md | 2 +- doc/api/rest/index.md | 2 +- doc/ci/components/index.md | 8 +- doc/ci/environments/index.md | 16 +- doc/ci/environments/kubernetes_dashboard.md | 2 +- doc/ci/migration/circleci.md | 4 +- doc/ci/pipelines/merge_trains.md | 2 +- doc/ci/runners/hosted_runners/macos.md | 4 +- doc/ci/runners/hosted_runners/windows.md | 6 +- doc/ci/runners/index.md | 4 +- .../runners/provision_runners_google_cloud.md | 2 +- doc/ci/runners/runner_fleet_dashboard.md | 6 +- .../runners/runner_fleet_dashboard_groups.md | 2 +- doc/ci/secrets/akeyless.md | 2 +- doc/ci/testing/code_quality.md | 2 +- doc/ci/yaml/index.md | 11 +- doc/development/activitypub/actors/index.md | 2 +- .../activitypub/actors/releases.md | 2 +- doc/development/activitypub/index.md | 2 +- doc/development/api_graphql_styleguide.md | 2 +- doc/development/api_styleguide.md | 8 +- doc/development/contributing/design.md | 2 +- .../documentation/experiment_beta.md | 6 +- .../documentation/feature_flags.md | 2 +- .../styleguide/availability_details.md | 2 +- .../documentation/styleguide/word_list.md | 4 +- .../fe_guide/customizable_dashboards.md | 2 +- doc/development/feature_flags/index.md | 2 +- doc/development/i18n/translation.md | 2 +- doc/integration/clickhouse.md | 2 +- doc/integration/exact_code_search/zoekt.md | 4 +- doc/operations/incident_management/slack.md | 2 +- doc/operations/logs.md | 2 +- doc/operations/metrics.md | 2 +- doc/operations/product_analytics/index.md | 4 +- doc/operations/tracing.md | 4 +- doc/policy/development_stages_support.md | 180 ++++++++++++++ doc/policy/early_access_program/index.md | 8 +- doc/policy/experiment-beta-support.md | 182 +------------- .../upgrading_auto_deploy_dependencies.md | 4 +- doc/user/analytics/analytics_dashboards.md | 4 +- doc/user/analytics/dora_metrics.md | 4 +- doc/user/analytics/value_streams_dashboard.md | 4 +- .../api_security/api_discovery/index.md | 2 +- .../dependency_scanning_sbom/index.md | 2 +- .../dependency_scanning/index.md | 2 +- .../sast/gitlab_advanced_sast.md | 2 +- .../secret_detection/exclusions.md | 2 +- .../secret_push_protection/index.md | 2 +- .../vulnerabilities/index.md | 8 +- .../vulnerability_report/pipeline.md | 4 +- doc/user/clusters/agent/user_access.md | 2 +- doc/user/discussions/index.md | 4 +- doc/user/duo_workflow/index.md | 4 +- doc/user/enterprise_user/index.md | 2 +- doc/user/gitlab_duo/data_usage.md | 4 +- doc/user/gitlab_duo/index.md | 2 +- doc/user/gitlab_duo/turn_on_off.md | 2 +- doc/user/gitlab_duo_chat/examples.md | 2 +- doc/user/gitlab_duo_chat/index.md | 14 +- doc/user/glql/index.md | 2 +- doc/user/group/epics/epic_work_items.md | 2 +- doc/user/group/epics/manage_epics.md | 4 +- .../import/direct_transfer_migrations.md | 2 +- doc/user/group/import/index.md | 4 +- .../group/value_stream_analytics/index.md | 2 +- doc/user/okrs.md | 6 +- .../container_protection_rules.md | 2 +- doc/user/packages/go_proxy/index.md | 4 +- .../dependency_proxy/index.md | 2 +- .../package_protection_rules.md | 2 +- .../supported_package_managers.md | 2 +- doc/user/packages/rubygems_registry/index.md | 4 +- doc/user/profile/preferences.md | 6 +- doc/user/project/index.md | 2 +- .../google_artifact_management.md | 2 +- doc/user/project/issues/managing_issues.md | 2 +- doc/user/project/labels.md | 2 +- doc/user/project/merge_requests/changes.md | 2 +- .../merge_requests/duo_in_merge_requests.md | 10 +- .../project/merge_requests/stacked_diffs.md | 4 +- .../project/ml/experiment_tracking/index.md | 4 +- .../ml/experiment_tracking/mlflow_client.md | 4 +- doc/user/project/ml/model_registry/index.md | 2 +- doc/user/project/pages/index.md | 2 +- doc/user/project/repository/code_explain.md | 2 +- doc/user/project/service_desk/configure.md | 2 +- doc/user/project/time_tracking.md | 2 +- doc/user/project/web_ide/index.md | 2 +- doc/user/search/exact_code_search.md | 4 +- doc/user/tasks.md | 4 +- doc/user/workspace/index.md | 2 +- spec/db/schema_spec.rb | 2 + .../components/error_details_spec.js | 53 ++-- .../components/error_tracking_list_spec.js | 44 ++-- .../customizable_dashboard_spec.js | 4 +- .../available_visualizations_drawer_spec.js | 7 +- .../customizable_dashboard/mock_data.js | 233 ++---------------- .../customizable_dashboard/utils_spec.js | 194 +-------------- .../update_environment_service_spec.rb | 27 +- .../recalculate_auto_stop_service_spec.rb | 120 +++++++++ spec/support/db_cleaner.rb | 2 + .../ci/deployable_shared_examples.rb | 94 ++++++- .../recalculate_auto_stop_worker_spec.rb | 44 ++++ 168 files changed, 1119 insertions(+), 1073 deletions(-) delete mode 100644 app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/constants.js delete mode 100644 app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboard.fragment.graphql delete mode 100644 app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboards.fragment.graphql delete mode 100644 app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_all_customizable_dashboards.query.graphql delete mode 100644 app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_customizable_dashboard.query.graphql create mode 100644 app/services/environments/recalculate_auto_stop_service.rb create mode 100644 app/workers/environments/recalculate_auto_stop_worker.rb create mode 100644 db/docs/system_access_group_microsoft_applications.yml create mode 100644 db/docs/system_access_group_microsoft_graph_access_tokens.yml create mode 100644 db/migrate/20241106114853_create_system_access_group_microsoft_applications.rb create mode 100644 db/migrate/20241106115015_create_system_access_group_microsoft_graph_access_tokens.rb create mode 100644 db/migrate/20241115075017_add_member_role_id_to_project_group_links.rb create mode 100644 db/migrate/20241121033259_add_fk_to_member_roles_on_project_group_links.rb create mode 100644 db/migrate/20241121033758_add_index_to_project_group_links_on_member_role_id.rb create mode 100644 db/migrate/20241122093316_add_foregin_key_group_microsoft_graph_access_tokens.rb create mode 100644 db/migrate/20241122093341_add_foregin_key_application_microsoft_graph_access_tokens.rb create mode 100644 db/schema_migrations/20241106114853 create mode 100644 db/schema_migrations/20241106115015 create mode 100644 db/schema_migrations/20241115075017 create mode 100644 db/schema_migrations/20241121033259 create mode 100644 db/schema_migrations/20241121033758 create mode 100644 db/schema_migrations/20241122093316 create mode 100644 db/schema_migrations/20241122093341 create mode 100644 doc/policy/development_stages_support.md create mode 100644 spec/services/environments/recalculate_auto_stop_service_spec.rb create mode 100644 spec/workers/environments/recalculate_auto_stop_worker_spec.rb diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 19f0761a193..a65161fcead 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -76e33b6eb327e8ab10102c2d332a40f4fdc3a4b5 +eb9d6988f8d9912077226a4b2c67d82ea60a9001 diff --git a/Gemfile.checksum b/Gemfile.checksum index 13d5bc39de4..5851869209b 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -666,7 +666,7 @@ {"name":"sawyer","version":"0.9.2","platform":"ruby","checksum":"fa3a72d62a4525517b18857ddb78926aab3424de0129be6772a8e2ba240e7aca"}, {"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"}, {"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"}, -{"name":"selenium-webdriver","version":"4.25.0","platform":"ruby","checksum":"7e11abf2b0fd56df61d98b6d59d621781cf103261d941df3510837547bd4a0d5"}, +{"name":"selenium-webdriver","version":"4.27.0","platform":"ruby","checksum":"8821f4ad60b935cfcdc5954c0a6642d894e936250aece8bf37a6fcbebe5eb6e0"}, {"name":"semver_dialects","version":"3.4.4","platform":"ruby","checksum":"31773e322946d91158bcfd664d29fd1c9e567ffb1d5f4b32e3b1ddb645ef5cc4"}, {"name":"sentry-rails","version":"5.21.0","platform":"ruby","checksum":"b5a943d199aff0d3cb94dbac4eb3e00622dd0c55fd1be0cffd43a7e09f0ad602"}, {"name":"sentry-ruby","version":"5.21.0","platform":"ruby","checksum":"294e0dd59afce7e08ba22a4e880924345c75c3e858dc8ee23553716793f78629"}, @@ -716,7 +716,7 @@ {"name":"term-ansicolor","version":"1.7.1","platform":"ruby","checksum":"92339ffec77c4bddc786a29385c91601dd52fc68feda23609bba0491229b05f7"}, {"name":"terminal-table","version":"3.0.2","platform":"ruby","checksum":"f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91"}, {"name":"terser","version":"1.0.2","platform":"ruby","checksum":"80c2e0bc7e2db4e12e8529658f9e0820e13d685ae67d745bf981f269743bb28e"}, -{"name":"test-prof","version":"1.4.0","platform":"ruby","checksum":"966bc3efc37216e9e79b44274e7f74e3c6614b3dba7fba2f5ad326ab90910f74"}, +{"name":"test-prof","version":"1.4.2","platform":"ruby","checksum":"965c1c2142b2204005116b12c8b78c251a56f91dd473214600a5545259ddcdd7"}, {"name":"test_file_finder","version":"0.3.1","platform":"ruby","checksum":"83fb0588a06b2784b51892910b9bfd06609f8d31f2d851a98d976f644d177199"}, {"name":"text","version":"1.3.1","platform":"ruby","checksum":"2fbbbc82c1ce79c4195b13018a87cbb00d762bda39241bb3cdc32792759dd3f4"}, {"name":"thor","version":"1.3.1","platform":"ruby","checksum":"fa7e3471d4f6a27138e3d9c9b0d4daac9c3d7383927667ae83e9ab42ae7401ef"}, diff --git a/Gemfile.lock b/Gemfile.lock index e59452b0317..91a57ee4b98 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1709,7 +1709,7 @@ GEM seed-fu (2.3.7) activerecord (>= 3.1) activesupport (>= 3.1) - selenium-webdriver (4.25.0) + selenium-webdriver (4.27.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -1829,7 +1829,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terser (1.0.2) execjs (>= 0.3.0, < 3) - test-prof (1.4.0) + test-prof (1.4.2) test_file_finder (0.3.1) faraday (>= 1.0, < 3.0, != 2.0.0) text (1.3.1) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 341da957291..130d3eb2905 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -676,7 +676,7 @@ {"name":"sawyer","version":"0.9.2","platform":"ruby","checksum":"fa3a72d62a4525517b18857ddb78926aab3424de0129be6772a8e2ba240e7aca"}, {"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"}, {"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"}, -{"name":"selenium-webdriver","version":"4.25.0","platform":"ruby","checksum":"7e11abf2b0fd56df61d98b6d59d621781cf103261d941df3510837547bd4a0d5"}, +{"name":"selenium-webdriver","version":"4.27.0","platform":"ruby","checksum":"8821f4ad60b935cfcdc5954c0a6642d894e936250aece8bf37a6fcbebe5eb6e0"}, {"name":"semver_dialects","version":"3.4.4","platform":"ruby","checksum":"31773e322946d91158bcfd664d29fd1c9e567ffb1d5f4b32e3b1ddb645ef5cc4"}, {"name":"sentry-rails","version":"5.21.0","platform":"ruby","checksum":"b5a943d199aff0d3cb94dbac4eb3e00622dd0c55fd1be0cffd43a7e09f0ad602"}, {"name":"sentry-ruby","version":"5.21.0","platform":"ruby","checksum":"294e0dd59afce7e08ba22a4e880924345c75c3e858dc8ee23553716793f78629"}, @@ -728,7 +728,7 @@ {"name":"term-ansicolor","version":"1.7.1","platform":"ruby","checksum":"92339ffec77c4bddc786a29385c91601dd52fc68feda23609bba0491229b05f7"}, {"name":"terminal-table","version":"3.0.2","platform":"ruby","checksum":"f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91"}, {"name":"terser","version":"1.0.2","platform":"ruby","checksum":"80c2e0bc7e2db4e12e8529658f9e0820e13d685ae67d745bf981f269743bb28e"}, -{"name":"test-prof","version":"1.4.0","platform":"ruby","checksum":"966bc3efc37216e9e79b44274e7f74e3c6614b3dba7fba2f5ad326ab90910f74"}, +{"name":"test-prof","version":"1.4.2","platform":"ruby","checksum":"965c1c2142b2204005116b12c8b78c251a56f91dd473214600a5545259ddcdd7"}, {"name":"test_file_finder","version":"0.3.1","platform":"ruby","checksum":"83fb0588a06b2784b51892910b9bfd06609f8d31f2d851a98d976f644d177199"}, {"name":"text","version":"1.3.1","platform":"ruby","checksum":"2fbbbc82c1ce79c4195b13018a87cbb00d762bda39241bb3cdc32792759dd3f4"}, {"name":"thor","version":"1.3.1","platform":"ruby","checksum":"fa7e3471d4f6a27138e3d9c9b0d4daac9c3d7383927667ae83e9ab42ae7401ef"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index 37d3d7d21dc..7a6f70d3c54 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -1735,7 +1735,7 @@ GEM seed-fu (2.3.7) activerecord (>= 3.1) activesupport (>= 3.1) - selenium-webdriver (4.25.0) + selenium-webdriver (4.27.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -1856,7 +1856,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) terser (1.0.2) execjs (>= 0.3.0, < 3) - test-prof (1.4.0) + test-prof (1.4.2) test_file_finder (0.3.1) faraday (>= 1.0, < 3.0, != 2.0.0) text (1.3.1) diff --git a/app/assets/javascripts/error_tracking/events_tracking.js b/app/assets/javascripts/error_tracking/events_tracking.js index eb38fe6542b..efe3cc5edf7 100644 --- a/app/assets/javascripts/error_tracking/events_tracking.js +++ b/app/assets/javascripts/error_tracking/events_tracking.js @@ -1,13 +1,15 @@ -import Tracking from '~/tracking'; +import { InternalEvents } from '~/tracking'; const category = 'Error Tracking'; // eslint-disable-line @gitlab/require-i18n-strings function sendTrackingEvents(action, integrated) { - Tracking.event(category, action, { - extra: { + InternalEvents.trackEvent( + action, + { variant: integrated ? 'integrated' : 'external', }, - }); + category, + ); } /** diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue index edded648323..1da41b39ed3 100644 --- a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue +++ b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue @@ -651,7 +651,9 @@ export default { gitlabLogo: window.gon.gitlab_logo, PAGE_SIZES, permissionsHelpPath: helpPagePath('user/permissions', { anchor: 'group-members-permissions' }), - betaFeatureHelpPath: helpPagePath('policy/experiment-beta-support', { anchor: 'beta-features' }), + betaFeatureHelpPath: helpPagePath('policy/development_stages_support', { + anchor: 'beta-features', + }), popoverOptions: { title: __('What is listed here?') }, learnMoreOptions: { title: s__('BulkImport|Import user memberships') }, i18n, diff --git a/app/assets/javascripts/issuable/popover/components/comment_popover.vue b/app/assets/javascripts/issuable/popover/components/comment_popover.vue index a4074cd8f72..abb90125ace 100644 --- a/app/assets/javascripts/issuable/popover/components/comment_popover.vue +++ b/app/assets/javascripts/issuable/popover/components/comment_popover.vue @@ -100,7 +100,7 @@ export default { diff --git a/app/assets/javascripts/issuable/popover/components/mr_popover.vue b/app/assets/javascripts/issuable/popover/components/mr_popover.vue index c5949cfd4f6..8a0fcb236a1 100644 --- a/app/assets/javascripts/issuable/popover/components/mr_popover.vue +++ b/app/assets/javascripts/issuable/popover/components/mr_popover.vue @@ -99,7 +99,7 @@ export default { {{ stateHumanName }} - + {{ __('Opened') }} @@ -107,7 +107,7 @@ export default {
{{ title }}
-
+
{{ `${namespacePath}!${iid}` }}
diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/constants.js b/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/constants.js deleted file mode 100644 index 42620d320c4..00000000000 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/constants.js +++ /dev/null @@ -1 +0,0 @@ -export const TYPENAME_ANALYTICS_DASHBOARD_PANEL = 'CustomizableDashboardPanel'; diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboard.fragment.graphql b/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboard.fragment.graphql deleted file mode 100644 index 7328095eaab..00000000000 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboard.fragment.graphql +++ /dev/null @@ -1,24 +0,0 @@ -fragment CustomizableDashboardFragment on CustomizableDashboardConnection { - nodes { - slug - title - description - userDefined - status - errors - panels { - nodes { - title - gridAttributes - queryOverrides - visualization { - slug - type - options - data - errors - } - } - } - } -} diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboards.fragment.graphql b/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboards.fragment.graphql deleted file mode 100644 index cf01b51135b..00000000000 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/fragments/customizable_dashboards.fragment.graphql +++ /dev/null @@ -1,10 +0,0 @@ -fragment CustomizableDashboardsFragment on CustomizableDashboardConnection { - nodes { - slug - title - description - userDefined - status - errors - } -} diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_all_customizable_dashboards.query.graphql b/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_all_customizable_dashboards.query.graphql deleted file mode 100644 index c01e05dc915..00000000000 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_all_customizable_dashboards.query.graphql +++ /dev/null @@ -1,20 +0,0 @@ -#import "../fragments/customizable_dashboards.fragment.graphql" - -query getAllCusomizableDashboards( - $fullPath: ID! - $isGroup: Boolean = false - $isProject: Boolean = false -) { - project(fullPath: $fullPath) @include(if: $isProject) { - id - customizableDashboards { - ...CustomizableDashboardsFragment - } - } - group(fullPath: $fullPath) @include(if: $isGroup) { - id - customizableDashboards { - ...CustomizableDashboardsFragment - } - } -} diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_customizable_dashboard.query.graphql b/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_customizable_dashboard.query.graphql deleted file mode 100644 index b864156e219..00000000000 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/graphql/queries/get_customizable_dashboard.query.graphql +++ /dev/null @@ -1,21 +0,0 @@ -#import "../fragments/customizable_dashboard.fragment.graphql" - -query getCustomizableDashboard( - $fullPath: ID! - $slug: String - $isGroup: Boolean = false - $isProject: Boolean = false -) { - project(fullPath: $fullPath) @include(if: $isProject) { - id - customizableDashboards(slug: $slug, category: ANALYTICS) { - ...CustomizableDashboardFragment - } - } - group(fullPath: $fullPath) @include(if: $isGroup) { - id - customizableDashboards(slug: $slug, category: ANALYTICS) { - ...CustomizableDashboardFragment - } - } -} diff --git a/app/assets/javascripts/vue_shared/components/customizable_dashboard/utils.js b/app/assets/javascripts/vue_shared/components/customizable_dashboard/utils.js index 55a232a2e15..cb110141ef6 100644 --- a/app/assets/javascripts/vue_shared/components/customizable_dashboard/utils.js +++ b/app/assets/javascripts/vue_shared/components/customizable_dashboard/utils.js @@ -1,4 +1,3 @@ -import produce from 'immer'; import isEmpty from 'lodash/isEmpty'; import uniqueId from 'lodash/uniqueId'; import { queryToObject } from '~/lib/utils/url_utility'; @@ -11,9 +10,7 @@ import { parseBoolean, cloneWithoutReferences, } from '~/lib/utils/common_utils'; -import getAllCustomizableDashboardsQuery from './graphql/queries/get_all_customizable_dashboards.query.graphql'; -import getCustomizableDashboardQuery from './graphql/queries/get_customizable_dashboard.query.graphql'; -import { TYPENAME_ANALYTICS_DASHBOARD_PANEL } from './graphql/constants'; + import { DASHBOARD_SCHEMA_VERSION, VISUALIZATION_TYPE_DATA_TABLE, @@ -127,133 +124,6 @@ export const getDashboardConfig = (hydratedDashboard) => { }; }; -/** - * Updates a dashboard detail in cache from getProductAnalyticsDashboard:{slug} - */ -const updateDashboardDetailsApolloCache = ({ - apolloClient, - dashboard, - slug, - fullPath, - isProject, - isGroup, -}) => { - const getDashboardDetailsQuery = { - query: getCustomizableDashboardQuery, - variables: { - fullPath, - slug, - isProject, - isGroup, - }, - }; - const sourceData = apolloClient.readQuery(getDashboardDetailsQuery); - if (!sourceData) { - // Dashboard details not yet in cache, must be a new dashboard, nothing to update - return; - } - - const data = produce(sourceData, (draftState) => { - const { nodes } = isProject - ? draftState.project.customizableDashboards - : draftState.group.customizableDashboards; - const updateIndex = nodes.findIndex((node) => node.slug === slug); - - if (updateIndex < 0) return; - - const updateNode = nodes[updateIndex]; - - nodes.splice(updateIndex, 1, { - ...updateNode, - ...dashboard, - panels: { - ...updateNode.panels, - nodes: - dashboard.panels?.map((panel) => { - const { id, ...panelRest } = panel; - return { __typename: TYPENAME_ANALYTICS_DASHBOARD_PANEL, ...panelRest }; - }) || [], - }, - }); - }); - - apolloClient.writeQuery({ - ...getDashboardDetailsQuery, - data, - }); -}; - -/** - * Adds/updates a newly created dashboard to the dashboards list cache from getAllCustomizableDashboardsQuery - */ -const updateDashboardsListApolloCache = ({ - apolloClient, - dashboardSlug, - dashboard, - fullPath, - isProject, - isGroup, -}) => { - const getDashboardListQuery = { - query: getAllCustomizableDashboardsQuery, - variables: { - fullPath, - isProject, - isGroup, - }, - }; - const sourceData = apolloClient.readQuery(getDashboardListQuery); - if (!sourceData) { - // Dashboard list not yet loaded in cache, nothing to update - return; - } - - const data = produce(sourceData, (draftState) => { - const { panels, ...dashboardWithoutPanels } = dashboard; - const { nodes } = isProject - ? draftState.project.customizableDashboards - : draftState.group.customizableDashboards; - - const updateIndex = nodes.findIndex(({ slug }) => slug === dashboardSlug); - - // Add new dashboard if it doesn't exist - if (updateIndex < 0) { - nodes.push(dashboardWithoutPanels); - return; - } - - nodes.splice(updateIndex, 1, { - ...nodes[updateIndex], - ...dashboardWithoutPanels, - }); - }); - - apolloClient.writeQuery({ - ...getDashboardListQuery, - data, - }); -}; - -export const updateApolloCache = ({ - apolloClient, - slug, - dashboard, - fullPath, - isProject, - isGroup, -}) => { - // TODO: modify to support removing dashboards from cache https://gitlab.com/gitlab-org/gitlab/-/issues/425513 - updateDashboardDetailsApolloCache({ - apolloClient, - dashboard, - slug, - fullPath, - isProject, - isGroup, - }); - updateDashboardsListApolloCache({ apolloClient, slug, dashboard, fullPath, isProject, isGroup }); -}; - const filterUndefinedValues = (obj) => { // eslint-disable-next-line no-unused-vars return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== undefined)); diff --git a/app/models/concerns/ci/deployable.rb b/app/models/concerns/ci/deployable.rb index b8ddf1258ca..3abb70547e4 100644 --- a/app/models/concerns/ci/deployable.rb +++ b/app/models/concerns/ci/deployable.rb @@ -15,6 +15,7 @@ module Ci after_transition any => [:success] do |job| job.run_after_commit do Environments::StopJobSuccessWorker.perform_async(id) + Environments::RecalculateAutoStopWorker.perform_async(id) end end @@ -107,6 +108,13 @@ module Ci end end + def expanded_auto_stop_in + return unless environment_auto_stop_in + + ExpandVariables.expand(environment_auto_stop_in, -> { variables.sort_and_expand_all }) + end + strong_memoize_attr :expanded_auto_stop_in + def has_environment_keyword? environment.present? end @@ -114,6 +122,19 @@ module Ci def deployment_job? has_environment_keyword? && environment_action == 'start' end + alias_method :starts_environment?, :deployment_job? + + def accesses_environment? + has_environment_keyword? && environment_action == 'access' + end + + def prepares_environment? + has_environment_keyword? && environment_action == 'prepare' + end + + def verifies_environment? + has_environment_keyword? && environment_action == 'verify' + end def stops_environment? has_environment_keyword? && environment_action == 'stop' diff --git a/app/services/deployments/update_environment_service.rb b/app/services/deployments/update_environment_service.rb index 489681683cf..173f3cb91b6 100644 --- a/app/services/deployments/update_environment_service.rb +++ b/app/services/deployments/update_environment_service.rb @@ -62,12 +62,6 @@ module Deployments ExpandVariables.expand(environment_url, -> { variables.sort_and_expand_all }) end - def expanded_auto_stop_in - return unless auto_stop_in - - ExpandVariables.expand(auto_stop_in, -> { variables.sort_and_expand_all }) - end - def expanded_cluster_agent_path return unless cluster_agent_path @@ -82,10 +76,6 @@ module Deployments environment_options[:action] || 'start' end - def auto_stop_in - deployable&.environment_auto_stop_in - end - def cluster_agent_path environment_options.dig(:kubernetes, :agent) end @@ -99,7 +89,7 @@ module Deployments def renew_auto_stop_in return unless deployable - if (value = expanded_auto_stop_in) + if (value = deployable.expanded_auto_stop_in) environment.auto_stop_in = value end end diff --git a/app/services/environments/recalculate_auto_stop_service.rb b/app/services/environments/recalculate_auto_stop_service.rb new file mode 100644 index 00000000000..8bcd7cac68f --- /dev/null +++ b/app/services/environments/recalculate_auto_stop_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Environments + class RecalculateAutoStopService + attr_reader :deployable, :environment + + def initialize(deployable) + @deployable = deployable + @environment = deployable.persisted_environment + end + + def execute + return unless can_set_auto_stop? && environment.present? + + auto_stop_in = deployable.expanded_auto_stop_in + auto_stop_in ||= last_successful_deployable&.expanded_auto_stop_in if can_reset_timer? + + environment.update!(auto_stop_in: auto_stop_in) if auto_stop_in.present? + end + + private + + # Jobs that start an environment (using `action: start`) can also + # specify a stop time, however this is handled by the deployment + # process. Actions other than `start` do not create deployments, + # so these must be processed separately. + def can_set_auto_stop? + deployable.verifies_environment? || can_reset_timer? + end + + def can_reset_timer? + deployable.prepares_environment? || deployable.accesses_environment? + end + + def last_successful_deployable + environment.last_deployment&.deployable + end + end +end diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 19987e9d9f8..68ba033ce60 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -3171,6 +3171,15 @@ :weight: 1 :idempotent: true :tags: [] +- :name: environments_recalculate_auto_stop + :worker_name: Environments::RecalculateAutoStopWorker + :feature_category: :environment_management + :has_external_dependencies: false + :urgency: :low + :resource_boundary: :unknown + :weight: 1 + :idempotent: true + :tags: [] - :name: environments_stop_job_failed :worker_name: Environments::StopJobFailedWorker :feature_category: :continuous_delivery diff --git a/app/workers/environments/recalculate_auto_stop_worker.rb b/app/workers/environments/recalculate_auto_stop_worker.rb new file mode 100644 index 00000000000..f0e2c99de65 --- /dev/null +++ b/app/workers/environments/recalculate_auto_stop_worker.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Environments + class RecalculateAutoStopWorker + include ApplicationWorker + + data_consistency :delayed + idempotent! + feature_category :environment_management + + def perform(job_id, options = {}) + relation = Ci::Processable.all + relation = relation.in_partition(options['partition_id']) if options['partition_id'].present? + + relation.find_by_id(job_id).try do |job| + Environments::RecalculateAutoStopService.new(job).execute + end + end + end +end diff --git a/config/events/view_errors_list.yml b/config/events/view_errors_list.yml index b2ee3e2d610..b8b74223c08 100644 --- a/config/events/view_errors_list.yml +++ b/config/events/view_errors_list.yml @@ -1,6 +1,7 @@ --- description: Tracks when the user views the list of errors. action: view_errors_list +internal_events: true product_group: platform_insights milestone: '16.1' introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/121259 @@ -11,3 +12,10 @@ tiers: - free - premium - ultimate +additional_properties: + label: + description: not actually used - to be fixed in https://gitlab.com/gitlab-org/gitlab/-/issues/501387 + property: + description: not actually used - to be fixed in https://gitlab.com/gitlab-org/gitlab/-/issues/501387 + variant: + description: external or internal diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml index 402d28a3492..46cd2e682d2 100644 --- a/config/sidekiq_queues.yml +++ b/config/sidekiq_queues.yml @@ -341,6 +341,8 @@ - 1 - - environments_canary_ingress_update - 1 +- - environments_recalculate_auto_stop + - 1 - - environments_stop_job_failed - 1 - - environments_stop_job_success diff --git a/db/docs/system_access_group_microsoft_applications.yml b/db/docs/system_access_group_microsoft_applications.yml new file mode 100644 index 00000000000..ea030c3b077 --- /dev/null +++ b/db/docs/system_access_group_microsoft_applications.yml @@ -0,0 +1,12 @@ +--- +table_name: system_access_group_microsoft_applications +classes: +- SystemAccess::GroupMicrosoftApplication +feature_categories: +- system_access +description: Integration with Microsoft Azure application in SaaS +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172497 +milestone: '17.7' +gitlab_schema: gitlab_main_cell +sharding_key: + group_id: namespaces diff --git a/db/docs/system_access_group_microsoft_graph_access_tokens.yml b/db/docs/system_access_group_microsoft_graph_access_tokens.yml new file mode 100644 index 00000000000..e880c67f22b --- /dev/null +++ b/db/docs/system_access_group_microsoft_graph_access_tokens.yml @@ -0,0 +1,12 @@ +--- +table_name: system_access_group_microsoft_graph_access_tokens +classes: +- SystemAccess::GroupMicrosoftGraphAccessToken +feature_categories: +- system_access +description: Access tokens for the Microsoft Graph API in SaaS +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172497 +milestone: '17.7' +gitlab_schema: gitlab_main_cell +sharding_key: + group_id: namespaces diff --git a/db/docs/system_access_microsoft_applications.yml b/db/docs/system_access_microsoft_applications.yml index 85928f307ee..d2b09bc0a20 100644 --- a/db/docs/system_access_microsoft_applications.yml +++ b/db/docs/system_access_microsoft_applications.yml @@ -7,6 +7,6 @@ feature_categories: description: Integration with Microsoft Azure application introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124101 milestone: '16.2' -gitlab_schema: gitlab_main -sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/463788 +gitlab_schema: gitlab_main_cell +exempt_from_sharding: true table_size: small diff --git a/db/docs/system_access_microsoft_graph_access_tokens.yml b/db/docs/system_access_microsoft_graph_access_tokens.yml index cdbbae087b6..c1bdb0ed8ba 100644 --- a/db/docs/system_access_microsoft_graph_access_tokens.yml +++ b/db/docs/system_access_microsoft_graph_access_tokens.yml @@ -7,6 +7,6 @@ feature_categories: description: Access tokens for the Microsoft Graph API introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124101 milestone: '16.2' -gitlab_schema: gitlab_main -sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/463788 -table_size: small +gitlab_schema: gitlab_main_cell +exempt_from_sharding: true +table_size: small \ No newline at end of file diff --git a/db/migrate/20241106114853_create_system_access_group_microsoft_applications.rb b/db/migrate/20241106114853_create_system_access_group_microsoft_applications.rb new file mode 100644 index 00000000000..d8f0fea8f43 --- /dev/null +++ b/db/migrate/20241106114853_create_system_access_group_microsoft_applications.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +class CreateSystemAccessGroupMicrosoftApplications < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + milestone '17.7' + + def change + create_table :system_access_group_microsoft_applications do |t| # rubocop:disable Migration/EnsureFactoryForTable -- False positive, factory name is prefixed with system_access + t.timestamps_with_timezone null: false + t.references :group, foreign_key: { to_table: :namespaces, on_delete: :cascade }, null: false + t.bigint :temp_source_id, index: { unique: true, name: 'index_group_microsoft_applications_on_temp_source_id' }, + comment: 'Temporary column to store graph access tokens id' + t.boolean :enabled, null: false, default: false + t.text :tenant_xid, null: false, limit: 255 + t.text :client_xid, null: false, limit: 255 + t.text :login_endpoint, null: false, limit: 255, default: 'https://login.microsoftonline.com' + t.text :graph_endpoint, null: false, limit: 255, default: 'https://graph.microsoft.com' + t.binary :encrypted_client_secret, null: false + t.binary :encrypted_client_secret_iv, null: false + end + end +end diff --git a/db/migrate/20241106115015_create_system_access_group_microsoft_graph_access_tokens.rb b/db/migrate/20241106115015_create_system_access_group_microsoft_graph_access_tokens.rb new file mode 100644 index 00000000000..ab715dd93c4 --- /dev/null +++ b/db/migrate/20241106115015_create_system_access_group_microsoft_graph_access_tokens.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +class CreateSystemAccessGroupMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + milestone '17.7' + + def change + create_table :system_access_group_microsoft_graph_access_tokens do |t| # rubocop:disable Migration/EnsureFactoryForTable -- False positive, factory name is prefixed with system_access + t.timestamps_with_timezone null: false + t.references :system_access_group_microsoft_application, + index: { name: 'unique_index_group_ms_access_tokens_on_ms_app_id', unique: true } + t.references :group, index: { name: 'index_group_id_on_group_microsoft_access_tokens' }, null: false + t.bigint :temp_source_id, index: { unique: true, name: 'index_source_id_microsoft_access_tokens' }, + comment: 'Temporary column to store graph access tokens id' + + t.integer :expires_in, null: false + t.binary :encrypted_token, null: false + t.binary :encrypted_token_iv, null: false + end + end +end diff --git a/db/migrate/20241115075017_add_member_role_id_to_project_group_links.rb b/db/migrate/20241115075017_add_member_role_id_to_project_group_links.rb new file mode 100644 index 00000000000..eb591c7e3b3 --- /dev/null +++ b/db/migrate/20241115075017_add_member_role_id_to_project_group_links.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddMemberRoleIdToProjectGroupLinks < Gitlab::Database::Migration[2.2] + milestone '17.7' + enable_lock_retries! + + def change + add_column :project_group_links, :member_role_id, :bigint, if_not_exists: true + end +end diff --git a/db/migrate/20241121033259_add_fk_to_member_roles_on_project_group_links.rb b/db/migrate/20241121033259_add_fk_to_member_roles_on_project_group_links.rb new file mode 100644 index 00000000000..7b6a9f1cd9b --- /dev/null +++ b/db/migrate/20241121033259_add_fk_to_member_roles_on_project_group_links.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddFkToMemberRolesOnProjectGroupLinks < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + milestone '17.7' + + def up + add_concurrent_foreign_key :project_group_links, :member_roles, column: :member_role_id, on_delete: :nullify + end + + def down + with_lock_retries do + remove_foreign_key :project_group_links, column: :member_role_id + end + end +end diff --git a/db/migrate/20241121033758_add_index_to_project_group_links_on_member_role_id.rb b/db/migrate/20241121033758_add_index_to_project_group_links_on_member_role_id.rb new file mode 100644 index 00000000000..01d8872e0d7 --- /dev/null +++ b/db/migrate/20241121033758_add_index_to_project_group_links_on_member_role_id.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddIndexToProjectGroupLinksOnMemberRoleId < Gitlab::Database::Migration[2.2] + disable_ddl_transaction! + milestone '17.7' + + INDEX_NAME = 'index_project_group_links_on_member_role_id' + + def up + add_concurrent_index :project_group_links, :member_role_id, name: INDEX_NAME + end + + def down + remove_concurrent_index_by_name :project_group_links, INDEX_NAME + end +end diff --git a/db/migrate/20241122093316_add_foregin_key_group_microsoft_graph_access_tokens.rb b/db/migrate/20241122093316_add_foregin_key_group_microsoft_graph_access_tokens.rb new file mode 100644 index 00000000000..a534ba1ead5 --- /dev/null +++ b/db/migrate/20241122093316_add_foregin_key_group_microsoft_graph_access_tokens.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddForeginKeyGroupMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2] + milestone '17.7' + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :system_access_group_microsoft_graph_access_tokens, :namespaces, column: :group_id, + on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key :system_access_group_microsoft_graph_access_tokens, column: :group_id + end + end +end diff --git a/db/migrate/20241122093341_add_foregin_key_application_microsoft_graph_access_tokens.rb b/db/migrate/20241122093341_add_foregin_key_application_microsoft_graph_access_tokens.rb new file mode 100644 index 00000000000..9e7fdf9ccab --- /dev/null +++ b/db/migrate/20241122093341_add_foregin_key_application_microsoft_graph_access_tokens.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddForeginKeyApplicationMicrosoftGraphAccessTokens < Gitlab::Database::Migration[2.2] + milestone '17.7' + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :system_access_group_microsoft_graph_access_tokens, + :system_access_group_microsoft_applications, + column: :system_access_group_microsoft_application_id, on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key :system_access_group_microsoft_graph_access_tokens, + column: :system_access_group_microsoft_application_id + end + end +end diff --git a/db/schema_migrations/20241106114853 b/db/schema_migrations/20241106114853 new file mode 100644 index 00000000000..e6e2753a255 --- /dev/null +++ b/db/schema_migrations/20241106114853 @@ -0,0 +1 @@ +5380a55bc8d0cac154e39a53ce2fa960000908a8341f7fce3895ff23e75ab1cb \ No newline at end of file diff --git a/db/schema_migrations/20241106115015 b/db/schema_migrations/20241106115015 new file mode 100644 index 00000000000..f007e1a387e --- /dev/null +++ b/db/schema_migrations/20241106115015 @@ -0,0 +1 @@ +bae66a5a9c3deddb63e6e5fe5f240a84da1d4f166569e37260dd7e03b49a8682 \ No newline at end of file diff --git a/db/schema_migrations/20241115075017 b/db/schema_migrations/20241115075017 new file mode 100644 index 00000000000..8461bd1db31 --- /dev/null +++ b/db/schema_migrations/20241115075017 @@ -0,0 +1 @@ +00bc54eec119b8b5134044fd1181657491e5531b2d8f10d0db74ee479cd2c2fa \ No newline at end of file diff --git a/db/schema_migrations/20241121033259 b/db/schema_migrations/20241121033259 new file mode 100644 index 00000000000..732cb5d8113 --- /dev/null +++ b/db/schema_migrations/20241121033259 @@ -0,0 +1 @@ +1a25f05ea71cf51f98933750340b1c39e1dc93be6bcf3fb9b1af7d074cf794bb \ No newline at end of file diff --git a/db/schema_migrations/20241121033758 b/db/schema_migrations/20241121033758 new file mode 100644 index 00000000000..ee386c94472 --- /dev/null +++ b/db/schema_migrations/20241121033758 @@ -0,0 +1 @@ +3ba6ed79eb7e4d661ad2e4fc8c49aae16d32f0677a8b1e87cc8ce9144f359b43 \ No newline at end of file diff --git a/db/schema_migrations/20241122093316 b/db/schema_migrations/20241122093316 new file mode 100644 index 00000000000..f3c16aacd23 --- /dev/null +++ b/db/schema_migrations/20241122093316 @@ -0,0 +1 @@ +017a9295c331d772d1a8c9124bda89a27b9a368e104961d45c9a1ba5de5cfff8 \ No newline at end of file diff --git a/db/schema_migrations/20241122093341 b/db/schema_migrations/20241122093341 new file mode 100644 index 00000000000..5aeedc0fc67 --- /dev/null +++ b/db/schema_migrations/20241122093341 @@ -0,0 +1 @@ +c2a6af13ca94f9f1edf30cb551f5301dd3ac96d21a3aeed316a2e8b0f480478c \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 17da76408de..a64577c8e08 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -17841,7 +17841,8 @@ CREATE TABLE project_group_links ( created_at timestamp without time zone, updated_at timestamp without time zone, group_access integer DEFAULT 30 NOT NULL, - expires_at date + expires_at date, + member_role_id bigint ); CREATE SEQUENCE project_group_links_id_seq @@ -20093,6 +20094,59 @@ CREATE SEQUENCE suggestions_id_seq ALTER SEQUENCE suggestions_id_seq OWNED BY suggestions.id; +CREATE TABLE system_access_group_microsoft_applications ( + id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + group_id bigint NOT NULL, + temp_source_id bigint, + enabled boolean DEFAULT false NOT NULL, + tenant_xid text NOT NULL, + client_xid text NOT NULL, + login_endpoint text DEFAULT 'https://login.microsoftonline.com'::text NOT NULL, + graph_endpoint text DEFAULT 'https://graph.microsoft.com'::text NOT NULL, + encrypted_client_secret bytea NOT NULL, + encrypted_client_secret_iv bytea NOT NULL, + CONSTRAINT check_027535e932 CHECK ((char_length(graph_endpoint) <= 255)), + CONSTRAINT check_350406e92e CHECK ((char_length(login_endpoint) <= 255)), + CONSTRAINT check_92ce93bc07 CHECK ((char_length(tenant_xid) <= 255)), + CONSTRAINT check_f4c8cf8195 CHECK ((char_length(client_xid) <= 255)) +); + +COMMENT ON COLUMN system_access_group_microsoft_applications.temp_source_id IS 'Temporary column to store graph access tokens id'; + +CREATE SEQUENCE system_access_group_microsoft_applications_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE system_access_group_microsoft_applications_id_seq OWNED BY system_access_group_microsoft_applications.id; + +CREATE TABLE system_access_group_microsoft_graph_access_tokens ( + id bigint NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + system_access_group_microsoft_application_id bigint, + group_id bigint NOT NULL, + temp_source_id bigint, + expires_in integer NOT NULL, + encrypted_token bytea NOT NULL, + encrypted_token_iv bytea NOT NULL +); + +COMMENT ON COLUMN system_access_group_microsoft_graph_access_tokens.temp_source_id IS 'Temporary column to store graph access tokens id'; + +CREATE SEQUENCE system_access_group_microsoft_graph_access_tokens_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE system_access_group_microsoft_graph_access_tokens_id_seq OWNED BY system_access_group_microsoft_graph_access_tokens.id; + CREATE TABLE system_access_instance_microsoft_applications ( id bigint NOT NULL, created_at timestamp with time zone NOT NULL, @@ -23887,6 +23941,10 @@ ALTER TABLE ONLY subscriptions ALTER COLUMN id SET DEFAULT nextval('subscription ALTER TABLE ONLY suggestions ALTER COLUMN id SET DEFAULT nextval('suggestions_id_seq'::regclass); +ALTER TABLE ONLY system_access_group_microsoft_applications ALTER COLUMN id SET DEFAULT nextval('system_access_group_microsoft_applications_id_seq'::regclass); + +ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens ALTER COLUMN id SET DEFAULT nextval('system_access_group_microsoft_graph_access_tokens_id_seq'::regclass); + ALTER TABLE ONLY system_access_instance_microsoft_applications ALTER COLUMN id SET DEFAULT nextval('system_access_instance_microsoft_applications_id_seq'::regclass); ALTER TABLE ONLY system_access_instance_microsoft_graph_access_tokens ALTER COLUMN id SET DEFAULT nextval('system_access_instance_microsoft_graph_access_tokens_id_seq'::regclass); @@ -26664,6 +26722,12 @@ ALTER TABLE ONLY subscriptions ALTER TABLE ONLY suggestions ADD CONSTRAINT suggestions_pkey PRIMARY KEY (id); +ALTER TABLE ONLY system_access_group_microsoft_applications + ADD CONSTRAINT system_access_group_microsoft_applications_pkey PRIMARY KEY (id); + +ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens + ADD CONSTRAINT system_access_group_microsoft_graph_access_tokens_pkey PRIMARY KEY (id); + ALTER TABLE ONLY system_access_instance_microsoft_applications ADD CONSTRAINT system_access_instance_microsoft_applications_pkey PRIMARY KEY (id); @@ -30325,10 +30389,14 @@ CREATE INDEX index_group_group_links_on_shared_with_group_and_group_access ON gr CREATE INDEX index_group_group_links_on_shared_with_group_and_shared_group ON group_group_links USING btree (shared_with_group_id, shared_group_id); +CREATE INDEX index_group_id_on_group_microsoft_access_tokens ON system_access_group_microsoft_graph_access_tokens USING btree (group_id); + CREATE INDEX index_group_import_states_on_group_id ON group_import_states USING btree (group_id); CREATE INDEX index_group_import_states_on_user_id ON group_import_states USING btree (user_id) WHERE (user_id IS NOT NULL); +CREATE UNIQUE INDEX index_group_microsoft_applications_on_temp_source_id ON system_access_group_microsoft_applications USING btree (temp_source_id); + CREATE INDEX index_group_repository_storage_moves_on_group_id ON group_repository_storage_moves USING btree (group_id); CREATE INDEX index_group_saved_replies_on_group_id ON group_saved_replies USING btree (group_id); @@ -31647,6 +31715,8 @@ CREATE INDEX index_project_features_on_project_id_ral_20 ON project_features USI CREATE INDEX index_project_group_links_on_group_id_and_project_id ON project_group_links USING btree (group_id, project_id); +CREATE INDEX index_project_group_links_on_member_role_id ON project_group_links USING btree (member_role_id); + CREATE INDEX index_project_group_links_on_project_id ON project_group_links USING btree (project_id); CREATE INDEX index_project_import_data_on_project_id ON project_import_data USING btree (project_id); @@ -32229,6 +32299,8 @@ CREATE INDEX index_sop_schedules_on_sop_configuration_id ON security_orchestrati CREATE INDEX index_sop_schedules_on_user_id ON security_orchestration_policy_rule_schedules USING btree (user_id); +CREATE UNIQUE INDEX index_source_id_microsoft_access_tokens ON system_access_group_microsoft_graph_access_tokens USING btree (temp_source_id); + CREATE INDEX index_spam_logs_on_user_id ON spam_logs USING btree (user_id); CREATE INDEX index_sprints_iterations_cadence_id ON sprints USING btree (iterations_cadence_id); @@ -32285,6 +32357,8 @@ CREATE INDEX index_successful_authentication_events_for_metrics ON authenticatio CREATE UNIQUE INDEX index_suggestions_on_note_id_and_relative_order ON suggestions USING btree (note_id, relative_order); +CREATE INDEX index_system_access_group_microsoft_applications_on_group_id ON system_access_group_microsoft_applications USING btree (group_id); + CREATE UNIQUE INDEX index_system_access_microsoft_applications_on_namespace_id ON system_access_microsoft_applications USING btree (namespace_id); CREATE UNIQUE INDEX index_system_note_metadata_on_description_version_id ON system_note_metadata USING btree (description_version_id) WHERE (description_version_id IS NOT NULL); @@ -33217,6 +33291,8 @@ CREATE UNIQUE INDEX unique_index_for_credit_card_validation_payment_method_xid O CREATE UNIQUE INDEX unique_index_for_project_pages_unique_domain ON project_settings USING btree (pages_unique_domain) WHERE (pages_unique_domain IS NOT NULL); +CREATE UNIQUE INDEX unique_index_group_ms_access_tokens_on_ms_app_id ON system_access_group_microsoft_graph_access_tokens USING btree (system_access_group_microsoft_application_id); + CREATE UNIQUE INDEX unique_index_instance_ms_access_tokens_on_ms_app_id ON system_access_instance_microsoft_graph_access_tokens USING btree (system_access_instance_microsoft_application_id); CREATE UNIQUE INDEX unique_index_ml_model_metadata_name ON ml_model_metadata USING btree (model_id, name); @@ -35659,6 +35735,9 @@ ALTER TABLE ONLY project_group_links ALTER TABLE ONLY merge_requests_compliance_violations ADD CONSTRAINT fk_290ec1ab02 FOREIGN KEY (merge_request_id) REFERENCES merge_requests(id) ON DELETE CASCADE; +ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens + ADD CONSTRAINT fk_2957addd0d FOREIGN KEY (system_access_group_microsoft_application_id) REFERENCES system_access_group_microsoft_applications(id) ON DELETE CASCADE; + ALTER TABLE ONLY coverage_fuzzing_corpuses ADD CONSTRAINT fk_29f6f15f82 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; @@ -35704,6 +35783,9 @@ ALTER TABLE ONLY analytics_cycle_analytics_group_stages ALTER TABLE ONLY oauth_device_grants ADD CONSTRAINT fk_308d5b76fe FOREIGN KEY (application_id) REFERENCES oauth_applications(id) ON DELETE CASCADE; +ALTER TABLE ONLY project_group_links + ADD CONSTRAINT fk_30ec712bec FOREIGN KEY (member_role_id) REFERENCES member_roles(id) ON DELETE SET NULL; + ALTER TABLE ONLY lists ADD CONSTRAINT fk_30f2a831f4 FOREIGN KEY (iteration_id) REFERENCES sprints(id) ON DELETE CASCADE; @@ -36559,6 +36641,9 @@ ALTER TABLE ONLY customer_relations_contacts ALTER TABLE ONLY uploads ADD CONSTRAINT fk_b94f059d73 FOREIGN KEY (uploaded_by_user_id) REFERENCES users(id) ON DELETE SET NULL; +ALTER TABLE ONLY system_access_group_microsoft_graph_access_tokens + ADD CONSTRAINT fk_b961a3df76 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; + ALTER TABLE ONLY deployments ADD CONSTRAINT fk_b9a3851b82 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; @@ -37177,6 +37262,9 @@ ALTER TABLE ONLY audit_events_streaming_headers ALTER TABLE ONLY ci_sources_projects ADD CONSTRAINT fk_rails_10a1eb379a_p FOREIGN KEY (partition_id, pipeline_id) REFERENCES p_ci_pipelines(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE; +ALTER TABLE ONLY system_access_group_microsoft_applications + ADD CONSTRAINT fk_rails_1171049488 FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE; + ALTER TABLE ONLY zoom_meetings ADD CONSTRAINT fk_rails_1190f0e0fa FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; diff --git a/doc/administration/backup_restore/backup_cli.md b/doc/administration/backup_restore/backup_cli.md index d7b7a5309f7..98a40a41999 100644 --- a/doc/administration/backup_restore/backup_cli.md +++ b/doc/administration/backup_restore/backup_cli.md @@ -12,7 +12,7 @@ DETAILS: **Offering:** Self-managed **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11908) in GitLab 17.0. This feature is an [experiment](../../policy/experiment-beta-support.md) and subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11908) in GitLab 17.0. This feature is an [experiment](../../policy/development_stages_support.md) and subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/). This tool is under development and is ultimately meant to replace [the Rake tasks used for backing up and restoring GitLab](backup_gitlab.md). You can follow the development of this tool in the epic: [Next Gen Scalable Backup and Restore](https://gitlab.com/groups/gitlab-org/-/epics/11577). diff --git a/doc/administration/dedicated/hosted_runners.md b/doc/administration/dedicated/hosted_runners.md index 9667195051e..34a895eadc0 100644 --- a/doc/administration/dedicated/hosted_runners.md +++ b/doc/administration/dedicated/hosted_runners.md @@ -12,7 +12,7 @@ DETAILS: **Offering:** GitLab Dedicated **Status:** Beta -> - [Introduced](https://about.gitlab.com/blog/2024/01/31/hosted-runners-for-gitlab-dedicated-available-in-beta/) as [beta](../../policy/experiment-beta-support.md#beta) on GitLab Dedicated in GitLab on January 31, 2024. +> - [Introduced](https://about.gitlab.com/blog/2024/01/31/hosted-runners-for-gitlab-dedicated-available-in-beta/) as [beta](../../policy/development_stages_support.md#beta) on GitLab Dedicated in GitLab on January 31, 2024. NOTE: To use this feature, you must purchase a subscription for Hosted Runners for GitLab Dedicated. To participate in the closed beta of Hosted Runners for Dedicated, reach out to your Customer Success Manager or Account representative. diff --git a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md index c501067d27b..823009cf33b 100644 --- a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md +++ b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md @@ -15,7 +15,7 @@ DETAILS: Disaster Recovery (Geo) promotion runbooks. WARNING: -This runbook is an [experiment](../../../../policy/experiment-beta-support.md#experiment). For complete, production-ready documentation, see the +This runbook is an [experiment](../../../../policy/development_stages_support.md#experiment). For complete, production-ready documentation, see the [disaster recovery documentation](../index.md). ## Geo planned failover for a multi-node configuration diff --git a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md index 527e23390b2..ec21664d5dc 100644 --- a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md +++ b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md @@ -15,7 +15,7 @@ DETAILS: Disaster Recovery (Geo) promotion runbooks. WARNING: -This runbook is an [experiment](../../../../policy/experiment-beta-support.md#experiment). For complete, production-ready documentation, see the +This runbook is an [experiment](../../../../policy/development_stages_support.md#experiment). For complete, production-ready documentation, see the [disaster recovery documentation](../index.md). ## Geo planned failover for a single-node configuration diff --git a/doc/administration/gitaly/recovery.md b/doc/administration/gitaly/recovery.md index 14b277db627..0dd998f3234 100644 --- a/doc/administration/gitaly/recovery.md +++ b/doc/administration/gitaly/recovery.md @@ -131,7 +131,7 @@ The following parameters are available: some assigned copies that are not available. NOTE: -`dataloss` is still in [beta](../../policy/experiment-beta-support.md#beta) and the output format is subject to change. +`dataloss` is still in [beta](../../policy/development_stages_support.md#beta) and the output format is subject to change. To check for repositories with outdated primaries or for unavailable repositories, run: diff --git a/doc/administration/operations/puma.md b/doc/administration/operations/puma.md index bf1174c3b7b..d1865575b62 100644 --- a/doc/administration/operations/puma.md +++ b/doc/administration/operations/puma.md @@ -103,7 +103,7 @@ To change the worker timeout to 600 seconds: ## Disable Puma clustered mode in memory-constrained environments WARNING: -This feature is an [experiment](../../policy/experiment-beta-support.md#experiment) and subject to change without notice. This feature +This feature is an [experiment](../../policy/development_stages_support.md#experiment) and subject to change without notice. This feature is not ready for production use. If you want to use this feature, you should test outside of production first. See the [known issues](#puma-single-mode-known-issues) for additional details. diff --git a/doc/administration/packages/container_registry_metadata_database.md b/doc/administration/packages/container_registry_metadata_database.md index 7792aab7d44..4642a222dc0 100644 --- a/doc/administration/packages/container_registry_metadata_database.md +++ b/doc/administration/packages/container_registry_metadata_database.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** Self-managed -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 16.4 as a [beta feature](../../policy/experiment-beta-support.md) for self-managed GitLab instances. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 16.4 as a [beta feature](../../policy/development_stages_support.md) for self-managed GitLab instances. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/423459) in GitLab 17.3. The metadata database enables many new registry features, including @@ -650,7 +650,7 @@ and using AWS S3 as your storage backend: ```shell /opt/gitlab/embedded/bin/registry database import --step-one /var/opt/gitlab/registry/config.yml - [0s] step one: import manifests + [0s] step one: import manifests [0s] step one: import manifests failed to import metadata: pre importing all repositories: AccessDenied: Access Denied ``` diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md index 7fbb05aefc9..d5a998f528c 100644 --- a/doc/administration/pages/index.md +++ b/doc/administration/pages/index.md @@ -121,8 +121,8 @@ IPv6 address. If you don't have IPv6, you can omit the `AAAA` record. #### DNS configuration for single-domain sites -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7. -> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7. +> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11. > - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4. @@ -212,8 +212,8 @@ For an overview, see [How to Enable GitLab Pages for GitLab CE and EE](https://y ### Single-domain sites -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7. -> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7. +> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11. > - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4. @@ -297,8 +297,8 @@ then run `gitlab-ctl reconfigure`. For more information, read ### Single-domain sites with TLS support -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 16.7. -> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/experiment-beta-support.md) in GitLab 16.11. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17584) as an [experiment](../../policy/development_stages_support.md) in GitLab 16.7. +> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148621) to [beta](../../policy/development_stages_support.md) in GitLab 16.11. > - [Changed](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/1111) implementation from NGINX to the GitLab Pages codebase in GitLab 17.2. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/483365) in GitLab 17.4. diff --git a/doc/administration/postgresql/multiple_databases.md b/doc/administration/postgresql/multiple_databases.md index b1ff4b086f9..3d54344792f 100644 --- a/doc/administration/postgresql/multiple_databases.md +++ b/doc/administration/postgresql/multiple_databases.md @@ -20,7 +20,7 @@ By default, GitLab uses a single application database, referred to as the `main` To scale GitLab, you can configure GitLab to use multiple application databases. -Due to [known issues](#known-issues), configuring GitLab with multiple databases is in limited [beta](../../policy/experiment-beta-support.md#beta). +Due to [known issues](#known-issues), configuring GitLab with multiple databases is in limited [beta](../../policy/development_stages_support.md#beta). After you have set up multiple databases, GitLab uses a second application database for [CI/CD features](../../ci/index.md), referred to as the `ci` database. We do not exclude hosting both databases on a single PostgreSQL instance. diff --git a/doc/administration/settings/import_and_export_settings.md b/doc/administration/settings/import_and_export_settings.md index 8830d1d127f..7f0dda60b21 100644 --- a/doc/administration/settings/import_and_export_settings.md +++ b/doc/administration/settings/import_and_export_settings.md @@ -48,7 +48,7 @@ WARNING: In GitLab 16.1 and earlier, you should **not** use direct transfer with [scheduled scan execution policies](../../user/application_security/policies/scan_execution_policies.md). If using direct transfer, first upgrade to GitLab 16.2 and ensure security policy bots are enabled in the projects you are enforcing. WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice. +This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice. This feature is not ready for production use. Migration of groups and projects by direct transfer is disabled by default. diff --git a/doc/administration/settings/rate_limit_on_organizations_api.md b/doc/administration/settings/rate_limit_on_organizations_api.md index 5531688378f..a8eda723a97 100644 --- a/doc/administration/settings/rate_limit_on_organizations_api.md +++ b/doc/administration/settings/rate_limit_on_organizations_api.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. diff --git a/doc/administration/silent_mode/index.md b/doc/administration/silent_mode/index.md index 2a405843bbb..8007a1ef2d3 100644 --- a/doc/administration/silent_mode/index.md +++ b/doc/administration/silent_mode/index.md @@ -10,9 +10,9 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** Self-managed -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9826) in GitLab 15.11. This feature was an [experiment](../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9826) in GitLab 15.11. This feature was an [experiment](../../policy/development_stages_support.md#experiment). > - Enabling and disabling Silent Mode through the web UI was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/131090) in GitLab 16.4. -> - Silent Mode was updated to [generally available (GA)](../../policy/experiment-beta-support.md#generally-available-ga) in GitLab 16.6. +> - Silent Mode was updated to [generally available (GA)](../../policy/development_stages_support.md#generally-available-ga) in GitLab 16.6. Silent Mode allows you to silence outbound communication, such as emails, from GitLab. Silent Mode is not intended to be used on environments which are in-use. Two use-cases are: diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md index a308c9b24ee..205bf983934 100644 --- a/doc/api/bulk_imports.md +++ b/doc/api/bulk_imports.md @@ -16,7 +16,7 @@ With the group migration by direct transfer API, you can start and view the prog [group migration by direct transfer](../user/group/import/index.md). WARNING: -Migrating projects with this API is in [beta](../policy/experiment-beta-support.md#beta). This feature is not +Migrating projects with this API is in [beta](../policy/development_stages_support.md#beta). This feature is not ready for production use. ## Prerequisites diff --git a/doc/api/dependencies.md b/doc/api/dependencies.md index e30a0608c6a..5a55672cb41 100644 --- a/doc/api/dependencies.md +++ b/doc/api/dependencies.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated WARNING: -This API is in an [experiment](../policy/experiment-beta-support.md#experiment) and considered unstable. +This API is in an [experiment](../policy/development_stages_support.md#experiment) and considered unstable. The response payload may be subject to change or breakage across GitLab releases. diff --git a/doc/api/google_cloud_integration.md b/doc/api/google_cloud_integration.md index 3c3d2026372..5fb216c081d 100644 --- a/doc/api/google_cloud_integration.md +++ b/doc/api/google_cloud_integration.md @@ -18,7 +18,7 @@ DETAILS: DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141870) in GitLab 16.10. This feature is an [experiment](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141870) in GitLab 16.10. This feature is an [experiment](../policy/development_stages_support.md). ### Workload identity federation creation script diff --git a/doc/api/graphql/epic_work_items_api_migration_guide.md b/doc/api/graphql/epic_work_items_api_migration_guide.md index 921512cdded..012f172d4aa 100644 --- a/doc/api/graphql/epic_work_items_api_migration_guide.md +++ b/doc/api/graphql/epic_work_items_api_migration_guide.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with several feature flags. Disabled by default. Your administrator must have [enabled the new look for epics](../../user/group/epics/epic_work_items.md#enable-and-disable-the-new-look-for-epics). This feature is an [experiment](../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with several feature flags. Disabled by default. Your administrator must have [enabled the new look for epics](../../user/group/epics/epic_work_items.md#enable-and-disable-the-new-look-for-epics). This feature is an [experiment](../../policy/development_stages_support.md#experiment). > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/470685) in GitLab 17.6. In GitLab 17.2, we introduced [epics as work items](../../user/group/epics/epic_work_items.md). diff --git a/doc/api/groups.md b/doc/api/groups.md index 16aa96b90c7..c60cf8637d0 100644 --- a/doc/api/groups.md +++ b/doc/api/groups.md @@ -789,13 +789,13 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/424505) in GitLab 16.6. This feature is an [experiment](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/424505) in GitLab 16.6. This feature is an [experiment](../policy/development_stages_support.md). Get a list of users for a group. This endpoint returns users that are related to a top-level group regardless of their current membership. For example, users that have a SAML identity connected to the group, or service accounts created by the group or subgroups. -This endpoint is an [experiment](../policy/experiment-beta-support.md) and might be changed or removed without notice. +This endpoint is an [experiment](../policy/development_stages_support.md) and might be changed or removed without notice. Requires Owner role for the group. diff --git a/doc/api/integrations.md b/doc/api/integrations.md index dda10ea9f8d..87ea3545223 100644 --- a/doc/api/integrations.md +++ b/doc/api/integrations.md @@ -1029,12 +1029,12 @@ DETAILS: **Offering:** GitLab.com **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425066) in GitLab 16.9 as a [beta](../policy/experiment-beta-support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425066) in GitLab 16.9 as a [beta](../policy/development_stages_support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed. > - `use_inherited_settings` parameter [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467089) in GitLab 17.2 [with a flag](../administration/feature_flags.md) named `integration_api_inheritance`. Disabled by default. > - `use_inherited_settings` parameter [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/467186) in GitLab 17.3. Feature flag `integration_api_inheritance` removed. -This feature is in [beta](../policy/experiment-beta-support.md). +This feature is in [beta](../policy/development_stages_support.md). ### Set up Google Artifact Management @@ -1076,12 +1076,12 @@ DETAILS: **Offering:** GitLab.com **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/439200) in GitLab 16.10 as a [beta](../policy/experiment-beta-support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/439200) in GitLab 16.10 as a [beta](../policy/development_stages_support.md) feature [with a flag](../administration/feature_flags.md) named `google_cloud_support_feature_flag`. Disabled by default. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed. > - `use_inherited_settings` parameter [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467089) in GitLab 17.2 [with a flag](../administration/feature_flags.md) named `integration_api_inheritance`. Disabled by default. > - `use_inherited_settings` parameter [generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/467186) in GitLab 17.3. Feature flag `integration_api_inheritance` removed. -This feature is in [beta](../policy/experiment-beta-support.md). +This feature is in [beta](../policy/development_stages_support.md). ### Set up Google Cloud Identity and Access Management diff --git a/doc/api/merge_request_approvals.md b/doc/api/merge_request_approvals.md index 8d774c91a4b..c4a6a90fdd0 100644 --- a/doc/api/merge_request_approvals.md +++ b/doc/api/merge_request_approvals.md @@ -22,14 +22,14 @@ in the project. All endpoints require authentication. DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/428051) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `approval_group_rules`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/428051) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `approval_group_rules`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md). FLAG: On self-managed GitLab, by default this feature is not available. To make it available, an administrator can [enable the feature flag](../administration/feature_flags.md) named `approval_group_rules`. On GitLab.com and GitLab Dedicated, this feature is not available. This feature is not ready for production use. -Group approval rules apply to all protected branches of projects belonging to the group. This feature is an [experiment](../policy/experiment-beta-support.md). +Group approval rules apply to all protected branches of projects belonging to the group. This feature is an [experiment](../policy/development_stages_support.md). ### Get group-level approval rules diff --git a/doc/api/organizations.md b/doc/api/organizations.md index 68629c38c32..fb33e64e189 100644 --- a/doc/api/organizations.md +++ b/doc/api/organizations.md @@ -13,7 +13,7 @@ DETAILS: ## Create organization -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../administration/feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/470613) in GitLab 17.5 with a [flag](../administration/feature_flags.md) named `allow_organization_creation`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. @@ -21,7 +21,7 @@ For more information, see the history. Creates a new organization. -This endpoint is an [experiment](../policy/experiment-beta-support.md) and might be changed or removed without notice. +This endpoint is an [experiment](../policy/development_stages_support.md) and might be changed or removed without notice. ```plaintext POST /organizations diff --git a/doc/api/project_import_export.md b/doc/api/project_import_export.md index 94bc02ff651..5de693768d7 100644 --- a/doc/api/project_import_export.md +++ b/doc/api/project_import_export.md @@ -269,7 +269,7 @@ The `Content-Type` header must be `application/gzip`. ## Import a single relation -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425798) in GitLab 16.11 in [beta](../policy/experiment-beta-support.md#beta)), [with a flag](../administration/feature_flags.md) named `single_relation_import`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/425798) in GitLab 16.11 in [beta](../policy/development_stages_support.md#beta)), [with a flag](../administration/feature_flags.md) named `single_relation_import`. Disabled by default. > - [Enabled on GitLab.com, self-managed and Dedicated](https://gitlab.com/gitlab-org/gitlab/-/issues/455889) in 17.1. This endpoint accepts a project export archive and a named relation (issues, diff --git a/doc/api/projects.md b/doc/api/projects.md index 38734c8a30c..4843e7889ba 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -2445,7 +2445,7 @@ DETAILS: **Offering:** GitLab.com **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/479210) in GitLab 17.6. This feature is an [experiment](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/479210) in GitLab 17.6. This feature is an [experiment](../policy/development_stages_support.md). Returns SAST scan results for a single file in real-time. diff --git a/doc/api/rest/index.md b/doc/api/rest/index.md index dfc59a805d9..673e8a6137d 100644 --- a/doc/api/rest/index.md +++ b/doc/api/rest/index.md @@ -459,5 +459,5 @@ The following are excluded from the deprecation process and can be removed at an notice: - Elements labeled in the [REST API resources](../api_resources.md) as - [experimental or beta](../../policy/experiment-beta-support.md). + [experimental or beta](../../policy/development_stages_support.md). - Fields behind a feature flag and disabled by default. diff --git a/doc/ci/components/index.md b/doc/ci/components/index.md index 5bd1f8298b5..bd05ce092d3 100644 --- a/doc/ci/components/index.md +++ b/doc/ci/components/index.md @@ -10,10 +10,10 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - Introduced as an [experimental feature](../../policy/experiment-beta-support.md#experiment) in GitLab 16.0, [with a flag](../../administration/feature_flags.md) named `ci_namespace_catalog_experimental`. Disabled by default. +> - Introduced as an [experimental feature](../../policy/development_stages_support.md#experiment) in GitLab 16.0, [with a flag](../../administration/feature_flags.md) named `ci_namespace_catalog_experimental`. Disabled by default. > - [Enabled on GitLab.com and self-managed](https://gitlab.com/groups/gitlab-org/-/epics/9897) in GitLab 16.2. > - [Feature flag `ci_namespace_catalog_experimental` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/394772) in GitLab 16.3. -> - [Moved](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/130824) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 16.6. +> - [Moved](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/130824) to [beta](../../policy/development_stages_support.md#beta) in GitLab 16.6. > - [Made generally available](https://gitlab.com/gitlab-com/www-gitlab-com/-/merge_requests/134062) in GitLab 17.0. A CI/CD component is a reusable single pipeline configuration unit. Use components @@ -544,8 +544,8 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/407249) as an [experiment](../../policy/experiment-beta-support.md#experiment) in GitLab 16.1. -> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/432045) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 16.7. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/407249) as an [experiment](../../policy/development_stages_support.md#experiment) in GitLab 16.1. +> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/432045) to [beta](../../policy/development_stages_support.md#beta) in GitLab 16.7. > - [Made Generally Available](https://gitlab.com/gitlab-org/gitlab/-/issues/454306) in GitLab 17.0. The CI/CD Catalog is a list of projects with published CI/CD components you can use diff --git a/doc/ci/environments/index.md b/doc/ci/environments/index.md index 2168d4c0458..8f888baee2a 100644 --- a/doc/ci/environments/index.md +++ b/doc/ci/environments/index.md @@ -498,6 +498,10 @@ stop_review_app: when: manual ``` +The [`environment:action`](../yaml/index.md#environmentaction) keyword can be used to reset the time +that an environment is scheduled to stop. For more information, see +[Access an environment for preparation or verification purposes](#access-an-environment-for-preparation-or-verification-purposes). + #### View an environment's scheduled stop date and time When a environment has been [scheduled to stop after a specified time period](#stop-an-environment-after-a-certain-time-period), @@ -520,7 +524,7 @@ To override an environment's expiration in the UI: 1. On the left sidebar, select **Search or go to** and find your project. 1. Select **Operate > Environments**. -1. Select the deployment name. +1. Select the environment name. 1. in the upper-right corner, select the thumbtack (**{thumbtack}**). To override an environment's expiration in the `.gitlab-ci.yml`: @@ -686,6 +690,8 @@ To delete an environment: ## Access an environment for preparation or verification purposes +> - [Updated](https://gitlab.com/gitlab-org/gitlab/-/issues/437133) to reset `auto_stop_in` for `prepare` and `access` actions in GitLab 17.7. + You can define a job that accesses an environment for various purposes, such as verification or preparation. This effectively bypasses deployment creation, so that you can adjust your CD workflow more accurately. @@ -705,6 +711,14 @@ build: This gives you access to environment-scoped variables, and can be used to protect builds from unauthorized access. Also, it's effective to avoid the [prevent outdated deployment jobs](deployment_safety.md#prevent-outdated-deployment-jobs) feature. +If an environment is configured to stop after a certain time period, jobs with the `access` or `prepare` +action will reset the scheduled stop time. The [`environment:auto_stop_in`](../yaml/index.md#environmentauto_stop_in) +from the most recent successful deployment job to the environment is used when resetting the scheduled time. +For example, if the most recent deployment used `auto_stop_in: 1 week` and is later accessed by a job with +`action: access`, the environment will be rescheduled to stop one week from the completion of the accessing job. + +To access an environment without changing the scheduled stop time, use the `verify` action. + ## Environment incident management Production environments can go down unexpectedly, including for reasons outside diff --git a/doc/ci/environments/kubernetes_dashboard.md b/doc/ci/environments/kubernetes_dashboard.md index f8f1d2cfc85..f40b4f194bb 100644 --- a/doc/ci/environments/kubernetes_dashboard.md +++ b/doc/ci/environments/kubernetes_dashboard.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../policy/experiment-beta-support.md#beta). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../policy/development_stages_support.md#beta). > - Feature flag `environment_settings_to_graphql` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124177) in GitLab 16.2. > - Feature flags `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125835) in GitLab 16.2. > - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/431746) to the environment details page in 16.10. diff --git a/doc/ci/migration/circleci.md b/doc/ci/migration/circleci.md index 9a3bbe40776..af607216239 100644 --- a/doc/ci/migration/circleci.md +++ b/doc/ci/migration/circleci.md @@ -288,8 +288,8 @@ Self-managed runners: GitLab.com instance runners: - Linux -- [Windows](../runners/hosted_runners/windows.md) ([beta](../../policy/experiment-beta-support.md#beta)). -- [macOS](../runners/hosted_runners/macos.md) ([beta](../../policy/experiment-beta-support.md#beta)). +- [Windows](../runners/hosted_runners/windows.md) ([beta](../../policy/development_stages_support.md#beta)). +- [macOS](../runners/hosted_runners/macos.md) ([beta](../../policy/development_stages_support.md#beta)). ### Machine and specific build environments diff --git a/doc/ci/pipelines/merge_trains.md b/doc/ci/pipelines/merge_trains.md index 664e5fbcb22..1d20bbaa12d 100644 --- a/doc/ci/pipelines/merge_trains.md +++ b/doc/ci/pipelines/merge_trains.md @@ -220,7 +220,7 @@ DETAILS: **Status:** Experiment > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/414505) in GitLab 16.5 [with a flag](../../administration/feature_flags.md) named `merge_trains_skip_train`. Disabled by default. -> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/422111) as an [experiment feature](../../policy/experiment-beta-support.md) in GitLab 16.10. +> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/422111) as an [experiment feature](../../policy/development_stages_support.md) in GitLab 16.10. FLAG: On self-managed GitLab, by default this feature is available. To hide the feature, diff --git a/doc/ci/runners/hosted_runners/macos.md b/doc/ci/runners/hosted_runners/macos.md index e5cb2eab18e..6339460610e 100644 --- a/doc/ci/runners/hosted_runners/macos.md +++ b/doc/ci/runners/hosted_runners/macos.md @@ -15,8 +15,8 @@ Hosted runners on macOS provide an on-demand macOS environment, fully integrated You can use these runners to build, test, and deploy apps for the Apple ecosystem (macOS, iOS, watchOS, tvOS). Our [Mobile DevOps section](../../../ci/jobs/mobile_devops.md#ios-build-environments) provides features, documentation, and guidance on building and deploying mobile applications for iOS. -Hosted runners on macOS are in [beta](../../../policy/experiment-beta-support.md#beta) and available for open source programs and customers in Premium and Ultimate plans. -[General availability](../../../policy/experiment-beta-support.md#generally-available-ga) of Hosted runners on macOS is proposed in [epic 8267](https://gitlab.com/groups/gitlab-org/-/epics/8267). +Hosted runners on macOS are in [beta](../../../policy/development_stages_support.md#beta) and available for open source programs and customers in Premium and Ultimate plans. +[General availability](../../../policy/development_stages_support.md#generally-available-ga) of Hosted runners on macOS is proposed in [epic 8267](https://gitlab.com/groups/gitlab-org/-/epics/8267). ## Machine types available for macOS diff --git a/doc/ci/runners/hosted_runners/windows.md b/doc/ci/runners/hosted_runners/windows.md index e5f4c0e0135..1a68b637f29 100644 --- a/doc/ci/runners/hosted_runners/windows.md +++ b/doc/ci/runners/hosted_runners/windows.md @@ -15,10 +15,10 @@ Hosted runners on Windows autoscale by launching virtual machines on the Google Cloud Platform. This solution uses an [autoscaling driver](https://gitlab.com/gitlab-org/ci-cd/custom-executor-drivers/autoscaler/-/blob/main/docs/README.md) developed by GitLab for the [custom executor](https://docs.gitlab.com/runner/executors/custom.html). -Hosted runners on Windows are in [beta](../../../policy/experiment-beta-support.md#beta). +Hosted runners on Windows are in [beta](../../../policy/development_stages_support.md#beta). We want to keep iterating to get Windows runners in a stable state and -[generally available](../../../policy/experiment-beta-support.md#generally-available-ga). +[generally available](../../../policy/development_stages_support.md#generally-available-ga). You can follow our work towards this goal in the [related epic](https://gitlab.com/groups/gitlab-org/-/epics/2162). @@ -79,7 +79,7 @@ test: ## Known issues -- For more information about support for beta features, see [beta](../../../policy/experiment-beta-support.md#beta). +- For more information about support for beta features, see [beta](../../../policy/development_stages_support.md#beta). - The average provisioning time for a new Windows virtual machine (VM) is five minutes, so you might notice slower start times for builds on the Windows runner fleet during the beta. Updating the autoscaler to enable the pre-provisioning diff --git a/doc/ci/runners/index.md b/doc/ci/runners/index.md index 5a5f71a94cd..2a7d6b2bf48 100644 --- a/doc/ci/runners/index.md +++ b/doc/ci/runners/index.md @@ -23,8 +23,8 @@ Your jobs can run on: - [Hosted runners on Linux](hosted_runners/linux.md) - [GPU-enabled hosted runners](hosted_runners/gpu_enabled.md) -- [Hosted runners on Windows](hosted_runners/windows.md) ([beta](../../policy/experiment-beta-support.md#beta)) -- [Hosted runners on macOS](hosted_runners/macos.md) ([beta](../../policy/experiment-beta-support.md#beta)) +- [Hosted runners on Windows](hosted_runners/windows.md) ([beta](../../policy/development_stages_support.md#beta)) +- [Hosted runners on macOS](hosted_runners/macos.md) ([beta](../../policy/development_stages_support.md#beta)) ### How hosted runners for GitLab.com work diff --git a/doc/ci/runners/provision_runners_google_cloud.md b/doc/ci/runners/provision_runners_google_cloud.md index 6ac1d17f8d3..3f12fe4c902 100644 --- a/doc/ci/runners/provision_runners_google_cloud.md +++ b/doc/ci/runners/provision_runners_google_cloud.md @@ -12,7 +12,7 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438316) in GitLab 16.10 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438316) in GitLab 16.10 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/development_stages_support.md). > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed. ## Creating a runner provisioned in Google Cloud diff --git a/doc/ci/runners/runner_fleet_dashboard.md b/doc/ci/runners/runner_fleet_dashboard.md index f2a9168e515..5dbdaf38046 100644 --- a/doc/ci/runners/runner_fleet_dashboard.md +++ b/doc/ci/runners/runner_fleet_dashboard.md @@ -64,12 +64,12 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11180) as an [experiment](../../policy/experiment-beta-support.md#experiment) in GitLab 16.7 with [flags](../../administration/feature_flags.md) named `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics`. Disabled by default. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11180) as an [experiment](../../policy/development_stages_support.md#experiment) in GitLab 16.7 with [flags](../../administration/feature_flags.md) named `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics`. Disabled by default. > - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/424866) in GitLab 16.10. Feature flags `ci_data_ingestion_to_click_house` and `clickhouse_ci_analytics` removed. -> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/424789) to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.1. +> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/424789) to [beta](../../policy/development_stages_support.md#beta) in GitLab 17.1. WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice. +This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice. For more information, see [epic 11180](https://gitlab.com/groups/gitlab-org/-/epics/11180). To enable additional CI analytics features, [configure the ClickHouse integration](../../integration/clickhouse.md). diff --git a/doc/ci/runners/runner_fleet_dashboard_groups.md b/doc/ci/runners/runner_fleet_dashboard_groups.md index 04461a65b97..33523299b59 100644 --- a/doc/ci/runners/runner_fleet_dashboard_groups.md +++ b/doc/ci/runners/runner_fleet_dashboard_groups.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151640) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `runners_dashboard_for_groups`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151640) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with a flag](../../administration/feature_flags.md) named `runners_dashboard_for_groups`. Disabled by default. > - Feature flag `runners_dashboard_for_groups` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/459052) in GitLab 17.2. Users with at least the Maintainer role for a group can use the runner fleet dashboard to assess the health of group runners. diff --git a/doc/ci/secrets/akeyless.md b/doc/ci/secrets/akeyless.md index a5b28b7fe3e..13c88d56b54 100644 --- a/doc/ci/secrets/akeyless.md +++ b/doc/ci/secrets/akeyless.md @@ -13,7 +13,7 @@ DETAILS: > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/164040) in GitLab 17.4. FLAG: -This feature is an [experiment](../../policy/experiment-beta-support.md) +This feature is an [experiment](../../policy/development_stages_support.md) and not intended for production use. There is no support available for this feature and it is subject to removal at any time in accordance to GitLab policy. diff --git a/doc/ci/testing/code_quality.md b/doc/ci/testing/code_quality.md index 67783bd7bc6..5593d3b9744 100644 --- a/doc/ci/testing/code_quality.md +++ b/doc/ci/testing/code_quality.md @@ -127,7 +127,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72724) in GitLab 14.5 [with a flag](../../administration/feature_flags.md) named `project_quality_summary_page`. This feature is in [beta](../../policy/experiment-beta-support.md). Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/72724) in GitLab 14.5 [with a flag](../../administration/feature_flags.md) named `project_quality_summary_page`. This feature is in [beta](../../policy/development_stages_support.md). Disabled by default. The project quality view displays an overview of the code quality findings. The view can be found under **Analyze > CI/CD analytics**, and requires [`project_quality_summary_page`](../../user/feature_flags.md) feature flag to be enabled for this particular project. diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md index 64d55ca693c..aab504b50b2 100644 --- a/doc/ci/yaml/index.md +++ b/doc/ci/yaml/index.md @@ -2315,6 +2315,7 @@ stop_review_app: #### `environment:auto_stop_in` > - CI/CD variable support [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/365140) in GitLab 15.4. +> - [Updated](https://gitlab.com/gitlab-org/gitlab/-/issues/437133) to support `prepare`, `access` and `verify` environment actions in GitLab 17.7. The `auto_stop_in` keyword specifies the lifetime of the environment. When an environment expires, GitLab automatically stops it. @@ -2344,6 +2345,10 @@ review_app: When the environment for `review_app` is created, the environment's lifetime is set to `1 day`. Every time the review app is deployed, that lifetime is also reset to `1 day`. +The `auto_stop_in` keyword can be used for all [environment actions](#environmentaction) except `stop`. +Some actions can be used to reset the scheduled stop time for the environment. For more information, see +[Access an environment for preparation or verification purposes](../../ci/environments/index.md#access-an-environment-for-preparation-or-verification-purposes). + **Related topics**: - [Environments auto-stop documentation](../environments/index.md#stop-an-environment-after-a-certain-time-period). @@ -2557,10 +2562,10 @@ DETAILS: **Offering:** GitLab.com **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142054) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142054) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../policy/development_stages_support.md). > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed. -This feature is in [beta](../../policy/experiment-beta-support.md). +This feature is in [beta](../../policy/development_stages_support.md). Use `identity` to authenticate with third party services using identity federation. @@ -3471,7 +3476,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../policy/experiment-beta-support.md) [with a flag](../../user/feature_flags.md) named `pages_multiple_versions_setting`, disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../policy/development_stages_support.md) [with a flag](../../user/feature_flags.md) named `pages_multiple_versions_setting`, disabled by default. > - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/issues/422145) in GitLab 17.4. FLAG: diff --git a/doc/development/activitypub/actors/index.md b/doc/development/activitypub/actors/index.md index d7baee27a7b..78fbef349d8 100644 --- a/doc/development/activitypub/actors/index.md +++ b/doc/development/activitypub/actors/index.md @@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). FLAG: On self-managed GitLab, by default this feature is not available. To make it available, diff --git a/doc/development/activitypub/actors/releases.md b/doc/development/activitypub/actors/releases.md index bad81c7d274..bc996fc7af2 100644 --- a/doc/development/activitypub/actors/releases.md +++ b/doc/development/activitypub/actors/releases.md @@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). FLAG: On self-managed GitLab, by default this feature is not available. To make it available, diff --git a/doc/development/activitypub/index.md b/doc/development/activitypub/index.md index d5cfc603d28..62d0bac2f32 100644 --- a/doc/development/activitypub/index.md +++ b/doc/development/activitypub/index.md @@ -9,7 +9,7 @@ info: "To determine the technical writer assigned to the Stage/Group associated DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127023) in GitLab 16.5 [with two flags](../../administration/feature_flags.md) named `activity_pub` and `activity_pub_project`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md). FLAG: On self-managed GitLab, by default this feature is not available. To make it available, diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md index 7b2a5b5eb75..533b210de51 100644 --- a/doc/development/api_graphql_styleguide.md +++ b/doc/development/api_graphql_styleguide.md @@ -906,7 +906,7 @@ The documentation mentions that the old Global ID style is now deprecated. ## Mark schema items as experiments You can mark GraphQL schema items (fields, arguments, enum values, and mutations) as -[experiments](../policy/experiment-beta-support.md#experiment). +[experiments](../policy/development_stages_support.md#experiment). An item marked as an experiment is [exempt from the deprecation process](../api/graphql/index.md#breaking-change-exemptions) and can be diff --git a/doc/development/api_styleguide.md b/doc/development/api_styleguide.md index fb640e3d69e..5edae0447d3 100644 --- a/doc/development/api_styleguide.md +++ b/doc/development/api_styleguide.md @@ -130,13 +130,13 @@ Some examples of non-breaking changes: ## Experimental, beta, and generally available features -You can add API elements as [experimental and beta features](../policy/experiment-beta-support.md). They must be additive changes, otherwise they are categorized as +You can add API elements as [experimental and beta features](../policy/development_stages_support.md). They must be additive changes, otherwise they are categorized as [a breaking change](#what-is-not-a-breaking-change). API elements marked as experiment or beta are exempt from the [ensuring backward compatibility](#accommodating-backward-compatibility-instead-of-breaking-changes) policy, and can be changed or removed at any time without prior notice. -While in the [experiment status](../policy/experiment-beta-support.md#experiment): +While in the [experiment status](../policy/development_stages_support.md#experiment): - Use a feature flag that is [off by default](feature_flags/index.md#beta-type). - When the flag is off: @@ -146,13 +146,13 @@ While in the [experiment status](../policy/experiment-beta-support.md#experiment - The [API documentation](../api/api_resources.md) must [document the experimental status](documentation/experiment_beta.md) and the feature flag [must be documented](documentation/feature_flags.md). - The [OpenAPI documentation](../api/openapi/openapi_interactive.md) must not describe the changes (for example, using [the `hidden` option](https://github.com/ruby-grape/grape-swagger#hiding-an-endpoint-)). -While in the [beta status](../policy/experiment-beta-support.md#beta): +While in the [beta status](../policy/development_stages_support.md#beta): - Use a feature flag that is [on by default](feature_flags/index.md#beta-type). - The [API documentation](../api/api_resources.md) must [document the beta status](documentation/experiment_beta.md) and the feature flag [must be documented](documentation/feature_flags.md). - The [OpenAPI documentation](../api/openapi/openapi_interactive.md) must not describe the changes. -When the feature becomes [generally available](../policy/experiment-beta-support.md#generally-available-ga): +When the feature becomes [generally available](../policy/development_stages_support.md#generally-available-ga): - [Remove](feature_flags/controls.md#cleaning-up) the feature flag. - Remove the [experiment or beta status](documentation/experiment_beta.md) from the [API documentation](../api/api_resources.md). diff --git a/doc/development/contributing/design.md b/doc/development/contributing/design.md index 4c3e15132c7..0922a7e3f48 100644 --- a/doc/development/contributing/design.md +++ b/doc/development/contributing/design.md @@ -74,7 +74,7 @@ Check visual design properties using your browser's elements inspector ([Chrome] ### Dark Mode -You're not required to design for dark mode while the feature is an [experiment](../../policy/experiment-beta-support.md#experiment). The [Design System team](https://about.gitlab.com/direction/foundations/design_system/) plans to improve the dark mode in the future. Until we integrate [Pajamas](https://design.gitlab.com/) components into the product and the underlying design strategy is in place to support dark mode, we cannot guarantee that we won't introduce bugs and debt to this mode. At your discretion, evaluate the need to create dark mode patches. +You're not required to design for dark mode while the feature is an [experiment](../../policy/development_stages_support.md#experiment). The [Design System team](https://about.gitlab.com/direction/foundations/design_system/) plans to improve the dark mode in the future. Until we integrate [Pajamas](https://design.gitlab.com/) components into the product and the underlying design strategy is in place to support dark mode, we cannot guarantee that we won't introduce bugs and debt to this mode. At your discretion, evaluate the need to create dark mode patches. ### States diff --git a/doc/development/documentation/experiment_beta.md b/doc/development/documentation/experiment_beta.md index b1797538e45..cef8e3238a3 100644 --- a/doc/development/documentation/experiment_beta.md +++ b/doc/development/documentation/experiment_beta.md @@ -6,7 +6,7 @@ group: unassigned # Documenting experimental and beta features -When you document an [experiment or beta](../../policy/experiment-beta-support.md) feature: +When you document an [experiment or beta](../../policy/development_stages_support.md) feature: - Include the status in the [product availability details](styleguide/availability_details.md#status). - Include [feature flag details](feature_flags.md) if behind a feature flag. @@ -33,7 +33,7 @@ For example: DETAILS: **Status:** Experiment -> - [Introduced](https://issue-link) in GitLab 15.10. This feature is an [experiment](/policy/experiment-beta-support.md). +> - [Introduced](https://issue-link) in GitLab 15.10. This feature is an [experiment](/policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. @@ -42,7 +42,7 @@ This feature is available for testing, but not ready for production use. Use this new feature when you need to do this new thing. -This feature is an [experiment](/policy/experiment-beta-support.md). To join +This feature is an [experiment](/policy/development_stages_support.md). To join the list of users testing this feature, do this thing. If you find a bug, [open an issue](https://link). ``` diff --git a/doc/development/documentation/feature_flags.md b/doc/development/documentation/feature_flags.md index ae20dafb068..c5ad28645d8 100644 --- a/doc/development/documentation/feature_flags.md +++ b/doc/development/documentation/feature_flags.md @@ -17,7 +17,7 @@ When the state of a feature flag changes, the developer who made the change Every feature introduced to the codebase, even if it's behind a disabled flag, must be documented. For more information, see -[the discussion that led to this decision](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428). [Experiment and beta](../../policy/experiment-beta-support.md) features are usually behind a flag and must also be documented. For more information, see [Document experiment or beta features](experiment_beta.md). +[the discussion that led to this decision](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428). [Experiment and beta](../../policy/development_stages_support.md) features are usually behind a flag and must also be documented. For more information, see [Document experiment or beta features](experiment_beta.md). When the feature is [implemented in multiple merge requests](../feature_flags/index.md#feature-flags-in-gitlab-development), discuss the plan with your technical writer. diff --git a/doc/development/documentation/styleguide/availability_details.md b/doc/development/documentation/styleguide/availability_details.md index f918ee94554..b63ccdcbc62 100644 --- a/doc/development/documentation/styleguide/availability_details.md +++ b/doc/development/documentation/styleguide/availability_details.md @@ -128,7 +128,7 @@ For features that move to another subscription tier, use `moved`: For a feature status change from experiment to beta, use `changed`: ```markdown -> - [Introduced](https://issue-link) as an [experiment](../../policy/experiment-beta-support.md) in GitLab 15.7. +> - [Introduced](https://issue-link) as an [experiment](../../policy/development_stages_support.md) in GitLab 15.7. > - [Changed](https://issue-link) to beta in GitLab 16.0. ``` diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md index 0ac2d630c0e..261278f46ad 100644 --- a/doc/development/documentation/styleguide/word_list.md +++ b/doc/development/documentation/styleguide/word_list.md @@ -336,7 +336,7 @@ Use lowercase for **beta**. For example: - This is a beta feature. - This beta release is ready to test. -You might also want to link to [this topic](../../../policy/experiment-beta-support.md#beta) +You might also want to link to [this topic](../../../policy/development_stages_support.md#beta) when writing about beta features. ## blacklist @@ -921,7 +921,7 @@ Use lowercase for **experiment**. For example: If you must, you can use **experimental**. -You might also want to link to [this topic](../../../policy/experiment-beta-support.md#experiment) +You might also want to link to [this topic](../../../policy/development_stages_support.md#experiment) when writing about experimental features. ## export diff --git a/doc/development/fe_guide/customizable_dashboards.md b/doc/development/fe_guide/customizable_dashboards.md index ad84ad6fcbc..7121084b504 100644 --- a/doc/development/fe_guide/customizable_dashboards.md +++ b/doc/development/fe_guide/customizable_dashboards.md @@ -6,7 +6,7 @@ info: Any user with at least the Maintainer role can merge updates to this conte # Customizable dashboards -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98610) in GitLab 15.5 as an [experiment](../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/98610) in GitLab 15.5 as an [experiment](../../policy/development_stages_support.md#experiment). Customizable dashboards provide a configuation-based [dashboard](https://design.gitlab.com/patterns/dashboards) structure, which is used to render and modify dashboard configurations created by GitLab or users. diff --git a/doc/development/feature_flags/index.md b/doc/development/feature_flags/index.md index f19ad3dbe13..ca27e6d855d 100644 --- a/doc/development/feature_flags/index.md +++ b/doc/development/feature_flags/index.md @@ -180,7 +180,7 @@ push_frontend_feature_flag(:my_wip_flag, project) ### `beta` type -We might [not be confident we'll be able to scale, support, and maintain a feature](../../policy/experiment-beta-support.md) in its current form for every designed use case ([example](https://gitlab.com/gitlab-org/gitlab/-/issues/336070#note_1523983444)). +We might [not be confident we'll be able to scale, support, and maintain a feature](../../policy/development_stages_support.md) in its current form for every designed use case ([example](https://gitlab.com/gitlab-org/gitlab/-/issues/336070#note_1523983444)). There are also scenarios where a feature is not complete enough to be considered an MVC. Providing a flag in this case allows engineers and customers to disable the new feature until it's performant enough. diff --git a/doc/development/i18n/translation.md b/doc/development/i18n/translation.md index 123e6f0fc5e..32496c2e877 100644 --- a/doc/development/i18n/translation.md +++ b/doc/development/i18n/translation.md @@ -48,7 +48,7 @@ DETAILS: **Status:** Beta WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta). +This feature is in [beta](../../policy/development_stages_support.md#beta). You might get a string similar to the one you want to translate, so be sure to select the correct string and line of code. If you cannot find a string with code search, post a comment in Crowdin with that string. diff --git a/doc/integration/clickhouse.md b/doc/integration/clickhouse.md index eee7e6334c5..a77402984a7 100644 --- a/doc/integration/clickhouse.md +++ b/doc/integration/clickhouse.md @@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w DETAILS: **Status:** Experiment -This feature is an [experiment](../policy/experiment-beta-support.md). +This feature is an [experiment](../policy/development_stages_support.md). Instructions about how to set up integration between GitLab and ClickHouse database. diff --git a/doc/integration/exact_code_search/zoekt.md b/doc/integration/exact_code_search/zoekt.md index daaa23f46f8..7b1081354fe 100644 --- a/doc/integration/exact_code_search/zoekt.md +++ b/doc/integration/exact_code_search/zoekt.md @@ -11,12 +11,12 @@ DETAILS: **Offering:** Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/388519) in GitLab 16.6. > - Feature flags `index_code_with_zoekt` and `search_code_with_zoekt` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148378) in GitLab 17.1. WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice. +This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice. For more information, see [epic 9404](https://gitlab.com/groups/gitlab-org/-/epics/9404). Zoekt is an open-source search engine designed specifically to search for code. diff --git a/doc/operations/incident_management/slack.md b/doc/operations/incident_management/slack.md index 40dcd743a86..e483a44ba85 100644 --- a/doc/operations/incident_management/slack.md +++ b/doc/operations/incident_management/slack.md @@ -12,7 +12,7 @@ DETAILS: **Status:** Beta > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/344856) in GitLab 15.7 [with a flag](../../administration/feature_flags.md) named `incident_declare_slash_command`. Disabled by default. -> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/378072) in GitLab 15.10 in [beta](../../policy/experiment-beta-support.md#beta). +> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/378072) in GitLab 15.10 in [beta](../../policy/development_stages_support.md#beta). FLAG: The availability of this feature is controlled by a feature flag. diff --git a/doc/operations/logs.md b/doc/operations/logs.md index 45ddd976594..15526fe99ef 100644 --- a/doc/operations/logs.md +++ b/doc/operations/logs.md @@ -14,7 +14,7 @@ DETAILS: NOTE: This feature is not under active development. -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143027) in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `observability_logs`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md#beta). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143027) in GitLab 16.10 [with a flag](../administration/feature_flags.md) named `observability_logs`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md#beta). > - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag (`observability_logs`) was removed. > - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3. > - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal Beta in GitLab 17.7. diff --git a/doc/operations/metrics.md b/doc/operations/metrics.md index 0240dc26f04..1c61bfa1d3e 100644 --- a/doc/operations/metrics.md +++ b/doc/operations/metrics.md @@ -14,7 +14,7 @@ DETAILS: NOTE: This feature is not under active development. -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `observability_metrics`. Disabled by default. This feature is an [experiment](../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.7 [with a flag](../administration/feature_flags.md) named `observability_metrics`. Disabled by default. This feature is an [experiment](../policy/development_stages_support.md#experiment). > - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag (`observability_metrics`) was removed. > - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3. > - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal beta in GitLab 17.7. diff --git a/doc/operations/product_analytics/index.md b/doc/operations/product_analytics/index.md index bc7a394e956..b86e2a5c7ad 100644 --- a/doc/operations/product_analytics/index.md +++ b/doc/operations/product_analytics/index.md @@ -11,14 +11,14 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - Introduced in GitLab 15.4 as an [experiment](../../policy/experiment-beta-support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `cube_api_proxy`. Disabled by default. +> - Introduced in GitLab 15.4 as an [experiment](../../policy/development_stages_support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `cube_api_proxy`. Disabled by default. > - `cube_api_proxy` changed to reference only the [product analytics API](../../api/product_analytics.md) in GitLab 15.6. > - `cube_api_proxy` removed and replaced with `product_analytics_internal_preview` in GitLab 15.10. > - `product_analytics_internal_preview` replaced with `product_analytics_dashboards` in GitLab 15.11. > - Snowplow integration [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/398253) in GitLab 15.11 [with a flag](../../administration/feature_flags.md) named `product_analytics_snowplow_support`. Disabled by default. > - Snowplow integration feature flag `product_analytics_snowplow_support` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/130228) in GitLab 16.4. > - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/414865) from GitLab self-managed to GitLab.com in 16.7. -> - Enabled in GitLab 16.7 as a [beta](../../policy/experiment-beta-support.md#beta) feature. +> - Enabled in GitLab 16.7 as a [beta](../../policy/development_stages_support.md#beta) feature. > - `product_analytics_dashboards` [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/398653) by default in GitLab 16.11. > - Feature flag `product_analytics_dashboards` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/454059) in GitLab 17.1. > - Funnels support removed in GitLab 17.4. diff --git a/doc/operations/tracing.md b/doc/operations/tracing.md index 1094a928ee0..657ee2c5793 100644 --- a/doc/operations/tracing.md +++ b/doc/operations/tracing.md @@ -14,7 +14,7 @@ DETAILS: NOTE: This feature is not under active development. -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `observability_tracing`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md#beta). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124966) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `observability_tracing`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md#beta). > - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158786) in GitLab 17.3 to the `observability_features` [feature flag](../administration/feature_flags.md), disabled by default. The previous feature flag `observability_tracing` was removed. > - [Introduced](https://gitlab.com/groups/gitlab-org/opstrace/-/epics/100) for self-managed in GitLab 17.3. > - [Changed](https://gitlab.com/gitlab-com/marketing/digital-experience/buyer-experience/-/issues/4198) to internal beta in GitLab 17.7. @@ -26,7 +26,7 @@ This feature is available for testing, but not ready for production use. With distributed tracing, you can troubleshoot application performance issues by inspecting how a request moves through different services and systems, the timing of each operation, and any errors or logs as they occur. Tracing is particularly useful in the context of microservice applications, which group multiple independent services collaborating to fulfill user requests. -This feature is in [beta](../policy/experiment-beta-support.md). For more information, see the [group direction page](https://about.gitlab.com/direction/monitor/observability/). To leave feedback about tracing bugs or functionality, comment in the [feedback issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/2590) or open a [new issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/new). +This feature is in [beta](../policy/development_stages_support.md). For more information, see the [group direction page](https://about.gitlab.com/direction/monitor/observability/). To leave feedback about tracing bugs or functionality, comment in the [feedback issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/2590) or open a [new issue](https://gitlab.com/gitlab-org/opstrace/opstrace/-/issues/new). ## Tracing ingestion limits diff --git a/doc/policy/development_stages_support.md b/doc/policy/development_stages_support.md new file mode 100644 index 00000000000..dd4beb5a6d4 --- /dev/null +++ b/doc/policy/development_stages_support.md @@ -0,0 +1,180 @@ +--- +stage: Systems +group: Distribution +description: Support details. +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 +--- + +# Support for features in different stages of development + +GitLab sometimes releases features at different development stages, such as experimental or beta. +Users can opt in and test the new experience. +Some reasons for these kinds of feature releases include: + +- Validating the edge-cases of scale, support, and maintenance burden of features in their current form for every designed use case. +- Features not complete enough to be considered an [MVC](https://handbook.gitlab.com/handbook/product/product-principles/#the-minimal-valuable-change-mvc), + but added to the codebase as part of the development process. + +Some features may not be aligned to these recommendations if they were developed before the recommendations were in place, +or if a team determined an alternative implementation approach was needed. + +All other features are considered to be publicly available. + +## Experiment + +Experimental features: + +- Are not ready for production use. +- Have [no support available](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features). + Issues regarding such features should be opened in the [GitLab issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues). +- Might be unstable. +- Could be removed at any time. +- Might have a risk of data loss. +- Might have no documentation, or information limited to just GitLab issues or a blog. +- Might not have a finalized user experience, and might only be accessible through quick actions or API requests. + +## Beta + +Beta features: + +- Might not be ready for production use. +- Are [supported on a commercially-reasonable effort basis](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features), + but with the expectation that issues require extra time and assistance from development to troubleshoot. +- Might be unstable. +- Have configuration and dependencies that are unlikely to change. +- Have features and functions that are unlikely to change. However, breaking changes can occur outside of major releases + or with less notice than for generally available features. +- Have a low risk of data loss. +- Have a user experience that is complete or near completion. +- Can be equivalent to partner "Public Preview" status. + +## Public availability + +Two types of public releases are available: + +- Limited availability (LA) +- Generally available (GA) + +Both types are production-ready, but have different scopes. + +### Limited availability (LA) + +Limited availability features: + +- Are ready for production use at a reduced scale. +- Might initially be free, then become paid when generally available. +- Might be offered at a discount before becoming generally available. +- Might have commercial terms that change for new contracts when generally available. +- Are [fully supported](https://about.gitlab.com/support/statement-of-support/) and documented. +- Have a complete user experience aligned with GitLab design standards. + +### Generally available (GA) + +Generally available features: + +- Are ready for production use at any scale. +- Are [fully supported](https://about.gitlab.com/support/statement-of-support/) and documented. +- Have a complete user experience aligned with GitLab design standards. + +## Production features + +All experimental, beta, and publicly available features are available on GitLab.com and are considered in production. + +## GitLab experiment and beta development guidelines + +Teams should release features as GA from the start unless there are strong reasons to release them as experimental or beta versions first. + +Product development teams should refrain from making changes that they reasonably believe +could create significant risks or friction for GitLab users or the platform, such as: + +- Risking damage or exfiltration of existing production data accessed by our users. +- Destabilizing other parts of the application. +- Introducing friction into high Monthly Active User (MAU) areas. + +### Experiment features + +In addition to the [experiment details](#experiment) for users, experiments should: + +- Offer a way to opt in with minimal friction. For example, needing to flip a feature flag is too much friction, + but a group or project setting in the UI is not. +- Link out to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/) in the opt-in. +- Have documentation that reflects that the feature is subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/). +- Have [UI that reflects the experiment status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions). +- Have a feedback issue to engage with internal and external users. +- Not be announced in a release post. +- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), + if needed. + +All experimental features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) +must [initiate Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process) +and complete the [experiment section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#experiment). + +### Beta features + +In addition to the [beta details](#beta) for users, beta features should: + +- Not be required or necessary for most features. +- Have documentation that reflects the beta status. +- Have [UI that reflects the beta status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions). +- Have a feedback issue to engage with internal and external users. +- Be behind a feature flag that is on by default. +- Be behind a toggle that is off by default. +- Be announced in a release post that reflects the beta status, if desired. +- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), + if needed. + +All beta features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) +must complete all sections up to and including the [beta section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#beta) +by following the [Production Readiness Review process](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process). + +### Publicly available features + +Publicly available features must: + +1. Meet the [review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review). +1. Complete the [Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/). +1. Complete all sections up to and including the [GA section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#general-availability). + +### Provide earlier access + +Our [mission is "everyone can contribute"](https://handbook.gitlab.com/handbook/company/mission/), +and that is only possible if people outside the company can try a feature. We get higher quality (more diverse) feedback +if people from different organizations try something, so give users the ability to opt in to experimental +features when there is enough value. + +Where possible, release an experimental feature externally instead of only testing internally +or waiting for the feature to be in a beta state. We've learned that keeping features internal-only +for extended periods of time slows us down unnecessarily. + +Experimental features are only shown when people/organizations opt in to experiments, +so we are allowed to make mistakes here and literally experiment. + +### Experiment and beta exit criteria + +To ensure the phases before general availability are as short as possible each phase of experiment, +beta, and limited availability should include exit criteria. This encourages rapid iteration and +reduces [cycle time](https://handbook.gitlab.com/handbook/values/#reduce-cycle-time). + +GitLab Product Managers must take the following into account when deciding what exit criteria +to apply to their experimental and beta features: + +- **Time**: Define an end date at which point the feature will be generally availabile. + - Consider setting a time-bound target metric that will define readiness for exit into GA. + For example, X number of customers retained MoM over 6 months after launch of experiment, + X% growth of free and paid users in three months since launch beta, or similar. + - Be mindful of balancing time to market, user experience, and richness of experience. + Some beta programs have lasted one milestone while others have lasted a couple of years. +- **Feedback**: Define the minimum number of customers that have been onboarded and interviewed. + - Consider also setting a time bound when using user feedback as an exit criteria for leaving a phase. + If a given time period elapses and we can not solicit feedback from enough users, + it is better to ship what we have and iterate on it as a GA at that point rather than maintain a pre-GA state. +- **Limited Feature Completion**: Determine if there is functionality that should be completed before moving to general availability. + - Be wary of including "just one more" feature. Iteration is easier and more effective with more feedback from more users, + so getting to general availability is preferred. +- **System Performance metrics**: Determine the criteria that the platform has shown before being ready for general availability. + Examples include response times and successfully handling a specific number of requests per second. +- **Success criteria**: Not all features may reach GA. It is OK to pivot if early feedback indicates that + a different direction would provide more value or a better user experience. If open questions must be answered + to decide if the feature is worth putting in the product, list and answer those. + +For the exit criteria of **AI features**, in addition to the above, see the [UX maturity requirements](https://handbook.gitlab.com/handbook/product/ai/ux-maturity/). diff --git a/doc/policy/early_access_program/index.md b/doc/policy/early_access_program/index.md index 58a3e4cbf35..2cd768384df 100644 --- a/doc/policy/early_access_program/index.md +++ b/doc/policy/early_access_program/index.md @@ -10,15 +10,15 @@ ignore_in_report: true NOTE: Last status update 2024-10-02. -These features may not be ready for production use and follow the [Experimental or Beta policy](../../policy/experiment-beta-support.md) of GitLab. +These features may not be ready for production use and follow the [Experimental or Beta policy](../../policy/development_stages_support.md) of GitLab. ## Features included in the GitLab Early Access Program | Name | Status | Included date | Provide feedback | |---------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------|---------------|------------------------------------------------------------------------| -| [GitLab Duo Vulnerability Resolution](../../user/application_security/vulnerabilities/index.md#vulnerability-resolution) | [Beta](../../policy/experiment-beta-support.md#beta) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/476553) | -| [GitLab Duo Issue Description Generation](../../user/project/issues/managing_issues.md#populate-an-issue-with-issue-description-generation) | [Experiment](../../policy/experiment-beta-support.md#experiment) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/409844) | -| [GitLab Duo Product Analytics](../../user/analytics/analytics_dashboards.md#generate-a-custom-visualization-with-gitlab-duo) | [Experiment](../../policy/experiment-beta-support.md#experiment) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/455363) | +| [GitLab Duo Vulnerability Resolution](../../user/application_security/vulnerabilities/index.md#vulnerability-resolution) | [Beta](../../policy/development_stages_support.md#beta) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/476553) | +| [GitLab Duo Issue Description Generation](../../user/project/issues/managing_issues.md#populate-an-issue-with-issue-description-generation) | [Experiment](../../policy/development_stages_support.md#experiment) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/409844) | +| [GitLab Duo Product Analytics](../../user/analytics/analytics_dashboards.md#generate-a-custom-visualization-with-gitlab-duo) | [Experiment](../../policy/development_stages_support.md#experiment) | 2024-10-02 | [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/455363) | Would you like to use a paid feature but don't have a subscription? You are more than welcome to [request a free trial](https://about.gitlab.com/free-trial/). diff --git a/doc/policy/experiment-beta-support.md b/doc/policy/experiment-beta-support.md index 602462e4f3c..6424b9239e4 100644 --- a/doc/policy/experiment-beta-support.md +++ b/doc/policy/experiment-beta-support.md @@ -1,179 +1,13 @@ --- -stage: Systems -group: Distribution -description: Support details. -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 +redirect_to: 'development_stages_support.md' +remove_date: '2025-02-27' --- -# Support for experiment, beta, and publicly available features + -GitLab sometimes releases features as experimental or beta, and users can opt in and test the new experience. -Some reasons for these kinds of feature releases include: +This document was moved to [another location](development_stages_support.md). -- Validating the edge-cases of scale, support, and maintenance burden of features in their current form for every designed use case. -- Features not complete enough to be considered an [MVC](https://handbook.gitlab.com/handbook/product/product-principles/#the-minimal-valuable-change-mvc), - but added to the codebase as part of the development process. - -Some features may not be aligned to these recommendations if they were developed before the recommendations were in place, -or if a team determined an alternative implementation approach was needed. - -All other features are considered to be publicly available. - -## Experiment - -Experimental features: - -- Are not ready for production use. -- Have [no support available](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features). - Issues regarding such features should be opened in the [GitLab issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues). -- Might be unstable. -- Could be removed at any time. -- Might have a risk of data loss. -- Might have no documentation, or information limited to just GitLab issues or a blog. -- Might not have a finalized user experience, and might only be accessible through quick actions or API requests. - -## Beta - -Beta features: - -- Might not be ready for production use. -- Are [supported on a commercially-reasonable effort basis](https://about.gitlab.com/support/statement-of-support/#experiment-beta-features), - but with the expectation that issues require extra time and assistance from development to troubleshoot. -- Might be unstable. -- Have configuration and dependencies that are unlikely to change. -- Have features and functions that are unlikely to change. However, breaking changes can occur outside of major releases - or with less notice than for generally available features. -- Have a low risk of data loss. -- Have a user experience that is complete or near completion. -- Can be equivalent to partner "Public Preview" status. - -## Public availability - -Two types of public releases are available: - -- Limited availability (LA) -- Generally available (GA) - -Both types are production-ready, but have different scopes. - -### Limited availability (LA) - -Limited availability features: - -- Are ready for production use at a reduced scale. -- Might initially be free, then become paid when generally available. -- Might be offered at a discount before becoming generally available. -- Might have commercial terms that change for new contracts when generally available. -- Are [fully supported](https://about.gitlab.com/support/statement-of-support/) and documented. -- Have a complete user experience aligned with GitLab design standards. - -### Generally available (GA) - -Generally available features: - -- Are ready for production use at any scale. -- Are [fully supported](https://about.gitlab.com/support/statement-of-support/) and documented. -- Have a complete user experience aligned with GitLab design standards. - -## Production features - -All experimental, beta, and publicly available features are available on GitLab.com and are considered in production. - -## GitLab experiment and beta development guidelines - -Teams should release features as GA from the start unless there are strong reasons to release them as experimental or beta versions first. - -Product development teams should refrain from making changes that they reasonably believe -could create significant risks or friction for GitLab users or the platform, such as: - -- Risking damage or exfiltration of existing production data accessed by our users. -- Destabilizing other parts of the application. -- Introducing friction into high Monthly Active User (MAU) areas. - -### Experiment features - -In addition to the [experiment details](#experiment) for users, experiments should: - -- Offer a way to opt in with minimal friction. For example, needing to flip a feature flag is too much friction, - but a group or project setting in the UI is not. -- Link out to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/) in the opt-in. -- Have documentation that reflects that the feature is subject to the [GitLab Testing Agreement](https://handbook.gitlab.com/handbook/legal/testing-agreement/). -- Have [UI that reflects the experiment status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions). -- Have a feedback issue to engage with internal and external users. -- Not be announced in a release post. -- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), - if needed. - -All experimental features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) -must [initiate Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process) -and complete the [experiment section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#experiment). - -### Beta features - -In addition to the [beta details](#beta) for users, beta features should: - -- Not be required or necessary for most features. -- Have documentation that reflects the beta status. -- Have [UI that reflects the beta status](https://design.gitlab.com/usability/feature-management#highlighting-feature-versions). -- Have a feedback issue to engage with internal and external users. -- Be behind a feature flag that is on by default. -- Be behind a toggle that is off by default. -- Be announced in a release post that reflects the beta status, if desired. -- Be promoted in the user interface through [discovery moments](https://design.gitlab.com/usability/feature-management#discovery-moments), - if needed. - -All beta features that [meet the review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review) -must complete all sections up to and including the [beta section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#beta) -by following the [Production Readiness Review process](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#process). - -### Publicly available features - -Publicly available features must: - -1. Meet the [review criteria](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/#criteria-for-starting-a-production-readiness-review). -1. Complete the [Production Readiness Review](https://handbook.gitlab.com/handbook/engineering/infrastructure/production/readiness/). -1. Complete all sections up to and including the [GA section in the readiness template](https://gitlab.com/gitlab-com/gl-infra/readiness/-/blob/master/.gitlab/issue_templates/production_readiness.md#general-availability). - -### Provide earlier access - -Our [mission is "everyone can contribute"](https://handbook.gitlab.com/handbook/company/mission/), -and that is only possible if people outside the company can try a feature. We get higher quality (more diverse) feedback -if people from different organizations try something, so give users the ability to opt in to experimental -features when there is enough value. - -Where possible, release an experimental feature externally instead of only testing internally -or waiting for the feature to be in a beta state. We've learned that keeping features internal-only -for extended periods of time slows us down unnecessarily. - -Experimental features are only shown when people/organizations opt in to experiments, -so we are allowed to make mistakes here and literally experiment. - -### Experiment and beta exit criteria - -To ensure the phases before general availability are as short as possible each phase of experiment, -beta, and limited availability should include exit criteria. This encourages rapid iteration and -reduces [cycle time](https://handbook.gitlab.com/handbook/values/#reduce-cycle-time). - -GitLab Product Managers must take the following into account when deciding what exit criteria -to apply to their experimental and beta features: - -- **Time**: Define an end date at which point the feature will be generally availabile. - - Consider setting a time-bound target metric that will define readiness for exit into GA. - For example, X number of customers retained MoM over 6 months after launch of experiment, - X% growth of free and paid users in three months since launch beta, or similar. - - Be mindful of balancing time to market, user experience, and richness of experience. - Some beta programs have lasted one milestone while others have lasted a couple of years. -- **Feedback**: Define the minimum number of customers that have been onboarded and interviewed. - - Consider also setting a time bound when using user feedback as an exit criteria for leaving a phase. - If a given time period elapses and we can not solicit feedback from enough users, - it is better to ship what we have and iterate on it as a GA at that point rather than maintain a pre-GA state. -- **Limited Feature Completion**: Determine if there is functionality that should be completed before moving to general availability. - - Be wary of including "just one more" feature. Iteration is easier and more effective with more feedback from more users, - so getting to general availability is preferred. -- **System Performance metrics**: Determine the criteria that the platform has shown before being ready for general availability. - Examples include response times and successfully handling a specific number of requests per second. -- **Success criteria**: Not all features may reach GA. It is OK to pivot if early feedback indicates that - a different direction would provide more value or a better user experience. If open questions must be answered - to decide if the feature is worth putting in the product, list and answer those. - -For the exit criteria of **AI features**, in addition to the above, see the [UX maturity requirements](https://handbook.gitlab.com/handbook/product/ai/ux-maturity/). + + + + diff --git a/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md b/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md index 388a98d9f2b..24491d9a31a 100644 --- a/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md +++ b/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md @@ -176,7 +176,7 @@ used the `v0.17.0` chart, add `AUTO_DEVOPS_FORCE_DEPLOY_V2`. ## Early adopters -If you want to use the latest [beta](../../policy/experiment-beta-support.md#beta) or unstable version of `auto-deploy-image`, include +If you want to use the latest [beta](../../policy/development_stages_support.md#beta) or unstable version of `auto-deploy-image`, include the latest Auto Deploy template into your `.gitlab-ci.yml`: ```yaml @@ -186,7 +186,7 @@ include: ``` WARNING: -Using a [beta](../../policy/experiment-beta-support.md#beta) or unstable `auto-deploy-image` could cause unrecoverable damage to +Using a [beta](../../policy/development_stages_support.md#beta) or unstable `auto-deploy-image` could cause unrecoverable damage to your environments. Do not test it with important projects or environments. ## Resource Architectures of the `auto-deploy-app` chart diff --git a/doc/user/analytics/analytics_dashboards.md b/doc/user/analytics/analytics_dashboards.md index b15e8d8792e..6476015876a 100644 --- a/doc/user/analytics/analytics_dashboards.md +++ b/doc/user/analytics/analytics_dashboards.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Ultimate **Offering:** Self-managed -> - Introduced in GitLab 15.9 as an [experiment](../../policy/experiment-beta-support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `combined_analytics_dashboards`. Disabled by default. +> - Introduced in GitLab 15.9 as an [experiment](../../policy/development_stages_support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `combined_analytics_dashboards`. Disabled by default. > - `combined_analytics_dashboards` [enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/389067) by default in GitLab 16.11. > - `combined_analytics_dashboards` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/454350) in GitLab 17.1. @@ -274,7 +274,7 @@ DETAILS: **Offering:** GitLab.com **Status:** Experiment -> - Introduced in GitLab 16.11 as an [experiment](../../policy/experiment-beta-support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `generate_cube_query`. Disabled by default. +> - Introduced in GitLab 16.11 as an [experiment](../../policy/development_stages_support.md#experiment) feature [with a flag](../../administration/feature_flags.md) named `generate_cube_query`. Disabled by default. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. Prerequisites: diff --git a/doc/user/analytics/dora_metrics.md b/doc/user/analytics/dora_metrics.md index 64da0d71e16..639415cb9b4 100644 --- a/doc/user/analytics/dora_metrics.md +++ b/doc/user/analytics/dora_metrics.md @@ -153,13 +153,13 @@ DETAILS: **Offering:** Self-managed **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96561) in GitLab 15.4 [with a flag](../../administration/feature_flags.md) named `dora_configuration`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96561) in GitLab 15.4 [with a flag](../../administration/feature_flags.md) named `dora_configuration`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md). FLAG: On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, an administrator can [enable the feature flag](../../administration/feature_flags.md) named `dora_configuration`. On GitLab.com and GitLab Dedicated, this feature is not available. -This feature is an [experiment](../../policy/experiment-beta-support.md). +This feature is an [experiment](../../policy/development_stages_support.md). To join the list of users testing this feature, [here is a suggested test flow](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96561#steps-to-check-on-localhost). If you find a bug, [open an issue here](https://gitlab.com/groups/gitlab-org/-/epics/11490). To share your use cases and feedback, comment in [epic 11490](https://gitlab.com/groups/gitlab-org/-/epics/11490). diff --git a/doc/user/analytics/value_streams_dashboard.md b/doc/user/analytics/value_streams_dashboard.md index 0e6b6e91424..5f4fa248324 100644 --- a/doc/user/analytics/value_streams_dashboard.md +++ b/doc/user/analytics/value_streams_dashboard.md @@ -10,8 +10,8 @@ DETAILS: **Tier:** Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - Introduced in GitLab 15.8 as a closed [beta](../../policy/experiment-beta-support.md#beta) feature [with a flag](../../administration/feature_flags.md) named `group_analytics_dashboards_page`. Disabled by default. -> - Released in GitLab 15.11 as an open [beta](../../policy/experiment-beta-support.md#beta) feature [with a flag](../../administration/feature_flags.md) named `group_analytics_dashboards_page`. Enabled by default. +> - Introduced in GitLab 15.8 as a closed [beta](../../policy/development_stages_support.md#beta) feature [with a flag](../../administration/feature_flags.md) named `group_analytics_dashboards_page`. Disabled by default. +> - Released in GitLab 15.11 as an open [beta](../../policy/development_stages_support.md#beta) feature [with a flag](../../administration/feature_flags.md) named `group_analytics_dashboards_page`. Enabled by default. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/392734) in GitLab 16.0. Feature flag `group_analytics_dashboards_page` removed. To help us improve the Value Streams Dashboard, share feedback about your experience in this [survey](https://gitlab.fra1.qualtrics.com/jfe/form/SV_50guMGNU2HhLeT4). diff --git a/doc/user/application_security/api_security/api_discovery/index.md b/doc/user/application_security/api_security/api_discovery/index.md index d55db4abace..41a6bf1f421 100644 --- a/doc/user/application_security/api_security/api_discovery/index.md +++ b/doc/user/application_security/api_security/api_discovery/index.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9302) in GitLab 15.9. The API Discovery feature is in [beta](../../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9302) in GitLab 15.9. The API Discovery feature is in [beta](../../../../policy/development_stages_support.md). API Discovery analyzes your application and produces an OpenAPI document describing the web APIs it exposes. This schema document can then be used by the [API security testing analyzer](../../api_security_testing/index.md) or [API Fuzzing](../../api_fuzzing/index.md) to perform security scans of the web API. diff --git a/doc/user/application_security/dependency_scanning/dependency_scanning_sbom/index.md b/doc/user/application_security/dependency_scanning/dependency_scanning_sbom/index.md index a5ea291d1bf..48b262f9009 100644 --- a/doc/user/application_security/dependency_scanning/dependency_scanning_sbom/index.md +++ b/doc/user/application_security/dependency_scanning/dependency_scanning_sbom/index.md @@ -12,7 +12,7 @@ DETAILS: **Status:** Experiment > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/395692) in GitLab 17.3 behind the feature flag `dependency_scanning_using_sbom_reports`. -> - Released [lockfile-based Dependency Scanning](https://gitlab.com/gitlab-org/security-products/analyzers/dependency-scanning/-/blob/main/README.md?ref_type=heads#supported-files) analyzer as an [Experiment](../../../../policy/experiment-beta-support.md#experiment-features) in GitLab 17.4. +> - Released [lockfile-based Dependency Scanning](https://gitlab.com/gitlab-org/security-products/analyzers/dependency-scanning/-/blob/main/README.md?ref_type=heads#supported-files) analyzer as an [Experiment](../../../../policy/development_stages_support.md#experiment-features) in GitLab 17.4. > - Released [Dependency Scanning CI/CD Component](https://gitlab.com/explore/catalog/components/dependency-scanning) version [`0.4.0`](https://gitlab.com/components/dependency-scanning/-/tags/0.4.0) in GitLab 17.5 with support for the [lockfile-based Dependency Scanning](https://gitlab.com/gitlab-org/security-products/analyzers/dependency-scanning/-/blob/main/README.md?ref_type=heads#supported-files) analyzer. FLAG: diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md index 935d72ea67e..db9f331b049 100644 --- a/doc/user/application_security/dependency_scanning/index.md +++ b/doc/user/application_security/dependency_scanning/index.md @@ -771,7 +771,7 @@ Pipelines now include a Dependency Scanning job. #### Use CI/CD components -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/454143) in GitLab 17.0. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/454143) in GitLab 17.0. This feature is an [experiment](../../../policy/development_stages_support.md). > - The dependency scanning CI/CD component only supports Android projects. Use [CI/CD components](../../../ci/components/index.md) to perform Dependency Scanning of your diff --git a/doc/user/application_security/sast/gitlab_advanced_sast.md b/doc/user/application_security/sast/gitlab_advanced_sast.md index 0c7dde50338..c0e29bacff6 100644 --- a/doc/user/application_security/sast/gitlab_advanced_sast.md +++ b/doc/user/application_security/sast/gitlab_advanced_sast.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - Introduced in GitLab 17.1 as an [experiment](../../../policy/experiment-beta-support.md) for Python. +> - Introduced in GitLab 17.1 as an [experiment](../../../policy/development_stages_support.md) for Python. > - Support for Go and Java added in 17.2. > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/461859) to beta in GitLab 17.2. > - Support for JavaScript, TypeScript and C# added in 17.3. diff --git a/doc/user/application_security/secret_detection/exclusions.md b/doc/user/application_security/secret_detection/exclusions.md index 9df50e4df35..a0a59365fed 100644 --- a/doc/user/application_security/secret_detection/exclusions.md +++ b/doc/user/application_security/secret_detection/exclusions.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14878) as an [experiment](../../../policy/experiment-beta-support.md) in GitLab 17.5 [with a flag](../../feature_flags.md) named `secret_detection_project_level_exclusions`. Enabled by default. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14878) as an [experiment](../../../policy/development_stages_support.md) in GitLab 17.5 [with a flag](../../feature_flags.md) named `secret_detection_project_level_exclusions`. Enabled by default. > - `secret_detection_project_level_exclusions` feature flag [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/499059) in GitLab 17.7. Secret detection may detect something that's not actually a secret. For example, if you use diff --git a/doc/user/application_security/secret_detection/secret_push_protection/index.md b/doc/user/application_security/secret_detection/secret_push_protection/index.md index 0c80f06f6ad..4eb7fbf2d0e 100644 --- a/doc/user/application_security/secret_detection/secret_push_protection/index.md +++ b/doc/user/application_security/secret_detection/secret_push_protection/index.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11439) in GitLab 16.7 as an [experiment](../../../../policy/experiment-beta-support.md) for GitLab Dedicated customers. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11439) in GitLab 16.7 as an [experiment](../../../../policy/development_stages_support.md) for GitLab Dedicated customers. > - [Changed](https://gitlab.com/groups/gitlab-org/-/epics/12729) to Beta and made available on GitLab.com in GitLab 17.1. > - [Enabled on self-managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156907) in GitLab 17.2 [with flags](../../../../administration/feature_flags.md) named `pre_receive_secret_detection_beta_release` and `pre_receive_secret_detection_push_check`. > - `pre_receive_secret_detection_beta_release` feature flag [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/472418) in GitLab 17.4. diff --git a/doc/user/application_security/vulnerabilities/index.md b/doc/user/application_security/vulnerabilities/index.md index aebced64169..ab7399bd2ec 100644 --- a/doc/user/application_security/vulnerabilities/index.md +++ b/doc/user/application_security/vulnerabilities/index.md @@ -35,8 +35,8 @@ DETAILS: **Tier:** Ultimate with GitLab Duo Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10368) in GitLab 16.0 as an [experiment](../../../policy/experiment-beta-support.md#experiment) on GitLab.com. -> - Promoted to [beta](../../../policy/experiment-beta-support.md#beta) status in GitLab 16.2. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10368) in GitLab 16.0 as an [experiment](../../../policy/development_stages_support.md#experiment) on GitLab.com. +> - Promoted to [beta](../../../policy/development_stages_support.md#beta) status in GitLab 16.2. > - [Generally available](https://gitlab.com/groups/gitlab-org/-/epics/10642) in GitLab 17.2. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. @@ -95,7 +95,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10779) in GitLab 16.7 as an [experiment](../../../policy/experiment-beta-support.md#experiment) on GitLab.com. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10779) in GitLab 16.7 as an [experiment](../../../policy/development_stages_support.md#experiment) on GitLab.com. > - Changed to beta in GitLab 17.3. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. @@ -226,7 +226,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10779) in GitLab 17.6. This is a [beta](../../../policy/experiment-beta-support.md#beta) feature. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10779) in GitLab 17.6. This is a [beta](../../../policy/development_stages_support.md#beta) feature. Use GitLab Duo Vulnerability resolution to automatically create a merge request suggestion comment that resolves the vulnerability finding. By default, it is powered by the Anthropic [`claude-3.5-sonnet`](https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-sonnet) model. diff --git a/doc/user/application_security/vulnerability_report/pipeline.md b/doc/user/application_security/vulnerability_report/pipeline.md index 4daa37e2a3a..143e3b4bef3 100644 --- a/doc/user/application_security/vulnerability_report/pipeline.md +++ b/doc/user/application_security/vulnerability_report/pipeline.md @@ -159,11 +159,11 @@ appear in a report. - Example 1: matching identifiers and location, mismatching scan type. - Finding - - Scan type: `sast` + - Scan type: `dependency_scanning` - Location fingerprint: `adc83b19e793491b1c6ea0fd8b46cd9f32e592fc` - Identifiers: CVE-2022-25510 - Other Finding - - Scan type: `secret_detection` + - Scan type: `container_scanning` - Location fingerprint: `adc83b19e793491b1c6ea0fd8b46cd9f32e592fc` - Identifiers: CVE-2022-25510 - Deduplication result: not duplicates because the scan type is different. diff --git a/doc/user/clusters/agent/user_access.md b/doc/user/clusters/agent/user_access.md index 2f8d1dbd2f7..76a841eda36 100644 --- a/doc/user/clusters/agent/user_access.md +++ b/doc/user/clusters/agent/user_access.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../../policy/experiment-beta-support.md#beta). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/390769) in GitLab 16.1, with [flags](../../../administration/feature_flags.md) named `environment_settings_to_graphql`, `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents`. This feature is in [beta](../../../policy/development_stages_support.md#beta). > - Feature flag `environment_settings_to_graphql` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/124177) in GitLab 16.2. > - Feature flags `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125835) in GitLab 16.2. > - The [limit of agent connection sharing was raised](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/149844) from 100 to 500 in GitLab 17.0 diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md index a92e65cee68..e4d8b6caf2a 100644 --- a/doc/user/discussions/index.md +++ b/doc/user/discussions/index.md @@ -322,8 +322,8 @@ DETAILS: **Tier:** Ultimate with GitLab Duo Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10344) in GitLab 16.0 as an [experiment](../../policy/experiment-beta-support.md#experiment). -> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/454550) to GitLab Duo and promoted to [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.3 [with a flag](../../administration/feature_flags.md) named `summarize_notes_with_duo`. Disabled by default. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10344) in GitLab 16.0 as an [experiment](../../policy/development_stages_support.md#experiment). +> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/454550) to GitLab Duo and promoted to [beta](../../policy/development_stages_support.md#beta) in GitLab 17.3 [with a flag](../../administration/feature_flags.md) named `summarize_notes_with_duo`. Disabled by default. > - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162122) in GitLab 17.4. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. diff --git a/doc/user/duo_workflow/index.md b/doc/user/duo_workflow/index.md index 369934291ed..931c94834cf 100644 --- a/doc/user/duo_workflow/index.md +++ b/doc/user/duo_workflow/index.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14153) in GitLab 17.4 [with a flag](../../administration/feature_flags.md) named `duo_workflow`. Enabled for GitLab team members only. This feature is an [experiment](../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14153) in GitLab 17.4 [with a flag](../../administration/feature_flags.md) named `duo_workflow`. Enabled for GitLab team members only. This feature is an [experiment](../../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. @@ -19,7 +19,7 @@ For more information, see the history. This feature is available for internal GitLab team members for testing, but not ready for production use. WARNING: -This feature is considered [experimental](../../policy/experiment-beta-support.md) and is not intended for customer usage outside of initial design partners. We expect major changes to this feature. +This feature is considered [experimental](../../policy/development_stages_support.md) and is not intended for customer usage outside of initial design partners. We expect major changes to this feature. DISCLAIMER: This page contains information related to upcoming products, features, and functionality. diff --git a/doc/user/enterprise_user/index.md b/doc/user/enterprise_user/index.md index b8f0d4efbf0..00b86eefd31 100644 --- a/doc/user/enterprise_user/index.md +++ b/doc/user/enterprise_user/index.md @@ -194,7 +194,7 @@ To disable 2FA: ### Enable the extension marketplace for the Web IDE and workspaces -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. > - Feature flag `web_ide_oauth` [enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) and feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. > - Feature flag `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. diff --git a/doc/user/gitlab_duo/data_usage.md b/doc/user/gitlab_duo/data_usage.md index 2a1fd96d7d2..f99ce571b8b 100644 --- a/doc/user/gitlab_duo/data_usage.md +++ b/doc/user/gitlab_duo/data_usage.md @@ -15,11 +15,11 @@ and [Anthropic Claude](https://www.anthropic.com/product). ## Progressive enhancement -GitLab Duo AI-powered features are designed as a progressive enhancement to existing GitLab features across the DevSecOps platform. These features are designed to fail gracefully and should not prevent the core functionality of the underlying feature. You should note each feature is subject to its expected functionality as defined by the relevant [feature support policy](../../policy/experiment-beta-support.md). +GitLab Duo AI-powered features are designed as a progressive enhancement to existing GitLab features across the DevSecOps platform. These features are designed to fail gracefully and should not prevent the core functionality of the underlying feature. You should note each feature is subject to its expected functionality as defined by the relevant [feature support policy](../../policy/development_stages_support.md). ## Stability and performance -GitLab Duo AI-powered features are in a variety of [feature support levels](../../policy/experiment-beta-support.md#beta). Due to the nature of these features, there may be high demand for usage which may cause degraded performance or unexpected downtime of the feature. We have built these features to gracefully degrade and have controls in place to allow us to mitigate abuse or misuse. GitLab may disable beta and experimental features for any or all customers at any time at our discretion. +GitLab Duo AI-powered features are in a variety of [feature support levels](../../policy/development_stages_support.md#beta). Due to the nature of these features, there may be high demand for usage which may cause degraded performance or unexpected downtime of the feature. We have built these features to gracefully degrade and have controls in place to allow us to mitigate abuse or misuse. GitLab may disable beta and experimental features for any or all customers at any time at our discretion. ## Data privacy diff --git a/doc/user/gitlab_duo/index.md b/doc/user/gitlab_duo/index.md index 5c5cd796046..c97b2cef242 100644 --- a/doc/user/gitlab_duo/index.md +++ b/doc/user/gitlab_duo/index.md @@ -146,7 +146,7 @@ DETAILS: **Tier:** Ultimate with GitLab Duo Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123692) in GitLab 16.2 as an [experiment](../../policy/experiment-beta-support.md#experiment) on GitLab.com. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123692) in GitLab 16.2 as an [experiment](../../policy/development_stages_support.md#experiment) on GitLab.com. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/441681) and moved to GitLab Duo Chat in GitLab 17.3. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. diff --git a/doc/user/gitlab_duo/turn_on_off.md b/doc/user/gitlab_duo/turn_on_off.md index 4a7d0c75033..99ef9d05056 100644 --- a/doc/user/gitlab_duo/turn_on_off.md +++ b/doc/user/gitlab_duo/turn_on_off.md @@ -77,7 +77,7 @@ Run a health check to test if your instance meets the requirements to use GitLab When the health check completes, it displays a pass or fail result and the types of issues. If the health check fails any of the tests, users might not be able to use GitLab Duo features in your instance. -This is a [beta](../../policy/experiment-beta-support.md) feature. +This is a [beta](../../policy/development_stages_support.md) feature. Prerequisites: diff --git a/doc/user/gitlab_duo_chat/examples.md b/doc/user/gitlab_duo_chat/examples.md index e288cf8d332..bb687bb7dcb 100644 --- a/doc/user/gitlab_duo_chat/examples.md +++ b/doc/user/gitlab_duo_chat/examples.md @@ -346,7 +346,7 @@ DETAILS: **Editors:** GitLab UI **LLM:** Anthropic [Claude 3.5 Sonnet](https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-sonnet) -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123692) in GitLab 16.2 as an [experiment](../../policy/experiment-beta-support.md#experiment) on GitLab.com. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/123692) in GitLab 16.2 as an [experiment](../../policy/development_stages_support.md#experiment) on GitLab.com. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/441681) and moved to GitLab Duo Chat in GitLab 17.3. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. diff --git a/doc/user/gitlab_duo_chat/index.md b/doc/user/gitlab_duo_chat/index.md index 36664db7a6d..30b8b5c05fa 100644 --- a/doc/user/gitlab_duo_chat/index.md +++ b/doc/user/gitlab_duo_chat/index.md @@ -10,11 +10,11 @@ DETAILS: **Tier:** Premium with GitLab Duo Pro, Ultimate with GitLab Duo Pro or Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117695) as an [experiment](../../policy/experiment-beta-support.md#experiment) for SaaS in GitLab 16.0. -> - Changed to [beta](../../policy/experiment-beta-support.md#beta) for SaaS in GitLab 16.6. -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11251) as a [beta](../../policy/experiment-beta-support.md#beta) for self-managed in GitLab 16.8. -> - Changed from Ultimate to [Premium](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142808) tier in GitLab 16.9 while in [beta](../../policy/experiment-beta-support.md#beta). -> - Changed to [generally available](../../policy/experiment-beta-support.md#generally-available-ga) in GitLab 16.11. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117695) as an [experiment](../../policy/development_stages_support.md#experiment) for SaaS in GitLab 16.0. +> - Changed to [beta](../../policy/development_stages_support.md#beta) for SaaS in GitLab 16.6. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/11251) as a [beta](../../policy/development_stages_support.md#beta) for self-managed in GitLab 16.8. +> - Changed from Ultimate to [Premium](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142808) tier in GitLab 16.9 while in [beta](../../policy/development_stages_support.md#beta). +> - Changed to [generally available](../../policy/development_stages_support.md#generally-available-ga) in GitLab 16.11. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. GitLab Duo Chat is your personal AI-powered assistant for boosting productivity. @@ -82,7 +82,7 @@ Only the last 50 messages are retained in the chat history. The chat history exp ## Use GitLab Duo Chat in the Web IDE -> - Introduced in GitLab 16.6 as an [experiment](../../policy/experiment-beta-support.md#experiment). +> - Introduced in GitLab 16.6 as an [experiment](../../policy/development_stages_support.md#experiment). > - Changed to generally available in GitLab 16.11. To use GitLab Duo Chat in the Web IDE on GitLab: @@ -102,7 +102,7 @@ If you have selected code in the editor, this selection is sent along with your ## Use GitLab Duo Chat in VS Code -> - Introduced in GitLab 16.6 as an [experiment](../../policy/experiment-beta-support.md#experiment). +> - Introduced in GitLab 16.6 as an [experiment](../../policy/development_stages_support.md#experiment). > - Changed to generally available in GitLab 16.11. To use GitLab Duo Chat in GitLab Workflow extension for VS Code: diff --git a/doc/user/glql/index.md b/doc/user/glql/index.md index 08599445d95..99bcb457718 100644 --- a/doc/user/glql/index.md +++ b/doc/user/glql/index.md @@ -25,7 +25,7 @@ GitLab. Use it to filter and embed content from anywhere in the platform, using familiar syntax. Embed queries in Markdown code blocks. -This feature is an [experiment](../../policy/experiment-beta-support.md). +This feature is an [experiment](../../policy/development_stages_support.md). Share your feedback in [epic 14939](https://gitlab.com/groups/gitlab-org/-/epics/14939), either as a comment on the epic, or by creating a new issue under the epic with labels `~"group::knowledge"` and `~"type::feature"` or `~"type::bug"`. diff --git a/doc/user/group/epics/epic_work_items.md b/doc/user/group/epics/epic_work_items.md index 4f3f205ba7b..dead029b7fe 100644 --- a/doc/user/group/epics/epic_work_items.md +++ b/doc/user/group/epics/epic_work_items.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** Self-managed **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with [several feature flags](#enable-and-disable-the-new-look-for-epics). Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9290) in GitLab 17.2 with [several feature flags](#enable-and-disable-the-new-look-for-epics). Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md#experiment). > - Listing epics using the [GraphQL API](../../../api/graphql/reference/index.md) [introduced](https://gitlab.com/groups/gitlab-org/-/epics/12852) in GitLab 17.4. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/470685) in GitLab 17.6. diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md index 6cbe0bbefa2..9d53fdd0539 100644 --- a/doc/user/group/epics/manage_epics.md +++ b/doc/user/group/epics/manage_epics.md @@ -162,7 +162,7 @@ DETAILS: **Status:** Beta **Offering:** GitLab.com, Self-managed -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4231) in GitLab 17.4 [with a flag](../../../administration/feature_flags.md) named `work_items_beta`. Disabled by default. This feature is in [beta](../../../policy/experiment-beta-support.md#beta). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4231) in GitLab 17.4 [with a flag](../../../administration/feature_flags.md) named `work_items_beta`. Disabled by default. This feature is in [beta](../../../policy/development_stages_support.md#beta). FLAG: The availability of this feature is controlled by a feature flag. @@ -178,7 +178,7 @@ The idea is that the assignees are people responsible for the epic. If a user is not a member of a group, an epic can only be assigned to them if another group member assigns them. -This feature is in [beta](../../../policy/experiment-beta-support.md). +This feature is in [beta](../../../policy/development_stages_support.md). If you find a bug, use the [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/463598) to provide more details. diff --git a/doc/user/group/import/direct_transfer_migrations.md b/doc/user/group/import/direct_transfer_migrations.md index 8b1afe92e37..690934176aa 100644 --- a/doc/user/group/import/direct_transfer_migrations.md +++ b/doc/user/group/import/direct_transfer_migrations.md @@ -153,7 +153,7 @@ If you do not want to import all user memberships from the source instance, ensu 1. After a group has been imported, select its GitLab path to open its GitLab URL. WARNING: -Importing groups with projects is in [beta](../../../policy/experiment-beta-support.md#beta). This feature is not ready for production use. +Importing groups with projects is in [beta](../../../policy/development_stages_support.md#beta). This feature is not ready for production use. ## Group import history diff --git a/doc/user/group/import/index.md b/doc/user/group/import/index.md index 34b36d0d259..75b87305795 100644 --- a/doc/user/group/import/index.md +++ b/doc/user/group/import/index.md @@ -47,7 +47,7 @@ Migrating groups by direct transfer copies the groups from one place to another. - The subgroup of any existing top-level group. - Another GitLab instance, including GitLab.com. - In the [API](../../../api/bulk_imports.md), copy top-level groups and subgroups to these locations. -- Copy groups with projects (in [beta](../../../policy/experiment-beta-support.md#beta) and not ready for production +- Copy groups with projects (in [beta](../../../policy/development_stages_support.md#beta) and not ready for production use) or without projects. Copying projects with groups is available: - On GitLab.com by default. @@ -57,7 +57,7 @@ Not all group and project resources are copied. See list of copied resources bel - [Migrated project items](migrated_items.md#migrated-project-items). WARNING: -Importing groups with projects is in [beta](../../../policy/experiment-beta-support.md#beta). This feature is not +Importing groups with projects is in [beta](../../../policy/development_stages_support.md#beta). This feature is not ready for production use. We invite you to leave your feedback about migrating by direct transfer in diff --git a/doc/user/group/value_stream_analytics/index.md b/doc/user/group/value_stream_analytics/index.md index d6e1aa495f8..f325a6f05f3 100644 --- a/doc/user/group/value_stream_analytics/index.md +++ b/doc/user/group/value_stream_analytics/index.md @@ -741,7 +741,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10228) in GitLab 16.2 as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10228) in GitLab 16.2 as an [experiment](../../../policy/development_stages_support.md#experiment). > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. Improve your planning and decision-making by predicting productivity metrics and diff --git a/doc/user/okrs.md b/doc/user/okrs.md index 3443ac74350..03b7b0829d8 100644 --- a/doc/user/okrs.md +++ b/doc/user/okrs.md @@ -12,7 +12,7 @@ DETAILS: > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/103355) in GitLab 15.6 [with a flag](../administration/feature_flags.md) named `okrs_mvc`. Disabled by default. -OKRs are an [experiment](../policy/experiment-beta-support.md#experiment). +OKRs are an [experiment](../policy/development_stages_support.md#experiment). For the OKR feature roadmap, see [epic 7864](https://gitlab.com/groups/gitlab-org/-/epics/7864). FLAG: @@ -550,7 +550,7 @@ If an OKR is closed with a locked discussion, then you cannot reopen it until th DETAILS: **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/415077) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/415077) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md). > - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/446064) to feature flag named `work_items_beta` in GitLab 16.10. Disabled by default. FLAG: @@ -562,7 +562,7 @@ When enabled, OKRs use a two-column layout, similar to issues. The description and threads are on the left, and attributes, such as labels or assignees, on the right. -This feature is in [beta](../policy/experiment-beta-support.md). +This feature is in [beta](../policy/development_stages_support.md). If you find a bug, [comment on the feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/442090). ![OKR two column view](img/objective_two_column_view_v16_10.png) diff --git a/doc/user/packages/container_registry/container_protection_rules.md b/doc/user/packages/container_registry/container_protection_rules.md index 6e9a96d37a0..8963c61863f 100644 --- a/doc/user/packages/container_registry/container_protection_rules.md +++ b/doc/user/packages/container_registry/container_protection_rules.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/463669) in GitLab 16.7 [with a flag](../../../administration/feature_flags.md) named `containers_protected_containers`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/463669) in GitLab 16.7 [with a flag](../../../administration/feature_flags.md) named `containers_protected_containers`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. diff --git a/doc/user/packages/go_proxy/index.md b/doc/user/packages/go_proxy/index.md index 453bc7011f6..f725480d3d8 100644 --- a/doc/user/packages/go_proxy/index.md +++ b/doc/user/packages/go_proxy/index.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27376) in GitLab 13.1 [with a flag](../../../administration/feature_flags.md) named `go_proxy`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27376) in GitLab 13.1 [with a flag](../../../administration/feature_flags.md) named `go_proxy`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. @@ -22,7 +22,7 @@ See [epic 3043](https://gitlab.com/groups/gitlab-org/-/epics/3043). With the Go proxy for GitLab, every project in GitLab can be fetched with the [Go proxy protocol](https://proxy.golang.org/). -The Go proxy for GitLab is an [experiment](../../../policy/experiment-beta-support.md), and isn't ready for production use +The Go proxy for GitLab is an [experiment](../../../policy/development_stages_support.md), and isn't ready for production use due to potential performance issues with large repositories. See [issue 218083](https://gitlab.com/gitlab-org/gitlab/-/issues/218083). GitLab doesn't display Go modules in the package registry, even if the Go proxy is enabled. See [issue 213770](https://gitlab.com/gitlab-org/gitlab/-/issues/213770). diff --git a/doc/user/packages/package_registry/dependency_proxy/index.md b/doc/user/packages/package_registry/dependency_proxy/index.md index 613fdb59100..f397b2ca786 100644 --- a/doc/user/packages/package_registry/dependency_proxy/index.md +++ b/doc/user/packages/package_registry/dependency_proxy/index.md @@ -15,7 +15,7 @@ DETAILS: > - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/415218) in GitLab 16.8. Feature flag `packages_dependency_proxy_maven` removed. WARNING: -The dependency proxy is in [beta](../../../../policy/experiment-beta-support.md#beta). Review the documentation carefully before you use this feature. +The dependency proxy is in [beta](../../../../policy/development_stages_support.md#beta). Review the documentation carefully before you use this feature. The GitLab dependency proxy for packages is a local proxy for frequently pulled packages. It is implemented as a pull-through cache that works at the project level. diff --git a/doc/user/packages/package_registry/package_protection_rules.md b/doc/user/packages/package_registry/package_protection_rules.md index c5dcadf2618..b277f2a747f 100644 --- a/doc/user/packages/package_registry/package_protection_rules.md +++ b/doc/user/packages/package_registry/package_protection_rules.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com, Self-managed -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/416395) in GitLab 16.5 [with a flag](../../../administration/feature_flags.md) named `packages_protected_packages`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/416395) in GitLab 16.5 [with a flag](../../../administration/feature_flags.md) named `packages_protected_packages`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). > - The protection rule setting **Push protected up to access level** [renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/416382) to **Minimum access level for push** in GitLab 17.1 > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/472655) in GitLab 17.5. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/472655) in GitLab 17.6. Feature flag `packages_protected_packages` removed. diff --git a/doc/user/packages/package_registry/supported_package_managers.md b/doc/user/packages/package_registry/supported_package_managers.md index 6e1ff45b9eb..b70c0e0a63e 100644 --- a/doc/user/packages/package_registry/supported_package_managers.md +++ b/doc/user/packages/package_registry/supported_package_managers.md @@ -29,6 +29,6 @@ The package registry supports the following package manager types: | [PyPI](../pypi_repository/index.md) | GA | | [Ruby gems](../rubygems_registry/index.md) | [Experiment](https://gitlab.com/groups/gitlab-org/-/epics/3200) | -[View what each status means](../../../policy/experiment-beta-support.md). +[View what each status means](../../../policy/development_stages_support.md). You can also use the [API](../../../api/packages.md) to administer the package registry. diff --git a/doc/user/packages/rubygems_registry/index.md b/doc/user/packages/rubygems_registry/index.md index 7b83df1b2ff..d85f3ce9fcb 100644 --- a/doc/user/packages/rubygems_registry/index.md +++ b/doc/user/packages/rubygems_registry/index.md @@ -11,7 +11,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52147) in GitLab 13.9 [with a flag](../../../administration/feature_flags.md) named `rubygem_packages`. Disabled by default. This feature is an [experiment](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52147) in GitLab 13.9 [with a flag](../../../administration/feature_flags.md) named `rubygem_packages`. Disabled by default. This feature is an [experiment](../../../policy/development_stages_support.md). FLAG: The availability of this feature is controlled by a feature flag. @@ -20,7 +20,7 @@ This feature is available for testing, but not ready for production use. You can publish Ruby gems to your project's package registry. Then, you can download them from the UI or with the API. -This feature is an [experiment](../../../policy/experiment-beta-support.md). +This feature is an [experiment](../../../policy/development_stages_support.md). For more information about the development of this feature, see [epic 3200](https://gitlab.com/groups/gitlab-org/-/epics/3200). ## Authenticate to the package registry diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md index 172230bd8d7..82e83c25035 100644 --- a/doc/user/profile/preferences.md +++ b/doc/user/profile/preferences.md @@ -316,12 +316,12 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/388519) in GitLab 16.6. > - Feature flags `index_code_with_zoekt` and `search_code_with_zoekt` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148378) in GitLab 17.1. WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice. +This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice. For more information, see [epic 9404](https://gitlab.com/groups/gitlab-org/-/epics/9404). Prerequisites: @@ -403,7 +403,7 @@ You must be the administrator of the GitLab instance to configure GitLab with So DETAILS: **Offering:** GitLab.com -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. > - Feature flag `web_ide_oauth` [enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) and feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. > - Feature flag `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. > - Enabled by default for [workspaces](../workspace/index.md) in GitLab 17.6. Workspaces do not require any feature flags for the extension marketplace to be available. diff --git a/doc/user/project/index.md b/doc/user/project/index.md index f8358568648..b01001824a3 100644 --- a/doc/user/project/index.md +++ b/doc/user/project/index.md @@ -114,7 +114,7 @@ DETAILS: **Status:** Experiment > - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/794) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) -> - named `support_sha256_repositories`. Disabled by default. This feature is an [experiment](../../policy/experiment-beta-support.md#experiment). +> - named `support_sha256_repositories`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md#experiment). FLAG: The availability of this feature is controlled by a feature flag. diff --git a/doc/user/project/integrations/google_artifact_management.md b/doc/user/project/integrations/google_artifact_management.md index 0d6b812dc63..a41d296b5cb 100644 --- a/doc/user/project/integrations/google_artifact_management.md +++ b/doc/user/project/integrations/google_artifact_management.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141127) in GitLab 16.10 [with a flag](../../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/141127) in GitLab 16.10 [with a flag](../../../administration/feature_flags.md) named `google_cloud_support_feature_flag`. This feature is in [beta](../../../policy/development_stages_support.md). > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150472) in GitLab 17.1. Feature flag `google_cloud_support_feature_flag` removed. You can use the Google Artifact Management integration to diff --git a/doc/user/project/issues/managing_issues.md b/doc/user/project/issues/managing_issues.md index 062f09d16d4..1ff237db0cd 100644 --- a/doc/user/project/issues/managing_issues.md +++ b/doc/user/project/issues/managing_issues.md @@ -37,7 +37,7 @@ DETAILS: **Offering:** GitLab.com **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10762) in GitLab 16.3 as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10762) in GitLab 16.3 as an [experiment](../../../policy/development_stages_support.md#experiment). > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. Generate a detailed description for an issue based on a short summary you provide. diff --git a/doc/user/project/labels.md b/doc/user/project/labels.md index 70d32585c73..b1e2d469f85 100644 --- a/doc/user/project/labels.md +++ b/doc/user/project/labels.md @@ -490,7 +490,7 @@ DETAILS: **Offering:** Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/408676) in GitLab 16.3 [with a flag](../../administration/feature_flags.md) named `enforce_locked_labels_on_merge`. This feature is [beta](../../policy/experiment-beta-support.md). Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/408676) in GitLab 16.3 [with a flag](../../administration/feature_flags.md) named `enforce_locked_labels_on_merge`. This feature is [beta](../../policy/development_stages_support.md). Disabled by default. > - Minimum role to lock labels [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/169256) from Reporter to Planner in GitLab 17.7. FLAG: diff --git a/doc/user/project/merge_requests/changes.md b/doc/user/project/merge_requests/changes.md index 5742081f6ef..a3be9d1aba6 100644 --- a/doc/user/project/merge_requests/changes.md +++ b/doc/user/project/merge_requests/changes.md @@ -222,7 +222,7 @@ DETAILS: **Tier:** Premium with GitLab Duo Pro, Ultimate with GitLab Duo Pro or Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - Introduced in GitLab 15.11 as an [experiment](../../../policy/experiment-beta-support.md#experiment) on GitLab.com. +> - Introduced in GitLab 15.11 as an [experiment](../../../policy/development_stages_support.md#experiment) on GitLab.com. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/429915) in GitLab 16.8. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. diff --git a/doc/user/project/merge_requests/duo_in_merge_requests.md b/doc/user/project/merge_requests/duo_in_merge_requests.md index 4f1c8ad466d..0d5ba2062a7 100644 --- a/doc/user/project/merge_requests/duo_in_merge_requests.md +++ b/doc/user/project/merge_requests/duo_in_merge_requests.md @@ -18,7 +18,7 @@ GitLab Duo is designed to provide contextually relevant information during the l DETAILS: **Status:** Beta -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10401) in GitLab 16.2 as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10401) in GitLab 16.2 as an [experiment](../../../policy/development_stages_support.md#experiment). > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/429882) to beta in GitLab 16.10. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. @@ -42,7 +42,7 @@ Provide feedback on this feature in [issue 443236](https://gitlab.com/gitlab-org DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14825) in GitLab 17.5 as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/14825) in GitLab 17.5 as an [experiment](../../../policy/development_stages_support.md#experiment). > - Feature flag `ai_review_merge_request` [disabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/456106). FLAG: @@ -50,7 +50,7 @@ The availability of this feature is controlled by a feature flag. For more information, see the history. WARNING: -This feature is considered [experimental](../../../policy/experiment-beta-support.md) and is not intended for customer usage outside of initial design partners. We expect major changes to this feature. +This feature is considered [experimental](../../../policy/development_stages_support.md) and is not intended for customer usage outside of initial design partners. We expect major changes to this feature. DISCLAIMER: This page contains information related to upcoming products, features, and functionality. @@ -75,7 +75,7 @@ When your merge request is ready to be reviewed, use GitLab Duo Code Review to p DETAILS: **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10466) in GitLab 16.0 as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10466) in GitLab 16.0 as an [experiment](../../../policy/development_stages_support.md#experiment). When you've completed your review of a merge request and are ready to [submit your review](reviews/index.md#submit-a-review), use GitLab Duo Code Review Summary to generate a summary of your comments. @@ -97,7 +97,7 @@ Provide feedback on this experimental feature in [issue 408991](https://gitlab.c DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10453) in GitLab 16.2 as an [experiment](../../../policy/experiment-beta-support.md#experiment) [with a flag](../../../administration/feature_flags.md) named `generate_commit_message_flag`. Disabled by default. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10453) in GitLab 16.2 as an [experiment](../../../policy/development_stages_support.md#experiment) [with a flag](../../../administration/feature_flags.md) named `generate_commit_message_flag`. Disabled by default. > - Feature flag `generate_commit_message_flag` [enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158339) in GitLab 17.2. > - Feature flag `generate_commit_message_flag` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/173262) in GitLab 17.7. diff --git a/doc/user/project/merge_requests/stacked_diffs.md b/doc/user/project/merge_requests/stacked_diffs.md index b29c706a20e..037adb30522 100644 --- a/doc/user/project/merge_requests/stacked_diffs.md +++ b/doc/user/project/merge_requests/stacked_diffs.md @@ -12,7 +12,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - Released in [v1.42.0 of the GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases/v1.42.0) as an [experiment](../../../policy/experiment-beta-support.md#experiment). +> - Released in [v1.42.0 of the GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases/v1.42.0) as an [experiment](../../../policy/development_stages_support.md#experiment). In the [GitLab CLI](https://gitlab.com/gitlab-org/cli), stacked diffs are a way of creating small changes that build upon each other to ultimately deliver a feature. @@ -31,7 +31,7 @@ you then extend with other commands. -This feature is an [experiment](../../../policy/experiment-beta-support.md). +This feature is an [experiment](../../../policy/development_stages_support.md). We'd love to hear your feedback in [issue 7473](https://gitlab.com/gitlab-org/cli/-/issues/7473). ## Create a stacked diff diff --git a/doc/user/project/ml/experiment_tracking/index.md b/doc/user/project/ml/experiment_tracking/index.md index 76d3b10c19e..c3f945948dc 100644 --- a/doc/user/project/ml/experiment_tracking/index.md +++ b/doc/user/project/ml/experiment_tracking/index.md @@ -10,10 +10,10 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9341) in GitLab 15.11 as an [experiment](../../../../policy/experiment-beta-support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. Disabled by default. To enable the feature, an administrator can [enable the feature flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9341) in GitLab 15.11 as an [experiment](../../../../policy/development_stages_support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. Disabled by default. To enable the feature, an administrator can [enable the feature flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. NOTE: -Model experiment tracking is an [experimental feature](../../../../policy/experiment-beta-support.md). Refer to for feedback and feature requests. +Model experiment tracking is an [experimental feature](../../../../policy/development_stages_support.md). Refer to for feedback and feature requests. When creating machine learning models, data scientists often experiment with different parameters, configurations, and feature engineering to improve the performance of the model. Keeping track of all this metadata and the associated diff --git a/doc/user/project/ml/experiment_tracking/mlflow_client.md b/doc/user/project/ml/experiment_tracking/mlflow_client.md index ab682f77ab8..01233e8b310 100644 --- a/doc/user/project/ml/experiment_tracking/mlflow_client.md +++ b/doc/user/project/ml/experiment_tracking/mlflow_client.md @@ -11,10 +11,10 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Experiment -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/8560) in GitLab 15.11 as an [experiment](../../../../policy/experiment-beta-support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. Disabled by default. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/8560) in GitLab 15.11 as an [experiment](../../../../policy/development_stages_support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `ml_experiment_tracking`. Disabled by default. NOTE: -Model experiment tracking is an [experiment](../../../../policy/experiment-beta-support.md). +Model experiment tracking is an [experiment](../../../../policy/development_stages_support.md). Provide feedback [for model experiment tracking](https://gitlab.com/gitlab-org/gitlab/-/issues/381660). Provide feedback for [model registry](https://gitlab.com/gitlab-org/gitlab/-/epics/9423). [MLflow](https://mlflow.org/) is a popular open source tool for Machine Learning experiment tracking. diff --git a/doc/user/project/ml/model_registry/index.md b/doc/user/project/ml/model_registry/index.md index e00d8ea79ea..7a6d7c88df6 100644 --- a/doc/user/project/ml/model_registry/index.md +++ b/doc/user/project/ml/model_registry/index.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Free, Premium, Ultimate **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9423) in GitLab 16.8 as an [experiment](../../../../policy/experiment-beta-support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `model_registry`. Disabled by default. To enable the feature, an administrator can [enable the feature flag](../../../../administration/feature_flags.md) named `model_registry`. +> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/9423) in GitLab 16.8 as an [experiment](../../../../policy/development_stages_support.md#experiment) release [with a flag](../../../../administration/feature_flags.md) named `model_registry`. Disabled by default. To enable the feature, an administrator can [enable the feature flag](../../../../administration/feature_flags.md) named `model_registry`. > - [Changed](https://gitlab.com/groups/gitlab-org/-/epics/9423) to beta in GitLab 17.1. > - [Changed](https://gitlab.com/groups/gitlab-org/-/epics/14998) to general availability in GitLab 17.6. diff --git a/doc/user/project/pages/index.md b/doc/user/project/pages/index.md index ad53de11874..4821acd2564 100644 --- a/doc/user/project/pages/index.md +++ b/doc/user/project/pages/index.md @@ -237,7 +237,7 @@ DETAILS: **Offering:** GitLab.com, Self-managed, GitLab Dedicated **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../../policy/experiment-beta-support.md) [with a flag](../../feature_flags.md) named `pages_multiple_versions_setting`, disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/129534) in GitLab 16.7 as an [experiment](../../../policy/development_stages_support.md) [with a flag](../../feature_flags.md) named `pages_multiple_versions_setting`, disabled by default. > - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/480195) from "multiple deployments" to "parallel deployments" in GitLab 17.4. > - [Enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/issues/422145) in GitLab 17.4. > - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/502219) to remove the project setting. diff --git a/doc/user/project/repository/code_explain.md b/doc/user/project/repository/code_explain.md index b8d41b12dd1..56a768c2c22 100644 --- a/doc/user/project/repository/code_explain.md +++ b/doc/user/project/repository/code_explain.md @@ -10,7 +10,7 @@ DETAILS: **Tier:** Premium with GitLab Duo Pro, Ultimate with GitLab Duo Pro or Enterprise - [Start a trial](https://about.gitlab.com/solutions/gitlab-duo-pro/sales/?type=free-trial) **Offering:** GitLab.com, Self-managed, GitLab Dedicated -> - Introduced in GitLab 15.11 as an [experiment](../../../policy/experiment-beta-support.md#experiment) on GitLab.com. +> - Introduced in GitLab 15.11 as an [experiment](../../../policy/development_stages_support.md#experiment) on GitLab.com. > - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/429915) in GitLab 16.8. > - Changed to require GitLab Duo add-on in GitLab 17.6 and later. diff --git a/doc/user/project/service_desk/configure.md b/doc/user/project/service_desk/configure.md index 4dd1a9dfbd0..ad4e7e06ea1 100644 --- a/doc/user/project/service_desk/configure.md +++ b/doc/user/project/service_desk/configure.md @@ -251,7 +251,7 @@ Maintain brand identity and instill confidence among support requesters with a d For an overview, see [a short showcase video](https://youtu.be/_moD5U3xcQs). -This feature is in [beta](../../../policy/experiment-beta-support.md#beta). +This feature is in [beta](../../../policy/development_stages_support.md#beta). A beta feature is not production-ready, but is unlikely to change drastically before it's released. We encourage users to try beta features and provide feedback in [the feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/416637). diff --git a/doc/user/project/time_tracking.md b/doc/user/project/time_tracking.md index 3efac991908..36b1774b7fb 100644 --- a/doc/user/project/time_tracking.md +++ b/doc/user/project/time_tracking.md @@ -198,7 +198,7 @@ This feature is not ready for production use. View a report of time spent in issues, tasks, and merge requests across all of GitLab. -This feature is an [experiment](../../policy/experiment-beta-support.md). +This feature is an [experiment](../../policy/development_stages_support.md). If you find a bug, let us know in the [feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/435222). To view the global time tracking report: diff --git a/doc/user/project/web_ide/index.md b/doc/user/project/web_ide/index.md index dc6697add98..9383e0027a6 100644 --- a/doc/user/project/web_ide/index.md +++ b/doc/user/project/web_ide/index.md @@ -228,7 +228,7 @@ To view any notification you might have missed: DETAILS: **Offering:** GitLab.com -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../../policy/experiment-beta-support.md#beta) in GitLab 17.0 [with flags](../../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. > - Feature flag `web_ide_oauth` [enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) and feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. > - Feature flag `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. diff --git a/doc/user/search/exact_code_search.md b/doc/user/search/exact_code_search.md index 6ff2df12b7c..bf12ce04217 100644 --- a/doc/user/search/exact_code_search.md +++ b/doc/user/search/exact_code_search.md @@ -11,12 +11,12 @@ DETAILS: **Offering:** GitLab.com, Self-managed **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105049) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 15.9 [with flags](../../administration/feature_flags.md) named `index_code_with_zoekt` and `search_code_with_zoekt`. Disabled by default. > - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/388519) in GitLab 16.6. > - Feature flags `index_code_with_zoekt` and `search_code_with_zoekt` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148378) in GitLab 17.1. WARNING: -This feature is in [beta](../../policy/experiment-beta-support.md#beta) and subject to change without notice. +This feature is in [beta](../../policy/development_stages_support.md#beta) and subject to change without notice. For more information, see [epic 9404](https://gitlab.com/groups/gitlab-org/-/epics/9404). With exact code search, you can use exact match and regular expression modes diff --git a/doc/user/tasks.md b/doc/user/tasks.md index e9909083c7c..01a4b0e051c 100644 --- a/doc/user/tasks.md +++ b/doc/user/tasks.md @@ -562,7 +562,7 @@ If a task is closed with a locked discussion, then you cannot reopen it until th DETAILS: **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/415077) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default. This feature is in [beta](../policy/experiment-beta-support.md). +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/415077) in GitLab 16.2 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default. This feature is in [beta](../policy/development_stages_support.md). > - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/446064) to feature flag named `work_items_beta` in GitLab 16.10. Disabled by default. FLAG: @@ -574,7 +574,7 @@ When enabled, tasks use a two-column layout, similar to issues. The description and threads are on the left, and attributes, such as labels or assignees, on the right. -This feature is in [beta](../policy/experiment-beta-support.md). +This feature is in [beta](../policy/development_stages_support.md). If you find a bug, [comment on the feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/442090). ![Task two column view](img/task_two_column_view_v16_10.png) diff --git a/doc/user/workspace/index.md b/doc/user/workspace/index.md index f10bd7088e3..1eb4265a212 100644 --- a/doc/user/workspace/index.md +++ b/doc/user/workspace/index.md @@ -197,7 +197,7 @@ For more information, see [GitLab Workflow extension for VS Code](https://gitlab DETAILS: **Status:** Beta -> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438491) as a [beta](../../policy/experiment-beta-support.md#beta) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `allow_extensions_marketplace_in_workspace`. Disabled by default. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/438491) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 16.9 [with a flag](../../administration/feature_flags.md) named `allow_extensions_marketplace_in_workspace`. Disabled by default. > - Feature flag `allow_extensions_marketplace_in_workspace` [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/454669) in GitLab 17.6. You can use the diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb index acce27012b1..c55080af2bd 100644 --- a/spec/db/schema_spec.rb +++ b/spec/db/schema_spec.rb @@ -250,6 +250,8 @@ RSpec.describe 'Database schema', instance_integrations: %w[project_id group_id inherit_from_id], # these columns are not used in instance integrations group_scim_identities: %w[temp_source_id], # temporary column that is not a foreign key group_scim_auth_access_tokens: %w[temp_source_id], # temporary column that is not a foreign key + system_access_group_microsoft_graph_access_tokens: %w[temp_source_id], # temporary column that is not a foreign key + system_access_group_microsoft_applications: %w[temp_source_id], # temporary column that is not a foreign key subscription_user_add_on_assignment_versions: %w[item_id user_id purchase_id] # Managed by paper_trail gem, no need for FK on the historical data }.with_indifferent_access.freeze end diff --git a/spec/frontend/error_tracking/components/error_details_spec.js b/spec/frontend/error_tracking/components/error_details_spec.js index 6073231ca5d..277f38393f1 100644 --- a/spec/frontend/error_tracking/components/error_details_spec.js +++ b/spec/frontend/error_tracking/components/error_details_spec.js @@ -23,11 +23,10 @@ import ErrorDetails from '~/error_tracking/components/error_details.vue'; import Stacktrace from '~/error_tracking/components/stacktrace.vue'; import ErrorDetailsInfo from '~/error_tracking/components/error_details_info.vue'; import { createAlert, VARIANT_WARNING } from '~/alert'; -import Tracking from '~/tracking'; +import { useMockInternalEventsTracking } from 'helpers/tracking_internal_events_helper'; import TimelineChart from '~/error_tracking/components/timeline_chart.vue'; jest.mock('~/alert'); -jest.mock('~/tracking'); Vue.use(Vuex); Vue.use(VueApollo); @@ -484,6 +483,8 @@ describe('ErrorDetails', () => { }); describe('Snowplow tracking', () => { + const { bindInternalEventDocument } = useMockInternalEventsTracking(); + describe.each` integrated | variant ${true} | ${'integrated'} @@ -499,30 +500,54 @@ describe('ErrorDetails', () => { }); it('should track detail page views', () => { - expect(Tracking.event).toHaveBeenCalledWith(category, 'view_error_details', { - extra: { variant }, - }); + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + + expect(trackEventSpy).toHaveBeenCalledWith( + 'view_error_details', + { + variant, + }, + category, + ); }); it('should track IGNORE status update', async () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); await findUpdateIgnoreStatusButton().trigger('click'); - expect(Tracking.event).toHaveBeenCalledWith(category, 'update_ignored_status', { - extra: { variant }, - }); + + expect(trackEventSpy).toHaveBeenCalledWith( + 'update_ignored_status', + { + variant, + }, + category, + ); }); it('should track RESOLVE status update', async () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + await findUpdateResolveStatusButton().trigger('click'); - expect(Tracking.event).toHaveBeenCalledWith(category, 'update_resolved_status', { - extra: { variant }, - }); + expect(trackEventSpy).toHaveBeenCalledWith( + 'update_resolved_status', + { + variant, + }, + category, + ); }); it('should track create issue button click', async () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + await wrapper.find('[data-testid="create-issue-button"]').vm.$emit('click'); - expect(Tracking.event).toHaveBeenCalledWith(category, 'click_create_issue_from_error', { - extra: { variant }, - }); + expect(trackEventSpy).toHaveBeenCalledWith( + 'click_create_issue_from_error', + { + variant, + }, + category, + ); }); }); }); diff --git a/spec/frontend/error_tracking/components/error_tracking_list_spec.js b/spec/frontend/error_tracking/components/error_tracking_list_spec.js index 30aa13d3c60..e0553bc79c2 100644 --- a/spec/frontend/error_tracking/components/error_tracking_list_spec.js +++ b/spec/frontend/error_tracking/components/error_tracking_list_spec.js @@ -12,15 +12,13 @@ import Vue, { nextTick } from 'vue'; // eslint-disable-next-line no-restricted-imports import Vuex from 'vuex'; import stubChildren from 'helpers/stub_children'; +import { useMockInternalEventsTracking } from 'helpers/tracking_internal_events_helper'; import ErrorTrackingActions from '~/error_tracking/components/error_tracking_actions.vue'; import ErrorTrackingList from '~/error_tracking/components/error_tracking_list.vue'; import TimelineChart from '~/error_tracking/components/timeline_chart.vue'; -import Tracking from '~/tracking'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; import errorsList from './list_mock.json'; -jest.mock('~/tracking'); - Vue.use(Vuex); describe('ErrorTrackingList', () => { @@ -572,6 +570,7 @@ describe('ErrorTrackingList', () => { describe.each([true, false])(`when integratedErrorTracking is %s`, (integrated) => { const category = 'Error Tracking'; + const { bindInternalEventDocument } = useMockInternalEventsTracking(); beforeEach(() => { mountComponent({ @@ -584,14 +583,20 @@ describe('ErrorTrackingList', () => { }); it('should track list views', () => { - expect(Tracking.event).toHaveBeenCalledWith(category, 'view_errors_list', { - extra: { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + + expect(trackEventSpy).toHaveBeenCalledWith( + 'view_errors_list', + { variant: integrated ? 'integrated' : 'external', }, - }); + category, + ); }); it('should track status updates', async () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + const status = 'ignored'; findErrorActions().vm.$emit('update-issue-status', { errorId: 1, @@ -599,33 +604,42 @@ describe('ErrorTrackingList', () => { }); await nextTick(); - expect(Tracking.event).toHaveBeenCalledWith(category, 'update_ignored_status', { - extra: { + expect(trackEventSpy).toHaveBeenCalledWith( + 'update_ignored_status', + { variant: integrated ? 'integrated' : 'external', }, - }); + category, + ); }); it('should track error filter', () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); + const findStatusFilter = () => findStatusFilterDropdown().findComponent(GlDropdownItem); findStatusFilter().vm.$emit('click'); - expect(Tracking.event).toHaveBeenCalledWith(category, 'filter_unresolved_status', { - extra: { + expect(trackEventSpy).toHaveBeenCalledWith( + 'filter_unresolved_status', + { variant: integrated ? 'integrated' : 'external', }, - }); + category, + ); }); it('should track error sorting', () => { + const { trackEventSpy } = bindInternalEventDocument(wrapper.element); const findSortItem = () => findSortDropdown().findComponent(GlDropdownItem); findSortItem().vm.$emit('click'); - expect(Tracking.event).toHaveBeenCalledWith(category, 'sort_by_last_seen', { - extra: { + expect(trackEventSpy).toHaveBeenCalledWith( + 'sort_by_last_seen', + { variant: integrated ? 'integrated' : 'external', }, - }); + category, + ); }); }); }); diff --git a/spec/frontend/vue_shared/components/customizable_dashboard/customizable_dashboard_spec.js b/spec/frontend/vue_shared/components/customizable_dashboard/customizable_dashboard_spec.js index f7726669814..584beb10027 100644 --- a/spec/frontend/vue_shared/components/customizable_dashboard/customizable_dashboard_spec.js +++ b/spec/frontend/vue_shared/components/customizable_dashboard/customizable_dashboard_spec.js @@ -28,7 +28,7 @@ import { builtinDashboard, betaDashboard, mockDateRangeFilterChangePayload, - TEST_VISUALIZATION, + createVisualization, TEST_EMPTY_DASHBOARD_SVG_PATH, } from './mock_data'; @@ -533,7 +533,7 @@ describe('CustomizableDashboard', () => { describe('and the drawer emits a selected event', () => { beforeEach(async () => { await findAddVisualizationButton().trigger('click'); - await findVisualizationDrawer().vm.$emit('select', [TEST_VISUALIZATION()]); + await findVisualizationDrawer().vm.$emit('select', [createVisualization()]); }); it('closes the drawer', () => { diff --git a/spec/frontend/vue_shared/components/customizable_dashboard/dashboard_editor/available_visualizations_drawer_spec.js b/spec/frontend/vue_shared/components/customizable_dashboard/dashboard_editor/available_visualizations_drawer_spec.js index c154f2f483d..30d3063d74c 100644 --- a/spec/frontend/vue_shared/components/customizable_dashboard/dashboard_editor/available_visualizations_drawer_spec.js +++ b/spec/frontend/vue_shared/components/customizable_dashboard/dashboard_editor/available_visualizations_drawer_spec.js @@ -6,7 +6,7 @@ import { shallowMountExtended, mountExtended } from 'helpers/vue_test_utils_help import { DRAWER_Z_INDEX } from '~/lib/utils/constants'; import { getContentWrapperHeight } from '~/lib/utils/dom_utils'; import { stubComponent } from 'helpers/stub_component'; -import { TEST_VISUALIZATIONS_GRAPHQL_SUCCESS_RESPONSE } from '../mock_data'; +import { createVisualization } from '../mock_data'; jest.mock('~/lib/utils/dom_utils', () => ({ getContentWrapperHeight: () => '123px', @@ -19,10 +19,7 @@ describe('AvailableVisualizationsDrawer', () => { const allTypes = ['SingleStat', 'LineChart', 'DataTable', 'BarChart']; const createVisualizations = (types = ['SingleStat']) => { - const visualization = { - ...TEST_VISUALIZATIONS_GRAPHQL_SUCCESS_RESPONSE.data.project - .customizableDashboardVisualizations.nodes[0], - }; + const visualization = createVisualization(); return types.map((type, index) => ({ ...visualization, diff --git a/spec/frontend/vue_shared/components/customizable_dashboard/mock_data.js b/spec/frontend/vue_shared/components/customizable_dashboard/mock_data.js index b0c02ae588a..cfece926760 100644 --- a/spec/frontend/vue_shared/components/customizable_dashboard/mock_data.js +++ b/spec/frontend/vue_shared/components/customizable_dashboard/mock_data.js @@ -1,28 +1,26 @@ import { getUniquePanelId } from '~/vue_shared/components/customizable_dashboard/utils'; -const cubeLineChart = { +export const createVisualization = () => ({ + version: 1, type: 'LineChart', - slug: 'cube_line_chart', - title: 'Cube line chart', + slug: 'test_visualization', data: { type: 'cube_analytics', query: { - users: { - measures: ['TrackedEvents.count'], - dimensions: ['TrackedEvents.eventType'], - }, + measures: ['TrackedEvents.count'], + timeDimensions: [ + { + dimension: 'TrackedEvents.utcTime', + granularity: 'day', + }, + ], + limit: 100, + timezone: 'UTC', + filters: [], + dimensions: [], }, }, - options: { - xAxis: { - name: 'Time', - type: 'time', - }, - yAxis: { - name: 'Counts', - }, - }, -}; +}); export const dashboard = { id: 'analytics_overview', @@ -34,14 +32,14 @@ export const dashboard = { { title: 'Test A', gridAttributes: { width: 3, height: 3 }, - visualization: cubeLineChart, + visualization: createVisualization(), queryOverrides: null, id: getUniquePanelId(), }, { title: 'Test B', gridAttributes: { width: 2, height: 4, minHeight: 2, minWidth: 2 }, - visualization: cubeLineChart, + visualization: createVisualization(), queryOverrides: { limit: 200, }, @@ -59,7 +57,7 @@ export const builtinDashboard = { { title: 'Test A', gridAttributes: { width: 3, height: 3 }, - visualization: cubeLineChart, + visualization: createVisualization(), queryOverrides: {}, id: getUniquePanelId(), }, @@ -74,7 +72,7 @@ export const betaDashboard = { { title: 'Test A', gridAttributes: { width: 3, height: 3 }, - visualization: cubeLineChart, + visualization: createVisualization(), queryOverrides: {}, id: getUniquePanelId(), }, @@ -99,200 +97,9 @@ export const mockPanel = { maxWidth: 1, maxHeight: 2, }, - visualization: cubeLineChart, + visualization: createVisualization(), queryOverrides: {}, id: getUniquePanelId(), }; -export const TEST_VISUALIZATION = () => ({ - version: 1, - type: 'LineChart', - slug: 'test_visualization', - data: { - type: 'cube_analytics', - query: { - measures: ['TrackedEvents.count'], - timeDimensions: [ - { - dimension: 'TrackedEvents.utcTime', - granularity: 'day', - }, - ], - limit: 100, - timezone: 'UTC', - filters: [], - dimensions: [], - }, - }, -}); - export const TEST_EMPTY_DASHBOARD_SVG_PATH = 'illustration/empty-state/empty-dashboard-md'; - -export const TEST_VISUALIZATIONS_GRAPHQL_SUCCESS_RESPONSE = { - data: { - project: { - id: 'gid://gitlab/Project/73', - customizableDashboardVisualizations: { - nodes: [ - { - slug: 'another_one', - type: 'SingleStat', - data: { - type: 'cube_analytics', - query: { - measures: ['TrackedEvents.count'], - filters: [ - { - member: 'TrackedEvents.event', - operator: 'equals', - values: ['click'], - }, - ], - limit: 100, - timezone: 'UTC', - dimensions: [], - timeDimensions: [], - }, - }, - options: {}, - __typename: 'CustomizableDashboardVisualization', - }, - ], - }, - }, - }, -}; - -export const TEST_CUSTOM_DASHBOARDS_PROJECT = { - fullPath: 'test/test-dashboards', - id: 123, - name: 'test-dashboards', - defaultBranch: 'some-branch', -}; - -export const getGraphQLDashboard = (options = {}, withPanels = true) => { - const newDashboard = { - slug: '', - title: '', - userDefined: false, - status: null, - description: 'Understand your audience', - __typename: 'CustomizableDashboard', - errors: [], - ...options, - }; - - if (withPanels) { - return { - ...newDashboard, - panels: { - nodes: [ - { - title: 'Daily Active Users', - gridAttributes: { - yPos: 1, - xPos: 0, - width: 6, - height: 5, - }, - queryOverrides: { - limit: 200, - }, - visualization: { - slug: 'line_chart', - type: 'LineChart', - options: { - xAxis: { - name: 'Time', - type: 'time', - }, - yAxis: { - name: 'Counts', - type: 'time', - }, - }, - data: { - type: 'cube_analytics', - query: { - measures: ['TrackedEvents.uniqueUsersCount'], - timeDimensions: [ - { - dimension: 'TrackedEvents.derivedTstamp', - granularity: 'day', - }, - ], - limit: 100, - timezone: 'UTC', - filters: [], - dimensions: [], - }, - }, - errors: null, - __typename: 'CustomizableDashboardVisualization', - }, - __typename: 'CustomizableDashboardPanel', - }, - ], - __typename: 'CustomizableDashboardPanelConnection', - }, - }; - } - - return newDashboard; -}; - -export const TEST_ALL_DASHBOARDS_GRAPHQL_SUCCESS_RESPONSE = { - data: { - project: { - id: 'gid://gitlab/Project/1', - customizableDashboards: { - nodes: [ - getGraphQLDashboard({ slug: 'audience', title: 'Audience' }, false), - getGraphQLDashboard({ slug: 'behavior', title: 'Behavior' }, false), - getGraphQLDashboard( - { slug: 'new_dashboard', title: 'new_dashboard', userDefined: true }, - false, - ), - getGraphQLDashboard( - { slug: 'audience_copy', title: 'Audience (Copy)', userDefined: true }, - false, - ), - ], - __typename: 'CustomizableDashboardConnection', - }, - __typename: 'Project', - }, - }, -}; - -export const TEST_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE = { - data: { - project: { - id: 'gid://gitlab/Project/1', - customizableDashboards: { - nodes: [getGraphQLDashboard({ slug: 'audience', title: 'Audience' })], - __typename: 'CustomizableDashboardConnection', - }, - __typename: 'Project', - }, - }, -}; - -export const TEST_CUSTOM_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE = { - data: { - project: { - id: 'gid://gitlab/Project/1', - customizableDashboards: { - nodes: [ - getGraphQLDashboard({ - slug: 'custom_dashboard', - title: 'Custom Dashboard', - userDefined: true, - }), - ], - __typename: 'CustomizableDashboardConnection', - }, - __typename: 'Project', - }, - }, -}; diff --git a/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js b/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js index 064e10f6480..b744e5bab32 100644 --- a/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js +++ b/spec/frontend/vue_shared/components/customizable_dashboard/utils_spec.js @@ -1,5 +1,3 @@ -import getCustomizableDashboardQuery from '~/vue_shared/components/customizable_dashboard/graphql/queries/get_customizable_dashboard.query.graphql'; -import getAllCustomizableDashboardsQuery from '~/vue_shared/components/customizable_dashboard/graphql/queries/get_all_customizable_dashboards.query.graphql'; import { buildDefaultDashboardFilters, dateRangeOptionToFilter, @@ -8,7 +6,6 @@ import { isEmptyPanelData, availableVisualizationsValidator, getDashboardConfig, - updateApolloCache, getVisualizationCategory, parsePanelToGridItem, createNewVisualizationPanel, @@ -19,7 +16,6 @@ import { DATE_RANGE_OPTIONS, DEFAULT_SELECTED_OPTION_INDEX, } from '~/vue_shared/components/customizable_dashboard/filters/constants'; -import { createMockClient } from 'helpers/mock_apollo_helper'; import { CATEGORY_SINGLE_STATS, CATEGORY_CHARTS, @@ -31,19 +27,14 @@ import { mockDateRangeFilterChangePayload, dashboard, mockPanel, - TEST_VISUALIZATION, - TEST_CUSTOM_DASHBOARDS_PROJECT, - TEST_ALL_DASHBOARDS_GRAPHQL_SUCCESS_RESPONSE, - getGraphQLDashboard, - TEST_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE, - TEST_CUSTOM_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE, + createVisualization, } from './mock_data'; const option = DATE_RANGE_OPTIONS[0]; describe('#createNewVisualizationPanel', () => { it('returns the expected object', () => { - const visualization = TEST_VISUALIZATION(); + const visualization = createVisualization(); expect(createNewVisualizationPanel(visualization)).toMatchObject({ visualization: { ...visualization, @@ -217,7 +208,7 @@ describe('getDashboardConfig', () => { }, queryOverrides: {}, title: 'Test A', - visualization: 'cube_line_chart', + visualization: 'test_visualization', }, { gridAttributes: { @@ -228,7 +219,7 @@ describe('getDashboardConfig', () => { limit: 200, }, title: 'Test B', - visualization: 'cube_line_chart', + visualization: 'test_visualization', }, ], title: 'Analytics Overview', @@ -246,183 +237,6 @@ describe('getDashboardConfig', () => { }); }); -describe('updateApolloCache', () => { - let apolloClient; - let mockReadQuery; - let mockWriteQuery; - const dashboardSlug = 'analytics_overview'; - const { fullPath } = TEST_CUSTOM_DASHBOARDS_PROJECT; - const isProject = true; - - const setMockCache = (mockDashboardDetails, mockDashboardsList) => { - mockReadQuery.mockImplementation(({ query }) => { - if (query === getCustomizableDashboardQuery) { - return mockDashboardDetails; - } - if (query === getAllCustomizableDashboardsQuery) { - return mockDashboardsList; - } - - return null; - }); - }; - - beforeEach(() => { - apolloClient = createMockClient(); - - mockReadQuery = jest.fn(); - mockWriteQuery = jest.fn(); - apolloClient.readQuery = mockReadQuery; - apolloClient.writeQuery = mockWriteQuery; - }); - - describe('dashboard details cache', () => { - it('updates an existing dashboard', () => { - const existingDashboard = getGraphQLDashboard( - { - slug: 'some_existing_dash', - title: 'some existing title', - }, - false, - ); - const existingDetailsCache = { - ...TEST_CUSTOM_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE.data, - }; - existingDetailsCache.project.customizableDashboards.nodes = [existingDashboard]; - - setMockCache(existingDetailsCache, null); - - updateApolloCache({ - apolloClient, - slug: existingDashboard.slug, - dashboard: { - ...existingDashboard, - title: 'some new title', - }, - fullPath, - isProject, - }); - - expect(mockWriteQuery).toHaveBeenCalledWith( - expect.objectContaining({ - query: getCustomizableDashboardQuery, - data: expect.objectContaining({ - project: expect.objectContaining({ - customizableDashboards: expect.objectContaining({ - nodes: expect.arrayContaining([ - expect.objectContaining({ - title: 'some new title', - }), - ]), - }), - }), - }), - }), - ); - }); - - it('does not update for new dashboards where cache is empty', () => { - setMockCache(null, TEST_ALL_DASHBOARDS_GRAPHQL_SUCCESS_RESPONSE.data); - - updateApolloCache({ - apolloClient, - slug: dashboardSlug, - dashboard, - fullPath, - isProject, - }); - - expect(mockWriteQuery).not.toHaveBeenCalledWith( - expect.objectContaining({ query: getCustomizableDashboardQuery }), - ); - }); - }); - - describe('dashboards list', () => { - it('adds a new dashboard to the dashboards list', () => { - setMockCache(null, TEST_ALL_DASHBOARDS_GRAPHQL_SUCCESS_RESPONSE.data); - - updateApolloCache({ - apolloClient, - slug: dashboardSlug, - dashboard, - fullPath, - isProject, - }); - - expect(mockWriteQuery).toHaveBeenCalledWith( - expect.objectContaining({ - query: getAllCustomizableDashboardsQuery, - data: expect.objectContaining({ - project: expect.objectContaining({ - customizableDashboards: expect.objectContaining({ - nodes: expect.arrayContaining([ - expect.objectContaining({ - slug: dashboardSlug, - }), - ]), - }), - }), - }), - }), - ); - }); - - it('updates an existing dashboard on the dashboards list', () => { - setMockCache(null, TEST_ALL_DASHBOARDS_GRAPHQL_SUCCESS_RESPONSE.data); - - const existingDashboards = - TEST_CUSTOM_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE.data.project.customizableDashboards.nodes; - - const updatedDashboard = { - ...existingDashboards.at(0), - title: 'some new title', - }; - - updateApolloCache({ - apolloClient, - slug: dashboardSlug, - dashboard: updatedDashboard, - fullPath, - isProject, - }); - - expect(mockWriteQuery).toHaveBeenCalledWith( - expect.objectContaining({ - query: getAllCustomizableDashboardsQuery, - data: expect.objectContaining({ - project: expect.objectContaining({ - customizableDashboards: expect.objectContaining({ - nodes: expect.arrayContaining([ - expect.objectContaining({ - title: 'some new title', - }), - ]), - }), - }), - }), - }), - ); - }); - - it('does not update dashboard list cache when it has not yet been populated', () => { - setMockCache(TEST_DASHBOARD_GRAPHQL_SUCCESS_RESPONSE.data, null); - - updateApolloCache({ - apolloClient, - slug: dashboardSlug, - dashboard, - fullPath, - isProject, - }); - - expect(mockWriteQuery).not.toHaveBeenCalledWith( - expect.objectContaining({ query: getAllCustomizableDashboardsQuery }), - ); - }); - }); -}); - describe('getVisualizationCategory', () => { it.each` category | type diff --git a/spec/services/deployments/update_environment_service_spec.rb b/spec/services/deployments/update_environment_service_spec.rb index 97dd7431b53..9ee5f555434 100644 --- a/spec/services/deployments/update_environment_service_spec.rb +++ b/spec/services/deployments/update_environment_service_spec.rb @@ -180,12 +180,10 @@ RSpec.describe Deployments::UpdateEnvironmentService, feature_category: :continu end context 'when auto_stop_in are used' do - let(:options) do - { name: 'production', auto_stop_in: '1 day' } - end - before do environment.update_attribute(:auto_stop_at, nil) + + allow(job).to receive(:expanded_auto_stop_in).and_return('1 day') end it 'renews auto stop at' do @@ -194,27 +192,6 @@ RSpec.describe Deployments::UpdateEnvironmentService, feature_category: :continu .to change { environment.reset.auto_stop_at&.round }.from(nil).to(1.day.since.round) end end - - context 'when value is a variable' do - let(:options) { { name: 'production', auto_stop_in: '$TTL' } } - - let(:yaml_variables) do - [ - { key: "TTL", value: '2 days', public: true } - ] - end - - before do - job.update_attribute(:yaml_variables, yaml_variables) - end - - it 'renews auto stop at with expanded variable value' do - freeze_time do - expect { subject.execute } - .to change { environment.reset.auto_stop_at&.round }.from(nil).to(2.days.since.round) - end - end - end end context 'when deployment tier is specified' do diff --git a/spec/services/environments/recalculate_auto_stop_service_spec.rb b/spec/services/environments/recalculate_auto_stop_service_spec.rb new file mode 100644 index 00000000000..667803a97a9 --- /dev/null +++ b/spec/services/environments/recalculate_auto_stop_service_spec.rb @@ -0,0 +1,120 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Environments::RecalculateAutoStopService, feature_category: :environment_management do + let_it_be(:project) { create(:project, :repository) } + let_it_be(:pipeline) { create(:ci_pipeline, project: project) } + + let(:service) { described_class.new(deployable) } + + describe '#execute' do + let(:environment) { create(:environment, project: project, name: 'example-env') } + let(:deployable) { create(:ci_build, environment: environment.name, options: options, pipeline: pipeline) } + + let(:auto_stop_in) { '1 day' } + let(:options) do + { + script: 'deploy', + environment: { + name: environment.name, + action: environment_action, + auto_stop_in: auto_stop_in + } + } + end + + subject(:recalculate) { service.execute } + + shared_examples 'recalculating auto stop at' do |can_reset_timer| + it 'updates the environment auto_stop_at' do + expected_stop_at = be_like_time(1.day.from_now) + + expect { recalculate }.to change { environment.reload.auto_stop_at }.from(nil).to(expected_stop_at) + end + + context 'when the environment no longer exists' do + before do + environment.delete + end + + it 'does not raise an error' do + expect { recalculate }.not_to raise_error + end + end + + context 'when auto_stop_in is not specified' do + let(:auto_stop_in) { nil } + + it 'does not update the environment' do + expect { recalculate }.not_to change { environment.reload.auto_stop_at } + end + + context 'when there is a previous successful deployment' do + let!(:previous_deployable) { create(:ci_build, options: previous_deployable_options, project: project) } + let!(:deployment) { create(:deployment, :success, deployable: previous_deployable, environment: environment) } + + let(:previous_deployable_options) do + { + script: 'deploy', + environment: { + name: environment.name, + auto_stop_in: previous_auto_stop_in + } + } + end + + context 'and the deployment job set auto_stop_in' do + let(:previous_auto_stop_in) { '1 month' } + + if can_reset_timer + it 'updates the environment auto_stop_at' do + expected_stop_at = be_like_time(1.month.from_now) + + expect { recalculate }.to change { environment.reload.auto_stop_at }.from(nil).to(expected_stop_at) + end + else + it 'does not update the environment' do + expect { recalculate }.not_to change { environment.reload.auto_stop_at } + end + end + end + + context 'and the deployment job did not set auto_stop_in' do + let(:previous_auto_stop_in) { nil } + + it 'does not update the environment' do + expect { recalculate }.not_to change { environment.reload.auto_stop_at } + end + end + end + end + end + + context 'with environment action: prepare' do + let(:environment_action) { 'prepare' } + + include_examples 'recalculating auto stop at', true + end + + context 'with environment action: access' do + let(:environment_action) { 'access' } + + include_examples 'recalculating auto stop at', true + end + + context 'with environment action: verify' do + let(:environment_action) { 'verify' } + + include_examples 'recalculating auto stop at', false + end + + context 'with environment action: start' do + let(:environment_action) { 'start' } + + it 'does not update the environment' do + expect { recalculate }.not_to change { environment.reload.auto_stop_at } + end + end + end +end diff --git a/spec/support/db_cleaner.rb b/spec/support/db_cleaner.rb index 2df82511246..26c4d8b4190 100644 --- a/spec/support/db_cleaner.rb +++ b/spec/support/db_cleaner.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'test_prof/before_all/adapters/active_record' + module DbCleaner def all_connection_classes ::TestProf::BeforeAll::Adapters::ActiveRecord.all_connections.map(&:connection_class).uniq diff --git a/spec/support/shared_examples/ci/deployable_shared_examples.rb b/spec/support/shared_examples/ci/deployable_shared_examples.rb index 80113aac820..051aac507d4 100644 --- a/spec/support/shared_examples/ci/deployable_shared_examples.rb +++ b/spec/support/shared_examples/ci/deployable_shared_examples.rb @@ -169,6 +169,13 @@ RSpec.shared_examples 'a deployable job' do it_behaves_like 'avoid deadlock' it_behaves_like 'calling proper BuildFinishedWorker' + it 'queues relevant workers' do + expect(Environments::StopJobSuccessWorker).to receive(:perform_async).with(job.id) + expect(Environments::RecalculateAutoStopWorker).to receive(:perform_async).with(job.id) + + subject + end + it 'transits deployment status to success' do with_cross_database_modification_prevented do subject @@ -507,21 +514,66 @@ RSpec.shared_examples 'a deployable job' do end end - describe '#deployment_job?' do - subject { job.deployment_job? } + describe '#expanded_auto_stop_in' do + let(:job) { create(factory_type, environment: 'environment', options: options, pipeline: pipeline) } + let(:options) do + { + environment: { + name: 'production', + auto_stop_in: auto_stop_in + } + } + end + subject { job.expanded_auto_stop_in } + + context 'when auto_stop_in is not set' do + let(:auto_stop_in) { nil } + + it { is_expected.to be_nil } + end + + context 'when auto_stop_in is set' do + let(:auto_stop_in) { '1 day' } + + it { is_expected.to eq('1 day') } + end + + context 'when auto_stop_in is set to a variable' do + let(:auto_stop_in) { '$TTL' } + let(:yaml_variables) do + [ + { key: "TTL", value: '2 days', public: true } + ] + end + + before do + job.update_attribute(:yaml_variables, yaml_variables) + end + + it { is_expected.to eq('2 days') } + end + end + + shared_examples 'environment actions' do context 'when environment is defined' do before do job.update!(environment: 'review') end context 'no action is defined' do - it { is_expected.to be_truthy } + it 'uses start as the default action' do + if action == 'start' + is_expected.to be_truthy + else + is_expected.to be_falsey + end + end end - context 'and start action is defined' do + context 'action is defined' do before do - job.update!(options: { environment: { action: 'start' } }) + job.update!(options: { environment: { action: action } }) end it { is_expected.to be_truthy } @@ -537,6 +589,38 @@ RSpec.shared_examples 'a deployable job' do end end + describe '#deployment_job?' do + let(:action) { 'start' } + + subject { job.deployment_job? } + + include_examples 'environment actions' + end + + describe '#accesses_environment?' do + let(:action) { 'access' } + + subject { job.accesses_environment? } + + include_examples 'environment actions' + end + + describe '#prepares_environment?' do + let(:action) { 'prepare' } + + subject { job.prepares_environment? } + + include_examples 'environment actions' + end + + describe '#verifies_environment' do + let(:action) { 'verify' } + + subject { job.verifies_environment? } + + include_examples 'environment actions' + end + describe '#stops_environment?' do subject { job.stops_environment? } diff --git a/spec/workers/environments/recalculate_auto_stop_worker_spec.rb b/spec/workers/environments/recalculate_auto_stop_worker_spec.rb new file mode 100644 index 00000000000..1420058a274 --- /dev/null +++ b/spec/workers/environments/recalculate_auto_stop_worker_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Environments::RecalculateAutoStopWorker, feature_category: :environment_management do + let_it_be(:job) { create(:ci_build) } + + let(:job_id) { job.id } + + subject(:perform) { described_class.new.perform(job_id) } + + it 'executes Environments::RecalculateAutoStopService' do + expect_next_instance_of(Environments::RecalculateAutoStopService, job) do |service| + expect(service).to receive(:execute) + end + + perform + end + + context 'when a partition_id is specified' do + subject(:perform) { described_class.new.perform(job_id, { 'partition_id' => job.partition_id }) } + + it 'uses the partition_id to find the job' do + expect_next_instance_of(Environments::RecalculateAutoStopService, job) do |service| + expect(service).to receive(:execute) + end + + recorder = ActiveRecord::QueryRecorder.new { perform } + + expect(recorder.count).to eq(1) + expect(recorder.log.first).to match(/^SELECT "#{job.class.table_name}".*"partition_id" = #{job.partition_id}/) + end + end + + context 'when the job no longer exists' do + let(:job_id) { non_existing_record_id } + + it 'does nothing' do + expect(Environments::RecalculateAutoStopService).not_to receive(:new) + + perform + end + end +end