Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
825c202603
commit
804b736437
34 changed files with 160 additions and 263 deletions
|
@ -26,35 +26,22 @@
|
|||
- export CI_ENVIRONMENT_URL="$(cat environment_url.txt)"
|
||||
- echo "${CI_ENVIRONMENT_URL}"
|
||||
- cd qa
|
||||
- if [ -n "$KNAPSACK_REPORT_PATH" ]; then
|
||||
bundle exec rake knapsack:download;
|
||||
fi
|
||||
artifacts:
|
||||
paths:
|
||||
- qa/tmp
|
||||
expire_in: 7 days
|
||||
when: always
|
||||
|
||||
.parallel-qa-base:
|
||||
parallel: 5
|
||||
variables:
|
||||
KNAPSACK_TEST_FILE_PATTERN: "qa/specs/features/**/*_spec.rb"
|
||||
script:
|
||||
- |
|
||||
bin/test "${QA_SCENARIO}" "${CI_ENVIRONMENT_URL}" \
|
||||
-- \
|
||||
--color --format documentation \
|
||||
--format RspecJunitFormatter --out tmp/rspec.xml
|
||||
after_script:
|
||||
- if [ -n "$KNAPSACK_GENERATE_REPORT" ]; then
|
||||
mv qa/${KNAPSACK_REPORT_PATH} qa/knapsack/gcs/regenerated-${CI_NODE_INDEX}.json;
|
||||
fi
|
||||
artifacts:
|
||||
paths:
|
||||
- qa/tmp # we can't merge list so need to include explicitly once more
|
||||
- qa/knapsack/gcs/regenerated-*.json
|
||||
- qa/tmp
|
||||
reports:
|
||||
junit: qa/tmp/rspec.xml
|
||||
expire_in: 7 days
|
||||
when: always
|
||||
|
||||
.parallel-qa-base:
|
||||
parallel: 5
|
||||
|
||||
.allure-report-base:
|
||||
image:
|
||||
|
@ -79,17 +66,6 @@
|
|||
--ignore-missing-results \
|
||||
--color
|
||||
|
||||
.knapsack-upload-base:
|
||||
image:
|
||||
name: ${QA_IMAGE}
|
||||
entrypoint: [""]
|
||||
stage: post-qa
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- cd qa
|
||||
script:
|
||||
- bundle exec rake 'knapsack:upload[knapsack/gcs/regenerated-*.json]'
|
||||
|
||||
review-qa-smoke:
|
||||
extends:
|
||||
- .review-qa-base
|
||||
|
@ -97,8 +73,8 @@ review-qa-smoke:
|
|||
retry: 1 # This is confusing but this means "2 runs at max".
|
||||
variables:
|
||||
QA_RUN_TYPE: review-qa-smoke
|
||||
script:
|
||||
- bin/test Test::Instance::Smoke "${CI_ENVIRONMENT_URL}"
|
||||
QA_SCENARIO: Test::Instance::Smoke
|
||||
|
||||
|
||||
review-qa-reliable:
|
||||
extends:
|
||||
|
@ -109,7 +85,6 @@ review-qa-reliable:
|
|||
variables:
|
||||
QA_RUN_TYPE: review-qa-reliable
|
||||
QA_SCENARIO: Test::Instance::Reliable
|
||||
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-reliable.json
|
||||
|
||||
review-qa-all:
|
||||
extends:
|
||||
|
@ -119,7 +94,6 @@ review-qa-all:
|
|||
variables:
|
||||
QA_RUN_TYPE: review-qa-all
|
||||
QA_SCENARIO: Test::Instance::All
|
||||
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-all.json
|
||||
|
||||
review-performance:
|
||||
extends:
|
||||
|
@ -174,18 +148,15 @@ allure-report-qa-all:
|
|||
ALLURE_REPORT_PATH_PREFIX: gitlab-review-all
|
||||
ALLURE_JOB_NAME: review-qa-all
|
||||
|
||||
knapsack-report-qa-all:
|
||||
knapsack-report:
|
||||
extends:
|
||||
- .knapsack-upload-base
|
||||
- .review:rules:knapsack-report-qa-all
|
||||
needs: ["review-qa-all"]
|
||||
variables:
|
||||
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-all.json
|
||||
|
||||
knapsack-report-qa-reliable:
|
||||
extends:
|
||||
- .knapsack-upload-base
|
||||
- .review:rules:knapsack-report-qa-reliable
|
||||
needs: ["review-qa-reliable"]
|
||||
variables:
|
||||
KNAPSACK_REPORT_PATH: knapsack/gcs/review-qa-reliable.json
|
||||
- .review:rules:knapsack-report
|
||||
image:
|
||||
name: ${QA_IMAGE}
|
||||
entrypoint: [""]
|
||||
stage: post-qa
|
||||
allow_failure: true
|
||||
before_script:
|
||||
- cd qa
|
||||
script:
|
||||
- bundle exec rake 'knapsack:upload[tmp/knapsack/*/*.json]'
|
||||
|
|
|
@ -1689,20 +1689,10 @@
|
|||
- when: on_success
|
||||
- when: on_failure
|
||||
|
||||
# Generate knapsack report on successful runs only
|
||||
# Reliable suite will pass most of the time so this should yield best distribution
|
||||
.review:rules:knapsack-report-qa-reliable:
|
||||
.review:rules:knapsack-report:
|
||||
rules:
|
||||
- if: '$KNAPSACK_GENERATE_REPORT == "true"'
|
||||
when: on_success
|
||||
|
||||
# Since `review-qa-all` is allowed to fail (and potentially manual), we need to use `when: on_success` and `when: on_failure` for `knapsack-report-qa-all`.
|
||||
.review:rules:knapsack-report-qa-all:
|
||||
rules:
|
||||
- if: '$KNAPSACK_GENERATE_REPORT != "true"'
|
||||
when: never
|
||||
- when: on_success
|
||||
- when: on_failure
|
||||
when: always
|
||||
|
||||
.review:rules:review-cleanup:
|
||||
rules:
|
||||
|
|
|
@ -1,16 +1,13 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
description: "Set and configure Git protocol v2"
|
||||
---
|
||||
|
||||
# Configuring Git Protocol v2 **(FREE)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/46555) in GitLab 11.4.
|
||||
> - [Temporarily disabled](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/55769) in GitLab 11.5.8, 11.6.6, 11.7.1, and 11.8+.
|
||||
> - [Re-enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/27828) in GitLab 12.8.
|
||||
> [Re-enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/27828) in GitLab 12.8.
|
||||
|
||||
Git protocol v2 improves the v1 wire protocol in several ways and is
|
||||
enabled by default in GitLab for HTTP requests. In order to enable SSH,
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Markdown API **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18926) in GitLab 11.0.
|
||||
|
||||
Available only in APIv4.
|
||||
|
||||
## Render an arbitrary Markdown document
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Project badges API **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17082) in GitLab 10.6.
|
||||
|
||||
## Placeholder tokens
|
||||
|
||||
Badges support placeholders that are replaced in real-time in both the link and image URL. The allowed placeholders are:
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Project import/export API **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41899) in GitLab 10.6.
|
||||
|
||||
See also:
|
||||
|
||||
- [Project import/export documentation](../user/project/settings/import_export.md).
|
||||
|
@ -23,7 +20,7 @@ all the necessary information to upload the exported project to a web server or
|
|||
to any S3-compatible platform. At the moment we only support binary
|
||||
data file uploads to the final server.
|
||||
|
||||
From GitLab 10.7, the `upload[url]` parameter is required if the `upload` parameter is present.
|
||||
The `upload[url]` parameter is required if the `upload` parameter is present.
|
||||
|
||||
```plaintext
|
||||
POST /projects/:id/export
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Project templates API **(FREE)**
|
||||
|
@ -21,9 +20,7 @@ It deprecates these endpoints, which are scheduled for removal in API version 5.
|
|||
In addition to templates common to the entire instance, project-specific
|
||||
templates are also available from this API endpoint.
|
||||
|
||||
Support for [Group-level file templates](../user/group/index.md#group-file-templates) **(PREMIUM)**
|
||||
was [added](https://gitlab.com/gitlab-org/gitlab/-/issues/5987)
|
||||
in GitLab 11.5
|
||||
Support is also available for [group-level file templates](../user/group/index.md#group-file-templates). **(PREMIUM)**
|
||||
|
||||
## Get all templates of a particular type
|
||||
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Protected branches API **(FREE)**
|
||||
|
||||
> Introduced in GitLab 9.5.
|
||||
|
||||
**Valid access levels**
|
||||
|
||||
The access levels are defined in the `ProtectedRefAccess.allowed_access_levels` method. Currently, these levels are recognized:
|
||||
|
@ -332,7 +329,6 @@ curl --request POST \
|
|||
--header "PRIVATE-TOKEN: <your_access_token>" \
|
||||
--header "Content-Type: application/json" \
|
||||
--data '{
|
||||
"id": 5,
|
||||
"name": "master",
|
||||
"allowed_to_push": [{"access_level": 30}],
|
||||
"allowed_to_merge": [{
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Protected tags API **(FREE)**
|
||||
|
||||
> Introduced in GitLab 11.3.
|
||||
|
||||
**Valid access levels**
|
||||
|
||||
Currently, these levels are recognized:
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Repository submodules API **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41213) in GitLab 11.5
|
||||
|
||||
## Update existing submodule reference in repository
|
||||
|
||||
In some workflows, especially automated ones, it can be useful to update a
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Search API **(FREE)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41763) in GitLab 10.5.
|
||||
> - [Feature flag `search_filter_by_confidential` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/244923) in GitLab 13.6.
|
||||
> [Feature flag `search_filter_by_confidential` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/244923) in GitLab 13.6.
|
||||
|
||||
Every API call to search must be authenticated.
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, api
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Tags API **(FREE)**
|
||||
|
@ -26,8 +25,6 @@ Parameters:
|
|||
| `sort` | string | no | Return tags sorted in `asc` or `desc` order. Default is `desc` |
|
||||
| `search` | string | no | Return list of tags matching the search criteria. You can use `^term` and `term$` to find tags that begin and end with `term` respectively. |
|
||||
|
||||
> Support for `search` was [introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/54401) in GitLab 11.8.
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# GitLab Flavored Markdown **(FREE)**
|
||||
|
@ -1507,56 +1506,3 @@ entry and paste the spreadsheet:
|
|||
at Daring Fireball is an excellent resource for a detailed explanation of standard Markdown.
|
||||
- You can find the detailed specification for CommonMark in the [CommonMark Spec](https://spec.commonmark.org/current/).
|
||||
- The [CommonMark Dingus](https://spec.commonmark.org/dingus/) helps you test CommonMark syntax.
|
||||
|
||||
## Transition from Redcarpet to CommonMark
|
||||
|
||||
- In GitLab 11.8, the [Redcarpet Ruby library](https://github.com/vmg/redcarpet)
|
||||
was removed. All issues and comments, including those in 11.1 and earlier, are now processed
|
||||
by using the [CommonMark Ruby Library](https://github.com/gjtorikian/commonmarker).
|
||||
- In GitLab 11.3 and later, CommonMark processes wiki pages and Markdown
|
||||
files (`*.md`) in repositories.
|
||||
- In GitLab 11.1 and later, the [CommonMark Ruby Library](https://github.com/gjtorikian/commonmarker)
|
||||
for Markdown processes all new issues, merge requests, comments, and other Markdown
|
||||
content.
|
||||
|
||||
The documentation website migrated its Markdown engine
|
||||
[from Redcarpet to Kramdown](https://gitlab.com/gitlab-org/gitlab-docs/-/merge_requests/108)
|
||||
in October 2018.
|
||||
|
||||
You may have older issues, merge requests, or Markdown documents in your
|
||||
repository that relied upon nuances of the GitLab RedCarpet version
|
||||
of Markdown. Because CommonMark uses slightly stricter syntax, these documents
|
||||
may now appear differently after the transition to CommonMark.
|
||||
|
||||
For example, numbered lists with nested lists may
|
||||
render incorrectly:
|
||||
|
||||
```markdown
|
||||
1. Chocolate
|
||||
- dark
|
||||
- milk
|
||||
```
|
||||
|
||||
To fix this issue, add a space to each nested item. The `-` must be aligned with the first
|
||||
character of the top list item (`C` in this case):
|
||||
|
||||
```markdown
|
||||
1. Chocolate
|
||||
- dark
|
||||
- milk
|
||||
```
|
||||
|
||||
1. Chocolate
|
||||
- dark
|
||||
- milk
|
||||
|
||||
We flag any significant differences between Redcarpet and CommonMark Markdown in this document.
|
||||
|
||||
If you have many Markdown files, it can be tedious to determine
|
||||
if they display correctly or not. You can use the
|
||||
[`diff_redcarpet_cmark`](https://gitlab.com/digitalmoksha/diff_redcarpet_cmark)
|
||||
tool to generate a list of files and the
|
||||
differences between how RedCarpet and CommonMark render the files. It indicates
|
||||
if any changes are needed.
|
||||
|
||||
`diff_redcarpet_cmark` is not an officially supported product.
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Badges **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41174) in GitLab 10.7.
|
||||
|
||||
Badges are a unified way to present condensed pieces of information about your
|
||||
projects. They consist of a small image and a URL that the image
|
||||
points to. Examples for badges can be the [pipeline status](../../ci/pipelines/settings.md#pipeline-status-badge),
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Code Owners **(PREMIUM)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/6916) in GitLab 11.3.
|
||||
> - Code Owners for merge request approvals was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/4418) in GitLab Premium 11.9.
|
||||
> - Moved to GitLab Premium in 13.9.
|
||||
> Moved to GitLab Premium in 13.9.
|
||||
|
||||
INFO:
|
||||
Get access to Code Owners and more with a
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
stage: Create
|
||||
group: Source Code
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
type: reference, howto
|
||||
---
|
||||
|
||||
# File Locking **(FREE)**
|
||||
|
@ -43,8 +42,6 @@ locked by Administrator`.
|
|||
|
||||
## Exclusive file locks **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/35856) in GitLab 10.5.
|
||||
|
||||
This process allows you to lock single files or file extensions and it is
|
||||
done through the command line. It doesn't require GitLab paid subscriptions.
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, concepts
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Merge request approval rules **(PREMIUM)**
|
||||
|
@ -146,8 +145,7 @@ approve in these ways:
|
|||
|
||||
### Code owners as eligible approvers **(PREMIUM)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7933) in GitLab 11.5.
|
||||
> - Moved to GitLab Premium in 13.9.
|
||||
> Moved to GitLab Premium in 13.9.
|
||||
|
||||
If you add [code owners](../../code_owners.md) to your repository, the owners of files
|
||||
become eligible approvers in the project. To enable this merge request approval rule:
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, concepts
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Merge request approval settings **(PREMIUM)**
|
||||
|
@ -32,8 +31,7 @@ In this section of general settings, you can configure the following settings:
|
|||
|
||||
## Prevent approval by author
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3349) in GitLab 11.3.
|
||||
> - Moved to GitLab Premium in 13.9.
|
||||
> Moved to GitLab Premium in 13.9.
|
||||
|
||||
By default, the author of a merge request cannot approve it. To change this setting:
|
||||
|
||||
|
@ -54,8 +52,7 @@ this setting, unless you configure one of these options:
|
|||
|
||||
## Prevent approvals by users who add commits
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10441) in GitLab 11.10.
|
||||
> - Moved to GitLab Premium in 13.9.
|
||||
> Moved to GitLab Premium in 13.9.
|
||||
|
||||
By default, users who commit to a merge request can still approve it. At both
|
||||
the project level or [instance level](../../../admin_area/merge_requests_approvals.md)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Protected branches **(FREE)**
|
||||
|
@ -76,8 +75,6 @@ The protected branch displays in the list of protected branches.
|
|||
|
||||
## Create a protected branch
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53361) in GitLab 11.9.
|
||||
|
||||
Users with the Developer or higher [role](../permissions.md) can create a protected branch.
|
||||
|
||||
Prerequisites:
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Protected tags **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/10356) in GitLab 9.1.
|
||||
|
||||
Protected tags:
|
||||
|
||||
- Allow control over who has permission to create tags.
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: reference, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Push Options **(FREE)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) in GitLab 11.7.
|
||||
|
||||
GitLab supports using client-side [Git push options](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)
|
||||
to perform various actions at the same time as pushing changes. Additionally, [Push Rules](../../push_rules/push_rules.md) offer server-side control and enforcement options.
|
||||
|
||||
|
|
|
@ -1,15 +1,11 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Source Code
|
||||
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
|
||||
type: concepts, howto
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Signing commits with GPG **(FREE)**
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/9546) in GitLab 9.5.
|
||||
> - Subkeys support was added in GitLab 10.1.
|
||||
|
||||
You can use a GPG key to sign Git commits made in a GitLab repository. Signed
|
||||
commits are labeled **Verified** if the identity of the committer can be
|
||||
verified. To verify the identity of a committer, GitLab requires their public
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
stage: Create
|
||||
group: Source Code
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
type: concepts, howto
|
||||
---
|
||||
|
||||
# Repository **(FREE)**
|
||||
|
@ -66,8 +65,6 @@ Alternatively, you can clone directly into a code editor.
|
|||
|
||||
### Clone and open in Apple Xcode
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/45820) in GitLab 11.0.
|
||||
|
||||
Projects that contain a `.xcodeproj` or `.xcworkspace` directory can be cloned
|
||||
into Xcode on macOS.
|
||||
|
||||
|
@ -98,8 +95,7 @@ Visual Studio Code:
|
|||
|
||||
## Download the code in a repository
|
||||
|
||||
> - Support for directory download was [introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/24704) in GitLab 11.11.
|
||||
> - Support for [including Git LFS blobs](../../../topics/git/lfs#lfs-objects-in-project-archives) was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15079) in GitLab 13.5.
|
||||
> Support for [including Git LFS blobs](../../../topics/git/lfs#lfs-objects-in-project-archives) was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/15079) in GitLab 13.5.
|
||||
|
||||
You can download the source code that's stored in a repository.
|
||||
|
||||
|
|
|
@ -213,7 +213,7 @@ used in commits. To fix this problem, either:
|
|||
|
||||
### Deadline Exceeded
|
||||
|
||||
When upgrading to GitLab 11.11.8 or later, a change in how usernames are represented means that you
|
||||
When upgrading GitLab, a change in how usernames are represented means that you
|
||||
must update your mirroring username and password to ensure that `%40` characters are replaced with `@`.
|
||||
|
||||
### Connection blocked because server only allows public key authentication
|
||||
|
|
4
qa/knapsack/.gitignore
vendored
Normal file
4
qa/knapsack/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
**
|
||||
|
||||
!.gitignore
|
||||
!master_report.json
|
3
qa/knapsack/gcs/.gitignore
vendored
3
qa/knapsack/gcs/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
|||
**
|
||||
|
||||
!.gitignore
|
|
@ -281,9 +281,7 @@ module QA
|
|||
end
|
||||
|
||||
def knapsack?
|
||||
return false unless ENV['CI_NODE_TOTAL'].to_i > 1
|
||||
|
||||
!!(ENV['KNAPSACK_GENERATE_REPORT'] || ENV['KNAPSACK_REPORT_PATH'] || ENV['KNAPSACK_TEST_FILE_PATTERN'])
|
||||
ENV['CI_NODE_TOTAL'].to_i > 1 && ENV['NO_KNAPSACK'] != "true"
|
||||
end
|
||||
|
||||
def ldap_username
|
||||
|
|
|
@ -32,6 +32,11 @@ module QA
|
|||
# Given *gitlab_address* = 'http://gitlab-abc123.test/' #=> http://about.gitlab-abc123.test/
|
||||
Runtime::Scenario.define(:about_address, URI(-> { gitlab_address.host = "about.#{gitlab_address.host}"; gitlab_address }.call).to_s) # rubocop:disable Style/Semicolon
|
||||
|
||||
##
|
||||
# Setup knapsack and download latest report
|
||||
#
|
||||
Tools::KnapsackReport.configure! if Runtime::Env.knapsack?
|
||||
|
||||
##
|
||||
# Perform before hooks, which are different for CE and EE
|
||||
#
|
||||
|
|
|
@ -19,13 +19,11 @@ module QA
|
|||
def paths_from_knapsack
|
||||
allocator = Knapsack::AllocatorBuilder.new(Knapsack::Adapters::RSpecAdapter).allocator
|
||||
|
||||
QA::Runtime::Logger.info ''
|
||||
QA::Runtime::Logger.info '==== Knapsack specs to execute ====='
|
||||
QA::Runtime::Logger.info 'Report specs:'
|
||||
QA::Runtime::Logger.info allocator.report_node_tests.join(', ')
|
||||
QA::Runtime::Logger.info ''
|
||||
QA::Runtime::Logger.info 'Leftover specs:'
|
||||
QA::Runtime::Logger.info allocator.leftover_node_tests.join(', ')
|
||||
QA::Runtime::Logger.info ''
|
||||
|
||||
['--', allocator.node_tests]
|
||||
end
|
||||
|
|
|
@ -5,50 +5,81 @@ require "fog/google"
|
|||
module QA
|
||||
module Tools
|
||||
class KnapsackReport
|
||||
extend SingleForwardable
|
||||
|
||||
PROJECT = "gitlab-qa-resources"
|
||||
BUCKET = "knapsack-reports"
|
||||
|
||||
class << self
|
||||
def download
|
||||
new.download_report
|
||||
end
|
||||
def_delegators :new, :configure!, :move_regenerated_report, :download_report, :upload_report
|
||||
|
||||
def upload(glob)
|
||||
new.upload_report(glob)
|
||||
end
|
||||
end
|
||||
# Configure knapsack report
|
||||
#
|
||||
# * Setup variables
|
||||
# * Fetch latest report
|
||||
#
|
||||
# @return [void]
|
||||
def configure!
|
||||
ENV["KNAPSACK_TEST_FILE_PATTERN"] ||= "qa/specs/features/**/*_spec.rb"
|
||||
ENV["KNAPSACK_REPORT_PATH"] = report_path
|
||||
|
||||
def initialize
|
||||
ENV["KNAPSACK_REPORT_PATH"] || raise("KNAPSACK_REPORT_PATH env var is required!")
|
||||
ENV["QA_KNAPSACK_REPORT_GCS_CREDENTIALS"] || raise("QA_KNAPSACK_REPORT_GCS_CREDENTIALS env var is required!")
|
||||
Knapsack.logger = QA::Runtime::Logger.logger
|
||||
|
||||
download_report
|
||||
end
|
||||
|
||||
# Download knapsack report from gcs bucket
|
||||
#
|
||||
# @return [void]
|
||||
def download_report
|
||||
logger.info("Downloading latest knapsack report '#{report_file}'")
|
||||
logger.debug("Downloading latest knapsack report for '#{report_name}' to '#{report_path}'")
|
||||
file = client.get_object(BUCKET, report_file)
|
||||
|
||||
logger.info("Saving latest knapsack report to '#{report_path}'")
|
||||
File.write(report_path, file[:body])
|
||||
rescue StandardError => e
|
||||
ENV["KNAPSACK_REPORT_PATH"] = "knapsack/master_report.json"
|
||||
logger.warn("Failed to fetch latest knapsack report: #{e}")
|
||||
logger.warn("Falling back to 'knapsack/master_report.json'")
|
||||
end
|
||||
|
||||
# Rename and move new regenerated report to a separate folder used to indicate report name
|
||||
#
|
||||
# @return [void]
|
||||
def move_regenerated_report
|
||||
return unless ENV["KNAPSACK_GENERATE_REPORT"] == "true"
|
||||
|
||||
path = "tmp/knapsack/#{report_name}"
|
||||
FileUtils.mkdir_p(path)
|
||||
|
||||
# Use path from knapsack config in case of fallback to master_report.json
|
||||
FileUtils.cp(Knapsack.report.report_path, "#{path}/#{ENV['CI_NODE_INDEX']}.json")
|
||||
end
|
||||
|
||||
# Merge and upload knapsack report to gcs bucket
|
||||
#
|
||||
# Fetches all files defined in glob and uses parent folder as report name
|
||||
#
|
||||
# @param [String] glob
|
||||
# @return [void]
|
||||
def upload_report(glob)
|
||||
reports = Dir[glob]
|
||||
return logger.error("Pattern '#{glob}' did not match any files!") if reports.empty?
|
||||
reports = Pathname.glob(glob).each_with_object(Hash.new { |hsh, key| hsh[key] = [] }) do |report, hash|
|
||||
next unless report.extname == ".json"
|
||||
|
||||
report = reports
|
||||
.map { |path| JSON.parse(File.read(path)) }
|
||||
.reduce({}, :merge)
|
||||
return logger.error("Knapsack generated empty report, skipping upload!") if report.empty?
|
||||
hash[report.parent.basename.to_s].push(report)
|
||||
end
|
||||
return logger.error("Glob '#{glob}' did not contain any valid report files!") if reports.empty?
|
||||
|
||||
logger.info("Uploading latest knapsack report '#{report_file}'")
|
||||
client.put_object(BUCKET, report_file, JSON.pretty_generate(report))
|
||||
reports.each do |name, jsons|
|
||||
file = "#{name}.json"
|
||||
|
||||
report = jsons
|
||||
.map { |json| JSON.parse(File.read(json)) }
|
||||
.reduce({}, :merge)
|
||||
next logger.warn("Knapsack generated empty report for '#{name}', skipping upload!") if report.empty?
|
||||
|
||||
logger.info("Uploading latest knapsack report '#{file}'")
|
||||
client.put_object(BUCKET, file, JSON.pretty_generate(report))
|
||||
rescue StandardError => e
|
||||
logger.error("Failed to upload knapsack report for '#{name}'. Error: #{e}")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -66,22 +97,48 @@ module QA
|
|||
def client
|
||||
@client ||= Fog::Storage::Google.new(
|
||||
google_project: PROJECT,
|
||||
google_json_key_location: ENV["QA_KNAPSACK_REPORT_GCS_CREDENTIALS"]
|
||||
google_json_key_location: gcs_credentials
|
||||
)
|
||||
end
|
||||
|
||||
# Base path of knapsack report
|
||||
#
|
||||
# @return [String]
|
||||
def report_base_path
|
||||
@report_base_path ||= "knapsack"
|
||||
end
|
||||
|
||||
# Knapsack report path
|
||||
#
|
||||
# @return [String]
|
||||
def report_path
|
||||
@report_path ||= ENV["KNAPSACK_REPORT_PATH"]
|
||||
@report_path ||= "#{report_base_path}/#{report_file}"
|
||||
end
|
||||
|
||||
# Knapsack report name
|
||||
#
|
||||
# @return [String]
|
||||
def report_file
|
||||
@report_name ||= report_path.split("/").last
|
||||
@report_file ||= "#{report_name}.json"
|
||||
end
|
||||
|
||||
# Report name
|
||||
#
|
||||
# Infer report name from ci job name
|
||||
# Remove characters incompatible with gcs bucket naming from job names like ee:instance-parallel
|
||||
#
|
||||
# @return [String]
|
||||
def report_name
|
||||
@report_name ||= ENV["CI_JOB_NAME"].split(" ").first.tr(":", "-")
|
||||
end
|
||||
|
||||
# Path to GCS credentials json
|
||||
#
|
||||
# @return [String]
|
||||
def gcs_credentials
|
||||
@gcs_credentials ||= ENV["QA_KNAPSACK_REPORT_GCS_CREDENTIALS"] || raise(
|
||||
"QA_KNAPSACK_REPORT_GCS_CREDENTIALS env variable is required!"
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -173,31 +173,23 @@ RSpec.describe QA::Runtime::Env do
|
|||
stub_env('CI_NODE_TOTAL', '2')
|
||||
end
|
||||
|
||||
it 'returns true if KNAPSACK_GENERATE_REPORT is defined' do
|
||||
stub_env('KNAPSACK_GENERATE_REPORT', 'true')
|
||||
|
||||
it 'returns true if running in parallel CI run' do
|
||||
expect(described_class.knapsack?).to be_truthy
|
||||
end
|
||||
|
||||
it 'returns true if KNAPSACK_REPORT_PATH is defined' do
|
||||
stub_env('KNAPSACK_REPORT_PATH', '/a/path')
|
||||
|
||||
expect(described_class.knapsack?).to be_truthy
|
||||
end
|
||||
|
||||
it 'returns true if KNAPSACK_TEST_FILE_PATTERN is defined' do
|
||||
stub_env('KNAPSACK_TEST_FILE_PATTERN', '/a/**/pattern')
|
||||
|
||||
expect(described_class.knapsack?).to be_truthy
|
||||
end
|
||||
|
||||
it 'returns false if neither KNAPSACK_GENERATE_REPORT nor KNAPSACK_REPORT_PATH nor KNAPSACK_TEST_FILE_PATTERN are defined' do
|
||||
it 'returns false if knapsack disabled' do
|
||||
stub_env('NO_KNAPSACK', 'true')
|
||||
expect(described_class.knapsack?).to be_falsey
|
||||
end
|
||||
|
||||
it 'returns false if not running in parallel job' do
|
||||
it 'returns false if not running in a parallel job' do
|
||||
stub_env('CI_NODE_TOTAL', '1')
|
||||
stub_env('KNAPSACK_GENERATE_REPORT', 'true')
|
||||
|
||||
expect(described_class.knapsack?).to be_falsey
|
||||
end
|
||||
|
||||
it 'returns false if not running in ci' do
|
||||
stub_env('CI_NODE_TOTAL', nil)
|
||||
|
||||
expect(described_class.knapsack?).to be_falsey
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
RSpec.describe QA::Scenario::Test::Integration::Github do
|
||||
describe '#perform' do
|
||||
let(:env) { spy('Runtime::Env') }
|
||||
let(:env) { spy('Runtime::Env', knapsack?: false) }
|
||||
|
||||
before do
|
||||
stub_const('QA::Runtime::Env', env)
|
||||
|
|
|
@ -10,7 +10,7 @@ require 'active_support/core_ext/object/blank'
|
|||
require_relative 'qa_deprecation_toolkit_env'
|
||||
QaDeprecationToolkitEnv.configure!
|
||||
|
||||
Knapsack::Adapters::RSpecAdapter.bind if ENV['CI'] && QA::Runtime::Env.knapsack? && !ENV['NO_KNAPSACK']
|
||||
Knapsack::Adapters::RSpecAdapter.bind if QA::Runtime::Env.knapsack?
|
||||
|
||||
QA::Runtime::Browser.configure!
|
||||
QA::Runtime::AllureReport.configure!
|
||||
|
@ -65,10 +65,10 @@ RSpec.configure do |config|
|
|||
end
|
||||
|
||||
config.after(:suite) do |suite|
|
||||
# If any tests failed, leave the resources behind to help troubleshoot
|
||||
next if suite.reporter.failed_examples.present?
|
||||
QA::Tools::KnapsackReport.move_regenerated_report if QA::Runtime::Env.knapsack?
|
||||
|
||||
QA::Resource::ReusableProject.remove_all_via_api!
|
||||
# If any tests failed, leave the resources behind to help troubleshoot
|
||||
QA::Resource::ReusableProject.remove_all_via_api! unless suite.reporter.failed_examples.present?
|
||||
end
|
||||
|
||||
config.expect_with :rspec do |expectations|
|
||||
|
|
|
@ -10,8 +10,8 @@ namespace :knapsack do
|
|||
end
|
||||
|
||||
desc "Merge and upload knapsack report"
|
||||
task :upload, [:glob_pattern] do |_task, args|
|
||||
QA::Tools::KnapsackReport.upload(args[:glob_pattern])
|
||||
task :upload, [:glob] do |_task, args|
|
||||
QA::Tools::KnapsackReport.upload_report(args[:glob])
|
||||
end
|
||||
end
|
||||
# rubocop:enable Rails/RakeEnvironment
|
||||
|
|
Loading…
Reference in a new issue