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
d8b5438a
Commit
d8b5438a
authored
Feb 11, 2021
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab master
parents
6241a56e
34b5d0c0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
150 additions
and
76 deletions
+150
-76
doc/ci/yaml/README.md
doc/ci/yaml/README.md
+88
-0
lib/gitlab/usage/metrics/aggregates/aggregate.rb
lib/gitlab/usage/metrics/aggregates/aggregate.rb
+1
-1
spec/frontend/issue_show/components/fields/description_spec.js
...frontend/issue_show/components/fields/description_spec.js
+39
-39
spec/frontend/issue_show/components/fields/title_spec.js
spec/frontend/issue_show/components/fields/title_spec.js
+21
-27
spec/frontend/issue_show/helpers.js
spec/frontend/issue_show/helpers.js
+0
-9
spec/lib/gitlab/usage/metrics/aggregates/aggregate_spec.rb
spec/lib/gitlab/usage/metrics/aggregates/aggregate_spec.rb
+1
-0
No files found.
doc/ci/yaml/README.md
View file @
d8b5438a
...
...
@@ -4597,6 +4597,94 @@ Use this feature to ignore jobs, or use the
[
special YAML features
](
#special-yaml-features
)
and transform the hidden jobs
into templates.
### `!reference` tags
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/266173) in GitLab 13.9.
> - It's [deployed behind a feature flag](../../user/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-reference-tags). **(FREE SELF)**
WARNING:
This feature might not be available to you. Check the
**version history**
note above for details.
Use the
`!reference`
custom YAML tag to select keyword configuration from other job
sections and reuse it in the current section. Unlike
[
YAML anchors
](
#anchors
)
, you can
use
`!reference`
tags to reuse configuration from
[
included
](
#include
)
configuration
files as well.
In this example, a
`script`
and an
`after_script`
from two different locations are
reused in the
`test`
job:
-
`setup.yml`
:
```
yaml
.setup
:
script
:
-
echo creating environment
```
-
`.gitlab-ci.yml`
:
```
yaml
include
:
-
local
:
setup.yml
.teardown
:
after_script
:
-
echo deleting environment
test
:
script
:
-
!reference
[
.setup
,
script
]
-
echo running my own command
after_script
:
-
!reference
[
.teardown
,
after_script
]
```
In this example,
`test-vars-1`
reuses the all the variables in
`.vars`
, while
`test-vars-2`
selects a specific variable and reuses it as a new
`MY_VAR`
variable.
```
yaml
.vars
:
variables
:
URL
:
"
http://my-url.internal"
IMPORTANT_VAR
:
"
the
details"
test-vars-1
:
variables
:
!reference
[
.vars
,
variables
]
script
:
-
printenv
test-vars-2
:
variables
:
MY_VAR
:
!reference
[
.vars
,
variables
,
IMPORTANT_VAR
]
script
:
-
printenv
```
You can't reuse a section that already includes a
`!reference`
tag. Only one level
of nesting is supported.
#### Enable or disable `!reference` tags **(FREE SELF)**
The
`!reference`
tag is under development and not ready for production use. It is
deployed behind a feature flag that is
**disabled by default**
.
[
GitLab administrators with access to the GitLab Rails console
](
../../administration/feature_flags.md
)
can enable it.
To enable it:
```
ruby
Feature
.
enable
(
:ci_custom_yaml_tags
)
```
To disable it:
```
ruby
Feature
.
disable
(
:ci_custom_yaml_tags
)
```
## Skip Pipeline
To push a commit without triggering a pipeline, add
`[ci skip]`
or
`[skip ci]`
, using any
...
...
lib/gitlab/usage/metrics/aggregates/aggregate.rb
View file @
d8b5438a
...
...
@@ -44,7 +44,7 @@ module Gitlab
def
aggregated_metrics_data
(
start_date
:,
end_date
:)
aggregated_metrics
.
each_with_object
({})
do
|
aggregation
,
data
|
next
if
aggregation
[
:feature_flag
]
&&
Feature
.
disabled?
(
aggregation
[
:feature_flag
],
default_enabled:
false
,
type: :development
)
next
if
aggregation
[
:feature_flag
]
&&
Feature
.
disabled?
(
aggregation
[
:feature_flag
],
default_enabled:
:yaml
,
type: :development
)
case
aggregation
[
:source
]
when
REDIS_SOURCE
...
...
spec/frontend/issue_show/components/fields/description_spec.js
View file @
d8b5438a
import
Vue
from
'
vue
'
;
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
DescriptionField
from
'
~/issue_show/components/fields/description.vue
'
;
import
MarkdownField
from
'
~/vue_shared/components/markdown/field.vue
'
;
import
eventHub
from
'
~/issue_show/event_hub
'
;
import
Store
from
'
~/issue_show/stores
'
;
import
descriptionField
from
'
~/issue_show/components/fields/description.vue
'
;
import
{
keyboardDownEvent
}
from
'
../../helpers
'
;
describe
(
'
Description field component
'
,
()
=>
{
let
vm
;
let
store
;
beforeEach
((
done
)
=>
{
const
Component
=
Vue
.
extend
(
descriptionField
);
const
el
=
document
.
createElement
(
'
div
'
);
store
=
new
Store
({
titleHtml
:
''
,
descriptionHtml
:
''
,
issuableRef
:
''
,
});
store
.
formState
.
description
=
'
test
'
;
document
.
body
.
appendChild
(
el
);
let
wrapper
;
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{
});
const
findTextarea
=
()
=>
wrapper
.
find
({
ref
:
'
textarea
'
});
vm
=
new
Component
({
el
,
const
mountComponent
=
(
description
=
'
test
'
)
=>
shallowMount
(
DescriptionField
,
{
attachTo
:
document
.
body
,
propsData
:
{
markdownPreviewPath
:
'
/
'
,
markdownDocsPath
:
'
/
'
,
formState
:
store
.
formState
,
formState
:
{
description
,
},
},
stubs
:
{
MarkdownField
,
},
}).
$mount
();
});
beforeEach
(()
=>
{
jest
.
spyOn
(
eventHub
,
'
$emit
'
);
});
Vue
.
nextTick
(
done
);
afterEach
(()
=>
{
wrapper
.
destroy
();
wrapper
=
null
;
});
it
(
'
renders markdown field with description
'
,
()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.md-area textarea
'
).
value
).
toBe
(
'
test
'
);
wrapper
=
mountComponent
();
expect
(
findTextarea
().
element
.
value
).
toBe
(
'
test
'
);
});
it
(
'
renders markdown field with a markdown description
'
,
(
done
)
=>
{
store
.
formState
.
descriptio
n
=
'
**test**
'
;
it
(
'
renders markdown field with a markdown description
'
,
()
=>
{
const
markdow
n
=
'
**test**
'
;
Vue
.
nextTick
(()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.md-area textarea
'
).
value
).
toBe
(
'
**test**
'
);
wrapper
=
mountComponent
(
markdown
);
done
();
});
expect
(
findTextarea
().
element
.
value
).
toBe
(
markdown
);
});
it
(
'
focuses field when mounted
'
,
()
=>
{
expect
(
document
.
activeElement
).
toBe
(
vm
.
$refs
.
textarea
);
wrapper
=
mountComponent
();
expect
(
document
.
activeElement
).
toBe
(
findTextarea
().
element
);
});
it
(
'
triggers update with meta+enter
'
,
()
=>
{
vm
.
$el
.
querySelector
(
'
.md-area textarea
'
).
dispatchEvent
(
keyboardDownEvent
(
13
,
true
)
);
wrapper
=
mountComponent
(
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalled
();
findTextarea
().
trigger
(
'
keydown.enter
'
,
{
metaKey
:
true
});
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
update.issuable
'
);
});
it
(
'
triggers update with ctrl+enter
'
,
()
=>
{
vm
.
$el
.
querySelector
(
'
.md-area textarea
'
).
dispatchEvent
(
keyboardDownEvent
(
13
,
false
,
true
)
);
wrapper
=
mountComponent
(
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalled
();
});
findTextarea
().
trigger
(
'
keydown.enter
'
,
{
ctrlKey
:
true
});
it
(
'
has a ref named `textarea`
'
,
()
=>
{
expect
(
vm
.
$refs
.
textarea
).
not
.
toBeNull
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
update.issuable
'
);
});
});
spec/frontend/issue_show/components/fields/title_spec.js
View file @
d8b5438a
import
Vue
from
'
vue
'
;
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
TitleField
from
'
~/issue_show/components/fields/title.vue
'
;
import
eventHub
from
'
~/issue_show/event_hub
'
;
import
Store
from
'
~/issue_show/stores
'
;
import
titleField
from
'
~/issue_show/components/fields/title.vue
'
;
import
{
keyboardDownEvent
}
from
'
../../helpers
'
;
describe
(
'
Title field component
'
,
()
=>
{
let
vm
;
let
store
;
let
wrapper
;
beforeEach
(()
=>
{
const
Component
=
Vue
.
extend
(
titleField
);
store
=
new
Store
({
titleHtml
:
''
,
descriptionHtml
:
''
,
issuableRef
:
''
,
});
store
.
formState
.
title
=
'
test
'
;
const
findInput
=
()
=>
wrapper
.
find
({
ref
:
'
input
'
});
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
beforeEach
(()
=>
{
jest
.
spyOn
(
eventHub
,
'
$emit
'
);
vm
=
new
Component
(
{
wrapper
=
shallowMount
(
TitleField
,
{
propsData
:
{
formState
:
store
.
formState
,
formState
:
{
title
:
'
test
'
,
},
},
}).
$mount
();
});
});
afterEach
(()
=>
{
wrapper
.
destroy
();
wrapper
=
null
;
});
it
(
'
renders form control with formState title
'
,
()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.form-control
'
)
.
value
).
toBe
(
'
test
'
);
expect
(
findInput
().
element
.
value
).
toBe
(
'
test
'
);
});
it
(
'
triggers update with meta+enter
'
,
()
=>
{
vm
.
$el
.
querySelector
(
'
.form-control
'
).
dispatchEvent
(
keyboardDownEvent
(
13
,
true
)
);
findInput
().
trigger
(
'
keydown.enter
'
,
{
metaKey
:
true
}
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalled
(
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalled
With
(
'
update.issuable
'
);
});
it
(
'
triggers update with ctrl+enter
'
,
()
=>
{
vm
.
$el
.
querySelector
(
'
.form-control
'
).
dispatchEvent
(
keyboardDownEvent
(
13
,
false
,
true
));
expect
(
eventHub
.
$emit
).
toHaveBeenCalled
();
});
findInput
().
trigger
(
'
keydown.enter
'
,
{
ctrlKey
:
true
});
it
(
'
has a ref named `input`
'
,
()
=>
{
expect
(
vm
.
$refs
.
input
).
not
.
toBeNull
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
update.issuable
'
);
});
});
spec/frontend/issue_show/helpers.js
deleted
100644 → 0
View file @
6241a56e
export
const
keyboardDownEvent
=
(
code
,
metaKey
=
false
,
ctrlKey
=
false
)
=>
{
const
e
=
new
CustomEvent
(
'
keydown
'
);
e
.
keyCode
=
code
;
e
.
metaKey
=
metaKey
;
e
.
ctrlKey
=
ctrlKey
;
return
e
;
};
spec/lib/gitlab/usage/metrics/aggregates/aggregate_spec.rb
View file @
d8b5438a
...
...
@@ -142,6 +142,7 @@ RSpec.describe Gitlab::Usage::Metrics::Aggregates::Aggregate, :clean_gitlab_redi
it
'does not calculate data for aggregates with ff turned off'
do
skip_feature_flags_yaml_validation
skip_default_enabled_yaml_check
stub_feature_flags
(
enabled_feature_flag
=>
true
,
disabled_feature_flag
=>
false
)
allow
(
sources
::
RedisHll
).
to
receive
(
:calculate_metrics_union
).
and_return
(
6
)
...
...
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