diff --git a/app/assets/javascripts/pages/groups/runners/index.js b/app/assets/javascripts/pages/groups/runners/index.js
new file mode 100644
index 00000000000..ca1a6bdab75
--- /dev/null
+++ b/app/assets/javascripts/pages/groups/runners/index.js
@@ -0,0 +1,3 @@
+import { initGroupRunners } from '~/runner/group_runners';
+
+initGroupRunners();
diff --git a/app/assets/javascripts/runner/group_runners/group_runners_app.vue b/app/assets/javascripts/runner/group_runners/group_runners_app.vue
new file mode 100644
index 00000000000..92d881c43ea
--- /dev/null
+++ b/app/assets/javascripts/runner/group_runners/group_runners_app.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/assets/javascripts/runner/group_runners/index.js b/app/assets/javascripts/runner/group_runners/index.js
new file mode 100644
index 00000000000..5a72b09de3a
--- /dev/null
+++ b/app/assets/javascripts/runner/group_runners/index.js
@@ -0,0 +1,17 @@
+import Vue from 'vue';
+import GroupRunnersApp from './group_runners_app.vue';
+
+export const initGroupRunners = (selector = '#js-group-runners') => {
+ const el = document.querySelector(selector);
+
+ if (!el) {
+ return null;
+ }
+
+ return new Vue({
+ el,
+ render(h) {
+ return h(GroupRunnersApp);
+ },
+ });
+};
diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss
index 465b1a80fa4..ab1fbf6d4ce 100644
--- a/app/assets/stylesheets/framework/files.scss
+++ b/app/assets/stylesheets/framework/files.scss
@@ -548,3 +548,18 @@ span.idiff {
// will always be expanded to the maximum needed width.
.blob-viewer[data-loading] .file-content.code .line:nth-of-type(1n+70):not(:last-of-type),
.blob-viewer[data-loading] .file-content.code .file-line-num:nth-of-type(1n+70):not(:last-of-type) {display: none !important;}
+
+.blob-viewer[data-loading] .file-content.code .line:nth-of-type(69):not(:last-of-type),
+.blob-viewer[data-loading] .file-content.code .file-line-num:nth-of-type(69):not(:last-of-type) {
+ &::after {
+ @include gl-display-block;
+ @include gl-font-weight-bold;
+ content: '\2026';
+ }
+}
+
+.blob-viewer[data-loading] .file-content.code .line:nth-of-type(69):not(:last-of-type) {
+ &::after {
+ @include gl-text-center;
+ }
+}
diff --git a/app/controllers/groups/runners_controller.rb b/app/controllers/groups/runners_controller.rb
index 1cff658dd52..dbbfdd76fe8 100644
--- a/app/controllers/groups/runners_controller.rb
+++ b/app/controllers/groups/runners_controller.rb
@@ -1,14 +1,21 @@
# frozen_string_literal: true
class Groups::RunnersController < Groups::ApplicationController
- # Proper policies should be implemented per
- # https://gitlab.com/gitlab-org/gitlab-foss/issues/45894
+ # TODO Proper policies, such as `read_group_runners, should be implemented per
+ # https://gitlab.com/gitlab-org/gitlab/-/issues/334802
before_action :authorize_admin_group!
-
+ before_action :runner_list_group_view_vue_ui_enabled, only: [:index]
before_action :runner, only: [:edit, :update, :destroy, :pause, :resume, :show]
feature_category :runner
+ def index
+ end
+
+ def runner_list_group_view_vue_ui_enabled
+ return render_404 unless Feature.enabled?(:runner_list_group_view_vue_ui, group, default_enabled: :yaml)
+ end
+
def show
end
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 956d767e9b8..34d1e951980 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -237,6 +237,12 @@ module GroupsHelper
can?(current_user, "read_group_#{resource}".to_sym, @group)
end
+ # TODO Proper policies, such as `read_group_runners, should be implemented per
+ # See https://gitlab.com/gitlab-org/gitlab/-/issues/334802
+ if can?(current_user, :admin_group, @group) && Feature.enabled?(:runner_list_group_view_vue_ui, @group, default_enabled: :yaml)
+ links << :runners
+ end
+
if can?(current_user, :read_cluster, @group)
links << :kubernetes
end
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index aa7d4969077..b9901c2f729 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -39,7 +39,6 @@ module Ci
has_one :pending_state, class_name: 'Ci::BuildPendingState', inverse_of: :build
has_one :queuing_entry, class_name: 'Ci::PendingBuild', foreign_key: :build_id
has_one :runtime_metadata, class_name: 'Ci::RunningBuild', foreign_key: :build_id
- has_many :trace_sections, class_name: 'Ci::BuildTraceSection'
has_many :trace_chunks, class_name: 'Ci::BuildTraceChunk', foreign_key: :build_id, inverse_of: :build
has_many :report_results, class_name: 'Ci::BuildReportResult', inverse_of: :build
@@ -644,12 +643,6 @@ module Ci
update(coverage: coverage) if coverage.present?
end
- # rubocop: disable CodeReuse/ServiceClass
- def parse_trace_sections!
- ExtractSectionsFromBuildTraceService.new(project, user).execute(self)
- end
- # rubocop: enable CodeReuse/ServiceClass
-
def trace
Gitlab::Ci::Trace.new(self)
end
diff --git a/app/models/ci/build_trace_section.rb b/app/models/ci/build_trace_section.rb
deleted file mode 100644
index 036f611a61c..00000000000
--- a/app/models/ci/build_trace_section.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# frozen_string_literal: true
-
-module Ci
- class BuildTraceSection < ApplicationRecord
- extend SuppressCompositePrimaryKeyWarning
- extend Gitlab::Ci::Model
- include IgnorableColumns
-
- belongs_to :build, class_name: 'Ci::Build'
- belongs_to :project
- belongs_to :section_name, class_name: 'Ci::BuildTraceSectionName'
-
- validates :section_name, :build, :project, presence: true, allow_blank: false
-
- ignore_column :build_id_convert_to_bigint, remove_with: '14.2', remove_after: '2021-08-22'
- end
-end
diff --git a/app/models/ci/build_trace_section_name.rb b/app/models/ci/build_trace_section_name.rb
deleted file mode 100644
index c065cfea14e..00000000000
--- a/app/models/ci/build_trace_section_name.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-# frozen_string_literal: true
-
-module Ci
- class BuildTraceSectionName < ApplicationRecord
- extend Gitlab::Ci::Model
-
- belongs_to :project
- has_many :trace_sections, class_name: 'Ci::BuildTraceSection', foreign_key: :section_name_id
-
- validates :name, :project, presence: true, allow_blank: false
- validates :name, uniqueness: { scope: :project_id }
- end
-end
diff --git a/app/models/issuable_severity.rb b/app/models/issuable_severity.rb
index 35d03a544bd..928301e1da6 100644
--- a/app/models/issuable_severity.rb
+++ b/app/models/issuable_severity.rb
@@ -10,6 +10,14 @@ class IssuableSeverity < ApplicationRecord
critical: 'Critical - S1'
}.freeze
+ SEVERITY_QUICK_ACTION_PARAMS = {
+ unknown: %w(Unknown 0),
+ low: %w(Low S4 4),
+ medium: %w(Medium S3 3),
+ high: %w(High S2 2),
+ critical: %w(Critical S1 1)
+ }.freeze
+
belongs_to :issue
validates :issue, presence: true, uniqueness: true
diff --git a/app/models/project.rb b/app/models/project.rb
index 6a90ae9038a..7032cd3a32c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -317,7 +317,6 @@ class Project < ApplicationRecord
# still using `dependent: :destroy` here.
has_many :builds, class_name: 'Ci::Build', inverse_of: :project, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent
has_many :processables, class_name: 'Ci::Processable', inverse_of: :project
- has_many :build_trace_section_names, class_name: 'Ci::BuildTraceSectionName'
has_many :build_trace_chunks, class_name: 'Ci::BuildTraceChunk', through: :builds, source: :trace_chunks
has_many :build_report_results, class_name: 'Ci::BuildReportResult', inverse_of: :project
has_many :job_artifacts, class_name: 'Ci::JobArtifact'
diff --git a/app/policies/group_policy.rb b/app/policies/group_policy.rb
index 0b0edc7c452..7e07cd12ede 100644
--- a/app/policies/group_policy.rb
+++ b/app/policies/group_policy.rb
@@ -117,6 +117,7 @@ class GroupPolicy < BasePolicy
enable :delete_metrics_dashboard_annotation
enable :update_metrics_dashboard_annotation
enable :create_custom_emoji
+ enable :create_package
enable :create_package_settings
end
@@ -134,6 +135,7 @@ class GroupPolicy < BasePolicy
end
rule { maintainer }.policy do
+ enable :destroy_package
enable :create_projects
enable :admin_pipeline
enable :admin_build
diff --git a/app/services/ci/extract_sections_from_build_trace_service.rb b/app/services/ci/extract_sections_from_build_trace_service.rb
deleted file mode 100644
index c756e376901..00000000000
--- a/app/services/ci/extract_sections_from_build_trace_service.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-# frozen_string_literal: true
-
-module Ci
- class ExtractSectionsFromBuildTraceService < BaseService
- def execute(build)
- return false unless build.trace_sections.empty?
-
- Gitlab::Database.bulk_insert(BuildTraceSection.table_name, extract_sections(build)) # rubocop:disable Gitlab/BulkInsert
- true
- end
-
- private
-
- # rubocop: disable CodeReuse/ActiveRecord
- def find_or_create_name(name)
- project.build_trace_section_names.find_or_create_by!(name: name)
- rescue ActiveRecord::RecordInvalid
- project.build_trace_section_names.find_by!(name: name)
- end
- # rubocop: enable CodeReuse/ActiveRecord
-
- def extract_sections(build)
- build.trace.extract_sections.map do |attr|
- name = attr.delete(:name)
- name_record = find_or_create_name(name)
-
- attr.merge(
- build_id: build.id,
- project_id: project.id,
- section_name_id: name_record.id)
- end
- end
- end
-end
diff --git a/app/views/groups/runners/index.html.haml b/app/views/groups/runners/index.html.haml
new file mode 100644
index 00000000000..08be0f93d82
--- /dev/null
+++ b/app/views/groups/runners/index.html.haml
@@ -0,0 +1,6 @@
+- page_title s_('Runners|Runners')
+
+%h2.page-title
+ = s_('Runners|Group Runners')
+
+#js-group-runners
diff --git a/app/views/layouts/nav/sidebar/_group_menus.html.haml b/app/views/layouts/nav/sidebar/_group_menus.html.haml
index ef98c11cafe..8e5e2322e55 100644
--- a/app/views/layouts/nav/sidebar/_group_menus.html.haml
+++ b/app/views/layouts/nav/sidebar/_group_menus.html.haml
@@ -56,6 +56,23 @@
= render_if_exists "layouts/nav/ee/push_rules_link" # EE-specific
+- if group_sidebar_link?(:runners)
+ = nav_link(path: 'groups/runners#index') do
+ = link_to group_runners_path(@group), title: _('CI/CD'), class: 'has-sub-items' do
+ .nav-icon-container
+ = sprite_icon('rocket')
+ %span.nav-item-name
+ = _('CI/CD')
+ %ul.sidebar-sub-level-items
+ = nav_link(path: 'groups/runners#index', html_options: { class: "fly-out-top-item" } ) do
+ = link_to group_runners_path(@group), title: _('CI/CD') do
+ %strong.fly-out-top-item-name
+ = _('CI/CD')
+ %li.divider.fly-out-top-item
+ = nav_link(path: 'groups/runners#index') do
+ = link_to group_runners_path(@group), title: s_('Runners|Runners') do
+ %span= s_('Runners|Runners')
+
- if group_sidebar_link?(:kubernetes)
= nav_link(controller: [:clusters]) do
= link_to group_clusters_path(@group) do
@@ -109,7 +126,7 @@
%span
= _('Repository')
- = nav_link(controller: [:ci_cd, 'groups/runners']) do
+ = nav_link(path: ['groups/runners#show', 'groups/runners#edit'], controller: [:ci_cd]) do
= link_to group_settings_ci_cd_path(@group), title: _('CI/CD') do
%span
= _('CI/CD')
diff --git a/app/workers/ci/build_finished_worker.rb b/app/workers/ci/build_finished_worker.rb
index 15412d2eed5..3bca3015988 100644
--- a/app/workers/ci/build_finished_worker.rb
+++ b/app/workers/ci/build_finished_worker.rb
@@ -33,7 +33,6 @@ module Ci
# @param [Ci::Build] build The build to process.
def process_build(build)
# We execute these in sync to reduce IO.
- build.parse_trace_sections!
build.update_coverage
Ci::BuildReportResultService.new.execute(build)
diff --git a/config/feature_flags/development/debian_group_packages.yml b/config/feature_flags/development/debian_group_packages.yml
new file mode 100644
index 00000000000..bc0c2eaf8eb
--- /dev/null
+++ b/config/feature_flags/development/debian_group_packages.yml
@@ -0,0 +1,8 @@
+---
+name: debian_group_packages
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336536
+milestone: '14.1'
+type: development
+group: group::package
+default_enabled: false
diff --git a/config/feature_flags/development/runner_list_group_view_vue_ui.yml b/config/feature_flags/development/runner_list_group_view_vue_ui.yml
new file mode 100644
index 00000000000..3bda540ba5b
--- /dev/null
+++ b/config/feature_flags/development/runner_list_group_view_vue_ui.yml
@@ -0,0 +1,8 @@
+---
+name: runner_list_group_view_vue_ui
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66376
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/336405
+milestone: '14.2'
+type: development
+group: group::runner
+default_enabled: false
diff --git a/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml b/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml
new file mode 100644
index 00000000000..a56e3c080bd
--- /dev/null
+++ b/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml
@@ -0,0 +1,21 @@
+---
+key_path: redis_hll_counters.quickactions.i_quickactions_severity_monthly
+description: Count of MAU using the `/severity` quick action
+product_section: ops
+product_stage: monitor
+product_group: group::monitor
+product_category: incident_management
+value_type: number
+status: implemented
+milestone: "14.2"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66422
+time_frame: 28d
+data_source: redis_hll
+data_category: Optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
diff --git a/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml b/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml
new file mode 100644
index 00000000000..ccf8b50ee02
--- /dev/null
+++ b/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml
@@ -0,0 +1,21 @@
+---
+key_path: redis_hll_counters.quickactions.i_quickactions_severity_weekly
+description: Count of WAU using the `/severity` quick action
+product_section: ops
+product_stage: monitor
+product_group: group::monitor
+product_category: incident_management
+value_type: number
+status: implemented
+milestone: "14.2"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66422
+time_frame: 7d
+data_source: redis_hll
+data_category: Optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
diff --git a/doc/api/packages/debian.md b/doc/api/packages/debian.md
index cd97bd609df..797955ea600 100644
--- a/doc/api/packages/debian.md
+++ b/doc/api/packages/debian.md
@@ -4,7 +4,11 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian API
+# Debian API **(FREE SELF)**
+
+> - Debian API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - Debian group API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
This is the API documentation for [Debian](../../user/packages/debian_repository/index.md).
@@ -24,8 +28,10 @@ for details on which headers and token types are supported.
## Enable the Debian API
-The Debian API for GitLab is behind a feature flag that is disabled by default. GitLab
-administrators with access to the GitLab Rails console can enable this API for your instance.
+Debian repository support is still a work in progress. It's gated behind a feature flag that's
+**disabled by default**.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it.
To enable it:
@@ -39,6 +45,13 @@ To disable it:
Feature.disable(:debian_packages)
```
+## Enable the Debian group API
+
+The Debian group API is behind a feature flag that is disabled by default.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian group API](../../user/packages/debian_repository/index.md#enable-the-debian-group-api).
+
## Upload a package file
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62028) in GitLab 14.0.
diff --git a/doc/api/packages/debian_group_distributions.md b/doc/api/packages/debian_group_distributions.md
index ba61bf49e01..c5d2effcf44 100644
--- a/doc/api/packages/debian_group_distributions.md
+++ b/doc/api/packages/debian_group_distributions.md
@@ -4,30 +4,27 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian group distributions API **(FREE)**
+# Debian group distributions API **(FREE SELF)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.0.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-See the [Debian package registry documentation](../../user/packages/debian_repository/index.md)
-for more information about working with Debian packages.
+This is the reference documentation for the Debian group distributions API. This API is behind a
+feature flag that is disabled by default. To use this API, you must [enable it](#enable-the-debian-group-api).
-## Enable Debian repository feature
+WARNING:
+This API is under development and is not meant for production use.
-Debian repository support is gated behind a feature flag that is **disabled by default**.
+For more information about working with Debian packages, see the
+[Debian package registry documentation](../../user/packages/debian_repository/index.md).
+
+## Enable the Debian group API
+
+Debian group repository support is still a work in progress. It's gated behind a feature flag that's
+**disabled by default**.
[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can opt to enable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:debian_packages)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:debian_packages)
-```
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian group API](../../user/packages/debian_repository/index.md#enable-the-debian-group-api).
## List all Debian distributions in a group
diff --git a/doc/api/packages/debian_project_distributions.md b/doc/api/packages/debian_project_distributions.md
index aad5558dcba..16079d1c5ab 100644
--- a/doc/api/packages/debian_project_distributions.md
+++ b/doc/api/packages/debian_project_distributions.md
@@ -4,16 +4,24 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian project distributions API **(FREE)**
+# Debian project distributions API **(FREE SELF)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.0.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-See the [Debian package registry documentation](../../user/packages/debian_repository/index.md)
-for more information about working with Debian packages.
+This is the reference documentation for the Debian project distributions API. This API is behind a
+feature flag that is disabled by default. To use this API, you must [enable the Debian API](#enable-the-debian-api).
-## Enable Debian repository feature
+WARNING:
+This API is under development and is not meant for production use.
-Debian repository support is gated behind a feature flag that is **disabled by default**.
+For more information about working with Debian packages, see the
+[Debian package registry documentation](../../user/packages/debian_repository/index.md).
+
+## Enable the Debian API
+
+Debian repository support is still a work in progress. It's gated behind a feature flag that's
+**disabled by default**.
[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
can opt to enable it.
diff --git a/doc/development/usage_ping/dictionary.md b/doc/development/usage_ping/dictionary.md
index ee86648cda4..6229f308671 100644
--- a/doc/development/usage_ping/dictionary.md
+++ b/doc/development/usage_ping/dictionary.md
@@ -16666,6 +16666,34 @@ Status: `data_available`
Tiers: `free`, `premium`, `ultimate`
+### `redis_hll_counters.quickactions.i_quickactions_severity_monthly`
+
+Count of MAU using the `/severity` quick action
+
+[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210721042227_i_quickactions_severity_monthly.yml)
+
+Group: `group::monitor`
+
+Data Category: `Optional`
+
+Status: `implemented`
+
+Tiers: `free`, `premium`, `ultimate`
+
+### `redis_hll_counters.quickactions.i_quickactions_severity_weekly`
+
+Count of WAU using the `/severity` quick action
+
+[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210721042223_i_quickactions_severity_weekly.yml)
+
+Group: `group::monitor`
+
+Data Category: `Optional`
+
+Status: `implemented`
+
+Tiers: `free`, `premium`, `ultimate`
+
### `redis_hll_counters.quickactions.i_quickactions_shrug_monthly`
Count of MAU using the `/shrug` quick action
diff --git a/doc/user/packages/debian_repository/index.md b/doc/user/packages/debian_repository/index.md
index 59213ccb1a0..9c731d76c4e 100644
--- a/doc/user/packages/debian_repository/index.md
+++ b/doc/user/packages/debian_repository/index.md
@@ -6,7 +6,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Debian packages in the Package Registry **(FREE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.1.
+> - Debian API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - Debian group API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../feature_flags.md), disabled by default.
WARNING:
The Debian package registry for GitLab is under development and isn't ready for production use due to
@@ -20,7 +22,7 @@ Project and Group packages are supported.
For documentation of the specific API endpoints that Debian package manager
clients use, see the [Debian API documentation](../../../api/packages/debian.md).
-## Enable Debian repository feature
+## Enable the Debian API **(FREE SELF)**
Debian repository support is still a work in progress. It's gated behind a feature flag that's
**disabled by default**.
@@ -39,6 +41,22 @@ To disable it:
Feature.disable(:debian_packages)
```
+## Enable the Debian group API **(FREE SELF)**
+
+The Debian group repository is also behind a second feature flag that is disabled by default.
+
+To enable it:
+
+```ruby
+Feature.enable(:debian_group_packages)
+```
+
+To disable it:
+
+```ruby
+Feature.disable(:debian_group_packages)
+```
+
## Build a Debian package
Creating a Debian package is documented [on the Debian Wiki](https://wiki.debian.org/Packaging).
diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md
index d8d464ce6d8..f68dc9562ea 100644
--- a/doc/user/project/quick_actions.md
+++ b/doc/user/project/quick_actions.md
@@ -94,6 +94,7 @@ threads. Some quick actions might not be available to all subscription tiers.
| `/remove_time_spent` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Remove time spent. |
| `/remove_zoom` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Remove Zoom meeting from this issue ([introduced in GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609)). |
| `/reopen` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Reopen. |
+| `/severity` | **{check-circle}** Yes | **{check-circle}** No | **{check-circle}** No | Set the severity. ([introduced in GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/334045)) |
| `/shrug ` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Append the comment with `¯\_(ツ)_/¯`. |
| `/spend