diff options
20 files changed, 84 insertions, 222 deletions
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 9450f5226ce..270fa056014 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -39,7 +39,7 @@ class Projects::PipelinesController < Projects::ApplicationController .new(project, current_user, index_params) .execute .page(params[:page]) - .per(30) + .per(20) @pipelines_count = limited_pipelines_count(project) diff --git a/doc/api/templates/gitignores.md b/doc/api/templates/gitignores.md index 3a2b6386bee..2f489b2d6a7 100644 --- a/doc/api/templates/gitignores.md +++ b/doc/api/templates/gitignores.md @@ -7,13 +7,12 @@ type: reference # .gitignore API -In GitLab, there is an API endpoint available for `.gitignore`. For more -information on `gitignore`, see the -[Git documentation](https://git-scm.com/docs/gitignore). +In GitLab, the `/gitignores` endpoint returns a list of Git `.gitignore` templates. For more information, +see the [Git documentation for `.gitignore`](https://git-scm.com/docs/gitignore). -## List `.gitignore` templates +## Get all `.gitignore` templates -Get all `.gitignore` templates. +Get a list of all `.gitignore` templates: ```plaintext GET /templates/gitignores @@ -112,9 +111,9 @@ Example response: ] ``` -## Single `.gitignore` template +## Get a single `.gitignore` template -Get a single `.gitignore` template. +Get a single `.gitignore` template: ```plaintext GET /templates/gitignores/:key diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md index e4e1651e554..8bacafdef80 100644 --- a/doc/development/documentation/styleguide/index.md +++ b/doc/development/documentation/styleguide/index.md @@ -969,7 +969,7 @@ included in the generated anchor links. For example, when you link to Keep in mind that the GitLab user interface links to many documentation pages and anchor links to take the user to the right spot. When you change a heading, search `doc/*`, `app/views/*`, and `ee/app/views/*` for the old -anchor. If you do not fix these links, the [`ui-docs-lint` job](../testing.md#ui-docs-links-test) +anchor. If you do not fix these links, the [`ui-docs-lint` job](../testing.md#ui-link-tests) in your merge request fails. Important: diff --git a/doc/development/documentation/testing.md b/doc/development/documentation/testing.md index 45ce711b827..bafef89f954 100644 --- a/doc/development/documentation/testing.md +++ b/doc/development/documentation/testing.md @@ -7,34 +7,40 @@ description: Learn how to contribute to GitLab Documentation. # Documentation testing -We treat documentation as code, and so use tests in our CI pipeline to maintain the -standards and quality of the docs. The current tests, which run in CI jobs when a -merge request with new or changed docs is submitted, are: - -- [`docs lint`](https://gitlab.com/gitlab-org/gitlab/-/blob/0b562014f7b71f98540e682c8d662275f0011f2f/.gitlab/ci/docs.gitlab-ci.yml#L41): - Runs several tests on the content of the docs themselves: - - [`lint-doc.sh` script](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/lint-doc.sh) - runs the following checks and linters: - - All cURL examples use the long flags (ex: `--header`, not `-H`). - - The `CHANGELOG.md` does not contain duplicate versions. - - No files in `doc/` are executable. - - No new `README.md` was added. - - [markdownlint](#markdownlint). - - [Vale](#vale). - - Nanoc tests: - - [`internal_links`](https://gitlab.com/gitlab-org/gitlab/-/blob/0b562014f7b71f98540e682c8d662275f0011f2f/.gitlab/ci/docs.gitlab-ci.yml#L58) - checks that all internal links (ex: `[link](../index.md)`) are valid. - - [`internal_anchors`](https://gitlab.com/gitlab-org/gitlab/-/blob/0b562014f7b71f98540e682c8d662275f0011f2f/.gitlab/ci/docs.gitlab-ci.yml#L60) - checks that all internal anchors (ex: `[link](../index.md#internal_anchor)`) - are valid. - - [`ui-docs-links lint`](https://gitlab.com/gitlab-org/gitlab/-/blob/0b562014f7b71f98540e682c8d662275f0011f2f/.gitlab/ci/docs.gitlab-ci.yml#L62) - checks that all links to docs from UI elements (`app/views` files, for example) - are linking to valid docs and anchors. +GitLab documentation is stored in projects with code and treated like code. Therefore, we use +processes similar to those used for code to maintain standards and quality of documentation. + +We have tests: + +- To lint the words and structure of the documentation. +- To check the validity of internal links within the documentation suite. +- To check the validity of links from UI elements, such as files in `app/views` files. + +For the specifics of each test run in our CI/CD pipelines, see the configuration for those tests +in the relevant projects: + +- <https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/docs.gitlab-ci.yml> +- <https://gitlab.com/gitlab-org/gitlab-runner/-/blob/master/.gitlab/ci/docs.gitlab-ci.yml> +- <https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/gitlab-ci-config/gitlab-com.yml> +- <https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/.gitlab-ci.yml> ## Run tests locally -Apart from [previewing your changes locally](index.md#previewing-the-changes-live), you can also run all lint checks -and Nanoc tests locally. +Similar to [previewing your changes locally](index.md#previewing-the-changes-live), you can also +run these tests on your local computer. This has the advantage of: + +- Speeding up the feedback loop. You can know of any problems with the changes in your branch + without waiting for a CI/CD pipeline to run. +- Lowering costs. Running tests locally is cheaper than running tests on GitLab's cloud + infrastructure. + +To run tests locally, it's important to: + +- [Install the tools](#install-linters), and [keep them up to date](#update-linters). +- Run [linters](#lint-checks), [documentation link tests](#documentation-link-tests), and + [UI link tests](#ui-link-tests) the same way they are run in CI/CD pipelines. It's important to use + same configuration we use in CI/CD pipelines, which can be different than the default configuration + of the tool. ### Lint checks @@ -66,15 +72,15 @@ The output should be similar to: This requires you to either: -- Have the required lint tools installed on your machine. +- Have the [required lint tools installed](#local-linters) on your computer. - A working Docker installation, in which case an image with these tools pre-installed is used. -### Nanoc tests +### Documentation link tests -To execute Nanoc tests locally: +To execute documentation link tests locally: 1. Navigate to the [`gitlab-docs`](https://gitlab.com/gitlab-org/gitlab-docs) directory. -1. Run: +1. Run the following commands: ```shell # Check for broken internal links @@ -85,7 +91,7 @@ To execute Nanoc tests locally: bundle exec nanoc check internal_anchors ``` -### `ui-docs-links` test +### UI link tests The `ui-docs-links lint` job uses `haml-lint` to test that all links to docs from UI elements (`app/views` files, for example) are linking to valid docs and anchors. @@ -191,22 +197,15 @@ You can use Vale: At a minimum, install [markdownlint](#markdownlint) and [Vale](#vale) to match the checks run in build pipelines: -1. Install `markdownlint-cli`, using either: - - - `npm`: +1. Install `markdownlint-cli`: - ```shell - npm install -g markdownlint-cli - ``` - - - `yarn`: - - ```shell - yarn global add markdownlint-cli - ``` + ```shell + yarn global add markdownlint-cli + ``` - We recommend installing the version of `markdownlint-cli` currently used in the documentation - linting [Docker image](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/master/.gitlab-ci.yml#L420). + We recommend installing the version of `markdownlint-cli` + [used](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/master/.gitlab-ci.yml#L447) when building + the `image:docs-lint-markdown`. 1. Install [`vale`](https://github.com/errata-ai/vale/releases). For example, to install using `brew` for macOS, run: @@ -215,14 +214,29 @@ build pipelines: brew install vale ``` - We recommend installing the version of Vale currently used in the documentation linting - [Docker image](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/master/.gitlab-ci.yml#L419). +These tools can be [integrated with your code editor](#configure-editors). -In addition to using markdownlint and Vale at the command line, these tools can be -[integrated with your code editor](#configure-editors). +### Update linters + +It's important to use linter versions that are the same or newer than those run in +CI/CD. This provides access to new features and possible bug fixes. + +To match the versions of `markdownlint-cli` and `vale` used in the GitLab projects, refer to the +[versions used](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/master/.gitlab-ci.yml#L447) +when building the `image:docs-lint-markdown` Docker image containing these tools for CI/CD. + +| Tool | Version | Command | Additional info | +|--------------------|----------|-------------------------------------------|-----------------| +| `markdownlint-cli` | Latest | `yarn global add markdownlint-cli` | n/a | +| `markdownlint-cli` | Specfic | `yarn global add markdownlint-cli@0.23.2` | The `@` indicates a specific version, and this example updates the tool to version `0.23.2`. | +| Vale | Latest | `brew update && brew upgrade vale` | This command is for macOS only. | +| Vale | Specific | n/a | Not possible using `brew`, but can be [directly downloaded](https://github.com/errata-ai/vale/releases). | ### Configure editors +Using linters in your editor is more convenient than having to run the commands from the +command line. + To configure markdownlint within your editor, install one of the following as appropriate: - [Sublime Text](https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint) diff --git a/doc/user/group/iterations/index.md b/doc/user/group/iterations/index.md index 58c713aee1d..8627f449e61 100644 --- a/doc/user/group/iterations/index.md +++ b/doc/user/group/iterations/index.md @@ -71,6 +71,10 @@ To learn how to add an issue to an iteration, see the steps in You can track the progress of an iteration by reviewing iteration reports. An iteration report displays a list of all the issues assigned to an iteration and their status. +The report also shows a breakdown of total issues in an iteration. +Open iteration reports show a summary of completed, unstarted, and in-progress issues. +Closed iteration reports show the total number of issues completed by the due date. + To view an iteration report, go to the iterations list page and click an iteration's title. ### Iteration burndown and burnup charts diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 15bbf479050..b10dfb3b33a 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -14542,6 +14542,9 @@ msgstr "" msgid "Incompatible project" msgstr "" +msgid "Incomplete" +msgstr "" + msgid "Indent" msgstr "" @@ -29308,6 +29311,9 @@ msgstr "" msgid "Unstar" msgstr "" +msgid "Unstarted" +msgstr "" + msgid "Unsubscribe" msgstr "" diff --git a/spec/frontend/fixtures/boards.rb b/spec/frontend/fixtures/boards.rb deleted file mode 100644 index 90e2ca4db63..00000000000 --- a/spec/frontend/fixtures/boards.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Projects::BoardsController, '(JavaScript fixtures)', type: :controller do - include JavaScriptFixturesHelpers - - let(:admin) { create(:admin) } - let(:namespace) { create(:namespace, name: 'frontend-fixtures' )} - let(:project) { create(:project, :repository, namespace: namespace, path: 'boards-project') } - - render_views - - before(:all) do - clean_frontend_fixtures('boards/') - end - - before do - sign_in(admin) - end - - it 'boards/show.html' do - get(:index, params: { - namespace_id: project.namespace, - project_id: project - }) - - expect(response).to be_successful - end -end diff --git a/spec/frontend/fixtures/emojis.rb b/spec/frontend/fixtures/emojis.rb deleted file mode 100644 index b95c7632917..00000000000 --- a/spec/frontend/fixtures/emojis.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe 'Emojis (JavaScript fixtures)', type: :request do - include JavaScriptFixturesHelpers - - before(:all) do - clean_frontend_fixtures('emojis/') - end - - it 'emojis/emojis.json' do |example| - get '/-/emojis/1/emojis.json' - - expect(response).to be_successful - end -end diff --git a/spec/frontend/fixtures/jobs.rb b/spec/frontend/fixtures/jobs.rb index 64197a62301..afbde82f6e8 100644 --- a/spec/frontend/fixtures/jobs.rb +++ b/spec/frontend/fixtures/jobs.rb @@ -22,7 +22,6 @@ RSpec.describe Projects::JobsController, '(JavaScript fixtures)', type: :control render_views before(:all) do - clean_frontend_fixtures('builds/') clean_frontend_fixtures('jobs/') end @@ -34,16 +33,6 @@ RSpec.describe Projects::JobsController, '(JavaScript fixtures)', type: :control remove_repository(project) end - it 'builds/build-with-artifacts.html' do - get :show, params: { - namespace_id: project.namespace.to_param, - project_id: project, - id: build_with_artifacts.to_param - } - - expect(response).to be_successful - end - it 'jobs/delayed.json' do get :show, params: { namespace_id: project.namespace.to_param, diff --git a/spec/frontend/fixtures/labels.rb b/spec/frontend/fixtures/labels.rb index 2b7babb2e52..5623fd16f7b 100644 --- a/spec/frontend/fixtures/labels.rb +++ b/spec/frontend/fixtures/labels.rb @@ -25,22 +25,6 @@ RSpec.describe 'Labels (JavaScript fixtures)' do remove_repository(project) end - describe Groups::LabelsController, '(JavaScript fixtures)', type: :controller do - render_views - - before do - sign_in(admin) - end - - it 'labels/group_labels.json' do - get :index, params: { - group_id: group - }, format: 'json' - - expect(response).to be_successful - end - end - describe API::Helpers::LabelHelpers, type: :request do include JavaScriptFixturesHelpers include ApiHelpers diff --git a/spec/frontend/fixtures/merge_requests.rb b/spec/frontend/fixtures/merge_requests.rb index 6f281b26e6d..d2daa66f033 100644 --- a/spec/frontend/fixtures/merge_requests.rb +++ b/spec/frontend/fixtures/merge_requests.rb @@ -13,7 +13,7 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: let(:description) do <<~MARKDOWN.strip_heredoc - [ ] Task List Item - - [ ] + - [ ] - [ ] Task List Item 2 MARKDOWN end @@ -75,30 +75,12 @@ RSpec.describe Projects::MergeRequestsController, '(JavaScript fixtures)', type: render_merge_request(merge_request) end - it 'merge_requests/merged_merge_request.html' do - expect_next_instance_of(MergeRequest) do |merge_request| - allow(merge_request).to receive(:source_branch_exists?).and_return(true) - allow(merge_request).to receive(:can_remove_source_branch?).and_return(true) - end - render_merge_request(merged_merge_request) - end - it 'merge_requests/diff_comment.html' do create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request) create(:note_on_merge_request, author: admin, project: project, noteable: merge_request) render_merge_request(merge_request) end - it 'merge_requests/merge_request_with_comment.html' do - create(:note_on_merge_request, author: admin, project: project, noteable: merge_request, note: '- [ ] Task List Item') - render_merge_request(merge_request) - end - - it 'merge_requests/discussions.json' do - create(:discussion_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request) - render_discussions_json(merge_request) - end - it 'merge_requests/diff_discussion.json' do create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request) render_discussions_json(merge_request) diff --git a/spec/frontend/fixtures/merge_requests_diffs.rb b/spec/frontend/fixtures/merge_requests_diffs.rb index 63bd02d0fbd..217456a97fb 100644 --- a/spec/frontend/fixtures/merge_requests_diffs.rb +++ b/spec/frontend/fixtures/merge_requests_diffs.rb @@ -40,18 +40,6 @@ RSpec.describe Projects::MergeRequests::DiffsController, '(JavaScript fixtures)' render_merge_request(merge_request, commit_id: project.commit.sha) end - it 'merge_request_diffs/inline_changes_tab_with_comments.json' do - create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request) - create(:note_on_merge_request, author: admin, project: project, noteable: merge_request) - render_merge_request(merge_request) - end - - it 'merge_request_diffs/parallel_changes_tab_with_comments.json' do - create(:diff_note_on_merge_request, project: project, author: admin, position: position, noteable: merge_request) - create(:note_on_merge_request, author: admin, project: project, noteable: merge_request) - render_merge_request(merge_request, view: 'parallel') - end - private def render_merge_request(merge_request, view: 'inline', **extra_params) diff --git a/spec/frontend/fixtures/projects.rb b/spec/frontend/fixtures/projects.rb index d0cedb0ef86..0b7755d4021 100644 --- a/spec/frontend/fixtures/projects.rb +++ b/spec/frontend/fixtures/projects.rb @@ -30,15 +30,6 @@ RSpec.describe 'Projects (JavaScript fixtures)', type: :controller do end describe ProjectsController, '(JavaScript fixtures)', type: :controller do - it 'projects/dashboard.html' do - get :show, params: { - namespace_id: project.namespace.to_param, - id: project - } - - expect(response).to be_successful - end - it 'projects/overview.html' do get :show, params: { namespace_id: project_with_repo.namespace.to_param, diff --git a/spec/frontend/fixtures/raw.rb b/spec/frontend/fixtures/raw.rb index 7e42fa61e8e..cf51f2389bc 100644 --- a/spec/frontend/fixtures/raw.rb +++ b/spec/frontend/fixtures/raw.rb @@ -10,7 +10,6 @@ RSpec.describe 'Raw files', '(JavaScript fixtures)' do let(:response) { @blob.data.force_encoding('UTF-8') } before(:all) do - clean_frontend_fixtures('blob/balsamiq/') clean_frontend_fixtures('blob/notebook/') clean_frontend_fixtures('blob/pdf/') clean_frontend_fixtures('blob/text/') @@ -22,10 +21,6 @@ RSpec.describe 'Raw files', '(JavaScript fixtures)' do remove_repository(project) end - it 'blob/balsamiq/test.bmpr' do - @blob = project.repository.blob_at('b89b56d79', 'files/images/balsamiq.bmpr') - end - it 'blob/notebook/basic.json' do @blob = project.repository.blob_at('6d85bb69', 'files/ipython/basic.ipynb') end diff --git a/spec/frontend/fixtures/static/balsamiq_viewer.html b/spec/frontend/fixtures/static/balsamiq_viewer.html deleted file mode 100644 index cdd723d1a84..00000000000 --- a/spec/frontend/fixtures/static/balsamiq_viewer.html +++ /dev/null @@ -1 +0,0 @@ -<div class="file-content balsamiq-viewer" data-endpoint="/test" id="js-balsamiq-viewer"></div> diff --git a/spec/frontend/fixtures/static/environments/table.html b/spec/frontend/fixtures/static/environments/table.html deleted file mode 100644 index 417af564ff1..00000000000 --- a/spec/frontend/fixtures/static/environments/table.html +++ /dev/null @@ -1,15 +0,0 @@ -<table> -<thead> -<tr> -<th>Environment</th> -<th>Last deployment</th> -<th>Job</th> -<th>Commit</th> -<th></th> -<th></th> -</tr> -</thead> -<tbody> -<tr id="environment-row"></tr> -</tbody> -</table> diff --git a/spec/frontend/fixtures/static/issuable_filter.html b/spec/frontend/fixtures/static/issuable_filter.html deleted file mode 100644 index 06b70fb43f1..00000000000 --- a/spec/frontend/fixtures/static/issuable_filter.html +++ /dev/null @@ -1,9 +0,0 @@ -<form action="/user/project/issues?scope=all&state=closed" class="js-filter-form"> -<input id="utf8" name="utf8" value="✓"> -<input id="check-all-issues" name="check-all-issues"> -<input id="search" name="search"> -<input id="author_id" name="author_id"> -<input id="assignee_id" name="assignee_id"> -<input id="milestone_title" name="milestone_title"> -<input id="label_name" name="label_name"> -</form> diff --git a/spec/frontend/fixtures/static/merge_requests_show.html b/spec/frontend/fixtures/static/merge_requests_show.html deleted file mode 100644 index 87e36c9f315..00000000000 --- a/spec/frontend/fixtures/static/merge_requests_show.html +++ /dev/null @@ -1,15 +0,0 @@ -<a class="btn-close"></a> -<div class="detail-page-description"> -<div class="description js-task-list-container"> -<div class="md"> -<ul class="task-list"> -<li class="task-list-item"> -<input class="task-list-item-checkbox" type="checkbox"> -Task List Item -</li> -</ul> -<textarea class="js-task-list-field">- [ ] Task List Item</textarea> -</div> -</div> -</div> -<form action="/foo" class="js-issuable-update"></form> diff --git a/spec/frontend/fixtures/static/pipelines.html b/spec/frontend/fixtures/static/pipelines.html deleted file mode 100644 index 42333f94f2f..00000000000 --- a/spec/frontend/fixtures/static/pipelines.html +++ /dev/null @@ -1,3 +0,0 @@ -<div> -<div data-can-create-pipeline="true" data-ci-lint-path="foo" data-empty-state-svg-path="foo" data-endpoint="foo" data-error-state-svg-path="foo" data-has-ci="foo" data-help-auto-devops-path="foo" data-help-page-path="foo" data-new-pipeline-path="foo" data-reset-cache-path="foo" id="pipelines-list-vue"></div> -</div> diff --git a/spec/frontend/merge_request_spec.js b/spec/frontend/merge_request_spec.js index 37509f77f71..1cb7206b97f 100644 --- a/spec/frontend/merge_request_spec.js +++ b/spec/frontend/merge_request_spec.js @@ -38,7 +38,7 @@ describe('MergeRequest', () => { .dispatchEvent(changeEvent); setImmediate(() => { expect($('.js-task-list-field').val()).toBe( - '- [x] Task List Item\n- [ ] \n- [ ] Task List Item 2\n', + '- [x] Task List Item\n- [ ]\n- [ ] Task List Item 2\n', ); done(); }); @@ -55,7 +55,7 @@ describe('MergeRequest', () => { .dispatchEvent(changeEvent); setImmediate(() => { expect($('.js-task-list-field').val()).toBe( - '- [ ] Task List Item\n- [ ] \n- [x] Task List Item 2\n', + '- [ ] Task List Item\n- [ ]\n- [x] Task List Item 2\n', ); done(); }); @@ -78,7 +78,7 @@ describe('MergeRequest', () => { `${TEST_HOST}/frontend-fixtures/merge-requests-project/-/merge_requests/1.json`, { merge_request: { - description: '- [ ] Task List Item\n- [ ] \n- [ ] Task List Item 2\n', + description: '- [ ] Task List Item\n- [ ]\n- [ ] Task List Item 2\n', lock_version: 0, update_task: { line_number: lineNumber, line_source: lineSource, index, checked }, }, |