Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
778a179f
Commit
778a179f
authored
Mar 29, 2021
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab master
parents
3ebdb1e9
0e8208cb
Changes
36
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
731 additions
and
629 deletions
+731
-629
app/assets/javascripts/pipelines/graphql/queries/get_dag_vis_data.query.graphql
.../pipelines/graphql/queries/get_dag_vis_data.query.graphql
+1
-0
app/graphql/types/query_type.rb
app/graphql/types/query_type.rb
+8
-3
app/graphql/types/sort_enum.rb
app/graphql/types/sort_enum.rb
+28
-4
app/graphql/types/user_type.rb
app/graphql/types/user_type.rb
+1
-1
app/models/protected_branch.rb
app/models/protected_branch.rb
+1
-1
app/views/dashboard/merge_requests.html.haml
app/views/dashboard/merge_requests.html.haml
+2
-2
app/views/projects/protected_branches/shared/_branches_list.html.haml
...ojects/protected_branches/shared/_branches_list.html.haml
+1
-1
app/views/projects/protected_branches/shared/_create_protected_branch.html.haml
...tected_branches/shared/_create_protected_branch.html.haml
+1
-1
app/views/shared/projects/protected_branches/_update_protected_branch.html.haml
...cts/protected_branches/_update_protected_branch.html.haml
+1
-1
changelogs/unreleased/323431_enable_allow_force_push_to_protected_branches_ff.yml
...3431_enable_allow_force_push_to_protected_branches_ff.yml
+5
-0
changelogs/unreleased/ajk-gitlab-docs-deprecation-use-schema-types.yml
...released/ajk-gitlab-docs-deprecation-use-schema-types.yml
+5
-0
changelogs/unreleased/revert-0767b9e2.yml
changelogs/unreleased/revert-0767b9e2.yml
+5
-0
config/feature_flags/development/allow_force_push_to_protected_branches.yml
...gs/development/allow_force_push_to_protected_branches.yml
+1
-1
config/feature_flags/ops/prometheus_metrics_method_instrumentation.yml
...e_flags/ops/prometheus_metrics_method_instrumentation.yml
+0
-8
config/feature_flags/ops/prometheus_metrics_view_instrumentation.yml
...ure_flags/ops/prometheus_metrics_view_instrumentation.yml
+0
-8
doc/api/graphql/reference/index.md
doc/api/graphql/reference/index.md
+401
-391
doc/user/project/protected_branches.md
doc/user/project/protected_branches.md
+7
-8
ee/app/graphql/ee/types/query_type.rb
ee/app/graphql/ee/types/query_type.rb
+1
-1
ee/app/views/projects/protected_branches/ee/_protected_branch_access_summary.html.haml
...ed_branches/ee/_protected_branch_access_summary.html.haml
+1
-1
lib/feature.rb
lib/feature.rb
+4
-4
lib/gitlab/graphql/docs/helper.rb
lib/gitlab/graphql/docs/helper.rb
+106
-28
lib/gitlab/graphql/docs/renderer.rb
lib/gitlab/graphql/docs/renderer.rb
+5
-2
lib/gitlab/graphql/docs/templates/default.md.haml
lib/gitlab/graphql/docs/templates/default.md.haml
+9
-9
lib/tasks/gitlab/graphql.rake
lib/tasks/gitlab/graphql.rake
+2
-2
spec/features/dashboard/shortcuts_spec.rb
spec/features/dashboard/shortcuts_spec.rb
+1
-1
spec/graphql/features/feature_flag_spec.rb
spec/graphql/features/feature_flag_spec.rb
+0
-1
spec/graphql/types/base_field_spec.rb
spec/graphql/types/base_field_spec.rb
+0
-1
spec/lib/api/helpers_spec.rb
spec/lib/api/helpers_spec.rb
+0
-1
spec/lib/feature/gitaly_spec.rb
spec/lib/feature/gitaly_spec.rb
+0
-1
spec/lib/feature_spec.rb
spec/lib/feature_spec.rb
+68
-118
spec/lib/gitlab/gon_helper_spec.rb
spec/lib/gitlab/gon_helper_spec.rb
+0
-1
spec/lib/gitlab/graphql/docs/renderer_spec.rb
spec/lib/gitlab/graphql/docs/renderer_spec.rb
+66
-14
spec/lib/gitlab/metrics/methods_spec.rb
spec/lib/gitlab/metrics/methods_spec.rb
+0
-5
spec/lib/gitlab/metrics_spec.rb
spec/lib/gitlab/metrics_spec.rb
+0
-5
spec/requests/api/features_spec.rb
spec/requests/api/features_spec.rb
+0
-2
spec/requests/api/usage_data_spec.rb
spec/requests/api/usage_data_spec.rb
+0
-2
No files found.
app/assets/javascripts/pipelines/graphql/queries/get_dag_vis_data.query.graphql
View file @
778a179f
query
getDagVisData
(
$projectPath
:
ID
!,
$iid
:
ID
!)
{
project
(
fullPath
:
$projectPath
)
{
pipeline
(
iid
:
$iid
)
{
id
stages
{
nodes
{
name
...
...
app/graphql/types/query_type.rb
View file @
778a179f
...
...
@@ -82,11 +82,16 @@ module Types
argument
:id
,
::
Types
::
GlobalIDType
[
::
Issue
],
required:
true
,
description:
'The global ID of the Issue.'
end
field
:instance_statistics_measurements
,
Types
::
Admin
::
Analytics
::
UsageTrends
::
MeasurementType
.
connection_type
,
field
:instance_statistics_measurements
,
type:
Types
::
Admin
::
Analytics
::
UsageTrends
::
MeasurementType
.
connection_type
,
null:
true
,
description:
'Get statistics on the instance.'
,
deprecated:
{
reason:
'This field was renamed. Use the `usageTrendsMeasurements` field instead'
,
milestone:
'13.10'
},
resolver:
Resolvers
::
Admin
::
Analytics
::
UsageTrends
::
MeasurementsResolver
resolver:
Resolvers
::
Admin
::
Analytics
::
UsageTrends
::
MeasurementsResolver
,
deprecated:
{
reason: :renamed
,
replacement:
'Query.usageTrendsMeasurements'
,
milestone:
'13.10'
}
field
:usage_trends_measurements
,
Types
::
Admin
::
Analytics
::
UsageTrends
::
MeasurementType
.
connection_type
,
null:
true
,
...
...
app/graphql/types/sort_enum.rb
View file @
778a179f
...
...
@@ -7,10 +7,34 @@ module Types
# Deprecated, as we prefer uppercase enums
# https://gitlab.com/groups/gitlab-org/-/epics/1838
value
'updated_desc'
,
'Updated at descending order.'
,
value: :updated_desc
,
deprecated:
{
reason:
'Use UPDATED_DESC'
,
milestone:
'13.5'
}
value
'updated_asc'
,
'Updated at ascending order.'
,
value: :updated_asc
,
deprecated:
{
reason:
'Use UPDATED_ASC'
,
milestone:
'13.5'
}
value
'created_desc'
,
'Created at descending order.'
,
value: :created_desc
,
deprecated:
{
reason:
'Use CREATED_DESC'
,
milestone:
'13.5'
}
value
'created_asc'
,
'Created at ascending order.'
,
value: :created_asc
,
deprecated:
{
reason:
'Use CREATED_ASC'
,
milestone:
'13.5'
}
value
'updated_desc'
,
'Updated at descending order.'
,
value: :updated_desc
,
deprecated:
{
reason: :renamed
,
replacement:
'UPDATED_DESC'
,
milestone:
'13.5'
}
value
'updated_asc'
,
'Updated at ascending order.'
,
value: :updated_asc
,
deprecated:
{
reason: :renamed
,
replacement:
'UPDATED_ASC'
,
milestone:
'13.5'
}
value
'created_desc'
,
'Created at descending order.'
,
value: :created_desc
,
deprecated:
{
reason: :renamed
,
replacement:
'CREATED_DESC'
,
milestone:
'13.5'
}
value
'created_asc'
,
'Created at ascending order.'
,
value: :created_asc
,
deprecated:
{
reason: :renamed
,
replacement:
'CREATED_ASC'
,
milestone:
'13.5'
}
value
'UPDATED_DESC'
,
'Updated at descending order.'
,
value: :updated_desc
value
'UPDATED_ASC'
,
'Updated at ascending order.'
,
value: :updated_asc
...
...
app/graphql/types/user_type.rb
View file @
778a179f
...
...
@@ -24,7 +24,7 @@ module Types
description:
'State of the user.'
field
:email
,
GraphQL
::
STRING_TYPE
,
null:
true
,
description:
'User email.'
,
method: :public_email
,
deprecated:
{
reason:
'Use public_e
mail'
,
milestone:
'13.7'
}
deprecated:
{
reason:
:renamed
,
replacement:
'User.publicE
mail'
,
milestone:
'13.7'
}
field
:public_email
,
GraphQL
::
STRING_TYPE
,
null:
true
,
description:
"User's public email."
field
:avatar_url
,
GraphQL
::
STRING_TYPE
,
null:
true
,
...
...
app/models/protected_branch.rb
View file @
778a179f
...
...
@@ -30,7 +30,7 @@ class ProtectedBranch < ApplicationRecord
end
def
self
.
allow_force_push?
(
project
,
ref_name
)
return
false
unless
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
project
)
return
false
unless
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
project
,
default_enabled: :yaml
)
project
.
protected_branches
.
allowing_force_push
.
matching
(
ref_name
).
any?
end
...
...
app/views/dashboard/merge_requests.html.haml
View file @
778a179f
-
@hide_top_links
=
true
-
page_title
_
(
"Merge
R
equests"
)
-
page_title
_
(
"Merge
r
equests"
)
-
@breadcrumb_link
=
merge_requests_dashboard_path
(
assignee_username:
current_user
.
username
)
=
render_dashboard_ultimate_trial
(
current_user
)
.page-title-holder.d-flex.align-items-start.flex-column.flex-sm-row.align-items-sm-center
%h1
.page-title
=
_
(
'Merge
R
equests'
)
%h1
.page-title
=
_
(
'Merge
r
equests'
)
-
if
current_user
.page-title-controls.ml-0.mb-3.ml-sm-auto.mb-sm-0
...
...
app/views/projects/protected_branches/shared/_branches_list.html.haml
View file @
778a179f
...
...
@@ -23,7 +23,7 @@
%th
=
s_
(
"ProtectedBranch|Allowed to push"
)
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
)
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
,
default_enabled: :yaml
)
%th
=
s_
(
"ProtectedBranch|Allow force push"
)
%span
.has-tooltip
{
data:
{
container:
'body'
},
title:
s_
(
'ProtectedBranch|Allow force push for all users with push access.'
),
'aria-hidden'
:
'true'
}
...
...
app/views/projects/protected_branches/shared/_create_protected_branch.html.haml
View file @
778a179f
...
...
@@ -21,7 +21,7 @@
=
f
.
label
:push_access_levels_attributes
,
s_
(
"ProtectedBranch|Allowed to push:"
),
class:
'col-md-2 text-left text-md-right'
.col-md-10
=
yield
:push_access_levels
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
)
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
,
default_enabled: :yaml
)
.form-group.row
=
f
.
label
:allow_force_push
,
s_
(
"ProtectedBranch|Allow force push:"
),
class:
'col-md-2 gl-text-left text-md-right'
.col-md-10
...
...
app/views/shared/projects/protected_branches/_update_protected_branch.html.haml
View file @
778a179f
...
...
@@ -33,6 +33,6 @@
%p
.small
=
_
(
'Members of %{group} can also push to this branch: %{branch}'
)
%
{
group:
(
group_push_access_levels
.
size
>
1
?
'these groups'
:
'this group'
),
branch:
group_push_access_levels
.
map
(
&
:humanize
).
to_sentence
}
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
)
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
,
default_enabled: :yaml
)
%td
=
render
"shared/buttons/project_feature_toggle"
,
is_checked:
protected_branch
.
allow_force_push
,
label:
s_
(
"ProtectedBranch|Toggle allow force push"
),
class_list:
"js-force-push-toggle project-feature-toggle"
,
data:
{
qa_selector:
'force_push_toggle_button'
,
qa_branch_name:
protected_branch
.
name
}
changelogs/unreleased/323431_enable_allow_force_push_to_protected_branches_ff.yml
0 → 100644
View file @
778a179f
---
title
:
Allow users to enable force push to protected branches
merge_request
:
57053
author
:
type
:
added
changelogs/unreleased/ajk-gitlab-docs-deprecation-use-schema-types.yml
0 → 100644
View file @
778a179f
---
title
:
Change the way deprecation information is presented in GraphQL documentation
merge_request
:
56864
author
:
type
:
changed
changelogs/unreleased/revert-0767b9e2.yml
0 → 100644
View file @
778a179f
---
title
:
Revert Ignore default_enabled value in Feature.enabled?
merge_request
:
57707
author
:
type
:
fixed
config/feature_flags/development/allow_force_push_to_protected_branches.yml
View file @
778a179f
...
...
@@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/323431
milestone
:
'
13.10'
type
:
development
group
:
group::source code
default_enabled
:
fals
e
default_enabled
:
tru
e
config/feature_flags/ops/prometheus_metrics_method_instrumentation.yml
deleted
100644 → 0
View file @
3ebdb1e9
---
name
:
prometheus_metrics_method_instrumentation
introduced_by_url
:
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4304
rollout_issue_url
:
milestone
:
'
10.5'
type
:
ops
group
:
default_enabled
:
false
config/feature_flags/ops/prometheus_metrics_view_instrumentation.yml
deleted
100644 → 0
View file @
3ebdb1e9
---
name
:
prometheus_metrics_view_instrumentation
introduced_by_url
:
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4304
rollout_issue_url
:
milestone
:
'
10.5'
type
:
ops
group
:
default_enabled
:
false
doc/api/graphql/reference/index.md
View file @
778a179f
This source diff could not be displayed because it is too large. You can
view the blob
instead.
doc/user/project/protected_branches.md
View file @
778a179f
...
...
@@ -177,13 +177,12 @@ Deleting a protected branch is allowed only by using the web interface; not from
This means that you can't accidentally delete a protected branch from your
command line or a Git client application.
## Allow force push on protected branches
**(FREE SELF)**
## Allow force push on protected branches
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15611) in GitLab 13.10.
> - It's [deployed behind a feature flag](../feature_flags.md), disabled by default.
> - It's disabled on GitLab.com.
> - It's not recommended for production use.
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-allow-force-push-on-protected-branches).
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15611) in GitLab 13.10 behind a disabled feature flag.
> - It's enabled on GitLab.com.
> - It's recommended for production use.
> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-allow-force-push-on-protected-branches).
WARNING:
This feature might not be available to you. Check the
**version history**
note above for details.
...
...
@@ -253,8 +252,8 @@ for details about the pipelines security model.
## Enable or disable allow force push on protected branches **(FREE SELF)**
Allow force push on protected branches is
under development and not
ready for
production use. It is deployed behind a feature flag that is
**
dis
abled by default**
.
Allow force push on protected branches is ready for
production use. It is deployed behind a feature flag that is
**
en
abled by default**
.
[
GitLab administrators with access to the GitLab Rails console
](
../../administration/feature_flags.md
)
can enable it.
...
...
ee/app/graphql/ee/types/query_type.rb
View file @
778a179f
...
...
@@ -40,7 +40,7 @@ module EE
null:
true
,
description:
"Number of vulnerabilities per severity level, per day, for the projects on the current user's instance security dashboard."
,
resolver:
::
Resolvers
::
VulnerabilitiesHistoryResolver
,
deprecated:
{
reason:
'Use `vulnerabilitiesCountByDay`
'
,
milestone:
'13.3'
}
deprecated:
{
reason:
:discouraged
,
replacement:
'Query.vulnerabilitiesCountByDay
'
,
milestone:
'13.3'
}
field
:geo_node
,
::
Types
::
Geo
::
GeoNodeType
,
null:
true
,
...
...
ee/app/views/projects/protected_branches/ee/_protected_branch_access_summary.html.haml
View file @
778a179f
...
...
@@ -6,6 +6,6 @@
%td
=
render
partial:
'projects/settings/ee/access_level_dropdown'
,
locals:
{
protected_branch:
protected_branch
,
access_levels:
protected_branch
.
push_access_levels
,
level_frequencies:
access_level_frequencies
(
protected_branch
.
push_access_levels
),
input_basic_name:
'push_access_levels'
,
disabled:
!
can_unprotect
,
toggle_class:
'js-allowed-to-push'
}
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
)
-
if
::
Feature
.
enabled?
(
:allow_force_push_to_protected_branches
,
@project
,
default_enabled: :yaml
)
%td
=
render
"shared/buttons/project_feature_toggle"
,
is_checked:
protected_branch
.
allow_force_push
,
label:
s_
(
"ProtectedBranch|Toggle allow force push"
),
class_list:
"js-force-push-toggle project-feature-toggle"
,
data:
{
qa_selector:
'force_push_toggle_button'
,
qa_branch_name:
protected_branch
.
name
}
lib/feature.rb
View file @
778a179f
...
...
@@ -57,7 +57,7 @@ class Feature
# use `default_enabled: true` to default the flag to being `enabled`
# unless set explicitly. The default is `disabled`
# TODO: remove the `default_enabled:` and read it from the `defintion_yaml`
# check: https://gitlab.com/gitlab-org/gitlab/-/issues/
271275
# check: https://gitlab.com/gitlab-org/gitlab/-/issues/
30228
def
enabled?
(
key
,
thing
=
nil
,
type: :development
,
default_enabled:
false
)
if
check_feature_flags_definition?
if
thing
&&
!
thing
.
respond_to?
(
:flipper_id
)
...
...
@@ -65,11 +65,11 @@ class Feature
"The thing '
#{
thing
.
class
.
name
}
' for feature flag '
#{
key
}
' needs to include `FeatureGate` or implement `flipper_id`"
end
Feature
::
Definition
.
valid_usage!
(
key
,
type:
type
,
default_enabled:
:yaml
)
Feature
::
Definition
.
valid_usage!
(
key
,
type:
type
,
default_enabled:
default_enabled
)
end
#
TODO: Remove rubocop disable comment once `default_enabled` argument is removed https://gitlab.com/gitlab-org/gitlab/-/issues/271275
default_enabled
=
Feature
::
Definition
.
default_enabled?
(
key
)
# rubocop:disable Lint/ShadowedArgument
#
If `default_enabled: :yaml` we fetch the value from the YAML definition instead.
default_enabled
=
Feature
::
Definition
.
default_enabled?
(
key
)
if
default_enabled
==
:yaml
# During setup the database does not exist yet. So we haven't stored a value
# for the feature yet and return the default.
...
...
lib/gitlab/graphql/docs/helper.rb
View file @
778a179f
...
...
@@ -27,7 +27,10 @@ module Gitlab
MD
end
def
render_name_and_description
(
object
,
level
=
3
)
# Template methods:
# Methods that return chunks of Markdown for insertion into the document
def
render_name_and_description
(
object
,
owner:
nil
,
level:
3
)
content
=
[]
content
<<
"
#{
'#'
*
level
}
`
#{
object
[
:name
]
}
`"
...
...
@@ -35,10 +38,22 @@ module Gitlab
if
object
[
:description
].
present?
desc
=
object
[
:description
].
strip
desc
+=
'.'
unless
desc
.
ends_with?
(
'.'
)
end
if
object
[
:is_deprecated
]
owner
=
Array
.
wrap
(
owner
)
deprecation
=
schema_deprecation
(
owner
,
object
[
:name
])
content
<<
(
deprecation
&
.
original_description
||
desc
)
content
<<
render_deprecation
(
object
,
owner
,
:block
)
else
content
<<
desc
end
content
.
join
(
"
\n\n
"
)
content
.
compact
.
join
(
"
\n\n
"
)
end
def
render_return_type
(
query
)
"Returns
#{
render_field_type
(
query
[
:type
])
}
.
\n
"
end
def
sorted_by_name
(
objects
)
...
...
@@ -47,39 +62,25 @@ module Gitlab
objects
.
sort_by
{
|
o
|
o
[
:name
]
}
end
def
render_field
(
field
)
row
(
render_name
(
field
),
render_field_type
(
field
[
:type
]),
render_description
(
field
))
def
render_field
(
field
,
owner
)
render_row
(
render_name
(
field
,
owner
),
render_field_type
(
field
[
:type
]),
render_description
(
field
,
owner
,
:inline
)
)
end
def
render_enum_value
(
value
)
r
ow
(
render_name
(
value
),
render_description
(
valu
e
))
def
render_enum_value
(
enum
,
value
)
r
ender_row
(
render_name
(
value
,
enum
[
:name
]),
render_description
(
value
,
enum
[
:name
],
:inlin
e
))
end
def
r
ow
(
*
values
)
"
|
#{
values
.
join
(
' | '
)
}
|
"
def
r
ender_union_member
(
member
)
"
- [`
#{
member
}
`](#
#{
member
.
downcase
}
)
"
end
def
render_name
(
object
)
rendered_name
=
"`
#{
object
[
:name
]
}
`"
rendered_name
+=
' **{warning-solid}**'
if
object
[
:is_deprecated
]
rendered_name
end
# QUERIES:
# Returns the object description. If the object has been deprecated,
# the deprecation reason will be returned in place of the description.
def
render_description
(
object
)
return
object
[
:description
]
unless
object
[
:is_deprecated
]
"**Deprecated:**
#{
object
[
:deprecation_reason
]
}
"
end
def
render_field_type
(
type
)
"[`
#{
type
[
:info
]
}
`](#
#{
type
[
:name
].
downcase
}
)"
end
def
render_return_type
(
query
)
"Returns
#{
render_field_type
(
query
[
:type
])
}
.
\n
"
end
# Methods that return parts of the schema, or related information:
# We are ignoring connections and built in types for now,
# they should be added when queries are generated.
...
...
@@ -103,6 +104,83 @@ module Gitlab
!
enum_type
[
:name
].
in?
(
%w[__DirectiveLocation __TypeKind]
)
end
end
private
# DO NOT CALL THESE METHODS IN TEMPLATES
# Template methods
def
render_row
(
*
values
)
"|
#{
values
.
map
{
|
val
|
val
.
to_s
.
squish
}
.join(' | ')} |"
end
def
render_name
(
object
,
owner
=
nil
)
rendered_name
=
"`
#{
object
[
:name
]
}
`"
rendered_name
+=
' **{warning-solid}**'
if
object
[
:is_deprecated
]
rendered_name
end
# Returns the object description. If the object has been deprecated,
# the deprecation reason will be returned in place of the description.
def
render_description
(
object
,
owner
=
nil
,
context
=
:block
)
owner
=
Array
.
wrap
(
owner
)
return
render_deprecation
(
object
,
owner
,
context
)
if
object
[
:is_deprecated
]
return
if
object
[
:description
].
blank?
desc
=
object
[
:description
].
strip
desc
+=
'.'
unless
desc
.
ends_with?
(
'.'
)
desc
end
def
render_deprecation
(
object
,
owner
,
context
)
deprecation
=
schema_deprecation
(
owner
,
object
[
:name
])
return
deprecation
.
markdown
(
context:
context
)
if
deprecation
reason
=
object
[
:deprecation_reason
]
||
'Use of this is deprecated.'
"**Deprecated:**
#{
reason
}
"
end
def
render_field_type
(
type
)
"[`
#{
type
[
:info
]
}
`](#
#{
type
[
:name
].
downcase
}
)"
end
# Queries
# returns the deprecation information for a field or argument
# See: Gitlab::Graphql::Deprecation
def
schema_deprecation
(
type_name
,
field_name
)
schema_member
(
type_name
,
field_name
)
&
.
deprecation
end
# Return a part of the schema.
#
# This queries the Schema by owner and name to find:
#
# - fields (e.g. `schema_member('Query', 'currentUser')`)
# - arguments (e.g. `schema_member(['Query', 'project], 'fullPath')`)
def
schema_member
(
type_name
,
field_name
)
type_name
=
Array
.
wrap
(
type_name
)
if
type_name
.
size
==
2
arg_name
=
field_name
type_name
,
field_name
=
type_name
else
type_name
=
type_name
.
first
arg_name
=
nil
end
return
if
type_name
.
nil?
||
field_name
.
nil?
type
=
schema
.
types
[
type_name
]
return
unless
type
&&
type
.
kind
.
fields?
field
=
type
.
fields
[
field_name
]
return
field
if
arg_name
.
nil?
args
=
field
.
arguments
is_mutation
=
field
.
mutation
&&
field
.
mutation
<=
::
Mutations
::
BaseMutation
args
=
args
[
'input'
].
type
.
unwrap
.
arguments
if
is_mutation
args
[
arg_name
]
end
end
end
end
...
...
lib/gitlab/graphql/docs/renderer.rb
View file @
778a179f
...
...
@@ -10,17 +10,20 @@ module Gitlab
# It uses graphql-docs helpers and schema parser, more information in https://github.com/gjtorikian/graphql-docs.
#
# Arguments:
# schema - the GraphQL schema definition. For GitLab should be: GitlabSchema
.graphql_definition
# schema - the GraphQL schema definition. For GitLab should be: GitlabSchema
# output_dir: The folder where the markdown files will be saved
# template: The path of the haml template to be parsed
class
Renderer
include
Gitlab
::
Graphql
::
Docs
::
Helper
attr_reader
:schema
def
initialize
(
schema
,
output_dir
:,
template
:)
@output_dir
=
output_dir
@template
=
template
@layout
=
Haml
::
Engine
.
new
(
File
.
read
(
template
))
@parsed_schema
=
GraphQLDocs
::
Parser
.
new
(
schema
,
{}).
parse
@parsed_schema
=
GraphQLDocs
::
Parser
.
new
(
schema
.
graphql_definition
,
{}).
parse
@schema
=
schema
end
def
contents
...
...
lib/gitlab/graphql/docs/templates/default.md.haml
View file @
778a179f
...
...
@@ -27,7 +27,7 @@
\
-
sorted_by_name
(
queries
).
each
do
|
query
|
=
render_name_and_description
(
query
)
=
render_name_and_description
(
query
,
owner:
'Query'
)
\
=
render_return_type
(
query
)
-
unless
query
[
:arguments
].
empty?
...
...
@@ -35,7 +35,7 @@
~ "| Name | Type | Description |"
~ "| ---- | ---- | ----------- |"
-
sorted_by_name
(
query
[
:arguments
]).
each
do
|
argument
|
=
render_field
(
argument
)
=
render_field
(
argument
,
query
[
:type
][
:name
]
)
\
:plain
...
...
@@ -58,7 +58,7 @@
~ "| Field | Type | Description |"
~ "| ----- | ---- | ----------- |"
-
sorted_by_name
(
type
[
:fields
]).
each
do
|
field
|
=
render_field
(
field
)
=
render_field
(
field
,
type
[
:name
]
)
\
:plain
...
...
@@ -79,7 +79,7 @@
~ "| Value | Description |"
~ "| ----- | ----------- |"
-
sorted_by_name
(
enum
[
:values
]).
each
do
|
value
|
=
render_enum_value
(
value
)
=
render_enum_value
(
enum
,
value
)
\
:plain
...
...
@@ -121,12 +121,12 @@
\
-
graphql_union_types
.
each
do
|
type
|
=
render_name_and_description
(
type
,
4
)
=
render_name_and_description
(
type
,
level:
4
)
\
One of:
\
-
type
[
:possible_types
].
each
do
|
type_name
|
~ "- [`
#{
type_name
}
`](##{type_name.downcase})"
-
type
[
:possible_types
].
each
do
|
member
|
=
render_union_member
(
member
)
\
:plain
...
...
@@ -134,7 +134,7 @@
\
-
graphql_interface_types
.
each
do
|
type
|
=
render_name_and_description
(
type
,
4
)
=
render_name_and_description
(
type
,
level:
4
)
\
Implementations:
\
...
...
@@ -144,5 +144,5 @@
~ "| Field | Type | Description |"
~ "| ----- | ---- | ----------- |"
-
sorted_by_name
(
type
[
:fields
]
+
type
[
:connections
]).
each
do
|
field
|
=
render_field
(
field
)
=
render_field
(
field
,
type
[
:name
]
)
\
lib/tasks/gitlab/graphql.rake
View file @
778a179f
...
...
@@ -110,7 +110,7 @@ namespace :gitlab do
desc
'GitLab | GraphQL | Generate GraphQL docs'
task
compile_docs:
[
:environment
,
:enable_feature_flags
]
do
renderer
=
Gitlab
::
Graphql
::
Docs
::
Renderer
.
new
(
GitlabSchema
.
graphql_definition
,
render_options
)
renderer
=
Gitlab
::
Graphql
::
Docs
::
Renderer
.
new
(
GitlabSchema
,
render_options
)
renderer
.
write
...
...
@@ -119,7 +119,7 @@ namespace :gitlab do
desc
'GitLab | GraphQL | Check if GraphQL docs are up to date'
task
check_docs:
[
:environment
,
:enable_feature_flags
]
do
renderer
=
Gitlab
::
Graphql
::
Docs
::
Renderer
.
new
(
GitlabSchema
.
graphql_definition
,
render_options
)
renderer
=
Gitlab
::
Graphql
::
Docs
::
Renderer
.
new
(
GitlabSchema
,
render_options
)
doc
=
File
.
read
(
Rails
.
root
.
join
(
OUTPUT_DIR
,
'index.md'
))
...
...
spec/features/dashboard/shortcuts_spec.rb
View file @
778a179f
...
...
@@ -24,7 +24,7 @@ RSpec.describe 'Dashboard shortcuts', :js do
find
(
'body'
).
send_keys
([
:shift
,
'M'
])
check_page_title
(
'Merge
R
equests'
)
check_page_title
(
'Merge
r
equests'
)
find
(
'body'
).
send_keys
([
:shift
,
'T'
])
...
...
spec/graphql/features/feature_flag_spec.rb
View file @
778a179f
...
...
@@ -15,7 +15,6 @@ RSpec.describe 'Graphql Field feature flags' do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
subject
{
result
}
...
...
spec/graphql/types/base_field_spec.rb
View file @
778a179f
...
...
@@ -128,7 +128,6 @@ RSpec.describe Types::BaseField do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
it
'returns false if the feature is not enabled'
do
...
...
spec/lib/api/helpers_spec.rb
View file @
778a179f
...
...
@@ -183,7 +183,6 @@ RSpec.describe API::Helpers do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
context
'with feature enabled'
do
...
...
spec/lib/feature/gitaly_spec.rb
View file @
778a179f
...
...
@@ -8,7 +8,6 @@ RSpec.describe Feature::Gitaly do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
describe
".enabled?"
do
...
...
spec/lib/feature_spec.rb
View file @
778a179f
This diff is collapsed.
Click to expand it.
spec/lib/gitlab/gon_helper_spec.rb
View file @
778a179f
...
...
@@ -12,7 +12,6 @@ RSpec.describe Gitlab::GonHelper do
describe
'#push_frontend_feature_flag'
do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
it
'pushes a feature flag to the frontend'
do
...
...
spec/lib/gitlab/graphql/docs/renderer_spec.rb
View file @
778a179f
# frozen_string_literal: true
require
'spec_helper'
require
'
fast_
spec_helper'
RSpec
.
describe
Gitlab
::
Graphql
::
Docs
::
Renderer
do
describe
'#contents'
do
# Returns a Schema that uses the given `type`
def
mock_schema
(
type
,
field_description
)
query_type
=
Class
.
new
(
Types
::
BaseObject
)
do
graphql_name
'Query'
let
(
:template
)
{
Rails
.
root
.
join
(
'lib/gitlab/graphql/docs/templates/default.md.haml'
)
}
field
:foo
,
type
,
null:
true
do
description
field_description
let
(
:query_type
)
do
Class
.
new
(
Types
::
BaseObject
)
{
graphql_name
'Query'
}.
tap
do
|
t
|
# this keeps type and field_description in scope.
t
.
field
:foo
,
type
,
null:
true
,
description:
field_description
do
argument
:id
,
GraphQL
::
ID_TYPE
,
required:
false
,
description:
'ID of the object.'
end
end
end
GraphQL
::
Schema
.
define
(
query:
query_type
,
resolve_type:
->
(
obj
,
ctx
)
{
raise
'Not a real schema'
}
)
let
(
:mock_schema
)
do
Class
.
new
(
GraphQL
::
Schema
)
do
def
resolve_type
(
obj
,
ctx
)
raise
'Not a real schema'
end
end
end
let_it_be
(
:template
)
{
Rails
.
root
.
join
(
'lib/gitlab/graphql/docs/templates/default.md.haml'
)
}
let
(
:field_description
)
{
'List of objects.'
}
subject
(
:contents
)
do
mock_schema
.
query
(
query_type
)
described_class
.
new
(
mock_schema
(
type
,
field_description
).
graphql_definition
,
mock_schema
,
output_dir:
nil
,
template:
template
).
contents
...
...
@@ -136,6 +139,22 @@ RSpec.describe Gitlab::Graphql::Docs::Renderer do
null:
false
,
deprecated:
{
reason:
'This is deprecated'
,
milestone:
'1.10'
},
description:
'A description.'
field
:foo_with_args
,
type:
GraphQL
::
STRING_TYPE
,
null:
false
,
deprecated:
{
reason:
'Do not use'
,
milestone:
'1.10'
},
description:
'A description.'
do
argument
:fooity
,
::
GraphQL
::
INT_TYPE
,
required:
false
,
description:
'X'
end
field
:bar
,
type:
GraphQL
::
STRING_TYPE
,
null:
false
,
description:
'A description.'
,
deprecated:
{
reason: :renamed
,
milestone:
'1.10'
,
replacement:
'Query.boom'
}
end
end
...
...
@@ -145,7 +164,40 @@ RSpec.describe Gitlab::Graphql::Docs::Renderer do
| Field | Type | Description |
| ----- | ---- | ----------- |
| `foo` **{warning-solid}** | [`String!`](#string) | **Deprecated:** This is deprecated. Deprecated in 1.10. |
| `bar` **{warning-solid}** | [`String!`](#string) | **Deprecated** in 1.10. This was renamed. Use: `Query.boom`. |
| `foo` **{warning-solid}** | [`String!`](#string) | **Deprecated** in 1.10. This is deprecated. |
| `fooWithArgs` **{warning-solid}** | [`String!`](#string) | **Deprecated** in 1.10. Do not use. |
DOC
is_expected
.
to
include
(
expectation
)
end
end
context
'when a Query.field is deprecated'
do
let
(
:type
)
{
::
GraphQL
::
INT_TYPE
}
before
do
query_type
.
field
(
name: :bar
,
type:
type
,
null:
true
,
description:
'A bar'
,
deprecated:
{
reason: :renamed
,
milestone:
'10.11'
,
replacement:
'Query.foo'
}
)
end
it
'includes the deprecation'
do
expectation
=
<<~
DOC
### `bar`
A bar.
WARNING:
**Deprecated** in 10.11.
This was renamed.
Use: `Query.foo`.
Returns [`Int`](#int).
DOC
is_expected
.
to
include
(
expectation
)
...
...
spec/lib/gitlab/metrics/methods_spec.rb
View file @
778a179f
...
...
@@ -102,11 +102,6 @@ RSpec.describe Gitlab::Metrics::Methods do
let
(
:feature_name
)
{
:some_metric_feature
}
let
(
:metric
)
{
call_fetch_metric_method
(
docstring:
docstring
,
with_feature:
feature_name
)
}
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
context
'when feature is enabled'
do
before
do
stub_feature_flags
(
feature_name
=>
true
)
...
...
spec/lib/gitlab/metrics_spec.rb
View file @
778a179f
...
...
@@ -54,11 +54,6 @@ RSpec.describe Gitlab::Metrics do
end
describe
'.measure'
do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
context
'without a transaction'
do
it
'returns the return value of the block'
do
val
=
described_class
.
measure
(
:foo
)
{
10
}
...
...
spec/requests/api/features_spec.rb
View file @
778a179f
...
...
@@ -438,8 +438,6 @@ RSpec.describe API::Features, stub_feature_flags: false do
context
'when the gate value was set'
do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
Feature
.
enable
(
feature_name
)
end
...
...
spec/requests/api/usage_data_spec.rb
View file @
778a179f
...
...
@@ -73,7 +73,6 @@ RSpec.describe API::UsageData do
context
'with unknown event'
do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
it
'returns status ok'
do
...
...
@@ -150,7 +149,6 @@ RSpec.describe API::UsageData do
context
'with unknown event'
do
before
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
end
it
'returns status ok'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment