Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
2bb1dbf21f
commit
f5ef42977e
2
Gemfile
2
Gemfile
|
@ -255,7 +255,7 @@ gem 'slack-messenger', '~> 2.3.4'
|
||||||
gem 'hangouts-chat', '~> 0.0.5', require: 'hangouts_chat'
|
gem 'hangouts-chat', '~> 0.0.5', require: 'hangouts_chat'
|
||||||
|
|
||||||
# Asana integration
|
# Asana integration
|
||||||
gem 'asana', '~> 0.10.3'
|
gem 'asana', '~> 0.10.13'
|
||||||
|
|
||||||
# FogBugz integration
|
# FogBugz integration
|
||||||
gem 'ruby-fogbugz', '~> 0.2.1'
|
gem 'ruby-fogbugz', '~> 0.2.1'
|
||||||
|
|
|
@ -83,11 +83,11 @@ GEM
|
||||||
apollo_upload_server (2.1.0)
|
apollo_upload_server (2.1.0)
|
||||||
actionpack (>= 4.2)
|
actionpack (>= 4.2)
|
||||||
graphql (>= 1.8)
|
graphql (>= 1.8)
|
||||||
asana (0.10.3)
|
asana (0.10.13)
|
||||||
faraday (~> 1.0)
|
faraday (~> 1.0)
|
||||||
faraday_middleware (~> 1.0)
|
faraday_middleware (~> 1.0)
|
||||||
faraday_middleware-multi_json (~> 0.0)
|
faraday_middleware-multi_json (~> 0.0)
|
||||||
oauth2 (~> 1.4)
|
oauth2 (>= 1.4, < 3)
|
||||||
asciidoctor (2.0.15)
|
asciidoctor (2.0.15)
|
||||||
asciidoctor-include-ext (0.4.0)
|
asciidoctor-include-ext (0.4.0)
|
||||||
asciidoctor (>= 1.5.6, < 3.0.0)
|
asciidoctor (>= 1.5.6, < 3.0.0)
|
||||||
|
@ -1454,7 +1454,7 @@ DEPENDENCIES
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
akismet (~> 3.0)
|
akismet (~> 3.0)
|
||||||
apollo_upload_server (~> 2.1.0)
|
apollo_upload_server (~> 2.1.0)
|
||||||
asana (~> 0.10.3)
|
asana (~> 0.10.13)
|
||||||
asciidoctor (~> 2.0.10)
|
asciidoctor (~> 2.0.10)
|
||||||
asciidoctor-include-ext (~> 0.4.0)
|
asciidoctor-include-ext (~> 0.4.0)
|
||||||
asciidoctor-kroki (~> 0.5.0)
|
asciidoctor-kroki (~> 0.5.0)
|
||||||
|
|
|
@ -54,25 +54,25 @@ export default {
|
||||||
<ide-tree-list @tree-ready="$emit('tree-ready')">
|
<ide-tree-list @tree-ready="$emit('tree-ready')">
|
||||||
<template #header>
|
<template #header>
|
||||||
{{ __('Edit') }}
|
{{ __('Edit') }}
|
||||||
<div class="ide-tree-actions ml-auto d-flex" data-testid="ide-root-actions">
|
<div class="ide-tree-actions gl-ml-auto gl-display-flex" data-testid="ide-root-actions">
|
||||||
<new-entry-button
|
<new-entry-button
|
||||||
:label="__('New file')"
|
:label="__('New file')"
|
||||||
:show-label="false"
|
:show-label="false"
|
||||||
class="d-flex border-0 p-0 mr-3"
|
class="gl-display-flex gl-border-0 gl-p-0 gl-mr-5"
|
||||||
icon="doc-new"
|
icon="doc-new"
|
||||||
data-qa-selector="new_file_button"
|
data-qa-selector="new_file_button"
|
||||||
@click="createNewFile()"
|
@click="createNewFile()"
|
||||||
/>
|
/>
|
||||||
<upload
|
<upload
|
||||||
:show-label="false"
|
:show-label="false"
|
||||||
class="d-flex mr-3"
|
class="gl-display-flex gl-mr-5"
|
||||||
button-css-classes="border-0 p-0"
|
button-css-classes="gl-border-0 gl-p-0"
|
||||||
@create="createTempEntry"
|
@create="createTempEntry"
|
||||||
/>
|
/>
|
||||||
<new-entry-button
|
<new-entry-button
|
||||||
:label="__('New directory')"
|
:label="__('New directory')"
|
||||||
:show-label="false"
|
:show-label="false"
|
||||||
class="d-flex border-0 p-0"
|
class="gl-display-flex gl-border-0 gl-p-0"
|
||||||
icon="folder-new"
|
icon="folder-new"
|
||||||
data-qa-selector="new_directory_button"
|
data-qa-selector="new_directory_button"
|
||||||
@click="createNewFolder()"
|
@click="createNewFolder()"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<script>
|
<script>
|
||||||
import { GlBadge, GlTab, GlTabs, GlLoadingIcon } from '@gitlab/ui';
|
import { GlBadge, GlTab, GlTabs, GlLoadingIcon } from '@gitlab/ui';
|
||||||
import { s__ } from '~/locale';
|
import { s__ } from '~/locale';
|
||||||
|
import { limitedCounterWithDelimiter } from '~/lib/utils/text_utility';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
@ -29,7 +30,7 @@ export default {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
text: s__('Jobs|All'),
|
text: s__('Jobs|All'),
|
||||||
count: this.allJobsCount,
|
count: limitedCounterWithDelimiter(this.allJobsCount),
|
||||||
scope: null,
|
scope: null,
|
||||||
testId: 'jobs-all-tab',
|
testId: 'jobs-all-tab',
|
||||||
showBadge: true,
|
showBadge: true,
|
||||||
|
|
|
@ -498,3 +498,17 @@ export const markdownConfig = {
|
||||||
* escaped to `'fix-'\''bug-behavior'\'''`.
|
* escaped to `'fix-'\''bug-behavior'\'''`.
|
||||||
*/
|
*/
|
||||||
export const escapeShellString = (str) => `'${str.replace(allSingleQuotes, () => "'\\''")}'`;
|
export const escapeShellString = (str) => `'${str.replace(allSingleQuotes, () => "'\\''")}'`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds plus character as delimiter for count
|
||||||
|
* if count is greater than limit of 1000
|
||||||
|
* FE creation of `app/helpers/numbers_helper.rb`
|
||||||
|
*
|
||||||
|
* @param {Number} count
|
||||||
|
* @return {Number|String}
|
||||||
|
*/
|
||||||
|
export const limitedCounterWithDelimiter = (count) => {
|
||||||
|
const limit = 1000;
|
||||||
|
|
||||||
|
return count > limit ? '1,000+' : count;
|
||||||
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
%p= _('Transfer group to another parent group.')
|
%p= _('Transfer group to another parent group.')
|
||||||
= form_for group, url: transfer_group_path(group), method: :put, html: { id: form_id, class: 'js-group-transfer-form' } do |f|
|
= form_for group, url: transfer_group_path(group), method: :put, html: { id: form_id, class: 'js-group-transfer-form' } do |f|
|
||||||
%ul
|
%ul
|
||||||
- learn_more_link_start = '<a href="https://docs.gitlab.com/ee/user/project/index.html#redirects-when-changing-repository-paths" target="_blank" rel="noopener noreferrer">'.html_safe
|
- learn_more_link_start = '<a href="https://docs.gitlab.com/ee/user/project/repository/index.html#what-happens-when-a-repository-path-changes" target="_blank" rel="noopener noreferrer">'.html_safe
|
||||||
- warning_text = s_("GroupSettings|Be careful. Changing a group's parent can have unintended side effects. %{learn_more_link_start}Learn more.%{learn_more_link_end}") % { learn_more_link_start: learn_more_link_start, learn_more_link_end: '</a>'.html_safe }
|
- warning_text = s_("GroupSettings|Be careful. Changing a group's parent can have unintended side effects. %{learn_more_link_start}Learn more.%{learn_more_link_end}") % { learn_more_link_start: learn_more_link_start, learn_more_link_end: '</a>'.html_safe }
|
||||||
%li= warning_text.html_safe
|
%li= warning_text.html_safe
|
||||||
%li= s_('GroupSettings|You can only transfer the group to a group you manage.')
|
%li= s_('GroupSettings|You can only transfer the group to a group you manage.')
|
||||||
|
|
|
@ -785,6 +785,8 @@ the `approvals_before_merge` parameter:
|
||||||
field `merge_user` can be either user who merged this merge request,
|
field `merge_user` can be either user who merged this merge request,
|
||||||
user who set it to merge when pipeline succeeds or `null`.
|
user who set it to merge when pipeline succeeds or `null`.
|
||||||
Field `merged_by` (user who merged this merge request or `null`) has been deprecated.
|
Field `merged_by` (user who merged this merge request or `null`) has been deprecated.
|
||||||
|
- `pipeline` is an old parameter and should not be used. Use `head_pipeline` instead,
|
||||||
|
as it is faster and returns more information.
|
||||||
|
|
||||||
## Get single MR participants
|
## Get single MR participants
|
||||||
|
|
||||||
|
|
|
@ -136,10 +136,10 @@ NOTE:
|
||||||
#### Markdown snapshot testing
|
#### Markdown snapshot testing
|
||||||
|
|
||||||
_Markdown snapshot testing_ refers to the automated testing performed in
|
_Markdown snapshot testing_ refers to the automated testing performed in
|
||||||
the GitLab codebase, which is driven by snapshot fixture data derived from the
|
the GitLab codebase, which is driven by "example_snapshots" fixture data derived from all of
|
||||||
GLFM specification. It consists of both backend RSpec tests and frontend Jest tests
|
the examples in the GLFM specification. It consists of both backend RSpec tests and frontend Jest
|
||||||
which use the fixture data. This fixture data is contained in YAML files. These files
|
tests which use the fixture data. This fixture data is contained in YAML files. These files
|
||||||
can be generated and updated based on the Markdown examples in the specification,
|
are generated and updated based on the Markdown examples in the specification,
|
||||||
and the existing GLFM parser and render implementations. They may also be
|
and the existing GLFM parser and render implementations. They may also be
|
||||||
manually updated as necessary to test-drive incomplete implementations.
|
manually updated as necessary to test-drive incomplete implementations.
|
||||||
Regarding the terminology used here:
|
Regarding the terminology used here:
|
||||||
|
@ -159,7 +159,7 @@ Regarding the terminology used here:
|
||||||
[Jest snapshot testing](https://jestjs.io/docs/snapshot-testing), as used elsewhere
|
[Jest snapshot testing](https://jestjs.io/docs/snapshot-testing), as used elsewhere
|
||||||
in the GitLab frontend testing suite. However, the Markdown snapshot testing does
|
in the GitLab frontend testing suite. However, the Markdown snapshot testing does
|
||||||
follow the same philosophy and patterns as Jest snapshot testing:
|
follow the same philosophy and patterns as Jest snapshot testing:
|
||||||
1. Snapshot fixture data is represented as files which are checked into source control.
|
1. Snapshot example fixture data is represented as files which are checked into source control.
|
||||||
1. The files can be automatically generated and updated based on the implementation
|
1. The files can be automatically generated and updated based on the implementation
|
||||||
of the code under tests.
|
of the code under tests.
|
||||||
1. The files can also be manually updated when necessary, for example, to test-drive
|
1. The files can also be manually updated when necessary, for example, to test-drive
|
||||||
|
@ -168,9 +168,15 @@ Regarding the terminology used here:
|
||||||
[Rails database fixture files](https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html).
|
[Rails database fixture files](https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html).
|
||||||
It instead refers to _test fixtures_ in the
|
It instead refers to _test fixtures_ in the
|
||||||
[more generic definition](https://en.wikipedia.org/wiki/Test_fixture#Software),
|
[more generic definition](https://en.wikipedia.org/wiki/Test_fixture#Software),
|
||||||
as input data to support automated testing. However, fixture files still exist, so
|
as input data to support automated testing.
|
||||||
they are colocated under the `spec/fixtures` directory with the rest of
|
1. These example snapshots fixture files are generated from and closely related to the rest of the
|
||||||
the fixture data for the GitLab Rails application.
|
GLFM specification. Therefore, the `example_snapshots` directory is colocated under the
|
||||||
|
`glfm_specification` directory with the rest of the
|
||||||
|
GLFM [specification files](#specification-files). They are intentionally _not_
|
||||||
|
located under the `spec/fixtures` directory with the rest of
|
||||||
|
the fixture data for the GitLab Rails application. In practice, developers have found
|
||||||
|
it simpler and more understandable to have everything under the `glfm_specification` directory
|
||||||
|
rather than splitting these files into the `spec/fixtures` directory.
|
||||||
|
|
||||||
<!-- vale gitlab.InclusionCultural = YES -->
|
<!-- vale gitlab.InclusionCultural = YES -->
|
||||||
|
|
||||||
|
@ -395,9 +401,10 @@ The documentation on the implementation is split into three sections:
|
||||||
|
|
||||||
1. [Scripts](#scripts).
|
1. [Scripts](#scripts).
|
||||||
1. [Specification files](#specification-files).
|
1. [Specification files](#specification-files).
|
||||||
1. Example snapshot files: These YAML files are used as input data
|
1. [Example snapshot files](#example-snapshot-files):
|
||||||
|
These YAML files are used as input data
|
||||||
or fixtures to drive the various tests, and are located under
|
or fixtures to drive the various tests, and are located under
|
||||||
`spec/fixtures/glfm/example_snapshots`. All example snapshot files are automatically
|
`glfm_specification/example_snapshots`. All example snapshot files are automatically
|
||||||
generated based on the specification files and the implementation of the parsers and renderers.
|
generated based on the specification files and the implementation of the parsers and renderers.
|
||||||
However, they can also be directly edited if necessary, such as to
|
However, they can also be directly edited if necessary, such as to
|
||||||
test-drive an incomplete implementation.
|
test-drive an incomplete implementation.
|
||||||
|
@ -662,16 +669,16 @@ controls the behavior of the [scripts](#scripts) and [tests](#types-of-markdown-
|
||||||
The following optional entries are supported for each example. They all default to `false`:
|
The following optional entries are supported for each example. They all default to `false`:
|
||||||
|
|
||||||
- `skip_update_example_snapshots`: When true, skips any addition or update of any this example's entries
|
- `skip_update_example_snapshots`: When true, skips any addition or update of any this example's entries
|
||||||
in the [`spec/fixtures/glfm/example_snapshots/html.yml`](#specfixturesglfmexample_snapshotshtmlyml) file
|
in the [`glfm_specification/example_snapshots/html.yml`](#glfm_specificationexample_snapshotshtmlyml) file
|
||||||
or the [`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml`](#specfixturesglfmexample_snapshotsprosemirror_jsonyml) file.
|
or the [`glfm_specification/example_snapshots/prosemirror_json.yml`](#glfm_specificationexample_snapshotsprosemirror_jsonyml) file.
|
||||||
If this value is truthy, then no other `skip_update_example_snapshot_*` entries can be truthy,
|
If this value is truthy, then no other `skip_update_example_snapshot_*` entries can be truthy,
|
||||||
and an error is raised if any of them are.
|
and an error is raised if any of them are.
|
||||||
- `skip_update_example_snapshot_html_static`: When true, skips addition or update of this example's [static HTML](#static-html)
|
- `skip_update_example_snapshot_html_static`: When true, skips addition or update of this example's [static HTML](#static-html)
|
||||||
entry in the [`spec/fixtures/glfm/example_snapshots/html.yml`](#specfixturesglfmexample_snapshotshtmlyml) file.
|
entry in the [`glfm_specification/example_snapshots/html.yml`](#glfm_specificationexample_snapshotshtmlyml) file.
|
||||||
- `skip_update_example_snapshot_html_wysiwyg`: When true, skips addition or update of this example's [WYSIWYG HTML](#wysiwyg-html)
|
- `skip_update_example_snapshot_html_wysiwyg`: When true, skips addition or update of this example's [WYSIWYG HTML](#wysiwyg-html)
|
||||||
entry in the [`spec/fixtures/glfm/example_snapshots/html.yml`](#specfixturesglfmexample_snapshotshtmlyml) file.
|
entry in the [`glfm_specification/example_snapshots/html.yml`](#glfm_specificationexample_snapshotshtmlyml) file.
|
||||||
- `skip_update_example_snapshot_prosemirror_json`: When true, skips addition or update of this example's
|
- `skip_update_example_snapshot_prosemirror_json`: When true, skips addition or update of this example's
|
||||||
entry in the [`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml`](#specfixturesglfmexample_snapshotsprosemirror_jsonyml) file.
|
entry in the [`glfm_specification/example_snapshots/prosemirror_json.yml`](#glfm_specificationexample_snapshotsprosemirror_jsonyml) file.
|
||||||
- `skip_running_conformance_static_tests`: When true, skips running the [Markdown conformance tests](#markdown-conformance-testing)
|
- `skip_running_conformance_static_tests`: When true, skips running the [Markdown conformance tests](#markdown-conformance-testing)
|
||||||
of the [static HTML](#static-html) for this example.
|
of the [static HTML](#static-html) for this example.
|
||||||
- `skip_running_conformance_wysiwyg_tests`: When true, skips running the [Markdown conformance tests](#markdown-conformance-testing)
|
- `skip_running_conformance_wysiwyg_tests`: When true, skips running the [Markdown conformance tests](#markdown-conformance-testing)
|
||||||
|
@ -681,7 +688,7 @@ The following optional entries are supported for each example. They all default
|
||||||
- `skip_running_snapshot_wysiwyg_html_tests`: When true, skips running the [Markdown snapshot tests](#markdown-snapshot-testing)
|
- `skip_running_snapshot_wysiwyg_html_tests`: When true, skips running the [Markdown snapshot tests](#markdown-snapshot-testing)
|
||||||
of the [WYSIWYG HTML](#wysiwyg-html) for this example.
|
of the [WYSIWYG HTML](#wysiwyg-html) for this example.
|
||||||
- `skip_running_snapshot_prosemirror_json_tests`: When true, skips running the [Markdown snapshot tests](#markdown-snapshot-testing)
|
- `skip_running_snapshot_prosemirror_json_tests`: When true, skips running the [Markdown snapshot tests](#markdown-snapshot-testing)
|
||||||
of the [ProseMirror JSON](#specfixturesglfmexample_snapshotsprosemirror_jsonyml) for this example.
|
of the [ProseMirror JSON](#glfm_specificationexample_snapshotsprosemirror_jsonyml) for this example.
|
||||||
|
|
||||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml` sample entry:
|
`glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml` sample entry:
|
||||||
|
|
||||||
|
@ -808,9 +815,9 @@ key in `glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.ym
|
||||||
can be used to disable automatic generation of some examples. They can instead
|
can be used to disable automatic generation of some examples. They can instead
|
||||||
be manually edited as necessary to help drive the implementations.
|
be manually edited as necessary to help drive the implementations.
|
||||||
|
|
||||||
#### `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
#### `glfm_specification/example_snapshots/examples_index.yml`
|
||||||
|
|
||||||
[`spec/fixtures/glfm/example_snapshots/examples_index.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/fixtures/glfm/example_snapshots/examples_index.yml)
|
[`glfm_specification/example_snapshots/examples_index.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/example_snapshots/examples_index.yml)
|
||||||
is the main list of all
|
is the main list of all
|
||||||
CommonMark, GFM, and GLFM example names, each with a unique canonical name.
|
CommonMark, GFM, and GLFM example names, each with a unique canonical name.
|
||||||
|
|
||||||
|
@ -836,7 +843,7 @@ CommonMark, GFM, and GLFM example names, each with a unique canonical name.
|
||||||
examples where multiple examples exist for the same Section 7 subsection are
|
examples where multiple examples exist for the same Section 7 subsection are
|
||||||
added to the end of the sub-section.
|
added to the end of the sub-section.
|
||||||
|
|
||||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml` sample entries:
|
`glfm_specification/example_snapshots/examples_index.yml` sample entries:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
02_01_preliminaries_characters_and_lines_1:
|
02_01_preliminaries_characters_and_lines_1:
|
||||||
|
@ -856,10 +863,10 @@ CommonMark, GFM, and GLFM example names, each with a unique canonical name.
|
||||||
source_specification: gitlab
|
source_specification: gitlab
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `spec/fixtures/glfm/example_snapshots/markdown.yml`
|
#### `glfm_specification/example_snapshots/markdown.yml`
|
||||||
|
|
||||||
[`spec/fixtures/glfm/example_snapshots/markdown.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/fixtures/glfm/example_snapshots/markdown.yml) contains the original Markdown
|
[`glfm_specification/example_snapshots/markdown.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/example_snapshots/markdown.yml) contains the original Markdown
|
||||||
for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
for each entry in `glfm_specification/example_snapshots/examples_index.yml`
|
||||||
|
|
||||||
- For CommonMark and GFM Markdown,
|
- For CommonMark and GFM Markdown,
|
||||||
it is generated (or updated) from the standard GFM
|
it is generated (or updated) from the standard GFM
|
||||||
|
@ -868,17 +875,17 @@ for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
||||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`
|
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`
|
||||||
input specification file.
|
input specification file.
|
||||||
|
|
||||||
`spec/fixtures/glfm/example_snapshots/markdown.yml` sample entry:
|
`glfm_specification/example_snapshots/markdown.yml` sample entry:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
06_04_inlines_emphasis_and_strong_emphasis_1: |
|
06_04_inlines_emphasis_and_strong_emphasis_1: |
|
||||||
*foo bar*
|
*foo bar*
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `spec/fixtures/glfm/example_snapshots/html.yml`
|
#### `glfm_specification/example_snapshots/html.yml`
|
||||||
|
|
||||||
[`spec/fixtures/glfm/example_snapshots/html.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/fixtures/glfm/example_snapshots/html.yml)
|
[`glfm_specification/example_snapshots/html.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/example_snapshots/html.yml)
|
||||||
contains the HTML for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
contains the HTML for each entry in `glfm_specification/example_snapshots/examples_index.yml`
|
||||||
|
|
||||||
Three types of entries exist, with different HTML for each:
|
Three types of entries exist, with different HTML for each:
|
||||||
|
|
||||||
|
@ -889,13 +896,13 @@ Three types of entries exist, with different HTML for each:
|
||||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`.
|
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`.
|
||||||
- **Static**
|
- **Static**
|
||||||
- This is the static (backend (Ruby)-generated) HTML for each entry in
|
- This is the static (backend (Ruby)-generated) HTML for each entry in
|
||||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml`.
|
`glfm_specification/example_snapshots/examples_index.yml`.
|
||||||
- It is generated/updated from backend [Markdown API](../../../api/markdown.md)
|
- It is generated/updated from backend [Markdown API](../../../api/markdown.md)
|
||||||
(or the underlying internal classes) via the `update-example-snapshots.rb` script,
|
(or the underlying internal classes) via the `update-example-snapshots.rb` script,
|
||||||
but can be manually updated for static examples with incomplete implementations.
|
but can be manually updated for static examples with incomplete implementations.
|
||||||
- **WYSIWYG**
|
- **WYSIWYG**
|
||||||
- The WYSIWYG (frontend, JavaScript-generated) HTML for each entry in
|
- The WYSIWYG (frontend, JavaScript-generated) HTML for each entry in
|
||||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml`.
|
`glfm_specification/example_snapshots/examples_index.yml`.
|
||||||
- It is generated (or updated) from the frontend Content Editor implementation via the
|
- It is generated (or updated) from the frontend Content Editor implementation via the
|
||||||
`update-example-snapshots.rb` script. It can be manually updated for WYSIWYG
|
`update-example-snapshots.rb` script. It can be manually updated for WYSIWYG
|
||||||
examples with incomplete implementations.
|
examples with incomplete implementations.
|
||||||
|
@ -903,7 +910,7 @@ Three types of entries exist, with different HTML for each:
|
||||||
Any exceptions or failures which occur when generating HTML are replaced with an
|
Any exceptions or failures which occur when generating HTML are replaced with an
|
||||||
`Error - check implementation` value.
|
`Error - check implementation` value.
|
||||||
|
|
||||||
`spec/fixtures/glfm/example_snapshots/html.yml` sample entry:
|
`glfm_specification/example_snapshots/html.yml` sample entry:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
06_04_inlines_emphasis_and_strong_emphasis_1:
|
06_04_inlines_emphasis_and_strong_emphasis_1:
|
||||||
|
@ -919,16 +926,16 @@ NOTE:
|
||||||
The actual `static` or `WYSIWYG` entries may differ from the example `html.yml`,
|
The actual `static` or `WYSIWYG` entries may differ from the example `html.yml`,
|
||||||
depending on how the implementations evolve.
|
depending on how the implementations evolve.
|
||||||
|
|
||||||
#### `spec/fixtures/glfm/example_snapshots/prosemirror_json.yml`
|
#### `glfm_specification/example_snapshots/prosemirror_json.yml`
|
||||||
|
|
||||||
[`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/spec/fixtures/glfm/example_snapshots/prosemirror_json.yml)
|
[`glfm_specification/example_snapshots/prosemirror_json.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/example_snapshots/prosemirror_json.yml)
|
||||||
contains the ProseMirror JSON for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
contains the ProseMirror JSON for each entry in `glfm_specification/example_snapshots/examples_index.yml`
|
||||||
|
|
||||||
- It is generated (or updated) from the frontend code via the `update-example-snapshots.rb`
|
- It is generated (or updated) from the frontend code via the `update-example-snapshots.rb`
|
||||||
script, but can be manually updated for examples with incomplete implementations.
|
script, but can be manually updated for examples with incomplete implementations.
|
||||||
- Any exceptions or failures when generating are replaced with a `Error - check implementation` value.
|
- Any exceptions or failures when generating are replaced with a `Error - check implementation` value.
|
||||||
|
|
||||||
`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml` sample entry:
|
`glfm_specification/example_snapshots/prosemirror_json.yml` sample entry:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
06_04_inlines_emphasis_and_strong_emphasis_1: |-
|
06_04_inlines_emphasis_and_strong_emphasis_1: |-
|
||||||
|
|
|
@ -81,6 +81,10 @@ module Gitlab
|
||||||
:update_gateway,
|
:update_gateway,
|
||||||
to: :istio_client
|
to: :istio_client
|
||||||
|
|
||||||
|
delegate :get_ingresses, :patch_ingress, to: :networking_client
|
||||||
|
|
||||||
|
delegate :get_deployments, to: :apps_client
|
||||||
|
|
||||||
attr_reader :api_prefix, :kubeclient_options
|
attr_reader :api_prefix, :kubeclient_options
|
||||||
|
|
||||||
DEFAULT_KUBECLIENT_OPTIONS = {
|
DEFAULT_KUBECLIENT_OPTIONS = {
|
||||||
|
@ -127,46 +131,6 @@ module Gitlab
|
||||||
validate_url!
|
validate_url!
|
||||||
end
|
end
|
||||||
|
|
||||||
# Deployments resource is currently on the apis/extensions api group
|
|
||||||
# until Kubernetes 1.15. Kubernetest 1.16+ has deployments resources in
|
|
||||||
# the apis/apps api group.
|
|
||||||
#
|
|
||||||
# As we still support Kubernetes 1.12+, we will need to support both.
|
|
||||||
def get_deployments(**args)
|
|
||||||
extensions_client.discover unless extensions_client.discovered
|
|
||||||
|
|
||||||
if extensions_client.respond_to?(:get_deployments)
|
|
||||||
extensions_client.get_deployments(**args)
|
|
||||||
else
|
|
||||||
apps_client.get_deployments(**args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Ingresses resource is currently on the apis/extensions api group
|
|
||||||
# until Kubernetes 1.21. Kubernetest 1.22+ has ingresses resources in
|
|
||||||
# the networking.k8s.io/v1 api group.
|
|
||||||
#
|
|
||||||
# As we still support Kubernetes 1.12+, we will need to support both.
|
|
||||||
def get_ingresses(**args)
|
|
||||||
extensions_client.discover unless extensions_client.discovered
|
|
||||||
|
|
||||||
if extensions_client.respond_to?(:get_ingresses)
|
|
||||||
extensions_client.get_ingresses(**args)
|
|
||||||
else
|
|
||||||
networking_client.get_ingresses(**args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def patch_ingress(*args)
|
|
||||||
extensions_client.discover unless extensions_client.discovered
|
|
||||||
|
|
||||||
if extensions_client.respond_to?(:patch_ingress)
|
|
||||||
extensions_client.patch_ingress(*args)
|
|
||||||
else
|
|
||||||
networking_client.patch_ingress(*args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_or_update_cluster_role_binding(resource)
|
def create_or_update_cluster_role_binding(resource)
|
||||||
update_cluster_role_binding(resource)
|
update_cluster_role_binding(resource)
|
||||||
end
|
end
|
||||||
|
|
|
@ -41118,9 +41118,6 @@ msgstr ""
|
||||||
msgid "UsageQuota|Audio samples, videos, datasets, and graphics."
|
msgid "UsageQuota|Audio samples, videos, datasets, and graphics."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "UsageQuota|Because of a known issue, the artifact total for some projects may be incorrect. For more details, read %{warningLinkStart}the epic%{warningLinkEnd}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "UsageQuota|Buy additional minutes"
|
msgid "UsageQuota|Buy additional minutes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -247,7 +247,7 @@
|
||||||
"prosemirror-test-builder": "^1.0.6",
|
"prosemirror-test-builder": "^1.0.6",
|
||||||
"purgecss": "^4.0.3",
|
"purgecss": "^4.0.3",
|
||||||
"purgecss-from-html": "^4.0.3",
|
"purgecss-from-html": "^4.0.3",
|
||||||
"sass": "^1.32.12",
|
"sass": "^1.49.9",
|
||||||
"stylelint": "^14.3.0",
|
"stylelint": "^14.3.0",
|
||||||
"timezone-mock": "^1.0.8",
|
"timezone-mock": "^1.0.8",
|
||||||
"vue-jest": "4.0.1",
|
"vue-jest": "4.0.1",
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Glfm
|
||||||
GLFM_SPEC_TXT_PATH = specification_path.join('output/spec.txt')
|
GLFM_SPEC_TXT_PATH = specification_path.join('output/spec.txt')
|
||||||
|
|
||||||
# Example Snapshot (ES) files
|
# Example Snapshot (ES) files
|
||||||
es_fixtures_path = File.expand_path("../../../spec/fixtures/glfm/example_snapshots", __dir__)
|
es_fixtures_path = File.expand_path("../../../glfm_specification/example_snapshots", __dir__)
|
||||||
ES_EXAMPLES_INDEX_YML_PATH = File.join(es_fixtures_path, 'examples_index.yml')
|
ES_EXAMPLES_INDEX_YML_PATH = File.join(es_fixtures_path, 'examples_index.yml')
|
||||||
ES_MARKDOWN_YML_PATH = File.join(es_fixtures_path, 'markdown.yml')
|
ES_MARKDOWN_YML_PATH = File.join(es_fixtures_path, 'markdown.yml')
|
||||||
ES_HTML_YML_PATH = File.join(es_fixtures_path, 'html.yml')
|
ES_HTML_YML_PATH = File.join(es_fixtures_path, 'html.yml')
|
||||||
|
|
|
@ -5,19 +5,6 @@ jest.mock('~/emoji');
|
||||||
|
|
||||||
const glfmSpecificationDir = path.join(__dirname, '..', '..', '..', 'glfm_specification');
|
const glfmSpecificationDir = path.join(__dirname, '..', '..', '..', 'glfm_specification');
|
||||||
|
|
||||||
const glfmExampleSnapshotsDir = path.join(
|
|
||||||
__dirname,
|
|
||||||
'..',
|
|
||||||
'..',
|
|
||||||
'fixtures',
|
|
||||||
'glfm',
|
|
||||||
'example_snapshots',
|
|
||||||
);
|
|
||||||
|
|
||||||
// See https://docs.gitlab.com/ee/development/gitlab_flavored_markdown/specification_guide/#markdown-snapshot-testing
|
// See https://docs.gitlab.com/ee/development/gitlab_flavored_markdown/specification_guide/#markdown-snapshot-testing
|
||||||
// for documentation on this spec.
|
// for documentation on this spec.
|
||||||
describeMarkdownSnapshots(
|
describeMarkdownSnapshots('CE markdown snapshots in ContentEditor', glfmSpecificationDir);
|
||||||
'CE markdown snapshots in ContentEditor',
|
|
||||||
glfmSpecificationDir,
|
|
||||||
glfmExampleSnapshotsDir,
|
|
||||||
);
|
|
||||||
|
|
|
@ -25,11 +25,7 @@ const loadExamples = (dir, fileName) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// eslint-disable-next-line jest/no-export
|
// eslint-disable-next-line jest/no-export
|
||||||
export const describeMarkdownSnapshots = (
|
export const describeMarkdownSnapshots = (description, glfmSpecificationDir) => {
|
||||||
description,
|
|
||||||
glfmSpecificationDir,
|
|
||||||
glfmExampleSnapshotsDir,
|
|
||||||
) => {
|
|
||||||
let actualHtmlAndJsonExamples;
|
let actualHtmlAndJsonExamples;
|
||||||
let skipRunningSnapshotWysiwygHtmlTests;
|
let skipRunningSnapshotWysiwygHtmlTests;
|
||||||
let skipRunningSnapshotProsemirrorJsonTests;
|
let skipRunningSnapshotProsemirrorJsonTests;
|
||||||
|
@ -38,6 +34,7 @@ export const describeMarkdownSnapshots = (
|
||||||
path.join(glfmSpecificationDir, 'input', 'gitlab_flavored_markdown'),
|
path.join(glfmSpecificationDir, 'input', 'gitlab_flavored_markdown'),
|
||||||
'glfm_example_status.yml',
|
'glfm_example_status.yml',
|
||||||
);
|
);
|
||||||
|
const glfmExampleSnapshotsDir = path.join(glfmSpecificationDir, 'example_snapshots');
|
||||||
const markdownExamples = loadExamples(glfmExampleSnapshotsDir, 'markdown.yml');
|
const markdownExamples = loadExamples(glfmExampleSnapshotsDir, 'markdown.yml');
|
||||||
const expectedHtmlExamples = loadExamples(glfmExampleSnapshotsDir, 'html.yml');
|
const expectedHtmlExamples = loadExamples(glfmExampleSnapshotsDir, 'html.yml');
|
||||||
const expectedProseMirrorJsonExamples = loadExamples(
|
const expectedProseMirrorJsonExamples = loadExamples(
|
||||||
|
|
|
@ -384,4 +384,17 @@ describe('text_utility', () => {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('limitedCounterWithDelimiter', () => {
|
||||||
|
it('returns 1,000+ for count greater than 1000', () => {
|
||||||
|
const expectedOutput = '1,000+';
|
||||||
|
|
||||||
|
expect(textUtils.limitedCounterWithDelimiter(1001)).toBe(expectedOutput);
|
||||||
|
expect(textUtils.limitedCounterWithDelimiter(2300)).toBe(expectedOutput);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns exact number for count less than 1000', () => {
|
||||||
|
expect(textUtils.limitedCounterWithDelimiter(120)).toBe(120);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -171,20 +171,6 @@ RSpec.describe Gitlab::Kubernetes::KubeClient do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#extensions_client' do
|
|
||||||
subject { client.extensions_client }
|
|
||||||
|
|
||||||
it_behaves_like 'a Kubeclient'
|
|
||||||
|
|
||||||
it 'has the extensions API group endpoint' do
|
|
||||||
expect(subject.api_endpoint.to_s).to match(%r{\/apis\/extensions\Z})
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'has the api_version' do
|
|
||||||
expect(subject.instance_variable_get(:@api_version)).to eq('v1beta1')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#istio_client' do
|
describe '#istio_client' do
|
||||||
subject { client.istio_client }
|
subject { client.istio_client }
|
||||||
|
|
||||||
|
@ -307,86 +293,38 @@ RSpec.describe Gitlab::Kubernetes::KubeClient do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_deployments' do
|
describe 'apps/v1 API group' do
|
||||||
let(:extensions_client) { client.extensions_client }
|
|
||||||
let(:apps_client) { client.apps_client }
|
let(:apps_client) { client.apps_client }
|
||||||
|
|
||||||
include_examples 'redirection not allowed', 'get_deployments'
|
describe 'get_deployments' do
|
||||||
include_examples 'dns rebinding not allowed', 'get_deployments'
|
include_examples 'redirection not allowed', 'get_deployments'
|
||||||
|
include_examples 'dns rebinding not allowed', 'get_deployments'
|
||||||
it 'delegates to the extensions client' do
|
|
||||||
expect(extensions_client).to receive(:get_deployments)
|
|
||||||
|
|
||||||
client.get_deployments
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'extensions does not have deployments for Kubernetes 1.16+ clusters' do
|
|
||||||
before do
|
|
||||||
WebMock
|
|
||||||
.stub_request(:get, api_url + '/apis/extensions/v1beta1')
|
|
||||||
.to_return(kube_response(kube_1_16_extensions_v1beta1_discovery_body))
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'delegates to the apps client' do
|
it 'delegates to the apps client' do
|
||||||
expect(apps_client).to receive(:get_deployments)
|
expect(client).to delegate_method(:get_deployments).to(:apps_client)
|
||||||
|
end
|
||||||
|
|
||||||
client.get_deployments
|
it 'responds to the method' do
|
||||||
|
expect(client).to respond_to :get_deployments
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_ingresses' do
|
describe 'networking.k8s.io/v1 API group' do
|
||||||
let(:extensions_client) { client.extensions_client }
|
|
||||||
let(:networking_client) { client.networking_client }
|
let(:networking_client) { client.networking_client }
|
||||||
|
|
||||||
include_examples 'redirection not allowed', 'get_ingresses'
|
[:get_ingresses, :patch_ingress].each do |method|
|
||||||
include_examples 'dns rebinding not allowed', 'get_ingresses'
|
describe "##{method}" do
|
||||||
|
include_examples 'redirection not allowed', method
|
||||||
|
include_examples 'dns rebinding not allowed', method
|
||||||
|
|
||||||
it 'delegates to the extensions client' do
|
it 'delegates to the networking client' do
|
||||||
expect(extensions_client).to receive(:get_ingresses)
|
expect(client).to delegate_method(method).to(:networking_client)
|
||||||
|
end
|
||||||
|
|
||||||
client.get_ingresses
|
it 'responds to the method' do
|
||||||
end
|
expect(client).to respond_to method
|
||||||
|
end
|
||||||
context 'extensions does not have deployments for Kubernetes 1.22+ clusters' do
|
|
||||||
before do
|
|
||||||
WebMock
|
|
||||||
.stub_request(:get, api_url + '/apis/extensions/v1beta1')
|
|
||||||
.to_return(kube_response(kube_1_22_extensions_v1beta1_discovery_body))
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'delegates to the apps client' do
|
|
||||||
expect(networking_client).to receive(:get_ingresses)
|
|
||||||
|
|
||||||
client.get_ingresses
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#patch_ingress' do
|
|
||||||
let(:extensions_client) { client.extensions_client }
|
|
||||||
let(:networking_client) { client.networking_client }
|
|
||||||
|
|
||||||
include_examples 'redirection not allowed', 'patch_ingress'
|
|
||||||
include_examples 'dns rebinding not allowed', 'patch_ingress'
|
|
||||||
|
|
||||||
it 'delegates to the extensions client' do
|
|
||||||
expect(extensions_client).to receive(:patch_ingress)
|
|
||||||
|
|
||||||
client.patch_ingress
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'extensions does not have ingress for Kubernetes 1.22+ clusters' do
|
|
||||||
before do
|
|
||||||
WebMock
|
|
||||||
.stub_request(:get, api_url + '/apis/extensions/v1beta1')
|
|
||||||
.to_return(kube_response(kube_1_22_extensions_v1beta1_discovery_body))
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'delegates to the apps client' do
|
|
||||||
expect(networking_client).to receive(:patch_ingress)
|
|
||||||
|
|
||||||
client.patch_ingress
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,5 @@ require 'spec_helper'
|
||||||
RSpec.describe API::Markdown, 'Snapshot' do
|
RSpec.describe API::Markdown, 'Snapshot' do
|
||||||
# noinspection RubyMismatchedArgumentType (ignore RBS type warning: __dir__ can be nil, but 2nd argument can't be nil)
|
# noinspection RubyMismatchedArgumentType (ignore RBS type warning: __dir__ can be nil, but 2nd argument can't be nil)
|
||||||
glfm_specification_dir = File.expand_path('../../../glfm_specification', __dir__)
|
glfm_specification_dir = File.expand_path('../../../glfm_specification', __dir__)
|
||||||
glfm_example_snapshots_dir = File.expand_path('../../fixtures/glfm/example_snapshots', __dir__)
|
include_context 'with API::Markdown Snapshot shared context', glfm_specification_dir
|
||||||
include_context 'with API::Markdown Snapshot shared context', glfm_specification_dir, glfm_example_snapshots_dir
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,9 +39,6 @@ module KubernetesHelpers
|
||||||
|
|
||||||
def stub_kubeclient_discover_base(api_url)
|
def stub_kubeclient_discover_base(api_url)
|
||||||
WebMock.stub_request(:get, api_url + '/api/v1').to_return(kube_response(kube_v1_discovery_body))
|
WebMock.stub_request(:get, api_url + '/api/v1').to_return(kube_response(kube_v1_discovery_body))
|
||||||
WebMock
|
|
||||||
.stub_request(:get, api_url + '/apis/extensions/v1beta1')
|
|
||||||
.to_return(kube_response(kube_extensions_v1beta1_discovery_body))
|
|
||||||
WebMock
|
WebMock
|
||||||
.stub_request(:get, api_url + '/apis/apps/v1')
|
.stub_request(:get, api_url + '/apis/apps/v1')
|
||||||
.to_return(kube_response(kube_apps_v1_discovery_body))
|
.to_return(kube_response(kube_apps_v1_discovery_body))
|
||||||
|
@ -149,7 +146,7 @@ module KubernetesHelpers
|
||||||
|
|
||||||
def stub_kubeclient_deployments(namespace, status: nil)
|
def stub_kubeclient_deployments(namespace, status: nil)
|
||||||
stub_kubeclient_discover(service.api_url)
|
stub_kubeclient_discover(service.api_url)
|
||||||
deployments_url = service.api_url + "/apis/extensions/v1beta1/namespaces/#{namespace}/deployments"
|
deployments_url = service.api_url + "/apis/apps/v1/namespaces/#{namespace}/deployments"
|
||||||
response = { status: status } if status
|
response = { status: status } if status
|
||||||
|
|
||||||
WebMock.stub_request(:get, deployments_url).to_return(response || kube_deployments_response)
|
WebMock.stub_request(:get, deployments_url).to_return(response || kube_deployments_response)
|
||||||
|
@ -157,7 +154,7 @@ module KubernetesHelpers
|
||||||
|
|
||||||
def stub_kubeclient_ingresses(namespace, status: nil, method: :get, resource_path: "", response: kube_ingresses_response)
|
def stub_kubeclient_ingresses(namespace, status: nil, method: :get, resource_path: "", response: kube_ingresses_response)
|
||||||
stub_kubeclient_discover(service.api_url)
|
stub_kubeclient_discover(service.api_url)
|
||||||
ingresses_url = service.api_url + "/apis/extensions/v1beta1/namespaces/#{namespace}/ingresses#{resource_path}"
|
ingresses_url = service.api_url + "/apis/networking.k8s.io/v1/namespaces/#{namespace}/ingresses#{resource_path}"
|
||||||
response = { status: status } if status
|
response = { status: status } if status
|
||||||
|
|
||||||
WebMock.stub_request(method, ingresses_url).to_return(response)
|
WebMock.stub_request(method, ingresses_url).to_return(response)
|
||||||
|
@ -314,24 +311,6 @@ module KubernetesHelpers
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# From Kubernetes 1.16+ Deployments are no longer served from apis/extensions
|
|
||||||
def kube_1_16_extensions_v1beta1_discovery_body
|
|
||||||
{
|
|
||||||
"kind" => "APIResourceList",
|
|
||||||
"resources" => [
|
|
||||||
{ "name" => "ingresses", "namespaced" => true, "kind" => "Deployment" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
# From Kubernetes 1.22+ Ingresses are no longer served from apis/extensions
|
|
||||||
def kube_1_22_extensions_v1beta1_discovery_body
|
|
||||||
{
|
|
||||||
"kind" => "APIResourceList",
|
|
||||||
"resources" => []
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def kube_knative_discovery_body
|
def kube_knative_discovery_body
|
||||||
{
|
{
|
||||||
"kind" => "APIResourceList",
|
"kind" => "APIResourceList",
|
||||||
|
@ -339,18 +318,6 @@ module KubernetesHelpers
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def kube_extensions_v1beta1_discovery_body
|
|
||||||
{
|
|
||||||
"kind" => "APIResourceList",
|
|
||||||
"resources" => [
|
|
||||||
{ "name" => "deployments", "namespaced" => true, "kind" => "Deployment" },
|
|
||||||
{ "name" => "ingresses", "namespaced" => true, "kind" => "Ingress" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Yes, deployments are defined in both apis/extensions/v1beta1 and apis/v1
|
|
||||||
# (for Kubernetes < 1.16). This matches what Kubenetes API server returns.
|
|
||||||
def kube_apps_v1_discovery_body
|
def kube_apps_v1_discovery_body
|
||||||
{
|
{
|
||||||
"kind" => "APIResourceList",
|
"kind" => "APIResourceList",
|
||||||
|
|
|
@ -5,12 +5,12 @@ require 'spec_helper'
|
||||||
# See https://docs.gitlab.com/ee/development/gitlab_flavored_markdown/specification_guide/#markdown-snapshot-testing
|
# See https://docs.gitlab.com/ee/development/gitlab_flavored_markdown/specification_guide/#markdown-snapshot-testing
|
||||||
# for documentation on this spec.
|
# for documentation on this spec.
|
||||||
# rubocop:disable Layout/LineLength
|
# rubocop:disable Layout/LineLength
|
||||||
RSpec.shared_context 'with API::Markdown Snapshot shared context' do |glfm_specification_dir, glfm_example_snapshots_dir|
|
RSpec.shared_context 'with API::Markdown Snapshot shared context' do |glfm_specification_dir|
|
||||||
# rubocop:enable Layout/LineLength
|
# rubocop:enable Layout/LineLength
|
||||||
include ApiHelpers
|
include ApiHelpers
|
||||||
|
|
||||||
markdown_examples, html_examples = %w[markdown.yml html.yml].map do |file_name|
|
markdown_examples, html_examples = %w[markdown.yml html.yml].map do |file_name|
|
||||||
yaml = File.read("#{glfm_example_snapshots_dir}/#{file_name}")
|
yaml = File.read("#{glfm_specification_dir}/example_snapshots/#{file_name}")
|
||||||
YAML.safe_load(yaml, symbolize_names: true, aliases: true)
|
YAML.safe_load(yaml, symbolize_names: true, aliases: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
17
yarn.lock
17
yarn.lock
|
@ -6920,6 +6920,11 @@ immer@^7.0.7:
|
||||||
resolved "https://registry.yarnpkg.com/immer/-/immer-7.0.7.tgz#9dfe713d49bf871cc59aedfce59b1992fa37a977"
|
resolved "https://registry.yarnpkg.com/immer/-/immer-7.0.7.tgz#9dfe713d49bf871cc59aedfce59b1992fa37a977"
|
||||||
integrity sha512-Q8yYwVADJXrNfp1ZUAh4XDHkcoE3wpdpb4mC5abDSajs2EbW8+cGdPyAnglMyLnm7EF6ojD2xBFX7L5i4TIytw==
|
integrity sha512-Q8yYwVADJXrNfp1ZUAh4XDHkcoE3wpdpb4mC5abDSajs2EbW8+cGdPyAnglMyLnm7EF6ojD2xBFX7L5i4TIytw==
|
||||||
|
|
||||||
|
immutable@^4.0.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
|
||||||
|
integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
|
||||||
|
|
||||||
import-fresh@^3.0.0, import-fresh@^3.2.1:
|
import-fresh@^3.0.0, import-fresh@^3.2.1:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
|
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
|
||||||
|
@ -11132,12 +11137,14 @@ sane@^4.0.3:
|
||||||
minimist "^1.1.1"
|
minimist "^1.1.1"
|
||||||
walker "~1.0.5"
|
walker "~1.0.5"
|
||||||
|
|
||||||
sass@^1.32.12:
|
sass@^1.49.9:
|
||||||
version "1.32.12"
|
version "1.49.9"
|
||||||
resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.12.tgz#a2a47ad0f1c168222db5206444a30c12457abb9f"
|
resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9"
|
||||||
integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==
|
integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==
|
||||||
dependencies:
|
dependencies:
|
||||||
chokidar ">=3.0.0 <4.0.0"
|
chokidar ">=3.0.0 <4.0.0"
|
||||||
|
immutable "^4.0.0"
|
||||||
|
source-map-js ">=0.6.2 <2.0.0"
|
||||||
|
|
||||||
sax@1.2.1, sax@>=0.6.0:
|
sax@1.2.1, sax@>=0.6.0:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
|
@ -11495,7 +11502,7 @@ source-list-map@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
|
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
|
||||||
integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==
|
integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==
|
||||||
|
|
||||||
source-map-js@^1.0.1:
|
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
||||||
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||||
|
|
Loading…
Reference in New Issue