Add latest changes from gitlab-org/gitlab@master
|
|
@ -15,6 +15,7 @@ import eventHub from '../event_hub';
|
|||
import GroupsApp from './app.vue';
|
||||
|
||||
const [SORTING_ITEM_NAME] = OVERVIEW_TABS_SORTING_ITEMS;
|
||||
const MIN_SEARCH_LENGTH = 3;
|
||||
|
||||
export default {
|
||||
components: { GlTabs, GlTab, GroupsApp, GlSearchBoxByType, GlSorting, GlSortingItem },
|
||||
|
|
@ -136,7 +137,9 @@ export default {
|
|||
handleSearchInput(value) {
|
||||
this.search = value;
|
||||
|
||||
this.debouncedSearch();
|
||||
if (!this.search || this.search.length >= MIN_SEARCH_LENGTH) {
|
||||
this.debouncedSearch();
|
||||
}
|
||||
},
|
||||
debouncedSearch: debounce(async function debouncedSearch() {
|
||||
this.handleSearchOrSortChange();
|
||||
|
|
|
|||
|
|
@ -50,7 +50,11 @@ export default {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div class="mr-widget-body media" :class="wrapperClasses" v-on="$listeners">
|
||||
<div
|
||||
class="mr-widget-body media mr-widget-body-line-height-1 gl-line-height-normal"
|
||||
:class="wrapperClasses"
|
||||
v-on="$listeners"
|
||||
>
|
||||
<div v-if="isLoading" class="gl-w-full mr-conflict-loader">
|
||||
<slot name="loading">
|
||||
<div class="gl-display-flex">
|
||||
|
|
@ -67,7 +71,10 @@ export default {
|
|||
</slot>
|
||||
<div class="gl-display-flex gl-w-full">
|
||||
<div
|
||||
:class="{ 'gl-display-flex': actions.length, 'gl-md-display-flex': !actions.length }"
|
||||
:class="{
|
||||
'gl-display-flex': actions.length,
|
||||
'gl-md-display-flex gl-align-items-center': !actions.length,
|
||||
}"
|
||||
class="media-body"
|
||||
>
|
||||
<slot></slot>
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ value_description: ""
|
|||
extra_properties:
|
||||
identifiers:
|
||||
product_section: dev
|
||||
product_stage: create
|
||||
product_group: group::ecosystem
|
||||
product_stage: manage
|
||||
product_group: group::foundations
|
||||
product_category:
|
||||
milestone: "13.4"
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41668
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/345837
|
|||
milestone: '14.7'
|
||||
type: development
|
||||
group: group::dynamic analysis
|
||||
default_enabled: false
|
||||
default_enabled: true
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
to one of the other two forms (using the correct appropriate type in the signature, or using
|
||||
an inline argument expression).
|
||||
# The following items are not published on the docs page, but may be used in the future.
|
||||
stage: ecosystem
|
||||
stage: Manage
|
||||
tiers: # (optional - may be required in the future) An array of tiers that the feature is available in currently. e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
|
||||
issue_url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/257883'
|
||||
documentation_url: # (optional) This is a link to the current documentation page
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
The [Jira DVCS Connector](https://docs.gitlab.com/ee/integration/jira/dvcs.html) (which enables the [Jira Development Panel](https://support.atlassian.com/jira-software-cloud/docs/view-development-information-for-an-issue/)), will no longer support Jira Cloud users starting with GitLab 16.0. The [GitLab for Jira App](https://docs.gitlab.com/ee/integration/jira/connect-app.html) has always been recommended for Jira Cloud users, and it will be required instead of the DVCS connector. If you are a Jira Cloud user, we recommended you begin migrating to the GitLab for Jira App.
|
||||
Any Jira Server and Jira Data Center users will need to confirm they are not using the GitHub Enterprise Connector to enable the GitLab DVCS integration, but they may continue to use the [native GitLab DVCS integration](https://docs.gitlab.com/ee/integration/jira/dvcs.html) (supported in Jira 8.14 and later).
|
||||
# The following items are not published on the docs page, but may be used in the future.
|
||||
stage: Ecosystem # (optional - may be required in the future) String value of the stage that the feature was created in. e.g., Growth
|
||||
stage: Manage # (optional - may be required in the future) String value of the stage that the feature was created in. e.g., Growth
|
||||
tiers: # (optional - may be required in the future) An array of tiers that the feature is available in currently. e.g., [Free, Silver, Gold, Core, Premium, Ultimate]
|
||||
issue_url: https://gitlab.com/groups/gitlab-org/-/epics/7508 # (optional) This is a link to the deprecation issue in GitLab
|
||||
documentation_url: https://docs.gitlab.com/ee/integration/jira/dvcs.html # (optional) This is a link to the current documentation page
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ gitlab-rake "gitlab:uploads:migrate:all"
|
|||
sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:migrate:all
|
||||
```
|
||||
|
||||
You can optionally track progress and verify that all packages migrated successfully using the
|
||||
You can optionally track progress and verify that all uploads migrated successfully using the
|
||||
[PostgreSQL console](https://docs.gitlab.com/omnibus/settings/database.html#connecting-to-the-bundled-postgresql-database):
|
||||
|
||||
- `sudo gitlab-rails dbconsole` for Omnibus GitLab instances.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 319 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 7.0 KiB |
|
|
@ -4106,6 +4106,8 @@ successfully complete before starting.
|
|||
shows **pending** (**{status_pending}**) if the downstream pipeline status is
|
||||
**waiting for manual action** (**{status_manual}**) due to manual jobs. By default,
|
||||
jobs in later stages do not start until the trigger job completes.
|
||||
- If the downstream pipeline has a failed job, but the job uses [`allow_failure: true`](#allow_failure),
|
||||
the downstream pipeline is considered successful and the trigger job shows **success**.
|
||||
|
||||
#### `trigger:forward`
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 12 KiB |
|
|
@ -1152,6 +1152,9 @@ To delete an on-demand scan:
|
|||
|
||||
## Site profile
|
||||
|
||||
> - Scan method [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/345837) in GitLab 15.6.
|
||||
> - File URL [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/345837) in GitLab 15.6.
|
||||
|
||||
A site profile defines the attributes and configuration details of the deployed application,
|
||||
website, or API to be scanned by DAST. A site profile can be referenced in `.gitlab-ci.yml` and
|
||||
on-demand scans.
|
||||
|
|
@ -1172,6 +1175,9 @@ A site profile contains:
|
|||
- **Password form field**: The name of password field at the sign-in HTML form.
|
||||
- **Submit form field**: The `id` or `name` of the element that when selected submits the sign-in HTML form.
|
||||
|
||||
- **Scan method**: A type of method to perform API testing. The supported methods are OpenAPI, Postman Collections, and HTTP Archive (HAR) documents.
|
||||
- **File URL**: The URL of the OpenAPI, Postman Collection, or HTTP Archive file.
|
||||
|
||||
When an API site type is selected, a [host override](#host-override) is used to ensure the API being scanned is on the same host as the target. This is done to reduce the risk of running an active scan against the wrong API.
|
||||
|
||||
When configured, request headers and password fields are encrypted using [`aes-256-gcm`](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) before being stored in the database.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 12 KiB |
|
|
@ -168,7 +168,7 @@ If an issue or merge request is locked and closed, you cannot reopen it.
|
|||
> - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87403) from "confidential comments" to "internal notes" in GitLab 15.0.
|
||||
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87383) in GitLab 15.0.
|
||||
> - [Feature flag `confidential_notes`](https://gitlab.com/gitlab-org/gitlab/-/issues/362712) removed in GitLab 15.2.
|
||||
> - [Changed] permissions in GitLab 15.5 to at least the Reporter role. In GitLab 15.4 and earlier, issue or epic authors and assignees could also read and create internal notes.
|
||||
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/issues/363045) permissions in GitLab 15.5 to at least the Reporter role. In GitLab 15.4 and earlier, issue or epic authors and assignees could also read and create internal notes.
|
||||
|
||||
You can add an internal note **to an issue or an epic**. It's then visible only to project members who have at least the Reporter role.
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 8.1 KiB |
|
|
@ -37,7 +37,6 @@ namespace :tw do
|
|||
CodeOwnerRule.new('Distribution (Omnibus)', '@axil'),
|
||||
CodeOwnerRule.new('Documentation Guidelines', '@sselhorn'),
|
||||
CodeOwnerRule.new('Dynamic Analysis', '@rdickenson'),
|
||||
CodeOwnerRule.new('Ecosystem', '@kpaizee'),
|
||||
CodeOwnerRule.new('Editor', '@ashrafkhamis'),
|
||||
CodeOwnerRule.new('Foundations', '@rdickenson'),
|
||||
CodeOwnerRule.new('Fuzz Testing', '@rdickenson'),
|
||||
|
|
|
|||
|
|
@ -27129,9 +27129,6 @@ msgstr ""
|
|||
msgid "No matching results for \"%{query}\""
|
||||
msgstr ""
|
||||
|
||||
msgid "No matching results..."
|
||||
msgstr ""
|
||||
|
||||
msgid "No members found"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -28104,12 +28101,6 @@ msgstr ""
|
|||
msgid "OnDemandScans|Could not run the scan. Please try again."
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Create new scanner profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Create new site profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|DAST configuration"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -28155,12 +28146,6 @@ msgstr ""
|
|||
msgid "OnDemandScans|Keep editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Manage scanner profiles"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Manage site profiles"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|My daily scan"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -28182,12 +28167,6 @@ msgstr ""
|
|||
msgid "OnDemandScans|No %{profileType} profiles found for DAST"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|No profile yet. In order to create a new scan, you need to have at least one completed scanner profile."
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|No profile yet. In order to create a new scan, you need to have at least one completed site profile."
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|On-demand Scans"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -28230,15 +28209,6 @@ msgstr ""
|
|||
msgid "OnDemandScans|Scan type"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Scanner profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Select one of the existing profiles"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Site profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Start by creating a new profile. Profiles make it easy to save and reuse configuration details for GitLab’s security tools."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -28269,12 +28239,6 @@ msgstr ""
|
|||
msgid "OnDemandScans|Timezone"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Use existing scanner profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|Use existing site profile"
|
||||
msgstr ""
|
||||
|
||||
msgid "OnDemandScans|View results"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -42,10 +42,10 @@ gitlab:
|
|||
resources:
|
||||
requests:
|
||||
cpu: 200m
|
||||
memory: 450Mi
|
||||
memory: 500Mi
|
||||
limits:
|
||||
cpu: 400m
|
||||
memory: 900Mi
|
||||
memory: 1000Mi
|
||||
gitlab-shell:
|
||||
resources:
|
||||
requests:
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ describe('OverviewTabs', () => {
|
|||
const findTabPanels = () => wrapper.findAllComponents(GlTab);
|
||||
const findTab = (name) => wrapper.findByRole('tab', { name });
|
||||
const findSelectedTab = () => wrapper.findByRole('tab', { selected: true });
|
||||
const findSearchInput = () => wrapper.findByPlaceholderText(OverviewTabs.i18n.searchPlaceholder);
|
||||
|
||||
beforeEach(() => {
|
||||
axiosMock = new AxiosMockAdapter(axios);
|
||||
|
|
@ -244,18 +245,39 @@ describe('OverviewTabs', () => {
|
|||
};
|
||||
|
||||
describe('when search is typed in', () => {
|
||||
const search = 'Foo bar';
|
||||
describe('when search is greater than or equal to 3 characters', () => {
|
||||
const search = 'Foo bar';
|
||||
|
||||
beforeEach(async () => {
|
||||
await setup();
|
||||
await wrapper.findByPlaceholderText(OverviewTabs.i18n.searchPlaceholder).setValue(search);
|
||||
beforeEach(async () => {
|
||||
await setup();
|
||||
await findSearchInput().setValue(search);
|
||||
});
|
||||
|
||||
it('updates query string with `filter` key', () => {
|
||||
expect(routerMock.push).toHaveBeenCalledWith({ query: { filter: search } });
|
||||
});
|
||||
|
||||
sharedAssertions({ search, sort: defaultProvide.initialSort });
|
||||
});
|
||||
|
||||
it('updates query string with `filter` key', () => {
|
||||
expect(routerMock.push).toHaveBeenCalledWith({ query: { filter: search } });
|
||||
});
|
||||
describe('when search is less than 3 characters', () => {
|
||||
const search = 'Fo';
|
||||
|
||||
sharedAssertions({ search, sort: defaultProvide.initialSort });
|
||||
beforeEach(async () => {
|
||||
await setup();
|
||||
await findSearchInput().setValue(search);
|
||||
});
|
||||
|
||||
it('does not emit `fetchFilteredAndSortedGroups` event from `eventHub`', () => {
|
||||
expect(eventHub.$emit).not.toHaveBeenCalledWith(
|
||||
`${ACTIVE_TAB_SUBGROUPS_AND_PROJECTS}fetchFilteredAndSortedGroups`,
|
||||
{
|
||||
filterGroupsBy: search,
|
||||
sortBy: defaultProvide.initialSort,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when sort is changed', () => {
|
||||
|
|
@ -308,6 +330,16 @@ describe('OverviewTabs', () => {
|
|||
).toBe('Foo bar');
|
||||
});
|
||||
|
||||
describe('when search is cleared', () => {
|
||||
it('removes `filter` key from query string', async () => {
|
||||
await findSearchInput().setValue('');
|
||||
|
||||
expect(routerMock.push).toHaveBeenCalledWith({
|
||||
query: { sort: SORTING_ITEM_UPDATED.desc },
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('sets sort dropdown', () => {
|
||||
expect(wrapper.findComponent(GlSorting).props()).toMatchObject({
|
||||
text: SORTING_ITEM_UPDATED.label,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
exports[`MRWidgetAutoMergeEnabled when graphql is disabled template should have correct elements 1`] = `
|
||||
<div
|
||||
class="mr-widget-body media"
|
||||
class="mr-widget-body media mr-widget-body-line-height-1 gl-line-height-normal"
|
||||
>
|
||||
<div
|
||||
class="gl-w-6 gl-h-6 gl-display-flex gl-align-self-start gl-mr-3"
|
||||
|
|
@ -179,7 +179,7 @@ exports[`MRWidgetAutoMergeEnabled when graphql is disabled template should have
|
|||
|
||||
exports[`MRWidgetAutoMergeEnabled when graphql is enabled template should have correct elements 1`] = `
|
||||
<div
|
||||
class="mr-widget-body media"
|
||||
class="mr-widget-body media mr-widget-body-line-height-1 gl-line-height-normal"
|
||||
>
|
||||
<div
|
||||
class="gl-w-6 gl-h-6 gl-display-flex gl-align-self-start gl-mr-3"
|
||||
|
|
|
|||