diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index ca1cdc5a61e..e6b515e16bf 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -438,7 +438,7 @@
- "vendor/assets/javascripts/**/*"
.feature-flag-development-config-patterns: &feature-flag-development-config-patterns
- - "{,ee/}config/feature_flags/development/*.yml"
+ - "{,ee/}config/feature_flags/{development,ops}/*.yml"
################
# Shared rules #
diff --git a/.nvmrc b/.nvmrc
index c91434ab584..18711d290ea 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-14.15.4
+14.17.5
diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml
index bf347c1b7d0..350ce343c37 100644
--- a/.rubocop_manual_todo.yml
+++ b/.rubocop_manual_todo.yml
@@ -2556,7 +2556,6 @@ Style/OpenStructUse:
- 'ee/spec/features/projects/new_project_spec.rb'
- 'ee/spec/finders/template_finder_spec.rb'
- 'ee/spec/graphql/ee/resolvers/board_lists_resolver_spec.rb'
- - 'ee/spec/graphql/mutations/merge_requests/accept_spec.rb'
- 'ee/spec/graphql/resolvers/board_groupings/epics_resolvers_spec.rb'
- 'ee/spec/helpers/ee/blob_helper_spec.rb'
- 'ee/spec/lib/gitlab/auth/group_saml/failure_handler_spec.rb'
diff --git a/data/deprecations/14-2-deprecation-task-runner.yml b/data/deprecations/14-2-deprecation-task-runner.yml
index 4d01a1969ad..3c600e5a0bf 100644
--- a/data/deprecations/14-2-deprecation-task-runner.yml
+++ b/data/deprecations/14-2-deprecation-task-runner.yml
@@ -1,7 +1,7 @@
- name: "Rename Task Runner pod to Toolbox" # The name of the feature to be deprecated
announcement_milestone: "14.2" # The milestone when this feature was first announced as deprecated.
announcement_date: "2021-08-22" # The date of the milestone release when this feature was first announced as deprecated
- removal_milestone: "14.4" # The milestone when this feature is planned to be removed
+ removal_milestone: "14.5" # The milestone when this feature is planned to be removed
body: | # Do not modify this line, instead modify the lines below.
The Task Runner pod is used to execute periodic housekeeping tasks within the GitLab application and is often confused with the GitLab Runner. Thus, [Task Runner will be renamed to Toolbox](https://gitlab.com/groups/gitlab-org/charts/-/epics/25).
diff --git a/data/deprecations/15-0-deprecate-sles-12sp2.yml b/data/deprecations/15-0-deprecate-sles-12sp2.yml
new file mode 100644
index 00000000000..fd5057bb8d3
--- /dev/null
+++ b/data/deprecations/15-0-deprecate-sles-12sp2.yml
@@ -0,0 +1,6 @@
+- name: "Deprecate support for SLES 12 SP2" # The name of the feature to be deprecated
+ announcement_milestone: "14.5" # The milestone when this feature was first announced as deprecated.
+ announcement_date: "2021-11-22"
+ removal_milestone: "15.0" # the milestone when this feature is planned to be removed
+ body: | # Do not modify this line, instead modify the lines below.
+ Long term service and support (LTSS) for SUSE Linux Enterprise Server (SLES) 12 SP2 [ended on March 31, 2021](https://www.suse.com/lifecycle/). The CA certificates on SP2 include the expired DST root certificate, and it's not getting new CA certificate package updates. We have implemented some [workarounds](https://gitlab.com/gitlab-org/gitlab-omnibus-builder/-/merge_requests/191), but we will not be able to continue to keep the build running properly.
diff --git a/doc/api/events.md b/doc/api/events.md
index 2d173f0053f..265fc0e5fd2 100644
--- a/doc/api/events.md
+++ b/doc/api/events.md
@@ -8,55 +8,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w
## Filter parameters
-### Action Types
-
-Available types for the `action` parameter, and the resources that might be affected:
-
-- `approved`
- - Merge request
-- `closed`
- - Epic **(PREMIUM)**
- - Issue
- - Merge request
- - Milestone
-- `commented` on any `Noteable` record.
- - Alert
- - Commit
- - Design
- - Issue
- - Merge request
- - Snippet
-- `created`
- - Design
- - Epic **(PREMIUM)**
- - Issue
- - Merge request
- - Milestone
- - Project
- - Wiki page
-- `destroyed`
- - Design
- - Milestone
- - Wiki page
-- `expired`
- - Project membership
-- `joined`
- - Project membership
-- `left`
- - Project membership
-- `merged`
- - Merge request
-- `pushed` commits to (or deleted commits from) a repository, individually or in bulk.
- - Project
-- `reopened`
- - Epic **(PREMIUM)**
- - Issue
- - Merge request
- - Milestone
-- `updated`
- - Design
- - Wiki page
+### Actions
+See [User contribution events](../user/index.md#user-contribution-events) for available types for the `action` parameter.
These options are in lowercase.
### Target Types
@@ -72,6 +26,7 @@ Available target types for the `target_type` parameter are:
- `user`
These options are in lowercase.
+Events associated with epics are not available using the API.
### Date formatting
@@ -88,6 +43,7 @@ GitLab removes events older than 3 years from the events table for performance r
## List currently authenticated user's events
Get a list of events for the authenticated user. Scope `read_user` or `api` is required.
+Events associated with epics are not available using the API.
```plaintext
GET /events
@@ -97,7 +53,7 @@ Parameters:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
-| `action` | string | no | Include only events of a particular [action type](#action-types) |
+| `action` | string | no | Include only events of a particular [action type](#actions) |
| `target_type` | string | no | Include only events of a particular [target type](#target-types) |
| `before` | date | no | Include only events created before a particular date. [View how to format dates](#date-formatting). |
| `after` | date | no | Include only events created after a particular date. [View how to format dates](#date-formatting). |
@@ -160,6 +116,7 @@ Example response:
### Get user contribution events
Get the contribution events for the specified user, sorted from newest to oldest. Scope `read_user` or `api` is required.
+Events associated with epics are not available using API.
```plaintext
GET /users/:id/events
@@ -170,7 +127,7 @@ Parameters:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer | yes | The ID or Username of the user |
-| `action` | string | no | Include only events of a particular [action type](#action-types) |
+| `action` | string | no | Include only events of a particular [action type](#actions) |
| `target_type` | string | no | Include only events of a particular [target type](#target-types) |
| `before` | date | no | Include only events created before a particular date. [View how to format dates](#date-formatting). |
| `after` | date | no | Include only events created after a particular date. [View how to format dates](#date-formatting). |
@@ -308,7 +265,7 @@ Parameters:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `project_id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) |
-| `action` | string | no | Include only events of a particular [action type](#action-types) |
+| `action` | string | no | Include only events of a particular [action type](#actions) |
| `target_type` | string | no | Include only events of a particular [target type](#target-types) |
| `before` | date | no | Include only events created before a particular date. [View how to format dates](#date-formatting). |
| `after` | date | no | Include only events created after a particular date. [View how to format dates](#date-formatting). |
diff --git a/doc/update/deprecations.md b/doc/update/deprecations.md
index d1381b54ac3..7d51841f48f 100644
--- a/doc/update/deprecations.md
+++ b/doc/update/deprecations.md
@@ -36,7 +36,7 @@ For deprecation reviewers (Technical Writers only):
https://about.gitlab.com/handbook/marketing/blog/release-posts/#update-the-deprecations-doc
-->
-## 14.4
+## 14.5
### Rename Task Runner pod to Toolbox
@@ -94,6 +94,12 @@ In milestone 15.0, we will completely remove `Version` from `PackageType`.
Announced: 2021-11-22
+### Deprecate support for SLES 12 SP2
+
+Long term service and support (LTSS) for SUSE Linux Enterprise Server (SLES) 12 SP2 [ended on March 31, 2021](https://www.suse.com/lifecycle/). The CA certificates on SP2 include the expired DST root certificate, and it's not getting new CA certificate package updates. We have implemented some [workarounds](https://gitlab.com/gitlab-org/gitlab-omnibus-builder/-/merge_requests/191), but we will not be able to continue to keep the build running properly.
+
+Announced: 2021-11-22
+
### GitLab Serverless
[GitLab Serverless](https://docs.gitlab.com/ee/user/project/clusters/serverless/) is a feature set to support Knative-based serverless development with automatic deployments and monitoring.
diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md
index 8dcb909b3dc..3c6db8c3ee9 100644
--- a/doc/user/application_security/dependency_scanning/index.md
+++ b/doc/user/application_security/dependency_scanning/index.md
@@ -308,7 +308,7 @@ To support the following package managers, the GitLab analyzers proceed in two s
| Bundler | [2.1.4](https://gitlab.com/gitlab-org/security-products/analyzers/bundler-audit/-/blob/v2.11.3/Dockerfile#L15)1 | [1.17.3](https://gitlab.com/gitlab-org/security-products/tests/ruby-bundler/-/blob/master/Gemfile.lock#L118), [2.1.4](https://gitlab.com/gitlab-org/security-products/tests/ruby-bundler/-/blob/bundler2-FREEZE/Gemfile.lock#L118) |
| sbt | [1.3.8](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/v2.23.0/config/.tool-versions#L4) | [1.0.4](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/master/.gitlab-ci.yml#L263), [1.1.4](https://gitlab.com/gitlab-org/security-products/tests/scala-sbt-multiproject/-/blob/main/project/build.properties#L1), [1.1.6](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/master/.gitlab-ci.yml#L272), [1.2.8](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/master/.gitlab-ci.yml#L281), [1.3.12](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/master/.gitlab-ci.yml#L290), [1.4.6](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/master/.gitlab-ci.yml#L299) |
| Maven | [3.6.3](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/v2.23.0/config/.tool-versions#L3) | [3.6.3](https://gitlab.com/gitlab-org/security-products/tests/java-maven/-/blob/master/pom.xml#L3) |
-| Gradle | [6.7.1](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/v2.23.0/config/.tool-versions#L5) | [5.6.4](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/master/gradle/wrapper/gradle-wrapper.properties#L3), [6.5](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-14/gradle/wrapper/gradle-wrapper.properties#L3), [6.7-rc-1](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-15/gradle/wrapper/gradle-wrapper.properties#L3), [7.0-rc-2](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-16/gradle/wrapper/gradle-wrapper.properties#L3) |
+| Gradle | [6.7.1](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/blob/v2.23.0/config/.tool-versions#L5) | [5.6.4](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/master/gradle/wrapper/gradle-wrapper.properties#L3), [6.5](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-14/gradle/wrapper/gradle-wrapper.properties#L3), [6.7-rc-1](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-15/gradle/wrapper/gradle-wrapper.properties#L3), [6.9](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-14-gradle-6-9/gradle/wrapper/gradle-wrapper.properties#L3), [7.0-rc-2](https://gitlab.com/gitlab-org/security-products/tests/java-gradle/-/blob/java-16/gradle/wrapper/gradle-wrapper.properties#L3) |
| setuptools | [50.3.2](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/v2.29.9/Dockerfile#L27) | |
| pip | [20.2.4](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/blob/v2.29.9/Dockerfile#L26) | [20.x](https://gitlab.com/gitlab-org/security-products/tests/python-pip/-/blob/master/requirements.txt) |
| Pipenv | [2018.11.26](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-python/-/blob/v2.18.4/requirements.txt#L13) | [2018.11.26](https://gitlab.com/gitlab-org/security-products/tests/python-pipenv/-/blob/pipfile-lock-FREEZE/Pipfile.lock#L6)2, [2018.11.26](https://gitlab.com/gitlab-org/security-products/tests/python-pipenv/-/blob/master/Pipfile) |
diff --git a/doc/user/group/contribution_analytics/index.md b/doc/user/group/contribution_analytics/index.md
index b13dd3f63cb..76a8eb77e72 100644
--- a/doc/user/group/contribution_analytics/index.md
+++ b/doc/user/group/contribution_analytics/index.md
@@ -8,7 +8,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3090) in GitLab 12.2 for subgroups.
-With Contribution Analytics you can get an overview of the [contribution actions](../../../api/events.md#action-types) in your
+With Contribution Analytics, you can get an overview of the [contribution events](../../index.md#user-contribution-events) in your
group.
- Analyze your team's contributions over a period of time, and offer a bonus for the top
diff --git a/doc/user/index.md b/doc/user/index.md
index c9f20af9668..a3b7cfc4b3c 100644
--- a/doc/user/index.md
+++ b/doc/user/index.md
@@ -85,6 +85,7 @@ There are several types of users in GitLab:
## User activity
+GitLab tracks user contribution activity.
You can follow or unfollow other users from their [user profiles](profile/index.md#access-your-user-profile).
To view a user's activity in a top-level Activity view:
@@ -92,6 +93,55 @@ To view a user's activity in a top-level Activity view:
1. In the GitLab menu, select **Activity**.
1. Select the **Followed users** tab.
+### User contribution events
+
+Each of these contribution events is tracked:
+
+- `approved`
+ - Merge request
+- `closed`
+ - [Epic](group/epics/index.md)
+ - Issue
+ - Merge request
+ - Milestone
+- `commented` on any `Noteable` record.
+ - Alert
+ - Commit
+ - Design
+ - Issue
+ - Merge request
+ - Snippet
+- `created`
+ - Design
+ - [Epic](group/epics/index.md)
+ - Issue
+ - Merge request
+ - Milestone
+ - Project
+ - Wiki page
+- `destroyed`
+ - Design
+ - Milestone
+ - Wiki page
+- `expired`
+ - Project membership
+- `joined`
+ - Project membership
+- `left`
+ - Project membership
+- `merged`
+ - Merge request
+- `pushed` commits to (or deleted commits from) a repository, individually or in bulk.
+ - Project
+- `reopened`
+ - [Epic](group/epics/index.md)
+ - Issue
+ - Merge request
+ - Milestone
+- `updated`
+ - Design
+ - Wiki page
+
## Projects
In GitLab, you can create [projects](project/index.md) to host
diff --git a/doc/user/profile/index.md b/doc/user/profile/index.md
index 935de360ede..d9f10b58c3f 100644
--- a/doc/user/profile/index.md
+++ b/doc/user/profile/index.md
@@ -129,7 +129,7 @@ To add links to other accounts:
## Show private contributions on your user profile page
-In the user contribution calendar graph and recent activity list, you can see your [contribution actions](../../api/events.md#action-types) to private projects.
+In the user contribution calendar graph and recent activity list, you can see your [contribution actions](../index.md#user-contribution-events) to private projects.
To show private contributions:
diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md
index 45c2f1aaf04..59a2f0c2eba 100644
--- a/doc/user/project/pages/introduction.md
+++ b/doc/user/project/pages/introduction.md
@@ -223,16 +223,13 @@ Consider a Pages site deployed with the following files:
```plaintext
public/
-├─┬ index.html
-│ ├ data.html
-│ └ info.html
-│
+├── index.html
+├── data.html
+├── info.html
├── data/
│ └── index.html
-├── info/
-│ └── details.html
-└── other/
- └── index.html
+└── info/
+ └── details.html
```
Pages supports reaching each of these files through several different URLs. In
@@ -241,23 +238,19 @@ specifies the directory. If the URL references a file that doesn't exist, but
adding `.html` to the URL leads to a file that *does* exist, it's served
instead. Here are some examples of what happens given the above Pages site:
-| URL path | HTTP response | File served |
-| -------------------- | ------------- | ----------- |
-| `/` | `200 OK` | `public/index.html` |
-| `/index.html` | `200 OK` | `public/index.html` |
-| `/index` | `200 OK` | `public/index.html` |
-| `/data` | `200 OK` | `public/data/index.html` |
-| `/data/` | `200 OK` | `public/data/index.html` |
-| `/data.html` | `200 OK` | `public/data.html` |
-| `/info` | `200 OK` | `public/info.html` |
-| `/info/` | `200 OK` | `public/info.html` |
-| `/info.html` | `200 OK` | `public/info.html` |
-| `/info/details` | `200 OK` | `public/info/details.html` |
-| `/info/details.html` | `200 OK` | `public/info/details.html` |
-| `/other` | `302 Found` | `public/other/index.html` |
-| `/other/` | `200 OK` | `public/other/index.html` |
-| `/other/index` | `200 OK` | `public/other/index.html` |
-| `/other/index.html` | `200 OK` | `public/other/index.html` |
+| URL path | HTTP response |
+| -------------------- | ------------- |
+| `/` | `200 OK`: `public/index.html` |
+| `/index.html` | `200 OK`: `public/index.html` |
+| `/index` | `200 OK`: `public/index.html` |
+| `/data` | `302 Found`: redirecting to `/data/` |
+| `/data/` | `200 OK`: `public/data/index.html` |
+| `/data.html` | `200 OK`: `public/data.html` |
+| `/info` | `302 Found`: redirecting to `/info/` |
+| `/info/` | `404 Not Found` Error Page |
+| `/info.html` | `200 OK`: `public/info.html` |
+| `/info/details` | `200 OK`: `public/info/details.html` |
+| `/info/details.html` | `200 OK`: `public/info/details.html` |
Note that when `public/data/index.html` exists, it takes priority over the `public/data.html` file
for both the `/data` and `/data/` URL paths.
diff --git a/scripts/changed-feature-flags b/scripts/changed-feature-flags
index ec082b05394..3a4f18bd78f 100755
--- a/scripts/changed-feature-flags
+++ b/scripts/changed-feature-flags
@@ -19,7 +19,7 @@ class GetFeatureFlagsFromFiles
def extracted_flags
files.each_with_object([]) do |file_path, all|
- next unless file_path =~ %r{/feature_flags/development/.*\.yml}
+ next unless file_path =~ %r{/feature_flags/(development|ops)/.*\.yml}
next unless File.exist?(file_path)
ff_yaml = YAML.safe_load(File.read(file_path))
diff --git a/spec/scripts/changed-feature-flags_spec.rb b/spec/scripts/changed-feature-flags_spec.rb
index cd26a5564d3..5c858588c0c 100644
--- a/spec/scripts/changed-feature-flags_spec.rb
+++ b/spec/scripts/changed-feature-flags_spec.rb
@@ -6,8 +6,6 @@ load File.expand_path('../../scripts/changed-feature-flags', __dir__)
RSpec.describe 'scripts/changed-feature-flags' do
describe GetFeatureFlagsFromFiles do
- let(:ff_dir) { FileUtils.mkdir_p(File.join(Dir.tmpdir, 'feature_flags', 'development')) }
-
let(:feature_flag_definition1) do
file = Tempfile.new('foo.yml', ff_dir)
file.write(<<~YAML)
@@ -30,43 +28,51 @@ RSpec.describe 'scripts/changed-feature-flags' do
file
end
- let(:feature_flag_definition_invalid_path) do
- file = Tempfile.new('foobar.yml')
- file.write(<<~YAML)
- ---
- name: not a feature flag
- YAML
- file.rewind
- file
- end
-
after do
FileUtils.remove_entry(ff_dir, true)
end
describe '.extracted_flags' do
- it 'returns feature flags' do
- subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path] })
+ shared_examples 'extract feature flags' do
+ it 'returns feature flags on their own' do
+ subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path] })
- expect(subject.extracted_flags).to eq('foo_flag,bar_flag')
+ expect(subject.extracted_flags).to eq('foo_flag,bar_flag')
+ end
+
+ it 'returns feature flags and their state as enabled' do
+ subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path], state: 'enabled' })
+
+ expect(subject.extracted_flags).to eq('foo_flag=enabled,bar_flag=enabled')
+ end
+
+ it 'returns feature flags and their state as disabled' do
+ subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path], state: 'disabled' })
+
+ expect(subject.extracted_flags).to eq('foo_flag=disabled,bar_flag=disabled')
+ end
end
- it 'returns feature flags and their state as enabled' do
- subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path], state: 'enabled' })
+ context 'with definition files in the development directory' do
+ let(:ff_dir) { FileUtils.mkdir_p(File.join(Dir.tmpdir, 'feature_flags', 'development')) }
- expect(subject.extracted_flags).to eq('foo_flag=enabled,bar_flag=enabled')
+ it_behaves_like 'extract feature flags'
end
- it 'returns feature flags and their state as disabled' do
- subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path], state: 'disabled' })
+ context 'with definition files in the ops directory' do
+ let(:ff_dir) { FileUtils.mkdir_p(File.join(Dir.tmpdir, 'feature_flags', 'ops')) }
- expect(subject.extracted_flags).to eq('foo_flag=disabled,bar_flag=disabled')
+ it_behaves_like 'extract feature flags'
end
- it 'ignores files that are not in the feature_flags/development directory' do
- subject = described_class.new({ files: [feature_flag_definition_invalid_path.path] })
+ context 'with definition files in the experiment directory' do
+ let(:ff_dir) { FileUtils.mkdir_p(File.join(Dir.tmpdir, 'feature_flags', 'experiment')) }
- expect(subject.extracted_flags).to eq('')
+ it 'ignores the files' do
+ subject = described_class.new({ files: [feature_flag_definition1.path, feature_flag_definition2.path] })
+
+ expect(subject.extracted_flags).to eq('')
+ end
end
end
end