From f8edb3a740b9ba434489a50b69c2e765cecb24b0 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 17 Nov 2021 03:09:55 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/rules.gitlab-ci.yml | 2 +- .nvmrc | 2 +- .rubocop_manual_todo.yml | 1 - .../14-2-deprecation-task-runner.yml | 2 +- .../15-0-deprecate-sles-12sp2.yml | 6 ++ doc/api/events.md | 59 +++---------------- doc/update/deprecations.md | 8 ++- .../dependency_scanning/index.md | 2 +- .../group/contribution_analytics/index.md | 2 +- doc/user/index.md | 50 ++++++++++++++++ doc/user/profile/index.md | 2 +- doc/user/project/pages/introduction.md | 43 ++++++-------- scripts/changed-feature-flags | 2 +- spec/scripts/changed-feature-flags_spec.rb | 54 +++++++++-------- 14 files changed, 126 insertions(+), 109 deletions(-) create mode 100644 data/deprecations/15-0-deprecate-sles-12sp2.yml 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