Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
2d2181e35c
commit
9bc96aa4f9
|
@ -1 +1 @@
|
|||
f9af7fbcbfda556c61dcbb2280cda6c6e210cb77
|
||||
27dddad834d99e9901b4a9b137748b850e71849a
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { GlTable, GlButton, GlModalDirective, GlIcon } from '@gitlab/ui';
|
||||
import { GlTable, GlButton, GlModalDirective, GlIcon, GlTooltipDirective } from '@gitlab/ui';
|
||||
import { mapState, mapActions } from 'vuex';
|
||||
import { s__, __ } from '~/locale';
|
||||
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
|
||||
|
@ -59,6 +59,7 @@ export default {
|
|||
},
|
||||
directives: {
|
||||
GlModalDirective,
|
||||
GlTooltip: GlTooltipDirective,
|
||||
},
|
||||
mixins: [glFeatureFlagsMixin()],
|
||||
computed: {
|
||||
|
@ -102,27 +103,38 @@ export default {
|
|||
<col v-for="field in scope.fields" :key="field.key" :style="field.customStyle" />
|
||||
</template>
|
||||
<template #cell(key)="{ item }">
|
||||
<div class="d-flex truncated-container">
|
||||
<span :id="`ci-variable-key-${item.id}`" class="d-inline-block mw-100 text-truncate">{{
|
||||
item.key
|
||||
}}</span>
|
||||
<ci-variable-popover
|
||||
:target="`ci-variable-key-${item.id}`"
|
||||
:value="item.key"
|
||||
:tooltip-text="__('Copy key')"
|
||||
<div class="gl-display-flex truncated-container gl-align-items-center">
|
||||
<span
|
||||
:id="`ci-variable-key-${item.id}`"
|
||||
class="gl-display-inline-block gl-max-w-full gl-text-truncate"
|
||||
>{{ item.key }}</span
|
||||
>
|
||||
<gl-button
|
||||
v-gl-tooltip
|
||||
category="tertiary"
|
||||
icon="copy-to-clipboard"
|
||||
:title="__('Copy key')"
|
||||
:data-clipboard-text="item.key"
|
||||
:aria-label="__('Copy to clipboard')"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template #cell(value)="{ item }">
|
||||
<span v-if="valuesHidden">*********************</span>
|
||||
<div v-else class="d-flex truncated-container">
|
||||
<span :id="`ci-variable-value-${item.id}`" class="d-inline-block mw-100 text-truncate">{{
|
||||
item.value
|
||||
}}</span>
|
||||
<ci-variable-popover
|
||||
:target="`ci-variable-value-${item.id}`"
|
||||
:value="item.value"
|
||||
:tooltip-text="__('Copy value')"
|
||||
<div class="gl-display-flex gl-align-items-center truncated-container">
|
||||
<span v-if="valuesHidden">*********************</span>
|
||||
<span
|
||||
v-else
|
||||
:id="`ci-variable-value-${item.id}`"
|
||||
class="gl-display-inline-block gl-max-w-full gl-text-truncate"
|
||||
>{{ item.value }}</span
|
||||
>
|
||||
<gl-button
|
||||
v-gl-tooltip
|
||||
category="tertiary"
|
||||
icon="copy-to-clipboard"
|
||||
:title="__('Copy value')"
|
||||
:data-clipboard-text="item.value"
|
||||
:aria-label="__('Copy to clipboard')"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -10,7 +10,11 @@ import {
|
|||
import { debounce } from 'lodash';
|
||||
|
||||
import { DEBOUNCE_DELAY, FILTER_NONE_ANY, OPERATOR_IS_NOT } from '../constants';
|
||||
import { getRecentlyUsedSuggestions, setTokenValueToRecentlyUsed } from '../filtered_search_utils';
|
||||
import {
|
||||
getRecentlyUsedSuggestions,
|
||||
setTokenValueToRecentlyUsed,
|
||||
stripQuotes,
|
||||
} from '../filtered_search_utils';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -163,7 +167,14 @@ export default {
|
|||
this.searchKey = data;
|
||||
|
||||
if (!this.suggestionsLoading && !this.activeTokenValue) {
|
||||
const search = this.searchTerm ? this.searchTerm : data;
|
||||
let search = this.searchTerm ? this.searchTerm : data;
|
||||
|
||||
if (search.startsWith('"') && search.endsWith('"')) {
|
||||
search = stripQuotes(search);
|
||||
} else if (search.startsWith('"')) {
|
||||
search = search.slice(1, search.length);
|
||||
}
|
||||
|
||||
this.$emit('fetch-suggestions', search);
|
||||
}
|
||||
}, DEBOUNCE_DELAY),
|
||||
|
|
|
@ -122,7 +122,7 @@ class ProjectsController < Projects::ApplicationController
|
|||
return redirect_to edit_project_path(@project)
|
||||
end
|
||||
|
||||
render_edit
|
||||
redirect_to edit_project_path(@project)
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'updating_the_geo_sites.md'
|
||||
remove_date: '2021-11-23'
|
||||
---
|
||||
|
||||
This file was moved to [another location](updating_the_geo_sites.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-11-23>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -42,7 +42,7 @@ The following API resources are available in the project context:
|
|||
| [Events](events.md) | `/projects/:id/events` (also available for users and standalone) |
|
||||
| [Feature Flags](feature_flags.md) | `/projects/:id/feature_flags` |
|
||||
| [Feature Flag User Lists](feature_flag_user_lists.md) | `/projects/:id/feature_flags_user_lists` |
|
||||
| [Integrations](integrations.md) | `/projects/:id/integrations` |
|
||||
| [Integrations](integrations.md) (Formerly "services") | `/projects/:id/integrations` |
|
||||
| [Invitations](invitations.md) | `/projects/:id/invitations` (also available for groups) |
|
||||
| [Issues](issues.md) | `/projects/:id/issues` (also available for groups and standalone) |
|
||||
| [Issues Statistics](issues_statistics.md) | `/projects/:id/issues_statistics` (also available for groups and standalone) |
|
||||
|
@ -84,7 +84,6 @@ The following API resources are available in the project context:
|
|||
| [Resource label events](resource_label_events.md) | `/projects/:id/issues/.../resource_label_events`, `/projects/:id/merge_requests/.../resource_label_events` (also available for groups) |
|
||||
| [Runners](runners.md) | `/projects/:id/runners` (also available standalone) |
|
||||
| [Search](search.md) | `/projects/:id/search` (also available for groups and standalone) |
|
||||
| [Services](services.md) (renamed to [Integrations](integrations.md)) | `/projects/:id/services` |
|
||||
| [Tags](tags.md) | `/projects/:id/repository/tags` |
|
||||
| [User-starred metrics dashboards](metrics_user_starred_dashboards.md ) | `/projects/:id/metrics/user_starred_dashboards` |
|
||||
| [Visual Review discussions](visual_review_discussions.md) **(PREMIUM)** | `/projects/:id/merge_requests/:merge_request_id/visual_review_discussions` |
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'integrations.md'
|
||||
remove_date: '2021-11-09'
|
||||
---
|
||||
|
||||
This file was moved to [another location](integrations.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-11-09>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -165,7 +165,8 @@ big JSON blob) to column `bar` (containing a string). The process for this would
|
|||
roughly be as follows:
|
||||
|
||||
1. Release A:
|
||||
1. Create a migration class that perform the migration for a row with a given ID.
|
||||
1. Create a migration class that performs the migration for a row with a given ID.
|
||||
You can use [background jobs tracking](#background-jobs-tracking) to simplify cleaning up.
|
||||
1. Deploy the code for this release, this should include some code that will
|
||||
schedule jobs for newly created data (for example, using an `after_create` hook).
|
||||
1. Schedule jobs for all existing rows in a post-deployment migration. It's
|
||||
|
@ -174,8 +175,10 @@ roughly be as follows:
|
|||
1. Release B:
|
||||
1. Deploy code so that the application starts using the new column and stops
|
||||
scheduling jobs for newly created data.
|
||||
1. In a post-deployment migration use `finalize_background_migration` from
|
||||
`BackgroundMigrationHelpers` to ensure no jobs remain. This helper will:
|
||||
1. In a post-deployment migration, finalize all jobs that have not succeeded by now.
|
||||
If you used [background jobs tracking](#background-jobs-tracking) in release A,
|
||||
you can use `finalize_background_migration` from `BackgroundMigrationHelpers` to ensure no jobs remain.
|
||||
This helper will:
|
||||
1. Use `Gitlab::BackgroundMigration.steal` to process any remaining
|
||||
jobs in Sidekiq.
|
||||
1. Reschedule the migration to be run directly (that is, not through Sidekiq)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://about.gitlab.com/handbook/product/product-intelligence-guide/'
|
||||
remove_date: '2021-12-01'
|
||||
---
|
||||
|
||||
This document was moved to [another location](https://about.gitlab.com/handbook/product/product-intelligence-guide/).
|
||||
|
||||
<!-- This redirect file can be deleted after 2021-12-01. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://metrics.gitlab.com/index.html'
|
||||
remove_date: '2021-11-10'
|
||||
---
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
redirect_to: 'https://metrics.gitlab.com/index.html'
|
||||
remove_date: '2021-11-10'
|
||||
---
|
|
@ -658,12 +658,6 @@ Since we are using the [AWS IAM profile](#create-an-iam-role) we created earlier
|
|||
|
||||
Remember to run `sudo gitlab-ctl reconfigure` after saving the changes to the `gitlab.rb` file.
|
||||
|
||||
NOTE:
|
||||
One current feature of GitLab that still requires a shared directory (NFS) is
|
||||
[GitLab Pages](../../user/project/pages/index.md).
|
||||
There is [work in progress](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/196)
|
||||
to eliminate the need for NFS to support GitLab Pages.
|
||||
|
||||
---
|
||||
|
||||
That concludes the configuration changes for our GitLab instance. Next, we'll create a custom AMI based on this instance to use for our launch configuration and auto scaling group.
|
||||
|
|
|
@ -46,7 +46,7 @@ GitLab has integrated with several security partners. For more information, see
|
|||
|
||||
## Continuous integration
|
||||
|
||||
GitLab can be integrated with the following external service for continuous integration:
|
||||
GitLab can be integrated with the following external services for continuous integration:
|
||||
|
||||
- [Jenkins](jenkins.md) CI.
|
||||
- [Datadog](datadog.md), to monitor for CI/CD job failures and performance issues.
|
||||
|
|
|
@ -165,7 +165,7 @@ can disable the entire OmniAuth subsystem by modifying the configuration file:
|
|||
gitlab_rails['omniauth_enabled'] = false
|
||||
```
|
||||
|
||||
- **For installations from source**:
|
||||
- **For installations from source**
|
||||
|
||||
```yaml
|
||||
omniauth:
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: '../topics/use_gitlab.md'
|
||||
remove_date: '2021-12-08'
|
||||
---
|
||||
|
||||
This document was moved to [another location](../topics/use_gitlab.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-12-08>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/redirects.html -->
|
|
@ -145,7 +145,7 @@ version prior to upgrading the application server.
|
|||
|
||||
If you're using Geo:
|
||||
|
||||
- Review [Geo upgrade documentation](../administration/geo/replication/updating_the_geo_nodes.md).
|
||||
- Review [Geo upgrade documentation](../administration/geo/replication/updating_the_geo_sites.md).
|
||||
- Read about the [Geo version-specific update instructions](../administration/geo/replication/version_specific_updates.md).
|
||||
- Review Geo-specific steps when [updating the database](https://docs.gitlab.com/omnibus/settings/database.html#upgrading-a-geo-instance).
|
||||
- Create an upgrade and rollback plan for _each_ Geo node (primary and each secondary).
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'moderate_users.md'
|
||||
remove_date: '2021-10-20'
|
||||
---
|
||||
|
||||
This document was moved to [another location](moderate_users.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-10-20>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: '../compliance_report/index.md'
|
||||
remove_date: '2021-10-23'
|
||||
---
|
||||
|
||||
This file was moved to [another location](../compliance_report/index.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-10-23>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'iac/mr_integration.md'
|
||||
remove_date: '2021-11-26'
|
||||
---
|
||||
|
||||
This document was moved to [another location](iac/mr_integration.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-11-26>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
redirect_to: 'iac/terraform_state.md'
|
||||
remove_date: '2021-11-26'
|
||||
---
|
||||
|
||||
This document was moved to [another location](iac/terraform_state.md).
|
||||
|
||||
<!-- This redirect file can be deleted after <2021-11-26>. -->
|
||||
<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
|
|
@ -146,7 +146,7 @@ There are numerous [APIs](../../api/index.md) to use with your projects:
|
|||
- [Markdown](../../api/markdown.md)
|
||||
- [Merge Requests](../../api/merge_requests.md)
|
||||
- [Milestones](../../api/milestones.md)
|
||||
- [Services](../../api/services.md)
|
||||
- [Services](../../api/integrations.md)
|
||||
- [Snippets](../../api/project_snippets.md)
|
||||
- [Templates](../../api/project_templates.md)
|
||||
- [Traffic](../../api/project_statistics.md)
|
||||
|
|
|
@ -10,7 +10,7 @@ GitLab provides a way to push update messages to an irker server. When
|
|||
configured, pushes to a project trigger the service to send data directly
|
||||
to the irker server.
|
||||
|
||||
See also the [irker integration API documentation](../../../api/services.md).
|
||||
See also the [irker integration API documentation](../../../api/integrations.md).
|
||||
|
||||
For more information, see the [irker project homepage](https://gitlab.com/esr/irker).
|
||||
|
||||
|
|
|
@ -35,7 +35,9 @@ module Gitlab
|
|||
def execute
|
||||
Gitlab::Import::SetAsyncJid.set_jid(project.import_state)
|
||||
|
||||
# We need to track this job's status for use by Gitlab::GithubImport::RefreshImportJidWorker.
|
||||
Stage::ImportRepositoryWorker
|
||||
.with_status
|
||||
.perform_async(project.id)
|
||||
|
||||
true
|
||||
|
|
|
@ -941,7 +941,7 @@ RSpec.describe ProjectsController do
|
|||
project.reload
|
||||
|
||||
expect(project.namespace).to eq(new_namespace)
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to redirect_to(edit_project_path(project))
|
||||
end
|
||||
|
||||
context 'when new namespace is empty' do
|
||||
|
|
|
@ -14,7 +14,13 @@ import BaseToken from '~/vue_shared/components/filtered_search_bar/tokens/base_t
|
|||
|
||||
import { mockLabelToken } from '../mock_data';
|
||||
|
||||
jest.mock('~/vue_shared/components/filtered_search_bar/filtered_search_utils');
|
||||
jest.mock('~/vue_shared/components/filtered_search_bar/filtered_search_utils', () => ({
|
||||
getRecentlyUsedSuggestions: jest.fn(),
|
||||
setTokenValueToRecentlyUsed: jest.fn(),
|
||||
stripQuotes: jest.requireActual(
|
||||
'~/vue_shared/components/filtered_search_bar/filtered_search_utils',
|
||||
).stripQuotes,
|
||||
}));
|
||||
|
||||
const mockStorageKey = 'recent-tokens-label_name';
|
||||
|
||||
|
@ -231,6 +237,7 @@ describe('BaseToken', () => {
|
|||
stubs: { Portal: true },
|
||||
});
|
||||
});
|
||||
|
||||
it('emits `fetch-suggestions` event on component after a delay when component emits `input` event', async () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
|
@ -242,6 +249,32 @@ describe('BaseToken', () => {
|
|||
expect(wrapperWithNoStubs.emitted('fetch-suggestions')).toBeTruthy();
|
||||
expect(wrapperWithNoStubs.emitted('fetch-suggestions')[2]).toEqual(['foo']);
|
||||
});
|
||||
|
||||
describe('when search is started with a quote', () => {
|
||||
it('emits `fetch-suggestions` with filtered value', async () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
wrapperWithNoStubs.find(GlFilteredSearchToken).vm.$emit('input', { data: '"foo' });
|
||||
await wrapperWithNoStubs.vm.$nextTick();
|
||||
|
||||
jest.runAllTimers();
|
||||
|
||||
expect(wrapperWithNoStubs.emitted('fetch-suggestions')[2]).toEqual(['foo']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when search starts and ends with a quote', () => {
|
||||
it('emits `fetch-suggestions` with filtered value', async () => {
|
||||
jest.useFakeTimers();
|
||||
|
||||
wrapperWithNoStubs.find(GlFilteredSearchToken).vm.$emit('input', { data: '"foo"' });
|
||||
await wrapperWithNoStubs.vm.$nextTick();
|
||||
|
||||
jest.runAllTimers();
|
||||
|
||||
expect(wrapperWithNoStubs.emitted('fetch-suggestions')[2]).toEqual(['foo']);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -8,7 +8,7 @@ import { mockReleaseToken } from '../mock_data';
|
|||
jest.mock('~/flash');
|
||||
|
||||
describe('ReleaseToken', () => {
|
||||
const id = 123;
|
||||
const id = '123';
|
||||
let wrapper;
|
||||
|
||||
const createComponent = ({ config = mockReleaseToken, value = { data: '' } } = {}) =>
|
||||
|
|
|
@ -27,8 +27,13 @@ RSpec.describe Gitlab::GithubImport::ParallelImporter do
|
|||
|
||||
before do
|
||||
create(:import_state, :started, project: project)
|
||||
worker = double(:worker)
|
||||
|
||||
expect(Gitlab::GithubImport::Stage::ImportRepositoryWorker)
|
||||
.to receive(:with_status)
|
||||
.and_return(worker)
|
||||
|
||||
expect(worker)
|
||||
.to receive(:perform_async)
|
||||
.with(project.id)
|
||||
.and_return('123')
|
||||
|
|
Loading…
Reference in New Issue