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
2dcf5472
Commit
2dcf5472
authored
Jul 30, 2021
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab master
parents
443093fe
81493714
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
101 additions
and
34 deletions
+101
-34
app/assets/stylesheets/framework/files.scss
app/assets/stylesheets/framework/files.scss
+13
-0
app/models/concerns/limitable.rb
app/models/concerns/limitable.rb
+2
-0
app/views/projects/blame/show.html.haml
app/views/projects/blame/show.html.haml
+1
-1
qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb
...tures/browser_ui/1_manage/group/bulk_import_group_spec.rb
+1
-1
qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb
...ecs/features/browser_ui/5_package/pypi_repository_spec.rb
+38
-15
rubocop/cop/gitlab/mark_used_feature_flags.rb
rubocop/cop/gitlab/mark_used_feature_flags.rb
+1
-0
spec/models/concerns/limitable_spec.rb
spec/models/concerns/limitable_spec.rb
+41
-17
spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
+4
-0
No files found.
app/assets/stylesheets/framework/files.scss
View file @
2dcf5472
...
...
@@ -136,6 +136,13 @@
* Blame file
*/
&
.blame
{
//
// IMPORTANT PERFORMANCE OPTIMIZATION
//
// When viewinng a blame with many commits a lot of content is rendered on the page.
// The line below ensures that we only render what is visible to the user, thus reducing TBT in the browser.
content-visibility
:
auto
;
table
{
border
:
0
;
margin
:
0
;
...
...
@@ -150,6 +157,12 @@
}
td
{
//
// IMPORTANT PERFORMANCE OPTIMIZATION
//
// When viewinng a blame with many commits a lot of content is rendered on the page.
// The line below ensures that we only render what is visible to the user, thus reducing TBT in the browser.
content-visibility
:
auto
;
border-top
:
0
;
border-bottom
:
0
;
...
...
app/models/concerns/limitable.rb
View file @
2dcf5472
...
...
@@ -9,6 +9,7 @@ module Limitable
class_attribute
:limit_relation
class_attribute
:limit_name
class_attribute
:limit_feature_flag
class_attribute
:limit_feature_flag_for_override
# Allows selectively disabling by actor (as per https://docs.gitlab.com/ee/development/feature_flags/#selectively-disable-by-actor)
self
.
limit_name
=
self
.
name
.
demodulize
.
tableize
validate
:validate_plan_limit_not_exceeded
,
on: :create
...
...
@@ -28,6 +29,7 @@ module Limitable
scope_relation
=
self
.
public_send
(
limit_scope
)
# rubocop:disable GitlabSecurity/PublicSend
return
unless
scope_relation
return
if
limit_feature_flag
&&
::
Feature
.
disabled?
(
limit_feature_flag
,
scope_relation
,
default_enabled: :yaml
)
return
if
limit_feature_flag_for_override
&&
::
Feature
.
enabled?
(
limit_feature_flag_for_override
,
scope_relation
,
default_enabled: :yaml
)
relation
=
limit_relation
?
self
.
public_send
(
limit_relation
)
:
self
.
class
.
where
(
limit_scope
=>
scope_relation
)
# rubocop:disable GitlabSecurity/PublicSend
limits
=
scope_relation
.
actual_limits
...
...
app/views/projects/blame/show.html.haml
View file @
2dcf5472
...
...
@@ -51,7 +51,7 @@
=
i
\
%td
.lines
%td
.lines
.gl-w-full
%pre
.code.highlight
%code
-
blame_group
[
:lines
].
each
do
|
line
|
...
...
qa/qa/specs/features/browser_ui/1_manage/group/bulk_import_group_spec.rb
View file @
2dcf5472
...
...
@@ -92,7 +92,7 @@ module QA
Page
::
Group
::
BulkImport
.
perform
do
|
import_page
|
import_page
.
import_group
(
source_group
.
path
,
sandbox
.
path
)
expect
(
import_page
).
to
have_imported_group
(
source_group
.
path
,
wait:
18
0
)
expect
(
import_page
).
to
have_imported_group
(
source_group
.
path
,
wait:
30
0
)
aggregate_failures
do
expect
{
imported_group
.
reload!
}.
to
eventually_eq
(
source_group
).
within
(
duration:
10
)
...
...
qa/qa/specs/features/browser_ui/5_package/pypi_repository_spec.rb
View file @
2dcf5472
...
...
@@ -26,10 +26,10 @@ module QA
end
end
let
(
:
gitlab_address_with_port
)
do
uri
=
URI
.
parse
(
Runtime
::
Scenario
.
gitlab_address
)
"
#{
uri
.
scheme
}
://
#{
uri
.
host
}
:
#{
uri
.
port
}
"
end
let
(
:
uri
)
{
URI
.
parse
(
Runtime
::
Scenario
.
gitlab_address
)
}
let
(
:gitlab_address_with_port
)
{
"
#{
uri
.
scheme
}
://
#{
uri
.
host
}
:
#{
uri
.
port
}
"
}
let
(
:gitlab_host_with_port
)
{
"
#{
uri
.
host
}
:
#{
uri
.
port
}
"
}
let
(
:personal_access_token
)
{
Runtime
::
Env
.
personal_access_token
}
before
do
Flow
::
Login
.
sign_in
...
...
@@ -42,14 +42,25 @@ module QA
content:
<<~
YAML
image: python:latest
stages:
- run
- install
run:
stage: run
script:
- pip install twine
- python setup.py sdist bdist_wheel
- "TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url
#{
gitlab_address_with_port
}
/api/v4/projects/${CI_PROJECT_ID}/packages/pypi dist/*"
tags:
- "runner-for-
#{
project
.
name
}
"
install:
stage: install
script:
- "pip install mypypipackage --no-deps --index-url http://
#{
personal_access_token
}
:
#{
personal_access_token
}
@
#{
gitlab_host_with_port
}
/api/v4/projects/${CI_PROJECT_ID}/packages/pypi/simple --trusted-host
#{
gitlab_host_with_port
}
"
tags:
- "runner-for-
#{
project
.
name
}
"
YAML
},
{
...
...
@@ -87,6 +98,16 @@ module QA
Page
::
Project
::
Job
::
Show
.
perform
do
|
job
|
expect
(
job
).
to
be_successful
(
timeout:
800
)
end
Flow
::
Pipeline
.
visit_latest_pipeline
Page
::
Project
::
Pipeline
::
Show
.
perform
do
|
pipeline
|
pipeline
.
click_job
(
'install'
)
end
Page
::
Project
::
Job
::
Show
.
perform
do
|
job
|
expect
(
job
).
to
be_successful
(
timeout:
800
)
end
end
after
do
...
...
@@ -95,20 +116,22 @@ module QA
project
&
.
remove_via_api!
end
it
'publishes a pypi package and deletes it'
,
testcase:
'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1087'
do
Page
::
Project
::
Menu
.
perform
(
&
:click_packages_link
)
context
'when at the project level'
do
it
'publishes and installs a pypi package and deletes it'
,
testcase:
'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1087'
do
Page
::
Project
::
Menu
.
perform
(
&
:click_packages_link
)
Page
::
Project
::
Packages
::
Index
.
perform
do
|
index
|
expect
(
index
).
to
have_package
(
package
.
name
)
index
.
click_package
(
package
.
name
)
end
Page
::
Project
::
Packages
::
Index
.
perform
do
|
index
|
expect
(
index
).
to
have_package
(
package
.
name
)
index
.
click_package
(
package
.
name
)
end
Page
::
Project
::
Packages
::
Show
.
perform
(
&
:click_delete
)
Page
::
Project
::
Packages
::
Show
.
perform
(
&
:click_delete
)
Page
::
Project
::
Packages
::
Index
.
perform
do
|
index
|
aggregate_failures
do
expect
(
index
).
to
have_content
(
"Package deleted successfully"
)
expect
(
index
).
not_to
have_package
(
package
.
name
)
Page
::
Project
::
Packages
::
Index
.
perform
do
|
index
|
aggregate_failures
do
expect
(
index
).
to
have_content
(
"Package deleted successfully"
)
expect
(
index
).
not_to
have_package
(
package
.
name
)
end
end
end
end
...
...
rubocop/cop/gitlab/mark_used_feature_flags.rb
View file @
2dcf5472
...
...
@@ -32,6 +32,7 @@ module RuboCop
SELF_METHODS
=
%i[
push_frontend_feature_flag
limit_feature_flag=
limit_feature_flag_for_override=
]
.
freeze
+
EXPERIMENT_METHODS
+
RUGGED_METHODS
+
WORKER_METHODS
RESTRICT_ON_SEND
=
FEATURE_METHODS
+
EXPERIMENTATION_METHODS
+
GRAPHQL_METHODS
+
SELF_METHODS
...
...
spec/models/concerns/limitable_spec.rb
View file @
2dcf5472
# frozen_string_literal: true
require
'fast_spec_helper'
require
'active_model'
require
'spec_helper'
RSpec
.
describe
Limitable
do
let
(
:minimal_test_class
)
do
...
...
@@ -17,7 +16,7 @@ RSpec.describe Limitable do
end
before
do
stub_const
(
"MinimalTestClass"
,
minimal_test_class
)
stub_const
(
'MinimalTestClass'
,
minimal_test_class
)
end
it
{
expect
(
MinimalTestClass
.
limit_name
).
to
eq
(
'test_classes'
)
}
...
...
@@ -37,25 +36,50 @@ RSpec.describe Limitable do
instance
.
valid?
(
:create
)
end
context
'with custom relation'
do
before
do
MinimalTestClass
.
limit_relation
=
:custom_relation
context
'with custom relation and feature flags'
do
using
RSpec
::
Parameterized
::
TableSyntax
where
(
:limit_feature_flag
,
:limit_feature_flag_value
,
:limit_feature_flag_for_override
,
:limit_feature_flag_override_value
,
:expect_limit_applied?
)
do
nil
|
nil
|
nil
|
nil
|
true
:some_feature_flag
|
false
|
nil
|
nil
|
false
:some_feature_flag
|
true
|
nil
|
nil
|
true
:some_feature_flag
|
true
|
:some_feature_flag_disable
|
false
|
true
:some_feature_flag
|
false
|
:some_feature_flag_disable
|
false
|
false
:some_feature_flag
|
false
|
:some_feature_flag_disable
|
true
|
false
:some_feature_flag
|
true
|
:some_feature_flag_disable
|
true
|
false
end
it
'triggers custom limit_relation'
do
instance
=
MinimalTestClass
.
new
with_them
do
let
(
:instance
)
{
MinimalTestClass
.
new
}
def
instance
.
project
@project
||=
Object
.
new
end
before
do
def
instance
.
project
@project
||=
stub_feature_flag_gate
(
'CustomActor'
)
end
stub_feature_flags
(
"
#{
limit_feature_flag
}
"
:
limit_feature_flag_value
?
[
instance
.
project
]
:
false
)
if
limit_feature_flag
stub_feature_flags
(
"
#{
limit_feature_flag_for_override
}
"
:
limit_feature_flag_override_value
?
[
instance
.
project
]
:
false
)
if
limit_feature_flag_for_override
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
limits
=
Object
.
new
custom_relation
=
Object
.
new
expect
(
instance
).
to
receive
(
:custom_relation
).
and_return
(
custom_relation
)
expect
(
instance
.
project
).
to
receive
(
:actual_limits
).
and_return
(
limits
)
expect
(
limits
).
to
receive
(
:exceeded?
).
with
(
instance
.
class
.
name
.
demodulize
.
tableize
,
custom_relation
).
and_return
(
false
)
MinimalTestClass
.
limit_relation
=
:custom_relation
MinimalTestClass
.
limit_feature_flag
=
limit_feature_flag
MinimalTestClass
.
limit_feature_flag_for_override
=
limit_feature_flag_for_override
end
instance
.
valid?
(
:create
)
it
'acts according to the feature flag settings'
do
limits
=
Object
.
new
custom_relation
=
Object
.
new
if
expect_limit_applied?
expect
(
instance
).
to
receive
(
:custom_relation
).
and_return
(
custom_relation
)
expect
(
instance
.
project
).
to
receive
(
:actual_limits
).
and_return
(
limits
)
expect
(
limits
).
to
receive
(
:exceeded?
).
with
(
instance
.
class
.
name
.
demodulize
.
tableize
,
custom_relation
).
and_return
(
false
)
else
expect
(
instance
).
not_to
receive
(
:custom_relation
)
end
instance
.
valid?
(
:create
)
end
end
end
end
...
...
spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
View file @
2dcf5472
...
...
@@ -194,6 +194,10 @@ RSpec.describe RuboCop::Cop::Gitlab::MarkUsedFeatureFlags do
include_examples
'sets flag as used'
,
'self.limit_feature_flag = :foo'
,
'foo'
end
describe
'self.limit_feature_flag_for_override = :foo'
do
include_examples
'sets flag as used'
,
'self.limit_feature_flag_for_override = :foo'
,
'foo'
end
describe
'FEATURE_FLAG = :foo'
do
include_examples
'sets flag as used'
,
'FEATURE_FLAG = :foo'
,
'foo'
end
...
...
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