Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
5b6e9de025
commit
100b1a03e6
|
@ -283,10 +283,7 @@ export default {
|
|||
},
|
||||
created() {
|
||||
this.adjustView();
|
||||
|
||||
notesEventHub.$once('fetchDiffData', this.fetchData);
|
||||
notesEventHub.$on('refetchDiffData', this.refetchDiffData);
|
||||
eventHub.$on(EVT_VIEW_FILE_BY_FILE, this.fileByFileListener);
|
||||
this.subscribeToEvents();
|
||||
|
||||
this.CENTERED_LIMITED_CONTAINER_CLASSES = CENTERED_LIMITED_CONTAINER_CLASSES;
|
||||
|
||||
|
@ -307,11 +304,7 @@ export default {
|
|||
},
|
||||
beforeDestroy() {
|
||||
diffsApp.deinstrument();
|
||||
|
||||
eventHub.$off(EVT_VIEW_FILE_BY_FILE, this.fileByFileListener);
|
||||
notesEventHub.$off('refetchDiffData', this.refetchDiffData);
|
||||
notesEventHub.$off('fetchDiffData', this.fetchData);
|
||||
|
||||
this.unsubscribeFromEvents();
|
||||
this.removeEventListeners();
|
||||
},
|
||||
methods: {
|
||||
|
@ -331,6 +324,16 @@ export default {
|
|||
'navigateToDiffFileIndex',
|
||||
'setFileByFile',
|
||||
]),
|
||||
subscribeToEvents() {
|
||||
notesEventHub.$once('fetchDiffData', this.fetchData);
|
||||
notesEventHub.$on('refetchDiffData', this.refetchDiffData);
|
||||
eventHub.$on(EVT_VIEW_FILE_BY_FILE, this.fileByFileListener);
|
||||
},
|
||||
unsubscribeFromEvents() {
|
||||
eventHub.$off(EVT_VIEW_FILE_BY_FILE, this.fileByFileListener);
|
||||
notesEventHub.$off('refetchDiffData', this.refetchDiffData);
|
||||
notesEventHub.$off('fetchDiffData', this.fetchData);
|
||||
},
|
||||
fileByFileListener({ setting } = {}) {
|
||||
this.setFileByFile({ fileByFile: setting });
|
||||
},
|
||||
|
|
|
@ -114,7 +114,8 @@ export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => {
|
|||
}
|
||||
|
||||
if (
|
||||
(diffsGradualLoad && totalLoaded === pagination.total_pages) ||
|
||||
(diffsGradualLoad &&
|
||||
(totalLoaded === pagination.total_pages || pagination.total_pages === null)) ||
|
||||
(!diffsGradualLoad && !pagination.next_page)
|
||||
) {
|
||||
commit(types.SET_RETRIEVING_BATCHES, false);
|
||||
|
|
|
@ -341,7 +341,8 @@
|
|||
}
|
||||
|
||||
.droplab-dropdown {
|
||||
.dropdown-toggle > i {
|
||||
.dropdown-toggle > i,
|
||||
.dropdown-toggle > svg {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
.notification-list-item {
|
||||
line-height: 34px;
|
||||
|
||||
.dropdown-menu {
|
||||
@extend .dropdown-menu-right;
|
||||
}
|
||||
|
|
|
@ -12,5 +12,5 @@
|
|||
= render 'shared/notifications/button', notification_setting: setting, emails_disabled: emails_disabled
|
||||
|
||||
.table-section.section-30
|
||||
= form_for setting, url: profile_notifications_group_path(group), method: :put, html: { class: 'update-notifications' } do |f|
|
||||
= form_for setting, url: profile_notifications_group_path(group), method: :put, html: { class: 'update-notifications gl-display-flex' } do |f|
|
||||
= f.select :notification_email, @user.public_verified_emails, { include_blank: 'Global notification email' }, class: 'select2 js-group-notification-email'
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
- if @note.can_be_discussion_note?
|
||||
= button_tag type: 'button', class: 'btn btn-nr dropdown-toggle btn-success js-note-new-discussion js-disable-on-submit', data: { 'dropdown-trigger' => '#resolvable-comment-menu' }, 'aria-label' => _('Open comment type dropdown') do
|
||||
= icon('caret-down', class: 'toggle-icon')
|
||||
= sprite_icon('chevron-down')
|
||||
|
||||
%ul#resolvable-comment-menu.dropdown-menu.dropdown-open-top{ data: { dropdown: true } }
|
||||
%li#comment.droplab-item-selected{ data: { value: '', 'submit-text' => _('Comment'), 'close-text' => _("Comment & close %{noteable_name}") % { noteable_name: noteable_name }, 'reopen-text' => _("Comment & reopen %{noteable_name}") % { noteable_name: noteable_name } } }
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
%button.dropdown-new.btn.btn-default.btn-icon.gl-button.has-tooltip.notifications-btn.text-left#notifications-button{ type: "button", title: button_title, class: "#{btn_class}", "aria-label" => aria_label, data: { container: "body", toggle: "modal", target: "#" + notifications_menu_identifier("modal", notification_setting), display: 'static' } }
|
||||
= sprite_icon("notifications", css_class: "js-notification-loading")
|
||||
= notification_title(notification_setting.level)
|
||||
%button.btn.dropdown-toggle.d-flex{ data: { toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } }
|
||||
= icon('caret-down')
|
||||
%button.btn.dropdown-toggle.gl-display-flex.gl-align-items-center{ data: { toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } }
|
||||
= sprite_icon('chevron-down')
|
||||
.sr-only Toggle dropdown
|
||||
- else
|
||||
%button.dropdown-new.btn.btn-default.btn-icon.gl-button.has-tooltip.notifications-btn#notifications-button{ type: "button", title: button_title, class: "#{btn_class}", "aria-label" => aria_label, data: { container: "body", toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } }
|
||||
|
@ -29,7 +29,7 @@
|
|||
= sprite_icon("notifications", css_class: "js-notification-loading")
|
||||
= notification_title(notification_setting.level)
|
||||
.float-right
|
||||
= icon("caret-down")
|
||||
= sprite_icon("chevron-down")
|
||||
|
||||
= render "shared/notifications/notification_dropdown", notification_setting: notification_setting
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
.hook-test-button.dropdown.inline>
|
||||
%button.btn{ 'data-toggle' => 'dropdown', class: button_class }
|
||||
= _('Test')
|
||||
= icon('caret-down')
|
||||
= sprite_icon('chevron-down')
|
||||
%ul.dropdown-menu.dropdown-menu-right{ role: 'menu' }
|
||||
- triggers.each_value do |event|
|
||||
%li
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Convert bootstrap carets to svg chevrons
|
||||
merge_request: 48492
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Disable auto admin mode on requests and views specs
|
||||
merge_request: 48700
|
||||
author: Diego Louzán
|
||||
type: other
|
|
@ -434,11 +434,6 @@ data before running `pg_basebackup`.
|
|||
NOTE:
|
||||
Replication slot names must only contain lowercase letters, numbers, and the underscore character.
|
||||
|
||||
NOTE:
|
||||
In GitLab 13.4, a seed project is added when GitLab is first installed. This makes it necessary to pass `--force` even
|
||||
on a new Geo secondary node. There is an [issue to account for seed projects](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5618)
|
||||
when checking the database.
|
||||
|
||||
When prompted, enter the _plaintext_ password you set up for the `gitlab_replicator`
|
||||
user in the first step.
|
||||
|
||||
|
|
|
@ -3290,6 +3290,11 @@ type ComplianceFrameworkEdge {
|
|||
node: ComplianceFramework
|
||||
}
|
||||
|
||||
"""
|
||||
Identifier of ComplianceManagement::Framework
|
||||
"""
|
||||
scalar ComplianceManagementFrameworkID
|
||||
|
||||
"""
|
||||
Autogenerated input type of ConfigureSast
|
||||
"""
|
||||
|
@ -6545,6 +6550,36 @@ type DestroyBoardPayload {
|
|||
errors: [String!]!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated input type of DestroyComplianceFramework
|
||||
"""
|
||||
input DestroyComplianceFrameworkInput {
|
||||
"""
|
||||
A unique identifier for the client performing the mutation.
|
||||
"""
|
||||
clientMutationId: String
|
||||
|
||||
"""
|
||||
The global ID of the compliance framework to destroy
|
||||
"""
|
||||
id: ComplianceManagementFrameworkID!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated return type of DestroyComplianceFramework
|
||||
"""
|
||||
type DestroyComplianceFrameworkPayload {
|
||||
"""
|
||||
A unique identifier for the client performing the mutation.
|
||||
"""
|
||||
clientMutationId: String
|
||||
|
||||
"""
|
||||
Errors encountered during execution of the mutation.
|
||||
"""
|
||||
errors: [String!]!
|
||||
}
|
||||
|
||||
"""
|
||||
Autogenerated input type of DestroyContainerRepository
|
||||
"""
|
||||
|
@ -14247,6 +14282,7 @@ type Mutation {
|
|||
designManagementUpload(input: DesignManagementUploadInput!): DesignManagementUploadPayload
|
||||
destroyBoard(input: DestroyBoardInput!): DestroyBoardPayload
|
||||
destroyBoardList(input: DestroyBoardListInput!): DestroyBoardListPayload
|
||||
destroyComplianceFramework(input: DestroyComplianceFrameworkInput!): DestroyComplianceFrameworkPayload
|
||||
destroyContainerRepository(input: DestroyContainerRepositoryInput!): DestroyContainerRepositoryPayload
|
||||
destroyNote(input: DestroyNoteInput!): DestroyNotePayload
|
||||
destroySnippet(input: DestroySnippetInput!): DestroySnippetPayload
|
||||
|
|
|
@ -9045,6 +9045,16 @@
|
|||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "SCALAR",
|
||||
"name": "ComplianceManagementFrameworkID",
|
||||
"description": "Identifier of ComplianceManagement::Framework",
|
||||
"fields": null,
|
||||
"inputFields": null,
|
||||
"interfaces": null,
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "ConfigureSastInput",
|
||||
|
@ -18130,6 +18140,94 @@
|
|||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyComplianceFrameworkInput",
|
||||
"description": "Autogenerated input type of DestroyComplianceFramework",
|
||||
"fields": null,
|
||||
"inputFields": [
|
||||
{
|
||||
"name": "id",
|
||||
"description": "The global ID of the compliance framework to destroy",
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "SCALAR",
|
||||
"name": "ComplianceManagementFrameworkID",
|
||||
"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": "DestroyComplianceFrameworkPayload",
|
||||
"description": "Autogenerated return type of DestroyComplianceFramework",
|
||||
"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": "Errors encountered during execution of the mutation.",
|
||||
"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
|
||||
}
|
||||
],
|
||||
"inputFields": null,
|
||||
"interfaces": [
|
||||
|
||||
],
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyContainerRepositoryInput",
|
||||
|
@ -40589,6 +40687,33 @@
|
|||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "destroyComplianceFramework",
|
||||
"description": null,
|
||||
"args": [
|
||||
{
|
||||
"name": "input",
|
||||
"description": null,
|
||||
"type": {
|
||||
"kind": "NON_NULL",
|
||||
"name": null,
|
||||
"ofType": {
|
||||
"kind": "INPUT_OBJECT",
|
||||
"name": "DestroyComplianceFrameworkInput",
|
||||
"ofType": null
|
||||
}
|
||||
},
|
||||
"defaultValue": null
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
"kind": "OBJECT",
|
||||
"name": "DestroyComplianceFrameworkPayload",
|
||||
"ofType": null
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "destroyContainerRepository",
|
||||
"description": null,
|
||||
|
|
|
@ -1099,6 +1099,15 @@ Autogenerated return type of DestroyBoard.
|
|||
| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
|
||||
| `errors` | String! => Array | Errors encountered during execution of the mutation. |
|
||||
|
||||
### DestroyComplianceFrameworkPayload
|
||||
|
||||
Autogenerated return type of DestroyComplianceFramework.
|
||||
|
||||
| Field | Type | Description |
|
||||
| ----- | ---- | ----------- |
|
||||
| `clientMutationId` | String | A unique identifier for the client performing the mutation. |
|
||||
| `errors` | String! => Array | Errors encountered during execution of the mutation. |
|
||||
|
||||
### DestroyContainerRepositoryPayload
|
||||
|
||||
Autogenerated return type of DestroyContainerRepository.
|
||||
|
|
|
@ -19,9 +19,10 @@ but also across projects with multi-project pipelines.
|
|||
Multi-project pipelines are useful for larger products that require cross-project inter-dependencies, such as those
|
||||
adopting a [microservices architecture](https://about.gitlab.com/blog/2016/08/16/trends-in-version-control-land-microservices/).
|
||||
|
||||
For a demonstration of how cross-functional development teams can use cross-pipeline
|
||||
triggering to trigger multiple pipelines for different microservices projects, see
|
||||
[Cross-project Pipeline Triggering and Visualization](https://about.gitlab.com/handbook/marketing/product-marketing/demo/#cross-project-pipeline-triggering-and-visualization-may-2019---1110).
|
||||
Cross-functional development teams can use cross-pipeline
|
||||
triggering to trigger multiple pipelines for different microservices projects. Learn more
|
||||
in the [Cross-project Pipeline Triggering and Visualization demo](https://about.gitlab.com/learn/)
|
||||
at GitLab@learn, in the Continuous Integration (CI) section.
|
||||
|
||||
Additionally, it's possible to visualize the entire pipeline, including all cross-project
|
||||
inter-dependencies. **(PREMIUM)**
|
||||
|
|
|
@ -629,17 +629,21 @@ that are scoped to a single [configuration keyword](../ci/yaml/README.md#job-key
|
|||
|
||||
| Job definitions | Description |
|
||||
|------------------|-------------|
|
||||
| `.default-tags` | Ensures a job has the `gitlab-org` tag to ensure it's using our dedicated runners. |
|
||||
| `.default-retry` | Allows a job to [retry](../ci/yaml/README.md#retry) upon `unknown_failure`, `api_failure`, `runner_system_failure`, `job_execution_timeout`, or `stuck_or_timeout_failure`. |
|
||||
| `.default-before_script` | Allows a job to use a default `before_script` definition suitable for Ruby/Rails tasks that may need a database running (e.g. tests). |
|
||||
| `.rails-cache` | Allows a job to use a default `cache` definition suitable for Ruby/Rails tasks. |
|
||||
| `.static-analysis-cache` | Allows a job to use a default `cache` definition suitable for static analysis tasks. |
|
||||
| `.coverage-cache` | Allows a job to use a default `cache` definition suitable for coverage tasks. |
|
||||
| `.qa-cache` | Allows a job to use a default `cache` definition suitable for QA tasks. |
|
||||
| `.yarn-cache` | Allows a job to use a default `cache` definition suitable for frontend jobs that do a `yarn install`. |
|
||||
| `.assets-compile-cache` | Allows a job to use a default `cache` definition suitable for frontend jobs that compile assets. |
|
||||
| `.use-pg11` | Allows a job to use the `postgres:11.6` and `redis:4.0-alpine` services. |
|
||||
| `.use-pg11-ee` | Same as `.use-pg11` but also use the `docker.elastic.co/elasticsearch/elasticsearch:6.4.2` services. |
|
||||
| `.use-pg11-ee` | Same as `.use-pg11` but also use the `docker.elastic.co/elasticsearch/elasticsearch:7.9.2` services. |
|
||||
| `.use-pg12` | Allows a job to use the `postgres:12` and `redis:4.0-alpine` services. |
|
||||
| `.use-pg12-ee` | Same as `.use-pg12` but also use the `docker.elastic.co/elasticsearch/elasticsearch:7.9.2` services. |
|
||||
| `.use-kaniko` | Allows a job to use the `kaniko` tool to build Docker images. |
|
||||
| `.as-if-foss` | Simulate the FOSS project by setting the `FOSS_ONLY='1'` environment variable. |
|
||||
| `.use-docker-in-docker` | Allows a job to use Docker in Docker. |
|
||||
|
||||
### `rules`, `if:` conditions and `changes:` patterns
|
||||
|
||||
|
@ -656,6 +660,7 @@ and included in `rules` definitions via [YAML anchors](../ci/yaml/README.md#anch
|
|||
|
||||
#### `if:` conditions
|
||||
|
||||
<!-- vale gitlab.Substitutions = NO -->
|
||||
| `if:` conditions | Description | Notes |
|
||||
|------------------|-------------|-------|
|
||||
| `if-not-canonical-namespace` | Matches if the project isn't in the canonical (`gitlab-org/`) or security (`gitlab-org/security`) namespace. | Use to create a job for forks (by using `when: on_success\|manual`), or **not** create a job for forks (by using `when: never`). |
|
||||
|
@ -663,26 +668,45 @@ and included in `rules` definitions via [YAML anchors](../ci/yaml/README.md#anch
|
|||
| `if-not-foss` | Matches if the project isn't FOSS (i.e. project name isn't `gitlab-foss`, `gitlab-ce`, or `gitlabhq`). | Use to create a job only in the EE project (by using `when: on_success|manual`), or **not** create a job if the project is FOSS (by using `when: never`). |
|
||||
| `if-default-refs` | Matches if the pipeline is for `master`, `/^[\d-]+-stable(-ee)?$/` (stable branches), `/^\d+-\d+-auto-deploy-\d+$/` (auto-deploy branches), `/^security\//` (security branches), merge requests, and tags. | Note that jobs aren't created for branches with this default configuration. |
|
||||
| `if-master-refs` | Matches if the current branch is `master`. | |
|
||||
| `if-master-push` | Matches if the current branch is `master` and pipeline source is `push`. | |
|
||||
| `if-master-schedule-2-hourly` | Matches if the current branch is `master` and pipeline runs on a 2-hourly schedule. | |
|
||||
| `if-master-schedule-2-nightly` | Matches if the current branch is `master` and pipeline runs on a nightly schedule. | |
|
||||
| `if-auto-deploy-branches` | Matches if the current branch is an auto-deploy one. | |
|
||||
| `if-master-or-tag` | Matches if the pipeline is for the `master` branch or for a tag. | |
|
||||
| `if-merge-request` | Matches if the pipeline is for a merge request. | |
|
||||
| `if-merge-request-title-as-if-foss` | Matches if the pipeline is for a merge request and the MR title includes "RUN AS-IF-FOSS". | |
|
||||
| `if-merge-request-title-update-caches` | Matches if the pipeline is for a merge request and the MR title includes "UPDATE CACHE". | |
|
||||
| `if-merge-request-title-run-all-rspec` | Matches if the pipeline is for a merge request and the MR title includes "RUN ALL RSPEC". | |
|
||||
| `if-security-merge-request` | Matches if the pipeline is for a security merge request. | |
|
||||
| `if-security-schedule` | Matches if the pipeline is for a security scheduled pipeline. | |
|
||||
| `if-nightly-master-schedule` | Matches if the pipeline is for a `master` scheduled pipeline with `$NIGHTLY` set. | |
|
||||
| `if-dot-com-gitlab-org-schedule` | Limits jobs creation to scheduled pipelines for the `gitlab-org` group on GitLab.com. | |
|
||||
| `if-dot-com-gitlab-org-master` | Limits jobs creation to the `master` branch for the `gitlab-org` group on GitLab.com. | |
|
||||
| `if-dot-com-gitlab-org-merge-request` | Limits jobs creation to merge requests for the `gitlab-org` group on GitLab.com. | |
|
||||
| `if-dot-com-gitlab-org-and-security-tag` | Limits job creation to tags for the `gitlab-org` and `gitlab-org/security` groups on GitLab.com. | |
|
||||
| `if-dot-com-gitlab-org-and-security-merge-request` | Limit jobs creation to merge requests for the `gitlab-org` and `gitlab-org/security` groups on GitLab.com. | |
|
||||
| `if-dot-com-gitlab-org-and-security-tag` | Limit jobs creation to tags for the `gitlab-org` and `gitlab-org/security` groups on GitLab.com. | |
|
||||
| `if-dot-com-ee-schedule` | Limits jobs to scheduled pipelines for the `gitlab-org/gitlab` project on GitLab.com. | |
|
||||
| `if-cache-credentials-schedule` | Limits jobs to scheduled pipelines with the `$CI_REPO_CACHE_CREDENTIALS` variable set. | |
|
||||
| `if-rspec-fail-fast-disabled` | Limits jobs to pipelines with `$RSPEC_FAIL_FAST_ENABLED` variable not set to `"true"`. | |
|
||||
| `if-rspec-fail-fast-skipped` | Matches if the pipeline is for a merge request and the MR title includes "SKIP RSPEC FAIL-FAST". | |
|
||||
| `if-security-pipeline-merge-result` | Matches if the pipeline is for a security merge request triggerred by `@gitlab-release-tools-bot`. | |
|
||||
<!-- vale gitlab.Substitutions = YES -->
|
||||
|
||||
#### `changes:` patterns
|
||||
|
||||
| `changes:` patterns | Description |
|
||||
|------------------------------|--------------------------------------------------------------------------|
|
||||
| `ci-patterns` | Only create job for CI config-related changes. |
|
||||
| `yaml-patterns` | Only create job for YAML-related changes. |
|
||||
| `ci-build-images-patterns` | Only create job for CI config-related changes related to the `build-images` stage. |
|
||||
| `ci-review-patterns` | Only create job for CI config-related changes related to the `review` stage. |
|
||||
| `ci-qa-patterns` | Only create job for CI config-related changes related to the `qa` stage. |
|
||||
| `yaml-lint-patterns` | Only create job for YAML-related changes. |
|
||||
| `docs-patterns` | Only create job for docs-related changes. |
|
||||
| `frontend-dependency-patterns` | Only create job when frontend dependencies are updated (i.e. `package.json`, and `yarn.lock`). changes. |
|
||||
| `frontend-patterns` | Only create job for frontend-related changes. |
|
||||
| `backend-patterns` | Only create job for backend-related changes. |
|
||||
| `db-patterns` | Only create job for DB-related changes. |
|
||||
| `backstage-patterns` | Only create job for backstage-related changes (i.e. Danger, fixtures, RuboCop, specs). |
|
||||
| `code-patterns` | Only create job for code-related changes. |
|
||||
| `qa-patterns` | Only create job for QA-related changes. |
|
||||
|
|
|
@ -61,7 +61,7 @@ apifuzzer_fuzz:
|
|||
- if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
|
||||
$CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
|
||||
when: never
|
||||
- if: $GITLAB_FEATURES =~ /\bapi_fuzzing\b/
|
||||
- if: $CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bapi_fuzzing\b/
|
||||
script:
|
||||
#
|
||||
# Validate options
|
||||
|
@ -102,7 +102,7 @@ apifuzzer_fuzz_dnd:
|
|||
- if: $API_FUZZING_DISABLED_FOR_DEFAULT_BRANCH &&
|
||||
$CI_DEFAULT_BRANCH == $CI_COMMIT_REF_NAME
|
||||
when: never
|
||||
- if: $GITLAB_FEATURES =~ /\bapi_fuzzing\b/
|
||||
- if: $CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bapi_fuzzing\b/
|
||||
services:
|
||||
- docker:19.03.12-dind
|
||||
script:
|
||||
|
|
|
@ -9634,7 +9634,7 @@ msgstr ""
|
|||
msgid "DevopsAdoption|DevOps adoption uses segments to track adoption across key features. Segments are a way to track multiple related projects and groups at once. For example, you could create a segment for the engineering department or a particular product team."
|
||||
msgstr ""
|
||||
|
||||
msgid "DevopsAdoption|Feature adoption is based on usage over the last 30 days. Last updated: %{timestamp}."
|
||||
msgid "DevopsAdoption|Feature adoption is based on usage in the last calendar month. Last updated: %{timestamp}."
|
||||
msgstr ""
|
||||
|
||||
msgid "DevopsAdoption|Issues"
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
"@babel/preset-env": "^7.10.1",
|
||||
"@gitlab/at.js": "1.5.5",
|
||||
"@gitlab/svgs": "1.176.0",
|
||||
"@gitlab/ui": "24.4.0",
|
||||
"@gitlab/ui": "24.5.0",
|
||||
"@gitlab/visual-review-tools": "1.6.1",
|
||||
"@rails/actioncable": "^6.0.3-3",
|
||||
"@rails/ujs": "^6.0.3-2",
|
||||
|
|
|
@ -4,6 +4,7 @@ require 'spec_helper'
|
|||
|
||||
RSpec.describe Admin::AbuseReportsController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
include AdminModeHelper
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let!(:abuse_report) { create(:abuse_report) }
|
||||
|
@ -18,6 +19,7 @@ RSpec.describe Admin::AbuseReportsController, '(JavaScript fixtures)', type: :co
|
|||
|
||||
before do
|
||||
sign_in(admin)
|
||||
enable_admin_mode!(admin)
|
||||
end
|
||||
|
||||
it 'abuse_reports/abuse_reports_list.html' do
|
||||
|
|
|
@ -5,12 +5,14 @@ require 'spec_helper'
|
|||
RSpec.describe Admin::UsersController, '(JavaScript fixtures)', type: :controller do
|
||||
include StubENV
|
||||
include JavaScriptFixturesHelpers
|
||||
include AdminModeHelper
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
|
||||
before do
|
||||
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
|
||||
sign_in(admin)
|
||||
enable_admin_mode!(admin)
|
||||
end
|
||||
|
||||
render_views
|
||||
|
|
|
@ -5,6 +5,7 @@ require 'spec_helper'
|
|||
RSpec.describe Admin::ApplicationSettingsController, '(JavaScript fixtures)', type: :controller do
|
||||
include StubENV
|
||||
include JavaScriptFixturesHelpers
|
||||
include AdminModeHelper
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
|
@ -13,6 +14,7 @@ RSpec.describe Admin::ApplicationSettingsController, '(JavaScript fixtures)', ty
|
|||
before do
|
||||
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
|
||||
sign_in(admin)
|
||||
enable_admin_mode!(admin)
|
||||
end
|
||||
|
||||
render_views
|
||||
|
|
|
@ -5,7 +5,7 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:group) { create(:group, name: 'frontend-fixtures') }
|
||||
let_it_be(:project) { create(:project, namespace: group, path: 'autocomplete-sources-project') }
|
||||
let_it_be(:issue) { create(:issue, project: project) }
|
||||
|
@ -15,7 +15,8 @@ RSpec.describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)',
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
group.add_owner(user)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'autocomplete_sources/labels.json' do
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::BlobController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'branches-project') }
|
||||
let(:user) { project.owner }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -16,7 +16,7 @@ RSpec.describe Projects::BlobController, '(JavaScript fixtures)', type: :control
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
allow(SecureRandom).to receive(:hex).and_return('securerandomhex:thereisnospoon')
|
||||
end
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
RSpec.describe 'Branches (JavaScript fixtures)' do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
let_it_be(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let_it_be(:project) { create(:project, :repository, namespace: namespace, path: 'branches-project') }
|
||||
let_it_be(:user) { project.owner }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('branches/')
|
||||
|
@ -22,7 +22,7 @@ RSpec.describe 'Branches (JavaScript fixtures)' do
|
|||
render_views
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'branches/new_branch.html' do
|
||||
|
@ -44,7 +44,7 @@ RSpec.describe 'Branches (JavaScript fixtures)' do
|
|||
# - "master": default, protected
|
||||
# - "markdown": non-default, protected
|
||||
# - "many_files": non-default, not protected
|
||||
get api("/projects/#{project.id}/repository/branches?search=ma", admin)
|
||||
get api("/projects/#{project.id}/repository/branches?search=ma", user)
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
|
|
@ -5,10 +5,10 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::ClustersController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace) }
|
||||
let(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) }
|
||||
let(:user) { project.owner }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -17,7 +17,7 @@ RSpec.describe Projects::ClustersController, '(JavaScript fixtures)', type: :con
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -6,14 +6,12 @@ RSpec.describe 'Commit (JavaScript fixtures)' do
|
|||
include JavaScriptFixturesHelpers
|
||||
|
||||
let_it_be(:project) { create(:project, :repository) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:user) { project.owner }
|
||||
let_it_be(:commit) { project.commit("master") }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('commit/')
|
||||
clean_frontend_fixtures('api/commits/')
|
||||
|
||||
project.add_maintainer(user)
|
||||
end
|
||||
|
||||
before do
|
||||
|
|
|
@ -4,6 +4,7 @@ require 'spec_helper'
|
|||
|
||||
RSpec.describe Projects::DeployKeysController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
include AdminModeHelper
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
|
@ -17,7 +18,10 @@ RSpec.describe Projects::DeployKeysController, '(JavaScript fixtures)', type: :c
|
|||
end
|
||||
|
||||
before do
|
||||
# Using an admin for these fixtures because they are used for verifying a frontend
|
||||
# component that would normally get its data from `Admin::DeployKeysController`
|
||||
sign_in(admin)
|
||||
enable_admin_mode!(admin)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -6,8 +6,8 @@ RSpec.describe 'Freeze Periods (JavaScript fixtures)' do
|
|||
include JavaScriptFixturesHelpers
|
||||
include TimeZoneHelper
|
||||
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
let_it_be(:project) { create(:project, :repository, path: 'freeze-periods-project') }
|
||||
let_it_be(:user) { project.owner }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('api/freeze-periods/')
|
||||
|
@ -34,7 +34,7 @@ RSpec.describe 'Freeze Periods (JavaScript fixtures)' do
|
|||
create(:ci_freeze_period, project: project, freeze_start: '0 12 * * 1-5', freeze_end: '0 1 5 * *', cron_timezone: 'Etc/UTC')
|
||||
create(:ci_freeze_period, project: project, freeze_start: '0 12 * * 1-5', freeze_end: '0 16 * * 6', cron_timezone: 'Europe/Berlin')
|
||||
|
||||
get api("/projects/#{project.id}/freeze_periods", admin)
|
||||
get api("/projects/#{project.id}/freeze_periods", user)
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
|
|
@ -5,20 +5,20 @@ require 'spec_helper'
|
|||
RSpec.describe 'Groups (JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:user) { create(:user) }
|
||||
let(:group) { create(:group, name: 'frontend-fixtures-group', runners_token: 'runnerstoken:intabulasreferre')}
|
||||
|
||||
render_views
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('groups/')
|
||||
end
|
||||
|
||||
before do
|
||||
group.add_maintainer(admin)
|
||||
sign_in(admin)
|
||||
group.add_owner(user)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
render_views
|
||||
|
||||
describe GroupsController, '(JavaScript fixtures)', type: :controller do
|
||||
it 'groups/edit.html' do
|
||||
get :edit, params: { id: group }
|
||||
|
|
|
@ -5,7 +5,7 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::IssuesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin, feed_token: 'feedtoken:coldfeed') }
|
||||
let(:user) { create(:user, feed_token: 'feedtoken:coldfeed') }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project_empty_repo, namespace: namespace, path: 'issues-project') }
|
||||
|
||||
|
@ -16,7 +16,8 @@ RSpec.describe Projects::IssuesController, '(JavaScript fixtures)', type: :contr
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
project.add_maintainer(user)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::JobsController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'builds-project') }
|
||||
let(:user) { project.owner }
|
||||
let(:pipeline) { create(:ci_empty_pipeline, project: project, sha: project.commit.id) }
|
||||
let!(:build_with_artifacts) { create(:ci_build, :success, :artifacts, :trace_artifact, pipeline: pipeline, stage: 'test', artifacts_expire_at: Time.now + 18.months) }
|
||||
let!(:failed_build) { create(:ci_build, :failed, pipeline: pipeline, stage: 'build') }
|
||||
|
@ -26,7 +26,7 @@ RSpec.describe Projects::JobsController, '(JavaScript fixtures)', type: :control
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -5,7 +5,7 @@ require 'spec_helper'
|
|||
RSpec.describe 'Labels (JavaScript fixtures)' do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:user) { create(:user) }
|
||||
let(:group) { create(:group, name: 'frontend-fixtures-group' )}
|
||||
let(:project) { create(:project_empty_repo, namespace: group, path: 'labels-project') }
|
||||
|
||||
|
@ -29,8 +29,6 @@ RSpec.describe 'Labels (JavaScript fixtures)' do
|
|||
include JavaScriptFixturesHelpers
|
||||
include ApiHelpers
|
||||
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
group.add_owner(user)
|
||||
end
|
||||
|
@ -46,7 +44,8 @@ RSpec.describe 'Labels (JavaScript fixtures)' do
|
|||
render_views
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
group.add_owner(user)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'labels/project_labels.json' do
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'merge-requests-project') }
|
||||
let(:user) { project.owner }
|
||||
|
||||
# rubocop: disable Layout/TrailingWhitespace
|
||||
let(:description) do
|
||||
|
@ -55,7 +55,7 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type:
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
allow(Discussion).to receive(:build_discussion_id).and_return(['discussionid:ceterumcenseo'])
|
||||
end
|
||||
|
||||
|
@ -64,7 +64,7 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type:
|
|||
end
|
||||
|
||||
it 'merge_requests/merge_request_of_current_user.html' do
|
||||
merge_request.update(author: admin)
|
||||
merge_request.update(author: user)
|
||||
|
||||
render_merge_request(merge_request)
|
||||
end
|
||||
|
@ -76,19 +76,19 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type:
|
|||
end
|
||||
|
||||
it 'merge_requests/diff_comment.html' do
|
||||
create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request)
|
||||
create(:note_on_merge_request, author: admin, project: project, noteable: merge_request)
|
||||
create(:diff_note_on_merge_request, project: project, author: user, position: position, noteable: merge_request)
|
||||
create(:note_on_merge_request, author: user, project: project, noteable: merge_request)
|
||||
render_merge_request(merge_request)
|
||||
end
|
||||
|
||||
it 'merge_requests/diff_discussion.json' do
|
||||
create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request)
|
||||
create(:diff_note_on_merge_request, project: project, author: user, position: position, noteable: merge_request)
|
||||
render_discussions_json(merge_request)
|
||||
end
|
||||
|
||||
it 'merge_requests/resolved_diff_discussion.json' do
|
||||
note = create(:discussion_note_on_merge_request, :resolved, project: project, author: admin, position: position, noteable: merge_request)
|
||||
create(:system_note, project: project, author: admin, noteable: merge_request, discussion_id: note.discussion.id)
|
||||
note = create(:discussion_note_on_merge_request, :resolved, project: project, author: user, position: position, noteable: merge_request)
|
||||
create(:system_note, project: project, author: user, noteable: merge_request, discussion_id: note.discussion.id)
|
||||
|
||||
render_discussions_json(merge_request)
|
||||
end
|
||||
|
@ -111,7 +111,7 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type:
|
|||
|
||||
context 'with mentions' do
|
||||
let(:group) { create(:group) }
|
||||
let(:description) { "@#{group.full_path} @all @#{admin.username}" }
|
||||
let(:description) { "@#{group.full_path} @all @#{user.username}" }
|
||||
|
||||
it 'merge_requests/merge_request_with_mentions.html' do
|
||||
render_merge_request(merge_request)
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::MergeRequests::DiffsController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'merge-requests-project') }
|
||||
let(:user) { project.owner }
|
||||
let(:merge_request) { create(:merge_request, :with_diffs, source_project: project, target_project: project, description: '- [ ] Task List Item') }
|
||||
let(:path) { "files/ruby/popen.rb" }
|
||||
let(:position) do
|
||||
|
@ -25,7 +25,7 @@ RSpec.describe Projects::MergeRequests::DiffsController, '(JavaScript fixtures)'
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -5,11 +5,11 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::PipelineSchedulesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :public, :repository) }
|
||||
let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: admin) }
|
||||
let!(:pipeline_schedule_populated) { create(:ci_pipeline_schedule, project: project, owner: admin) }
|
||||
let(:user) { project.owner }
|
||||
let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: user) }
|
||||
let!(:pipeline_schedule_populated) { create(:ci_pipeline_schedule, project: project, owner: user) }
|
||||
let!(:pipeline_schedule_variable1) { create(:ci_pipeline_schedule_variable, key: 'foo', value: 'foovalue', pipeline_schedule: pipeline_schedule_populated) }
|
||||
let!(:pipeline_schedule_variable2) { create(:ci_pipeline_schedule_variable, key: 'bar', value: 'barvalue', pipeline_schedule: pipeline_schedule_populated) }
|
||||
|
||||
|
@ -20,7 +20,7 @@ RSpec.describe Projects::PipelineSchedulesController, '(JavaScript fixtures)', t
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'pipeline_schedules/edit.html' do
|
||||
|
|
|
@ -5,7 +5,6 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::PipelinesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'pipelines-project') }
|
||||
let(:commit) { create(:commit, project: project) }
|
||||
|
@ -22,7 +21,7 @@ RSpec.describe Projects::PipelinesController, '(JavaScript fixtures)', type: :co
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'pipelines/pipelines.json' do
|
||||
|
|
|
@ -7,11 +7,11 @@ RSpec.describe 'Projects (JavaScript fixtures)', type: :controller do
|
|||
|
||||
runners_token = 'runnerstoken:intabulasreferre'
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, namespace: namespace, path: 'builds-project', runners_token: runners_token) }
|
||||
let(:project_with_repo) { create(:project, :repository, description: 'Code and stuff') }
|
||||
let(:project_variable_populated) { create(:project, namespace: namespace, path: 'builds-project2', runners_token: runners_token) }
|
||||
let(:user) { project.owner }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -20,8 +20,8 @@ RSpec.describe 'Projects (JavaScript fixtures)', type: :controller do
|
|||
end
|
||||
|
||||
before do
|
||||
project.add_maintainer(admin)
|
||||
sign_in(admin)
|
||||
project_with_repo.add_maintainer(user)
|
||||
sign_in(user)
|
||||
allow(SecureRandom).to receive(:hex).and_return('securerandomhex:thereisnospoon')
|
||||
end
|
||||
|
||||
|
|
|
@ -5,10 +5,10 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project_empty_repo, namespace: namespace, path: 'services-project') }
|
||||
let!(:service) { create(:prometheus_service, project: project) }
|
||||
let(:user) { project.owner }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -17,7 +17,7 @@ RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :con
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -7,7 +7,7 @@ RSpec.describe SearchController, '(JavaScript fixtures)', type: :controller do
|
|||
|
||||
render_views
|
||||
|
||||
let_it_be(:user) { create(:admin) }
|
||||
let_it_be(:user) { create(:user) }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('search/')
|
||||
|
@ -66,6 +66,10 @@ RSpec.describe SearchController, '(JavaScript fixtures)', type: :controller do
|
|||
offset: 0)
|
||||
end
|
||||
|
||||
before do
|
||||
project.add_developer(user)
|
||||
end
|
||||
|
||||
it 'search/blob_search_result.html' do
|
||||
allow_next_instance_of(SearchServicePresenter) do |search_service|
|
||||
allow(search_service).to receive(:search_objects).and_return(blobs)
|
||||
|
|
|
@ -5,10 +5,10 @@ require 'spec_helper'
|
|||
RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project_empty_repo, namespace: namespace, path: 'services-project') }
|
||||
let!(:service) { create(:custom_issue_tracker_service, project: project) }
|
||||
let(:user) { project.owner }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -17,7 +17,7 @@ RSpec.describe Projects::ServicesController, '(JavaScript fixtures)', type: :con
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
after do
|
||||
|
|
|
@ -5,10 +5,10 @@ require 'spec_helper'
|
|||
RSpec.describe SnippetsController, '(JavaScript fixtures)', type: :controller do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project, :repository, namespace: namespace, path: 'branches-project') }
|
||||
let(:snippet) { create(:personal_snippet, :public, title: 'snippet.md', content: '# snippet', file_name: 'snippet.md', author: admin) }
|
||||
let(:user) { project.owner }
|
||||
let(:snippet) { create(:personal_snippet, :public, title: 'snippet.md', content: '# snippet', file_name: 'snippet.md', author: user) }
|
||||
|
||||
render_views
|
||||
|
||||
|
@ -17,7 +17,7 @@ RSpec.describe SnippetsController, '(JavaScript fixtures)', type: :controller do
|
|||
end
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
allow(Discussion).to receive(:build_discussion_id).and_return(['discussionid:ceterumcenseo'])
|
||||
end
|
||||
|
||||
|
@ -26,7 +26,7 @@ RSpec.describe SnippetsController, '(JavaScript fixtures)', type: :controller do
|
|||
end
|
||||
|
||||
it 'snippets/show.html' do
|
||||
create(:discussion_note_on_project_snippet, noteable: snippet, project: project, author: admin, note: '- [ ] Task List Item')
|
||||
create(:discussion_note_on_project_snippet, noteable: snippet, project: project, author: user, note: '- [ ] Task List Item')
|
||||
|
||||
get(:show, params: { id: snippet.to_param })
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ require 'spec_helper'
|
|||
RSpec.describe 'Tags (JavaScript fixtures)' do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
let_it_be(:project) { create(:project, :repository, path: 'tags-project') }
|
||||
let_it_be(:user) { project.owner }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('api/tags/')
|
||||
|
@ -20,7 +20,7 @@ RSpec.describe 'Tags (JavaScript fixtures)' do
|
|||
include ApiHelpers
|
||||
|
||||
it 'api/tags/tags.json' do
|
||||
get api("/projects/#{project.id}/repository/tags", admin)
|
||||
get api("/projects/#{project.id}/repository/tags", user)
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
|
|
@ -5,13 +5,13 @@ require 'spec_helper'
|
|||
RSpec.describe 'Todos (JavaScript fixtures)' do
|
||||
include JavaScriptFixturesHelpers
|
||||
|
||||
let(:admin) { create(:admin) }
|
||||
let(:namespace) { create(:namespace, name: 'frontend-fixtures' )}
|
||||
let(:project) { create(:project_empty_repo, namespace: namespace, path: 'todos-project') }
|
||||
let(:user) { project.owner }
|
||||
let(:issue_1) { create(:issue, title: 'issue_1', project: project) }
|
||||
let!(:todo_1) { create(:todo, user: admin, project: project, target: issue_1, created_at: 5.hours.ago) }
|
||||
let!(:todo_1) { create(:todo, user: user, project: project, target: issue_1, created_at: 5.hours.ago) }
|
||||
let(:issue_2) { create(:issue, title: 'issue_2', project: project) }
|
||||
let!(:todo_2) { create(:todo, :done, user: admin, project: project, target: issue_2, created_at: 50.hours.ago) }
|
||||
let!(:todo_2) { create(:todo, :done, user: user, project: project, target: issue_2, created_at: 50.hours.ago) }
|
||||
|
||||
before(:all) do
|
||||
clean_frontend_fixtures('todos/')
|
||||
|
@ -25,7 +25,7 @@ RSpec.describe 'Todos (JavaScript fixtures)' do
|
|||
render_views
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'todos/todos.html' do
|
||||
|
@ -39,7 +39,7 @@ RSpec.describe 'Todos (JavaScript fixtures)' do
|
|||
render_views
|
||||
|
||||
before do
|
||||
sign_in(admin)
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'todos/todos.json' do
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe NavHelper, :do_not_mock_admin_mode do
|
||||
RSpec.describe NavHelper do
|
||||
describe '#header_links' do
|
||||
include_context 'custom session'
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe API::APIGuard::AdminModeMiddleware, :do_not_mock_admin_mode, :request_store do
|
||||
RSpec.describe API::APIGuard::AdminModeMiddleware, :request_store do
|
||||
let(:user) { create(:admin) }
|
||||
|
||||
it 'is loaded' do
|
||||
|
|
|
@ -4,7 +4,7 @@ require 'spec_helper'
|
|||
|
||||
# Based on spec/requests/api/groups_spec.rb
|
||||
# Should follow closely in order to ensure all situations are covered
|
||||
RSpec.describe 'getting group information', :do_not_mock_admin_mode do
|
||||
RSpec.describe 'getting group information' do
|
||||
include GraphqlHelpers
|
||||
include UploadHelpers
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe 'Mark snippet as spam', :do_not_mock_admin_mode do
|
||||
RSpec.describe 'Mark snippet as spam' do
|
||||
include GraphqlHelpers
|
||||
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe API::Users, :do_not_mock_admin_mode do
|
||||
RSpec.describe API::Users do
|
||||
let_it_be(:admin) { create(:admin) }
|
||||
let_it_be(:user, reload: true) { create(:user, username: 'user.with.dot') }
|
||||
let_it_be(:key) { create(:key, user: user) }
|
||||
|
|
|
@ -795,12 +795,24 @@ RSpec.describe 'Git HTTP requests' do
|
|||
context 'administrator' do
|
||||
let(:user) { create(:admin) }
|
||||
|
||||
it_behaves_like 'can download code only'
|
||||
context 'when admin mode is enabled', :enable_admin_mode do
|
||||
it_behaves_like 'can download code only'
|
||||
|
||||
it 'downloads from other project get status 403' do
|
||||
clone_get "#{other_project.full_path}.git", user: 'gitlab-ci-token', password: build.token
|
||||
it 'downloads from other project get status 403' do
|
||||
clone_get "#{other_project.full_path}.git", user: 'gitlab-ci-token', password: build.token
|
||||
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
expect(response).to have_gitlab_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when admin mode is disabled' do
|
||||
it_behaves_like 'can download code only'
|
||||
|
||||
it 'downloads from other project get status 404' do
|
||||
clone_get "#{other_project.full_path}.git", user: 'gitlab-ci-token', password: build.token
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ RSpec.describe 'Git LFS API and storage' do
|
|||
end
|
||||
end
|
||||
|
||||
context 'administrator' do
|
||||
context 'administrator', :enable_admin_mode do
|
||||
let(:user) { create(:admin) }
|
||||
let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
|
||||
|
||||
|
@ -453,7 +453,7 @@ RSpec.describe 'Git LFS API and storage' do
|
|||
end
|
||||
end
|
||||
|
||||
context 'administrator' do
|
||||
context 'administrator', :enable_admin_mode do
|
||||
let(:user) { create(:admin) }
|
||||
let(:build) { create(:ci_build, :running, pipeline: pipeline, user: user) }
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe 'Self-Monitoring project requests' do
|
|||
|
||||
it_behaves_like 'not accessible to non-admin users'
|
||||
|
||||
context 'with admin user' do
|
||||
context 'with admin user', :enable_admin_mode do
|
||||
before do
|
||||
login_as(admin)
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ RSpec.describe 'Self-Monitoring project requests' do
|
|||
|
||||
it_behaves_like 'not accessible to non-admin users'
|
||||
|
||||
context 'with admin user' do
|
||||
context 'with admin user', :enable_admin_mode do
|
||||
before do
|
||||
login_as(admin)
|
||||
end
|
||||
|
@ -116,7 +116,7 @@ RSpec.describe 'Self-Monitoring project requests' do
|
|||
|
||||
it_behaves_like 'not accessible to non-admin users'
|
||||
|
||||
context 'with admin user' do
|
||||
context 'with admin user', :enable_admin_mode do
|
||||
before do
|
||||
login_as(admin)
|
||||
end
|
||||
|
@ -140,7 +140,7 @@ RSpec.describe 'Self-Monitoring project requests' do
|
|||
|
||||
it_behaves_like 'not accessible to non-admin users'
|
||||
|
||||
context 'with admin user' do
|
||||
context 'with admin user', :enable_admin_mode do
|
||||
before do
|
||||
login_as(admin)
|
||||
end
|
||||
|
|
|
@ -286,19 +286,13 @@ RSpec.configure do |config|
|
|||
./ee/spec/elastic_integration
|
||||
./ee/spec/finders
|
||||
./ee/spec/lib
|
||||
./ee/spec/requests/admin
|
||||
./ee/spec/serializers
|
||||
./ee/spec/support/shared_examples/finders/geo
|
||||
./ee/spec/support/shared_examples/graphql/geo
|
||||
./spec/finders
|
||||
./spec/frontend
|
||||
./spec/helpers
|
||||
./spec/lib
|
||||
./spec/requests
|
||||
./spec/serializers
|
||||
./spec/support/shared_examples/requests
|
||||
./spec/support/shared_examples/lib/gitlab
|
||||
./spec/views
|
||||
./spec/workers
|
||||
)
|
||||
|
||||
|
|
|
@ -20,6 +20,18 @@ RSpec.shared_examples 'not accessible to non-admin users' do
|
|||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with authenticated admin user without admin mode' do
|
||||
before do
|
||||
login_as(create(:admin))
|
||||
end
|
||||
|
||||
it 'redirects to enable admin mode' do
|
||||
subject
|
||||
|
||||
expect(response).to redirect_to(new_admin_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Requires subject and worker_class and status_api to be defined
|
||||
|
|
|
@ -16,10 +16,21 @@ RSpec.describe "projects/artifacts/_artifact.html.haml" do
|
|||
context 'with admin' do
|
||||
let(:user) { build(:admin) }
|
||||
|
||||
it 'has a delete button' do
|
||||
render_partial
|
||||
context 'when admin mode is enabled', :enable_admin_mode do
|
||||
it 'has a delete button' do
|
||||
render_partial
|
||||
|
||||
expect(rendered).to have_link('Delete artifacts', href: project_artifact_path(project, project.job_artifacts.first))
|
||||
expect(rendered).to have_link('Delete artifacts', href: project_artifact_path(project, project.job_artifacts.first))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when admin mode is disabled' do
|
||||
it 'has no delete button' do
|
||||
project.add_reporter(user)
|
||||
render_partial
|
||||
|
||||
expect(rendered).not_to have_link('Delete artifacts')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -54,11 +54,22 @@ RSpec.describe 'search/_results' do
|
|||
let(:scope) { search_scope }
|
||||
let(:search_objects) { Gitlab::ProjectSearchResults.new(user, '*', project: project).objects(scope) }
|
||||
|
||||
it 'renders the click text event tracking attributes' do
|
||||
render
|
||||
context 'when admin mode is enabled', :enable_admin_mode do
|
||||
it 'renders the click text event tracking attributes' do
|
||||
render
|
||||
|
||||
expect(rendered).to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).to have_selector('[data-track-property=search_result]')
|
||||
expect(rendered).to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).to have_selector('[data-track-property=search_result]')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when admin mode is disabled' do
|
||||
it 'does not render the click text event tracking attributes' do
|
||||
render
|
||||
|
||||
expect(rendered).not_to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).not_to have_selector('[data-track-property=search_result]')
|
||||
end
|
||||
end
|
||||
|
||||
it 'does render the sidebar' do
|
||||
|
@ -74,11 +85,22 @@ RSpec.describe 'search/_results' do
|
|||
let(:scope) { search_scope }
|
||||
let(:search_objects) { Gitlab::ProjectSearchResults.new(user, '*', project: project).objects(scope) }
|
||||
|
||||
it 'renders the click text event tracking attributes' do
|
||||
render
|
||||
context 'when admin mode is enabled', :enable_admin_mode do
|
||||
it 'renders the click text event tracking attributes' do
|
||||
render
|
||||
|
||||
expect(rendered).to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).to have_selector('[data-track-property=search_result]')
|
||||
expect(rendered).to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).to have_selector('[data-track-property=search_result]')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when admin mode is disabled' do
|
||||
it 'does not render the click text event tracking attributes' do
|
||||
render
|
||||
|
||||
expect(rendered).not_to have_selector('[data-track-event=click_text]')
|
||||
expect(rendered).not_to have_selector('[data-track-property=search_result]')
|
||||
end
|
||||
end
|
||||
|
||||
it 'does not render the sidebar' do
|
||||
|
|
|
@ -866,10 +866,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.176.0.tgz#3b6d415704ed36db87146cfa361f3f9e2c01f535"
|
||||
integrity sha512-cl3SlGmLF/bnPAxrg52eRQOxRSrU54AB3yfV9TLi2iNAg/Jws0nuvdVZ4LRKKyyzHmT6yfVusCIGCISzvON6ew==
|
||||
|
||||
"@gitlab/ui@24.4.0":
|
||||
version "24.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-24.4.0.tgz#5c66c0582a4818edf596757dd56f6606f32a3604"
|
||||
integrity sha512-M96BZBEv7t+Q9V7B0obCJJsew3rDJ+2xGcJZUrVVyBpwz2PUqFsSk86+SxUFDxuTlcQ3ox0O2Y1aCKGG8vZlyA==
|
||||
"@gitlab/ui@24.5.0":
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-24.5.0.tgz#68620005e65e8e170720d8baff60322e24b73aef"
|
||||
integrity sha512-TqK/Pxmh8ps7KiSSSe+KXncNw2I9US9+cVJNu3IsZCyrqiWqaAVPcxhjAZQt31nZdk+XJek7pXJgHfit9vunlg==
|
||||
dependencies:
|
||||
"@babel/standalone" "^7.0.0"
|
||||
"@gitlab/vue-toasted" "^1.3.0"
|
||||
|
|
Loading…
Reference in New Issue