Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Dangerfile « documentation « danger - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f7fa0d9fcf258edd5588699d5a3177b3ac3111b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true

def feature_mr?
  (helper.mr_labels & %w[feature::addition feature::enhancement]).any?
end

def doc_path_to_url(path)
  path.sub("doc/", "https://docs.gitlab.com/ee/").sub("index.md", "").sub(".md", "/")
end

docs_paths_to_review = helper.changes_by_category[:docs]

# Some docs do not need a review from a Technical Writer.
# In these cases, we'll output a message specific to the section.
sections_with_no_tw_review = {
  'doc/solutions' => [],
  'doc/development' => []
}.freeze

# One exception to the exceptions above: Technical Writing docs should get a TW review.
TW_DOCS_PATH = 'doc/development/documentation'

docs_paths_to_review.reject! do |doc|
  section_with_no_tw_review = sections_with_no_tw_review.keys.find { |skip_path| doc.start_with?(skip_path) && !doc.start_with?(TW_DOCS_PATH) }
  next unless section_with_no_tw_review

  sections_with_no_tw_review[section_with_no_tw_review] << doc

  true
end

SOLUTIONS_LABELS = %w[Solutions].freeze
DEVELOPMENT_LABELS = ['docs::improvement', 'development guidelines'].freeze

def add_labels(labels)
  helper.labels_to_add.concat(%w[documentation type::maintenance maintenance::refactor] + labels)
end

SOLUTIONS_MESSAGE = <<~MSG
This MR contains docs in the /solutions directory and should be reviewed by a Solutions Architect approver. You do not need tech writer review.
MSG

DEVELOPMENT_MESSAGE = <<~MSG
This MR contains docs in the /development directory. Any Maintainer, other than the author, can merge. You do not need tech writer review.
MSG

# For regular pages, prompt for a TW review
DOCS_UPDATE_SHORT_MESSAGE = <<~MSG
This merge request adds or changes documentation files. A review from the Technical Writing team before you merge is **recommended**. Reviews can happen after you merge.
MSG

DOCS_UPDATE_LONG_MESSAGE = <<~MSG.freeze
## Documentation review

The following files require a review from a technical writer:

* #{docs_paths_to_review.map { |path| "`#{path}` ([Link to current live version](#{doc_path_to_url(path)}))" }.join("\n* ")}

The review does not need to block merging this merge request. See the:

- [Metadata for the `*.md` files](https://docs.gitlab.com/ee/development/documentation/#metadata) that you've changed. The first few lines of each `*.md` file identify the stage and group most closely associated with your docs change.
- The [Technical Writer assigned](https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments) for that stage and group.
- [Documentation workflows](https://docs.gitlab.com/ee/development/documentation/workflow.html) for information on when to assign a merge request for review.
MSG

# Documentation should be updated for feature::addition and feature::enhancement
DOCUMENTATION_UPDATE_MISSING = <<~MSG
~"feature::addition" and ~"feature::enhancement" merge requests normally have a documentation change. Consider adding a documentation update or confirming the documentation plan with the [Technical Writer counterpart](https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments).

For more information, see:

- The Handbook page on [merge request types](https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification).
- The [definition of done](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#definition-of-done) documentation.
MSG

# Output messages
warn(DOCUMENTATION_UPDATE_MISSING) if docs_paths_to_review.empty? && feature_mr?

if sections_with_no_tw_review["doc/solutions"].any?
  add_labels(SOLUTIONS_LABELS)
  message(SOLUTIONS_MESSAGE)
end

if sections_with_no_tw_review["doc/development"].any?
  add_labels(DEVELOPMENT_LABELS)
  message(DEVELOPMENT_MESSAGE)
end

unless docs_paths_to_review.empty?
  message(DOCS_UPDATE_SHORT_MESSAGE)
  markdown(DOCS_UPDATE_LONG_MESSAGE)
end