Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 18:09:10 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 18:09:10 +0300
commit8e129497b2565b8c595ef4f806d9a9595ca654e5 (patch)
tree7afeeca3ea58013c1e8c3a2055661bacf65577da
parent8ae26d705abe341b03bc15d4373d6cd0c77c0baf (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/clusters/components/applications.vue5
-rw-r--r--app/assets/javascripts/clusters/stores/clusters_store.js4
-rw-r--r--app/assets/javascripts/pages/registrations/new/index.js11
-rw-r--r--app/models/clusters/applications/elastic_stack.rb2
-rw-r--r--app/services/git/process_ref_changes_service.rb2
-rw-r--r--changelogs/unreleased/ak-upgrade-es.yml5
-rw-r--r--config/initializers/sidekiq_cluster.rb2
-rw-r--r--doc/administration/gitaly/praefect.md6
-rw-r--r--doc/api/graphql/reference/gitlab_schema.graphql129
-rw-r--r--doc/api/graphql/reference/gitlab_schema.json440
-rw-r--r--doc/api/graphql/reference/index.md38
-rw-r--r--doc/ci/docker/using_docker_images.md2
-rw-r--r--doc/ci/yaml/README.md3
-rw-r--r--doc/development/documentation/index.md7
-rw-r--r--doc/user/application_security/dast/index.md4
-rw-r--r--doc/user/clusters/applications.md35
-rw-r--r--lib/gitlab/ci/config.rb5
-rw-r--r--locale/gitlab.pot2
-rw-r--r--spec/lib/gitlab/ci/config_spec.rb20
-rw-r--r--spec/models/clusters/applications/elastic_stack_spec.rb4
-rw-r--r--spec/services/git/process_ref_changes_service_spec.rb36
21 files changed, 699 insertions, 63 deletions
diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue
index 442c52110f2..87d190e51c4 100644
--- a/app/assets/javascripts/clusters/components/applications.vue
+++ b/app/assets/javascripts/clusters/components/applications.vue
@@ -634,8 +634,13 @@ Crossplane runs inside your Kubernetes cluster and supports secure connectivity
:status-reason="applications.elastic_stack.statusReason"
:request-status="applications.elastic_stack.requestStatus"
:request-reason="applications.elastic_stack.requestReason"
+ :version="applications.elastic_stack.version"
+ :chart-repo="applications.elastic_stack.chartRepo"
+ :update-available="applications.elastic_stack.updateAvailable"
:installed="applications.elastic_stack.installed"
:install-failed="applications.elastic_stack.installFailed"
+ :update-successful="applications.elastic_stack.updateSuccessful"
+ :update-failed="applications.elastic_stack.updateFailed"
:uninstallable="applications.elastic_stack.uninstallable"
:uninstall-successful="applications.elastic_stack.uninstallSuccessful"
:uninstall-failed="applications.elastic_stack.uninstallFailed"
diff --git a/app/assets/javascripts/clusters/stores/clusters_store.js b/app/assets/javascripts/clusters/stores/clusters_store.js
index 1d17170cea1..00ed939e3b4 100644
--- a/app/assets/javascripts/clusters/stores/clusters_store.js
+++ b/app/assets/javascripts/clusters/stores/clusters_store.js
@@ -12,6 +12,7 @@ import {
INSTALL_EVENT,
UPDATE_EVENT,
UNINSTALL_EVENT,
+ ELASTIC_STACK,
} from '../constants';
import transitionApplicationState from '../services/application_state_machine';
@@ -237,6 +238,9 @@ export default class ClusterStore {
} else if (appId === RUNNER) {
this.state.applications.runner.version = version;
this.state.applications.runner.updateAvailable = updateAvailable;
+ } else if (appId === ELASTIC_STACK) {
+ this.state.applications.elastic_stack.version = version;
+ this.state.applications.elastic_stack.updateAvailable = updateAvailable;
}
});
}
diff --git a/app/assets/javascripts/pages/registrations/new/index.js b/app/assets/javascripts/pages/registrations/new/index.js
index a33d11f3613..4b4b0555bb2 100644
--- a/app/assets/javascripts/pages/registrations/new/index.js
+++ b/app/assets/javascripts/pages/registrations/new/index.js
@@ -1,9 +1,20 @@
import LengthValidator from '~/pages/sessions/new/length_validator';
import UsernameValidator from '~/pages/sessions/new/username_validator';
import NoEmojiValidator from '~/emoji/no_emoji_validator';
+import Tracking from '~/tracking';
document.addEventListener('DOMContentLoaded', () => {
new UsernameValidator(); // eslint-disable-line no-new
new LengthValidator(); // eslint-disable-line no-new
new NoEmojiValidator(); // eslint-disable-line no-new
});
+
+document.addEventListener('SnowplowInitialized', () => {
+ if (gon.tracking_data) {
+ const { category, action } = gon.tracking_data;
+
+ if (category && action) {
+ Tracking.event(category, action);
+ }
+ }
+});
diff --git a/app/models/clusters/applications/elastic_stack.rb b/app/models/clusters/applications/elastic_stack.rb
index f87d4e8ed49..afdc1c91c69 100644
--- a/app/models/clusters/applications/elastic_stack.rb
+++ b/app/models/clusters/applications/elastic_stack.rb
@@ -3,7 +3,7 @@
module Clusters
module Applications
class ElasticStack < ApplicationRecord
- VERSION = '1.8.0'
+ VERSION = '1.9.0'
ELASTICSEARCH_PORT = 9200
diff --git a/app/services/git/process_ref_changes_service.rb b/app/services/git/process_ref_changes_service.rb
index 3052bed51bc..387cd29d69d 100644
--- a/app/services/git/process_ref_changes_service.rb
+++ b/app/services/git/process_ref_changes_service.rb
@@ -35,7 +35,7 @@ module Git
end
def execute_project_hooks?(changes)
- (changes.size <= Gitlab::CurrentSettings.push_event_hooks_limit) || Feature.enabled?(:git_push_execute_all_project_hooks, project)
+ changes.size <= Gitlab::CurrentSettings.push_event_hooks_limit
end
def process_changes(ref_type, action, changes, execute_project_hooks:)
diff --git a/changelogs/unreleased/ak-upgrade-es.yml b/changelogs/unreleased/ak-upgrade-es.yml
new file mode 100644
index 00000000000..733c3582bbd
--- /dev/null
+++ b/changelogs/unreleased/ak-upgrade-es.yml
@@ -0,0 +1,5 @@
+---
+title: Upgrade Elastic Stack helm chart to 1.9.0
+merge_request: 27011
+author:
+type: changed
diff --git a/config/initializers/sidekiq_cluster.rb b/config/initializers/sidekiq_cluster.rb
index baa7495aa29..4622984fe0c 100644
--- a/config/initializers/sidekiq_cluster.rb
+++ b/config/initializers/sidekiq_cluster.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-if ENV['ENABLE_SIDEKIQ_CLUSTER'] && Gitlab.ee?
+if ENV['ENABLE_SIDEKIQ_CLUSTER']
Thread.new do
Thread.current.abort_on_exception = true
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index b0119bd1361..4e8dc533f44 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -423,6 +423,12 @@ documentation](index.md#3-gitaly-server-configuration).
gitlab-ctl reconfigure
```
+1. To ensure that Gitaly [has updated its Prometheus listen address](https://gitlab.com/gitlab-org/gitaly/-/issues/2521), [restart Gitaly](../restart_gitlab.md#omnibus-gitlab-restart):
+
+ ```shell
+ gitlab-ctl restart gitaly
+ ```
+
**Complete these steps for each Gitaly node!**
After all Gitaly nodes are configured, you can run the Praefect connection
diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql
index f3c06a917a7..86942c489b3 100644
--- a/doc/api/graphql/reference/gitlab_schema.graphql
+++ b/doc/api/graphql/reference/gitlab_schema.graphql
@@ -602,6 +602,46 @@ type CreateNotePayload {
}
"""
+Autogenerated input type of CreateRequirement
+"""
+input CreateRequirementInput {
+ """
+ A unique identifier for the client performing the mutation.
+ """
+ clientMutationId: String
+
+ """
+ The project full path the requirement is associated with
+ """
+ projectPath: ID!
+
+ """
+ Title of the requirement
+ """
+ title: String!
+}
+
+"""
+Autogenerated return type of CreateRequirement
+"""
+type CreateRequirementPayload {
+ """
+ A unique identifier for the client performing the mutation.
+ """
+ clientMutationId: String
+
+ """
+ Reasons why the mutation failed.
+ """
+ errors: [String!]!
+
+ """
+ The requirement after mutation
+ """
+ requirement: Requirement
+}
+
+"""
Autogenerated input type of CreateSnippet
"""
input CreateSnippetInput {
@@ -4952,6 +4992,7 @@ type Mutation {
createEpic(input: CreateEpicInput!): CreateEpicPayload
createImageDiffNote(input: CreateImageDiffNoteInput!): CreateImageDiffNotePayload
createNote(input: CreateNoteInput!): CreateNotePayload
+ createRequirement(input: CreateRequirementInput!): CreateRequirementPayload
createSnippet(input: CreateSnippetInput!): CreateSnippetPayload
designManagementDelete(input: DesignManagementDeleteInput!): DesignManagementDeletePayload
designManagementUpload(input: DesignManagementUploadInput!): DesignManagementUploadPayload
@@ -6574,6 +6615,94 @@ type Repository {
): Tree
}
+"""
+Represents a requirement.
+"""
+type Requirement {
+ """
+ Author of the requirement
+ """
+ author: User!
+
+ """
+ Timestamp of when the requirement was created
+ """
+ createdAt: Time!
+
+ """
+ ID of the requirement
+ """
+ id: ID!
+
+ """
+ Internal ID of the requirement
+ """
+ iid: ID!
+
+ """
+ Project to which the requirement belongs
+ """
+ project: Project!
+
+ """
+ State of the requirement
+ """
+ state: RequirementState!
+
+ """
+ Title of the requirement
+ """
+ title: String
+
+ """
+ Timestamp of when the requirement was last updated
+ """
+ updatedAt: Time!
+
+ """
+ Permissions for the current user on the resource
+ """
+ userPermissions: RequirementPermissions!
+}
+
+"""
+Check permissions for the current user on a requirement
+"""
+type RequirementPermissions {
+ """
+ Indicates the user can perform `admin_requirement` on this resource
+ """
+ adminRequirement: Boolean!
+
+ """
+ Indicates the user can perform `create_requirement` on this resource
+ """
+ createRequirement: Boolean!
+
+ """
+ Indicates the user can perform `destroy_requirement` on this resource
+ """
+ destroyRequirement: Boolean!
+
+ """
+ Indicates the user can perform `read_requirement` on this resource
+ """
+ readRequirement: Boolean!
+
+ """
+ Indicates the user can perform `update_requirement` on this resource
+ """
+ updateRequirement: Boolean!
+}
+
+"""
+State of a requirement
+"""
+enum RequirementState {
+ ARCHIVED
+ OPENED
+}
+
type RootStorageStatistics {
"""
The CI artifacts size in bytes
diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json
index 65ff33c923c..d618ca38772 100644
--- a/doc/api/graphql/reference/gitlab_schema.json
+++ b/doc/api/graphql/reference/gitlab_schema.json
@@ -1764,6 +1764,122 @@
},
{
"kind": "INPUT_OBJECT",
+ "name": "CreateRequirementInput",
+ "description": "Autogenerated input type of CreateRequirement",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "title",
+ "description": "Title of the requirement",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null
+ },
+ {
+ "name": "projectPath",
+ "description": "The project full path the requirement is associated with",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null
+ },
+ {
+ "name": "clientMutationId",
+ "description": "A unique identifier for the client performing the mutation.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateRequirementPayload",
+ "description": "Autogenerated return type of CreateRequirement",
+ "fields": [
+ {
+ "name": "clientMutationId",
+ "description": "A unique identifier for the client performing the mutation.",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": "Reasons why the mutation failed.",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "requirement",
+ "description": "The requirement after mutation",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Requirement",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+
+ ],
+ "enumValues": null,
+ "possibleTypes": null
+ },
+ {
+ "kind": "INPUT_OBJECT",
"name": "CreateSnippetInput",
"description": "Autogenerated input type of CreateSnippet",
"fields": null,
@@ -14391,6 +14507,33 @@
"deprecationReason": null
},
{
+ "name": "createRequirement",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateRequirementInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateRequirementPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
"name": "createSnippet",
"description": null,
"args": [
@@ -19794,6 +19937,303 @@
},
{
"kind": "OBJECT",
+ "name": "Requirement",
+ "description": "Represents a requirement.",
+ "fields": [
+ {
+ "name": "author",
+ "description": "Author of the requirement",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": "Timestamp of when the requirement was created",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Time",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": "ID of the requirement",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "iid",
+ "description": "Internal ID of the requirement",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "project",
+ "description": "Project to which the requirement belongs",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Project",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": "State of the requirement",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "RequirementState",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": "Title of the requirement",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": "Timestamp of when the requirement was last updated",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Time",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userPermissions",
+ "description": "Permissions for the current user on the resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "RequirementPermissions",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+
+ ],
+ "enumValues": null,
+ "possibleTypes": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "RequirementPermissions",
+ "description": "Check permissions for the current user on a requirement",
+ "fields": [
+ {
+ "name": "adminRequirement",
+ "description": "Indicates the user can perform `admin_requirement` on this resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createRequirement",
+ "description": "Indicates the user can perform `create_requirement` on this resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "destroyRequirement",
+ "description": "Indicates the user can perform `destroy_requirement` on this resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "readRequirement",
+ "description": "Indicates the user can perform `read_requirement` on this resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updateRequirement",
+ "description": "Indicates the user can perform `update_requirement` on this resource",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+
+ ],
+ "enumValues": null,
+ "possibleTypes": null
+ },
+ {
+ "kind": "ENUM",
+ "name": "RequirementState",
+ "description": "State of a requirement",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "OPENED",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ARCHIVED",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null
+ },
+ {
+ "kind": "OBJECT",
"name": "RootStorageStatistics",
"description": null,
"fields": [
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 6d78f897017..5d603714674 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -129,6 +129,16 @@ Autogenerated return type of CreateNote
| `errors` | String! => Array | Reasons why the mutation failed. |
| `note` | Note | The note after mutation |
+## CreateRequirementPayload
+
+Autogenerated return type of CreateRequirement
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
+| `errors` | String! => Array | Reasons why the mutation failed. |
+| `requirement` | Requirement | The requirement after mutation |
+
## CreateSnippetPayload
Autogenerated return type of CreateSnippet
@@ -982,6 +992,34 @@ Autogenerated return type of RemoveAwardEmoji
| `rootRef` | String | Default branch of the repository |
| `tree` | Tree | Tree of the repository |
+## Requirement
+
+Represents a requirement.
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `author` | User! | Author of the requirement |
+| `createdAt` | Time! | Timestamp of when the requirement was created |
+| `id` | ID! | ID of the requirement |
+| `iid` | ID! | Internal ID of the requirement |
+| `project` | Project! | Project to which the requirement belongs |
+| `state` | RequirementState! | State of the requirement |
+| `title` | String | Title of the requirement |
+| `updatedAt` | Time! | Timestamp of when the requirement was last updated |
+| `userPermissions` | RequirementPermissions! | Permissions for the current user on the resource |
+
+## RequirementPermissions
+
+Check permissions for the current user on a requirement
+
+| Name | Type | Description |
+| --- | ---- | ---------- |
+| `adminRequirement` | Boolean! | Indicates the user can perform `admin_requirement` on this resource |
+| `createRequirement` | Boolean! | Indicates the user can perform `create_requirement` on this resource |
+| `destroyRequirement` | Boolean! | Indicates the user can perform `destroy_requirement` on this resource |
+| `readRequirement` | Boolean! | Indicates the user can perform `read_requirement` on this resource |
+| `updateRequirement` | Boolean! | Indicates the user can perform `update_requirement` on this resource |
+
## RootStorageStatistics
| Name | Type | Description |
diff --git a/doc/ci/docker/using_docker_images.md b/doc/ci/docker/using_docker_images.md
index 32faa128e6b..3316113d776 100644
--- a/doc/ci/docker/using_docker_images.md
+++ b/doc/ci/docker/using_docker_images.md
@@ -489,7 +489,7 @@ Look for the `[runners.docker]` section:
```toml
[runners.docker]
- image = "ruby:2.1"
+ image = "ruby:latest"
services = ["mysql:latest", "postgres:latest"]
```
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 21eca42d8e7..50667a402f2 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -460,6 +460,9 @@ For example, the following are equivalent configuration:
- b
```
+NOTE: **Note:**
+A pipeline will not be created if it only contains jobs in `.pre` or `.post` stages.
+
### `stage`
`stage` is defined per-job and relies on [`stages`](#stages) which is defined
diff --git a/doc/development/documentation/index.md b/doc/development/documentation/index.md
index 694acc16a97..8300413a0a6 100644
--- a/doc/development/documentation/index.md
+++ b/doc/development/documentation/index.md
@@ -8,7 +8,7 @@ GitLab's documentation is [intended as the single source of truth (SSOT)](https:
In addition to this page, the following resources can help you craft and contribute documentation:
-- [Style Guide](styleguide.md) - What belongs in the docs, language guidelines, Markdown standards to follow, and more.
+- [Style Guide](styleguide.md) - What belongs in the docs, language guidelines, Markdown standards to follow, links, and more.
- [Structure and template](structure.md) - Learn the typical parts of a doc page and how to write each one.
- [Documentation process](workflow.md).
- [Markdown Guide](../../user/markdown.md) - A reference for all Markdown syntax supported by GitLab.
@@ -116,8 +116,9 @@ Things to note:
- The above `git grep` command will search recursively in the directory you run
it in for `workflow/lfs/lfs_administration` and `lfs/lfs_administration`
and will print the file and the line where this file is mentioned.
- You may ask why the two greps. Since we use relative paths to link to
- documentation, sometimes it might be useful to search a path deeper.
+ You may ask why the two greps. Since [we use relative paths to link to
+ documentation](styleguide.md#links)
+ , sometimes it might be useful to search a path deeper.
- The `*.md` extension is not used when a document is linked to GitLab's
built-in help page, that's why we omit it in `git grep`.
- Use the checklist on the "Change documentation location" MR description template.
diff --git a/doc/user/application_security/dast/index.md b/doc/user/application_security/dast/index.md
index 7bc7822ae30..dd87449a1b2 100644
--- a/doc/user/application_security/dast/index.md
+++ b/doc/user/application_security/dast/index.md
@@ -31,6 +31,10 @@ that is provided by [Auto DevOps](../../../topics/autodevops/index.md).
GitLab checks the DAST report, compares the found vulnerabilities between the source and target
branches, and shows the information right on the merge request.
+NOTE: **Note:**
+This comparison logic uses only the latest pipeline executed for the target branch's base commit.
+Running the pipeline on any other commit has no effect on the merge request.
+
![DAST Widget](img/dast_all.png)
By clicking on one of the detected linked vulnerabilities, you will be able to
diff --git a/doc/user/clusters/applications.md b/doc/user/clusters/applications.md
index b342128e069..0fa5e62dc68 100644
--- a/doc/user/clusters/applications.md
+++ b/doc/user/clusters/applications.md
@@ -488,6 +488,41 @@ The Elastic Stack cluster application is intended as a log aggregation solution
[Advanced Global Search](../search/advanced_global_search.md) functionality, which uses a separate
Elasticsearch cluster.
+#### Optional: deploy Kibana to perform advanced queries
+
+If you are an advanced user and have direct access to your Kubernetes cluster using `kubectl` and `helm`, you can deploy Kibana manually.
+
+The following assumes that `helm` has been [initialized](https://v2.helm.sh/docs/helm/) with `helm init`.
+
+Save the following to `kibana.yml`:
+
+```yaml
+elasticsearch:
+ enabled: false
+
+logstash:
+ enabled: false
+
+kibana:
+ enabled: true
+ env:
+ ELASTICSEARCH_HOSTS: http://elastic-stack-elasticsearch-client.gitlab-managed-apps.svc.cluster.local:9200
+```
+
+Then install it on your cluster:
+
+```shell
+helm install --name kibana stable/elastic-stack --values kibana.yml
+```
+
+To access kibana, forward the port to your local machine:
+
+```shell
+kubectl port-forward svc/kibana 5601:443
+```
+
+Then, you can visit Kibana at `http://localhost:5601`.
+
### Future apps
Interested in contributing a new GitLab managed app? Visit the
diff --git a/lib/gitlab/ci/config.rb b/lib/gitlab/ci/config.rb
index e069f734e32..10e0f4b8e4d 100644
--- a/lib/gitlab/ci/config.rb
+++ b/lib/gitlab/ci/config.rb
@@ -76,10 +76,7 @@ module Gitlab
initial_config = Gitlab::Config::Loader::Yaml.new(config).load!
initial_config = Config::External::Processor.new(initial_config, @context).perform
initial_config = Config::Extendable.new(initial_config).to_hash
-
- if Feature.enabled?(:ci_pre_post_pipeline_stages, @context.project, default_enabled: true)
- initial_config = Config::EdgeStagesInjector.new(initial_config).to_hash
- end
+ initial_config = Config::EdgeStagesInjector.new(initial_config).to_hash
initial_config
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index fd45ad4e521..c7ca9634e0e 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -6842,7 +6842,7 @@ msgstr ""
msgid "Detect host keys"
msgstr ""
-msgid "Detected %{timeago} in pipeline %{pipeline_link}"
+msgid "Detected %{timeago} in pipeline %{pipelineLink}"
msgstr ""
msgid "DevOps Score"
diff --git a/spec/lib/gitlab/ci/config_spec.rb b/spec/lib/gitlab/ci/config_spec.rb
index 82ca8a29c5a..d8101e8a621 100644
--- a/spec/lib/gitlab/ci/config_spec.rb
+++ b/spec/lib/gitlab/ci/config_spec.rb
@@ -79,26 +79,6 @@ describe Gitlab::Ci::Config do
it { is_expected.to eq %w[.pre stage1 stage2 .post] }
end
-
- context 'with feature disabled' do
- before do
- stub_feature_flags(ci_pre_post_pipeline_stages: false)
- end
-
- let(:yml) do
- <<-EOS
- stages:
- - stage1
- - stage2
- job1:
- stage: stage1
- script:
- - ls
- EOS
- end
-
- it { is_expected.to eq %w[stage1 stage2] }
- end
end
end
diff --git a/spec/models/clusters/applications/elastic_stack_spec.rb b/spec/models/clusters/applications/elastic_stack_spec.rb
index d336dc752c8..b0992c43d11 100644
--- a/spec/models/clusters/applications/elastic_stack_spec.rb
+++ b/spec/models/clusters/applications/elastic_stack_spec.rb
@@ -20,7 +20,7 @@ describe Clusters::Applications::ElasticStack do
it 'is initialized with elastic stack arguments' do
expect(subject.name).to eq('elastic-stack')
expect(subject.chart).to eq('stable/elastic-stack')
- expect(subject.version).to eq('1.8.0')
+ expect(subject.version).to eq('1.9.0')
expect(subject).to be_rbac
expect(subject.files).to eq(elastic_stack.files)
end
@@ -37,7 +37,7 @@ describe Clusters::Applications::ElasticStack do
let(:elastic_stack) { create(:clusters_applications_elastic_stack, :errored, version: '0.0.1') }
it 'is initialized with the locked version' do
- expect(subject.version).to eq('1.8.0')
+ expect(subject.version).to eq('1.9.0')
end
end
end
diff --git a/spec/services/git/process_ref_changes_service_spec.rb b/spec/services/git/process_ref_changes_service_spec.rb
index 35ddf95b5f6..fc5e379f51d 100644
--- a/spec/services/git/process_ref_changes_service_spec.rb
+++ b/spec/services/git/process_ref_changes_service_spec.rb
@@ -55,36 +55,14 @@ describe Git::ProcessRefChangesService do
stub_application_setting(push_event_hooks_limit: push_event_hooks_limit)
end
- context 'git_push_execute_all_project_hooks is disabled' do
- before do
- stub_feature_flags(git_push_execute_all_project_hooks: false)
- end
-
- it "calls #{push_service_class} with execute_project_hooks set to false" do
- expect(push_service_class)
- .to receive(:new)
- .with(project, project.owner, hash_including(execute_project_hooks: false))
- .exactly(changes.count).times
- .and_return(service)
-
- subject.execute
- end
- end
-
- context 'git_push_execute_all_project_hooks is enabled' do
- before do
- stub_feature_flags(git_push_execute_all_project_hooks: true)
- end
-
- it "calls #{push_service_class} with execute_project_hooks set to true" do
- expect(push_service_class)
- .to receive(:new)
- .with(project, project.owner, hash_including(execute_project_hooks: true))
- .exactly(changes.count).times
- .and_return(service)
+ it "calls #{push_service_class} with execute_project_hooks set to false" do
+ expect(push_service_class)
+ .to receive(:new)
+ .with(project, project.owner, hash_including(execute_project_hooks: false))
+ .exactly(changes.count).times
+ .and_return(service)
- subject.execute
- end
+ subject.execute
end
end