Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
cd4cb29b2c
commit
4204cf3085
|
|
@ -1,24 +1,24 @@
|
|||
$space-between-cards: 8px;
|
||||
|
||||
.convdev-empty svg {
|
||||
.devops-empty svg {
|
||||
margin: 64px auto 32px;
|
||||
max-width: 420px;
|
||||
}
|
||||
|
||||
.convdev-header {
|
||||
.devops-header {
|
||||
margin-top: $gl-padding;
|
||||
margin-bottom: $gl-padding;
|
||||
padding: 0 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.convdev-header-title {
|
||||
.devops-header-title {
|
||||
font-size: 48px;
|
||||
line-height: 1;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.convdev-header-subtitle {
|
||||
.devops-header-subtitle {
|
||||
font-size: 22px;
|
||||
line-height: 1;
|
||||
color: $gl-text-color-secondary;
|
||||
|
|
@ -36,13 +36,13 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-cards {
|
||||
.devops-cards {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.convdev-card-wrapper {
|
||||
.devops-card-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
|
|
@ -70,7 +70,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-card {
|
||||
.devops-card {
|
||||
border: solid 1px $border-color;
|
||||
border-radius: 3px;
|
||||
border-top-width: 3px;
|
||||
|
|
@ -79,7 +79,7 @@ $space-between-cards: 8px;
|
|||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.convdev-card-low {
|
||||
.devops-card-low {
|
||||
border-top-color: $red-400;
|
||||
|
||||
.board-card-score-big {
|
||||
|
|
@ -87,7 +87,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-card-average {
|
||||
.devops-card-average {
|
||||
border-top-color: $orange-400;
|
||||
|
||||
.board-card-score-big {
|
||||
|
|
@ -95,7 +95,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-card-high {
|
||||
.devops-card-high {
|
||||
border-top-color: $green-400;
|
||||
|
||||
.board-card-score-big {
|
||||
|
|
@ -103,7 +103,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-card-title {
|
||||
.devops-card-title {
|
||||
margin: $gl-padding auto auto;
|
||||
max-width: 100px;
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-steps {
|
||||
.devops-steps {
|
||||
margin-top: $gl-padding;
|
||||
height: 1px;
|
||||
min-width: 100%;
|
||||
|
|
@ -179,7 +179,7 @@ $space-between-cards: 8px;
|
|||
background: $border-color;
|
||||
}
|
||||
|
||||
.convdev-step {
|
||||
.devops-step {
|
||||
$step-positions: 5% 10% 30% 42% 48% 55% 60% 70% 75% 90%;
|
||||
@each $pos in $step-positions {
|
||||
$i: index($step-positions, $pos);
|
||||
|
|
@ -212,7 +212,7 @@ $space-between-cards: 8px;
|
|||
height: auto;
|
||||
width: auto;
|
||||
|
||||
.convdev-step-title {
|
||||
.devops-step-title {
|
||||
max-height: 2em;
|
||||
opacity: 1;
|
||||
transition: opacity 0.2s;
|
||||
|
|
@ -233,7 +233,7 @@ $space-between-cards: 8px;
|
|||
}
|
||||
}
|
||||
|
||||
.convdev-step-title {
|
||||
.devops-step-title {
|
||||
max-height: 0;
|
||||
opacity: 0;
|
||||
text-transform: uppercase;
|
||||
|
|
@ -242,14 +242,14 @@ $space-between-cards: 8px;
|
|||
font-size: 12px;
|
||||
}
|
||||
|
||||
.convdev-high-score {
|
||||
.devops-high-score {
|
||||
color: $green-400;
|
||||
}
|
||||
|
||||
.convdev-average-score {
|
||||
.devops-average-score {
|
||||
color: $orange-400;
|
||||
}
|
||||
|
||||
.convdev-low-score {
|
||||
.devops-low-score {
|
||||
color: $red-400;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -349,7 +349,7 @@ table.u2f-registrations {
|
|||
vertical-align: top;
|
||||
}
|
||||
|
||||
&.convdev {
|
||||
&.devops {
|
||||
margin: 0 0 0 30px;
|
||||
|
||||
svg {
|
||||
|
|
@ -382,7 +382,7 @@ table.u2f-registrations {
|
|||
height: 75px;
|
||||
}
|
||||
|
||||
&.convdev {
|
||||
&.devops {
|
||||
margin: $gl-padding auto 0;
|
||||
|
||||
svg {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
- documentation_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path("integration/google") }
|
||||
- link_end = '<a/>'.html_safe
|
||||
= s_('Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service.').html_safe % { link_start: documentation_link_start, link_end: link_end }
|
||||
= s_('Google authentication is not %{link_start}properly configured%{link_end}. Ask your GitLab administrator if you want to use this service.').html_safe % { link_start: documentation_link_start, link_end: link_end }
|
||||
|
|
|
|||
|
|
@ -9,5 +9,5 @@
|
|||
= _('Introducing Your Conversational Development Index')
|
||||
%p
|
||||
= _('Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers.')
|
||||
.svg-container.convdev
|
||||
.svg-container.devops
|
||||
= custom_icon('convdev_overview')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
.convdev-card-wrapper
|
||||
.convdev-card{ class: "convdev-card-#{score_level(card.percentage_score)}" }
|
||||
.convdev-card-title
|
||||
.devops-card-wrapper
|
||||
.devops-card{ class: "devops-card-#{score_level(card.percentage_score)}" }
|
||||
.devops-card-title
|
||||
%h3
|
||||
= card.title
|
||||
.light-text
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
.container.convdev-empty
|
||||
.container.devops-empty
|
||||
.col-sm-12.justify-content-center.text-center
|
||||
= custom_icon('convdev_no_index')
|
||||
%h4= _('Usage ping is not enabled')
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
.container.convdev-empty
|
||||
.container.devops-empty
|
||||
.col-sm-12.justify-content-center.text-center
|
||||
= custom_icon('convdev_no_data')
|
||||
%h4= _('Data is still calculating...')
|
||||
|
|
|
|||
|
|
@ -11,23 +11,23 @@
|
|||
- elsif @metric.blank?
|
||||
= render 'no_data'
|
||||
- else
|
||||
.convdev
|
||||
.convdev-header
|
||||
%h2.convdev-header-title{ class: "convdev-#{score_level(@metric.average_percentage_score)}-score" }
|
||||
.devops
|
||||
.devops-header
|
||||
%h2.devops-header-title{ class: "devops-#{score_level(@metric.average_percentage_score)}-score" }
|
||||
= number_to_percentage(@metric.average_percentage_score, precision: 1)
|
||||
.convdev-header-subtitle
|
||||
.devops-header-subtitle
|
||||
= _('index')
|
||||
%br
|
||||
= _('score')
|
||||
= link_to icon('question-circle', 'aria-hidden' => 'true'), help_page_path('user/instance_statistics/convdev')
|
||||
|
||||
.convdev-cards.board-card-container
|
||||
.devops-cards.board-card-container
|
||||
- @metric.cards.each do |card|
|
||||
= render 'card', card: card
|
||||
|
||||
.convdev-steps.d-none.d-lg-block.d-xl-block
|
||||
.devops-steps.d-none.d-lg-block.d-xl-block
|
||||
- @metric.idea_to_production_steps.each_with_index do |step, index|
|
||||
.convdev-step{ class: "convdev-#{score_level(step.percentage_score)}-score" }
|
||||
.devops-step{ class: "devops-#{score_level(step.percentage_score)}-score" }
|
||||
= custom_icon("i2p_step_#{index + 1}")
|
||||
%h4.convdev-step-title
|
||||
%h4.devops-step-title
|
||||
= step.title
|
||||
|
|
|
|||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: |
|
||||
Add allow failure in pipeline webhook event
|
||||
merge_request: 20978
|
||||
author: Gaetan Semet
|
||||
type: added
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Use cascading deletes for deleting oauth_openid_requests upon deleting an oauth_access_grant
|
||||
merge_request: 19617
|
||||
author:
|
||||
type: fixed
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class UpdateOauthOpenIdRequestsForeignKeys < ActiveRecord::Migration[5.2]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key(:oauth_openid_requests, :oauth_access_grants, column: :access_grant_id, on_delete: :cascade, name: new_foreign_key_name)
|
||||
remove_foreign_key_if_exists(:oauth_openid_requests, name: existing_foreign_key_name)
|
||||
end
|
||||
|
||||
def down
|
||||
add_concurrent_foreign_key(:oauth_openid_requests, :oauth_access_grants, column: :access_grant_id, on_delete: false, name: existing_foreign_key_name)
|
||||
remove_foreign_key_if_exists(:oauth_openid_requests, name: new_foreign_key_name)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def new_foreign_key_name
|
||||
concurrent_foreign_key_name(:oauth_openid_requests, :access_grant_id)
|
||||
end
|
||||
|
||||
def existing_foreign_key_name
|
||||
'fk_oauth_openid_requests_oauth_access_grants_access_grant_id'
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
class AddIndexToGrafanaIntegrations < ActiveRecord::Migration[5.2]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_index :grafana_integrations, :enabled, where: 'enabled IS TRUE'
|
||||
end
|
||||
|
||||
def down
|
||||
remove_concurrent_index :grafana_integrations, :enabled
|
||||
end
|
||||
end
|
||||
|
|
@ -1888,6 +1888,7 @@ ActiveRecord::Schema.define(version: 2019_11_25_140458) do
|
|||
t.string "encrypted_token_iv", limit: 255, null: false
|
||||
t.string "grafana_url", limit: 1024, null: false
|
||||
t.boolean "enabled", default: false, null: false
|
||||
t.index ["enabled"], name: "index_grafana_integrations_on_enabled", where: "(enabled IS TRUE)"
|
||||
t.index ["project_id"], name: "index_grafana_integrations_on_project_id"
|
||||
end
|
||||
|
||||
|
|
@ -4535,7 +4536,7 @@ ActiveRecord::Schema.define(version: 2019_11_25_140458) do
|
|||
add_foreign_key "notes", "projects", name: "fk_99e097b079", on_delete: :cascade
|
||||
add_foreign_key "notes", "reviews", name: "fk_2e82291620", on_delete: :nullify
|
||||
add_foreign_key "notification_settings", "users", name: "fk_0c95e91db7", on_delete: :cascade
|
||||
add_foreign_key "oauth_openid_requests", "oauth_access_grants", column: "access_grant_id", name: "fk_oauth_openid_requests_oauth_access_grants_access_grant_id"
|
||||
add_foreign_key "oauth_openid_requests", "oauth_access_grants", column: "access_grant_id", name: "fk_77114b3b09", on_delete: :cascade
|
||||
add_foreign_key "operations_feature_flag_scopes", "operations_feature_flags", column: "feature_flag_id", on_delete: :cascade
|
||||
add_foreign_key "operations_feature_flags", "projects", on_delete: :cascade
|
||||
add_foreign_key "operations_feature_flags_clients", "projects", on_delete: :cascade
|
||||
|
|
|
|||
|
|
@ -15,12 +15,31 @@ documentation is associated with:
|
|||
Documentation is not usually required when a "backstage feature" is added or changed, and does not
|
||||
directly affect the way that any user or administrator interacts with GitLab.
|
||||
|
||||
## Documentation labels
|
||||
|
||||
Regardless of the type of issue or merge request, certain labels are required when documentation
|
||||
is added or updated. The following are added by the issue or merge request author:
|
||||
|
||||
- An appropriate [type label](../contributing/issue_workflow.md#type-labels). For example,
|
||||
`~backstage`.
|
||||
- The [stage label](../contributing/issue_workflow.md#stage-labels) and
|
||||
[group label](../contributing/issue_workflow.md#group-labels). For example, `~devops::create` and
|
||||
`~group::source code`.
|
||||
- The `~documentation` [specialization label](../contributing/issue_workflow.md#specialization-labels).
|
||||
|
||||
The following are also added by members of the Technical Writing team:
|
||||
|
||||
- A documentation [scoped label](../../user/project/labels.md#scoped-labels-premium) with the
|
||||
`docs::` prefix. For example, `~docs::improvement`.
|
||||
- The `~Technical Writing` [team label](../contributing/issue_workflow.md#team-labels).
|
||||
|
||||
## For a product change
|
||||
|
||||
This documentation is required for any new or changed feature and is:
|
||||
|
||||
- Created or updated as part of feature development, typically via the same merge request as the
|
||||
feature code.
|
||||
- Created or updated as part of feature development, almost always in the same merge request as the
|
||||
feature code. Including documentation in the same merge request as the code eliminates the
|
||||
possibility that code and documentation get out of sync.
|
||||
- Required with the delivery of a feature for a specific milestone as part of GitLab's
|
||||
[definition of done](../contributing/merge_request_workflow.md#definition-of-done).
|
||||
- Often linked from the release post.
|
||||
|
|
@ -100,28 +119,10 @@ Prior to merging, documentation changes committed by the developer must be revie
|
|||
|
||||
- The code reviewer for the merge request. This is known as a technical review.
|
||||
- Optionally, others involved in the work, such as other developers or the Product Manager.
|
||||
- Optionally, the Technical Writer for the DevOps stage group.
|
||||
- The Technical Writer for the DevOps stage group, except in exceptional circumstances where a
|
||||
[post-merge review](#post-merge-reviews) can be requested.
|
||||
- A maintainer of the project.
|
||||
|
||||
If not assigned to a Technical Writer for review prior to merging, a review must be scheduled
|
||||
immediately after merge by the developer or maintainer. For this,
|
||||
create an issue using the [Doc Review description template](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review)
|
||||
and link to it from the merged merge request that introduced the documentation change.
|
||||
|
||||
To decide whether to request a Technical Writer review before or after merge, consider:
|
||||
|
||||
- The amount of time left before the milestone release. If there is less than three days
|
||||
remaining, seek a post-merge review and ping the writer via Slack to ensure the review is
|
||||
completed in time.
|
||||
- The size of the change and your degree of confidence in having early users (for example,
|
||||
GitLab.com users) of features use your documentation as written.
|
||||
- That pre-merge Technical Writer reviews should be most common when the code is complete well in
|
||||
advance of a milestone release and for larger documentation changes.
|
||||
- You can request a post-merge Technical Writer review if it's important to get the code part of
|
||||
a merge request merged as soon as possible.
|
||||
- The Technical Writer can also help decide that documentation can be merged without Technical
|
||||
writer review, with the review to occur soon after merge.
|
||||
|
||||
#### Product Managers
|
||||
|
||||
Product Managers are responsible for the [documentation requirements](#documentation-requirements)
|
||||
|
|
@ -149,10 +150,12 @@ will do the following:
|
|||
|
||||
Technical Writers are responsible for:
|
||||
|
||||
- Participating in issues discussions and reviewing MRs for the upcoming milestone.
|
||||
- Reviewing documentation requirements in issues when called upon.
|
||||
- Answering questions, and helping and providing advice throughout the authoring and editing
|
||||
process.
|
||||
- Reviewing all new and updated documentation content, whether before merge or after it is merged.
|
||||
- Reviewing all significant new and updated documentation content, whether before merge or after it
|
||||
is merged.
|
||||
- Assisting the developer and Product Manager with feature documentation delivery.
|
||||
|
||||
##### Planning
|
||||
|
|
@ -228,7 +231,7 @@ have this section by default.
|
|||
Anyone can add these details, but the Product Manager who assigns the issue to a specific release
|
||||
milestone will ensure these details are present and finalized by the time of that milestone's kickoff.
|
||||
|
||||
Developers, Technical Writers, and others may help further refine this plan at any time.
|
||||
Developers, Technical Writers, and others may help further refine this plan at any time on request.
|
||||
|
||||
The following details should be included:
|
||||
|
||||
|
|
@ -283,13 +286,23 @@ To update GitLab documentation:
|
|||
TIP: **Tip:**
|
||||
Work in a fork if you do not have developer access to the GitLab project.
|
||||
|
||||
Ping the Technical Writer for the relevant [DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments)
|
||||
in your issue or merge request, or within `#docs` if you are a member of GitLab's Slack workspace, if you:
|
||||
Request help from the Technical Writing team if you:
|
||||
|
||||
- Need help to choose the correct place for documentation.
|
||||
- Want to discuss a documentation idea or outline.
|
||||
- Want to request any other help.
|
||||
|
||||
To request help:
|
||||
|
||||
1. Locate the the Technical Writer for the relevant
|
||||
[DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments).
|
||||
1. Either:
|
||||
- If urgent help is required, directly assign the Technical Writer in the issue or
|
||||
[in the merge request](../../user/project/merge_requests/creating_merge_requests.md#multiple-assignees-starter).
|
||||
- If non-urgent help is required, ping the Technical Writer in the issue or merge request.
|
||||
|
||||
If you are a member of GitLab's Slack workspace, you can request help in `#docs`.
|
||||
|
||||
### Reviewing and merging
|
||||
|
||||
Anyone with Maintainer access to the relevant GitLab project can merge documentation changes.
|
||||
|
|
@ -307,11 +320,10 @@ The process involves the following:
|
|||
or other appropriate colleague to confirm accuracy, clarity, and completeness. This can be skipped
|
||||
for minor fixes without substantive content changes.
|
||||
- Technical Writer (Optional). If not completed for a merge request prior to merging, must be scheduled
|
||||
post-merge. To request a:
|
||||
post-merge. Schedule post-merge reviews only if an urgent merge is required. To request a:
|
||||
- Pre-merge review, assign the Technical Writer listed for the applicable
|
||||
[DevOps stage group](https://about.gitlab.com/handbook/product/technical-writing/index.html#assignments).
|
||||
- Post-merge review, [create an issue for one](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review)
|
||||
and link it from the MR that makes the documentation change.
|
||||
- Post-merge review, see [Post-merge reviews](#post-merge-reviews).
|
||||
- Maintainer. For merge requests, Maintainers:
|
||||
- Can always request any of the above reviews.
|
||||
- Review before or after a Technical Writer review.
|
||||
|
|
@ -319,7 +331,7 @@ The process involves the following:
|
|||
- Ensure the appropriate labels are applied, including any required to pick a merge request into
|
||||
a release.
|
||||
- Ensure that, if there has not been a Technical Writer review completed or scheduled, they
|
||||
[create the required issue](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review), assign to the technical writer of the given stage group,
|
||||
[create the required issue](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review), assign to the Technical Writer of the given stage group,
|
||||
and link it from the merge request.
|
||||
|
||||
The process is reflected in the **Documentation**
|
||||
|
|
@ -330,3 +342,50 @@ The process is reflected in the **Documentation**
|
|||
If you have ideas for further documentation resources please
|
||||
[create an issue](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Documentation)
|
||||
using the Documentation template.
|
||||
|
||||
## Post-merge reviews
|
||||
|
||||
If not assigned to a Technical Writer for review prior to merging, a review must be scheduled
|
||||
immediately after merge by the developer or maintainer. For this,
|
||||
create an issue using the [Doc Review description template](https://gitlab.com/gitlab-org/gitlab/issues/new?issuable_template=Doc%20Review)
|
||||
and link to it from the merged merge request that introduced the documentation change.
|
||||
|
||||
Circumstances where a regular pre-merge Technical Writer review might be skipped include:
|
||||
|
||||
- There is a short amount of time left before the milestone release. If there are less than three days
|
||||
remaining, seek a post-merge review and ping the writer via Slack to ensure the review is
|
||||
completed as soon as possible.
|
||||
- The size of the change is small and you have a high degree of confidence
|
||||
that early users of the feature (for example, GitLab.com users) can easily
|
||||
use the documentation as written.
|
||||
|
||||
Remember:
|
||||
|
||||
- At GitLab, we treat documentation like code. As with code, documentation must be reviewed to
|
||||
ensure quality.
|
||||
- Documentation forms part of the GitLab [definition of done](../contributing/merge_request_workflow.md#definition-of-done).
|
||||
- That pre-merge Technical Writer reviews should be most common when the code is complete well in
|
||||
advance of a milestone release and for larger documentation changes.
|
||||
- You can request a post-merge Technical Writer review of documentation if it's important to get the
|
||||
code with which it ships merged as soon as possible. In this case, the author of the original MR
|
||||
will address the feedback provided by the Technical Writer in a follow-up MR.
|
||||
- The Technical Writer can also help decide that documentation can be merged without Technical
|
||||
writer review, with the review to occur soon after merge.
|
||||
|
||||
### Before merging
|
||||
|
||||
Ensure the following if skipping an initial Technical Writer review:
|
||||
|
||||
- That [product badges](styleguide.md#product-badges) are applied.
|
||||
- That the GitLab [version](styleguide.md#text-for-documentation-requiring-version-text) that
|
||||
introduced the feature has been included.
|
||||
- That changes to headings don't affect in-app hyperlinks.
|
||||
- Specific [user permissions](../../user/permissions.md) are documented.
|
||||
- That new documents are linked from higher-level indexes, for discoverability.
|
||||
- Style guide is followed:
|
||||
- For [directories and files](styleguide.md#working-with-directories-and-files).
|
||||
- For [images](styleguide.md#images).
|
||||
|
||||
NOTE: **Note:**
|
||||
Merge requests that change the location of documentation must always be reviewed by a Technical
|
||||
Writer prior to merging.
|
||||
|
|
|
|||
|
|
@ -591,7 +591,7 @@ filter_output = search_field_tag search_id, nil, class: "dropdown-input-field",
|
|||
> `data-qa-*` data attributes and CSS classes starting with `qa-` are used solely for the purpose of QA and testing.
|
||||
> By defining these, we add **testability** to the application.
|
||||
>
|
||||
> When defining a data attribute like: `qa_selector: 'labels_block'`, it should match the element definition: `element :labels_block`. We use a [sanity test](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/qa/qa/page#how-did-we-solve-fragile-tests-problem) to check that defined elements have their respective selectors in the specified views.
|
||||
> When defining a data attribute like: `qa_selector: 'labels_block'`, it should match the element definition: `element :labels_block`. We use a [sanity test](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/doc/development/testing_guide/end_to_end/page_objects.md#how-did-we-solve-fragile-tests-problem) to check that defined elements have their respective selectors in the specified views.
|
||||
|
||||
#### Updates in the `QA::Page::Base` class
|
||||
|
||||
|
|
|
|||
|
|
@ -1076,6 +1076,7 @@ X-Gitlab-Event: Pipeline Hook
|
|||
"finished_at": null,
|
||||
"when": "manual",
|
||||
"manual": true,
|
||||
"allow_failure": false,
|
||||
"user":{
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
|
|
@ -1097,6 +1098,7 @@ X-Gitlab-Event: Pipeline Hook
|
|||
"finished_at": null,
|
||||
"when": "on_success",
|
||||
"manual": false,
|
||||
"allow_failure": false,
|
||||
"user":{
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
|
|
@ -1123,6 +1125,7 @@ X-Gitlab-Event: Pipeline Hook
|
|||
"finished_at": "2016-08-12 15:26:29 UTC",
|
||||
"when": "on_success",
|
||||
"manual": false,
|
||||
"allow_failure": false,
|
||||
"user":{
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
|
|
@ -1149,6 +1152,7 @@ X-Gitlab-Event: Pipeline Hook
|
|||
"finished_at": "2016-08-12 15:25:26 UTC",
|
||||
"when": "on_success",
|
||||
"manual": false,
|
||||
"allow_failure": false,
|
||||
"user":{
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
|
|
@ -1175,6 +1179,7 @@ X-Gitlab-Event: Pipeline Hook
|
|||
"finished_at": null,
|
||||
"when": "on_success",
|
||||
"manual": false,
|
||||
"allow_failure": false,
|
||||
"user":{
|
||||
"name": "Administrator",
|
||||
"username": "root",
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ module Gitlab
|
|||
finished_at: build.finished_at,
|
||||
when: build.when,
|
||||
manual: build.action?,
|
||||
allow_failure: build.allow_failure,
|
||||
user: build.user.try(:hook_attrs),
|
||||
runner: build.runner && runner_hook_attrs(build.runner),
|
||||
artifacts_file: {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Gitlab
|
||||
class GrafanaEmbedUsageData
|
||||
class << self
|
||||
def issue_count
|
||||
# rubocop:disable CodeReuse/ActiveRecord
|
||||
Issue.joins('JOIN grafana_integrations USING (project_id)')
|
||||
.where("issues.description LIKE '%' || grafana_integrations.grafana_url || '%'")
|
||||
.where(grafana_integrations: { enabled: true })
|
||||
.count
|
||||
# rubocop:enable CodeReuse/ActiveRecord
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -84,6 +84,7 @@ module Gitlab
|
|||
issues: count(Issue),
|
||||
issues_with_associated_zoom_link: count(ZoomMeeting.added_to_issue),
|
||||
issues_using_zoom_quick_actions: count(ZoomMeeting.select(:issue_id).distinct),
|
||||
issues_with_embedded_grafana_charts_approx: ::Gitlab::GrafanaEmbedUsageData.issue_count,
|
||||
keys: count(Key),
|
||||
label_lists: count(List.label),
|
||||
lfs_objects: count(LfsObject),
|
||||
|
|
|
|||
|
|
@ -8581,7 +8581,7 @@ msgstr ""
|
|||
msgid "Google Takeout"
|
||||
msgstr ""
|
||||
|
||||
msgid "Google authentication is not %{link_start}property configured%{link_end}. Ask your GitLab administrator if you want to use this service."
|
||||
msgid "Google authentication is not %{link_start}properly configured%{link_end}. Ask your GitLab administrator if you want to use this service."
|
||||
msgstr ""
|
||||
|
||||
msgid "Got it"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module QA
|
||||
context 'Manage', :orchestrated, :smtp do
|
||||
describe 'mail notification' do
|
||||
context 'Plan', :orchestrated, :smtp do
|
||||
describe 'Email Notification' do
|
||||
let(:user) do
|
||||
Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1)
|
||||
end
|
||||
|
|
@ -17,7 +17,7 @@ module QA
|
|||
Flow::Login.sign_in
|
||||
end
|
||||
|
||||
it 'user receives email for project invitation' do
|
||||
it 'is received by a user for project invitation' do
|
||||
Flow::Project.add_member(project: project, username: user.username)
|
||||
|
||||
expect(page).to have_content(/@#{user.username}(\n| )?Given access/)
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :oauth_openid_request, class: 'Doorkeeper::OpenidConnect::Request' do
|
||||
access_grant factory: :oauth_access_grant
|
||||
sequence(:nonce) { |n| n.to_s }
|
||||
end
|
||||
end
|
||||
|
|
@ -34,6 +34,7 @@ describe Gitlab::DataBuilder::Pipeline do
|
|||
expect(build_data).to be_a(Hash)
|
||||
expect(build_data[:id]).to eq(build.id)
|
||||
expect(build_data[:status]).to eq(build.status)
|
||||
expect(build_data[:allow_failure]).to eq(build.allow_failure)
|
||||
expect(project_data).to eq(project.hook_attrs(backward: false))
|
||||
expect(data[:merge_request]).to be_nil
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,70 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::GrafanaEmbedUsageData do
|
||||
describe '#issue_count' do
|
||||
subject { described_class.issue_count }
|
||||
|
||||
let(:project) { create(:project) }
|
||||
let(:description_with_embed) { "Some comment\n\nhttps://grafana.example.com/d/xvAk4q0Wk/go-processes?orgId=1&from=1573238522762&to=1573240322762&var-job=prometheus&var-interval=10m&panelId=1&fullscreen" }
|
||||
let(:description_with_unintegrated_embed) { "Some comment\n\nhttps://grafana.exp.com/d/xvAk4q0Wk/go-processes?orgId=1&from=1573238522762&to=1573240322762&var-job=prometheus&var-interval=10m&panelId=1&fullscreen" }
|
||||
let(:description_with_non_grafana_inline_metric) { "Some comment\n\n#{Gitlab::Routing.url_helpers.metrics_namespace_project_environment_url(*['foo', 'bar', 12])}" }
|
||||
|
||||
shared_examples "zero count" do
|
||||
it "does not count the issue" do
|
||||
expect(subject).to eq(0)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with project grafana integration enabled' do
|
||||
before do
|
||||
create(:grafana_integration, project: project, enabled: true)
|
||||
end
|
||||
|
||||
context 'with valid and invalid embeds' do
|
||||
before do
|
||||
# Valid
|
||||
create(:issue, project: project, description: description_with_embed)
|
||||
create(:issue, project: project, description: description_with_embed)
|
||||
# In-Valid
|
||||
create(:issue, project: project, description: description_with_unintegrated_embed)
|
||||
create(:issue, project: project, description: description_with_non_grafana_inline_metric)
|
||||
create(:issue, project: project, description: nil)
|
||||
create(:issue, project: project, description: '')
|
||||
create(:issue, project: project)
|
||||
end
|
||||
|
||||
it 'counts only the issues with embeds' do
|
||||
expect(subject).to eq(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with project grafana integration disabled' do
|
||||
before do
|
||||
create(:grafana_integration, project: project, enabled: false)
|
||||
end
|
||||
|
||||
context 'with one issue having a grafana link in the description and one without' do
|
||||
before do
|
||||
create(:issue, project: project, description: description_with_embed)
|
||||
create(:issue, project: project)
|
||||
end
|
||||
|
||||
it_behaves_like('zero count')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an un-integrated project' do
|
||||
context 'with one issue having a grafana link in the description and one without' do
|
||||
before do
|
||||
create(:issue, project: project, description: description_with_embed)
|
||||
create(:issue, project: project)
|
||||
end
|
||||
|
||||
it_behaves_like('zero count')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -53,6 +53,8 @@ describe Gitlab::UsageData do
|
|||
create(:grafana_integration, project: projects[1], enabled: true)
|
||||
create(:grafana_integration, project: projects[2], enabled: false)
|
||||
|
||||
allow(Gitlab::GrafanaEmbedUsageData).to receive(:issue_count).and_return(2)
|
||||
|
||||
ProjectFeature.first.update_attribute('repository_access_level', 0)
|
||||
end
|
||||
|
||||
|
|
@ -152,6 +154,7 @@ describe Gitlab::UsageData do
|
|||
issues
|
||||
issues_with_associated_zoom_link
|
||||
issues_using_zoom_quick_actions
|
||||
issues_with_embedded_grafana_charts_approx
|
||||
keys
|
||||
label_lists
|
||||
labels
|
||||
|
|
@ -211,6 +214,7 @@ describe Gitlab::UsageData do
|
|||
expect(count_data[:projects_with_error_tracking_enabled]).to eq(1)
|
||||
expect(count_data[:issues_with_associated_zoom_link]).to eq(2)
|
||||
expect(count_data[:issues_using_zoom_quick_actions]).to eq(3)
|
||||
expect(count_data[:issues_with_embedded_grafana_charts_approx]).to eq(2)
|
||||
|
||||
expect(count_data[:clusters_enabled]).to eq(4)
|
||||
expect(count_data[:project_clusters_enabled]).to eq(3)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe OauthAccessGrant do
|
||||
let(:user) { create(:user) }
|
||||
let(:application) { create(:oauth_application, owner: user) }
|
||||
|
||||
describe '#delete' do
|
||||
it 'cascades to oauth_openid_requests' do
|
||||
access_grant = create(:oauth_access_grant, application: application)
|
||||
create(:oauth_openid_request, access_grant: access_grant)
|
||||
|
||||
expect { access_grant.delete }.to change(Doorkeeper::OpenidConnect::Request, :count).by(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue