Merge "Add Python 3 verify step to SDC"
[ci-management.git] / jjb / doc / rules.yaml
1 ---
2 - scm:
3     name: doc-scm
4     scm:
5       - git:
6           url: "https://gerrit.onap.org/r/{project}"
7           refspec: "+refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*"
8           branches:
9             - "{ref}"
10
11 - trigger:
12     name: doc-rules-patchset-created
13     triggers:
14       - gerrit:
15           trigger-on:
16             - patchset-created-event
17             - comment-added-contains-event:
18                 comment-contains-value: recheck
19             - comment-added-contains-event:
20                 comment-contains-value: reverify
21           server-name: "Primary"
22           projects:
23             - project-compare-type: "ANT"
24               project-pattern: "**"
25               branches:
26                 - branch-compare-type: "ANT"
27                   branch-pattern: "**/*"
28                 - branch-compare-type: "ANT"
29                   branch-pattern: "refs/tags/**"
30
31 - builder:
32     name: doc-rules
33     builders:
34       # yamllint disable rule:line-length
35       - shell: |
36           #!/bin/bash
37           . /lib/lsb/init-functions || exit 0
38           exitstatus="0"
39           warning="0"
40           # message, begin
41           log_success_msg "INFO Starting additional checks related to documentation."
42           log_success_msg "INFO See https://git.onap.org/doc/doc-best-practice for example config files (master branch)."
43           log_success_msg "INFO Modify example config files if you like to use them in a release branch."
44           log_success_msg "INFO See https://wiki.onap.org/x/w4IEBw for the detailed procedure #02."
45           log_success_msg "INFO In case of questions please contact the ONAP documentation team."
46           # docs directory
47           if [ ! -d docs ] ; then
48             log_success_msg "INFO Directory docs not found. Skipping further checks."
49             exit 0
50           fi
51           # config files, required
52           for i in docs/index.rst docs/conf.py docs/requirements-docs.txt docs/_static/css/ribbon.css .readthedocs.yaml; do
53             if [ ! -f $i ] ; then
54               log_failure_msg "FAIL $i missing. Please add it or remove the full docs directory."
55               exitstatus="1"
56             else
57               log_success_msg "INFO $i found."
58             fi
59           done
60           # config files, no longer required
61           for i in docs/conf.yaml; do
62             if [ -f $i ] ; then
63               log_failure_msg "FAIL $i found. It is no longer required. Please remove it."
64               exitstatus="1"
65             else
66               log_success_msg "INFO $i not found."
67             fi
68           done
69           # tox.ini @ docs directory
70           filename="docs/tox.ini"
71           if [ ! -f $filename ] ; then
72             log_failure_msg "FAIL $filename missing. Please add it or remove the full docs directory."
73             exitstatus="1"
74           else
75             log_success_msg "INFO $filename found."
76             # sphinx-build command and -W option
77             sphinxbuild_detected=0
78             linenumber=0
79             while IFS="" read -r line || [ -n "$line" ] ; do
80               linenumber=$((linenumber+1))
81               if echo $line | grep -q '^[ \t]*sphinx-build.*' ; then
82                 sphinxbuild_detected="1"
83                 if echo $line | grep -q '^[ \t]*sphinx-build.* -W ' ; then
84                   log_success_msg "INFO sphinx-build option '-W' used in $filename, line $linenumber."
85                 elif echo $line | grep -q ' \-b spelling ' ; then
86                   log_warning_msg "WARN sphinx-build option '-W' missing for spellcheck in $filename, line $linenumber."
87                   warning="1"
88                 else
89                   log_failure_msg "FAIL sphinx-build option '-W' missing in $filename, line $linenumber. Please add it."
90                   exitstatus="1"
91                 fi
92               fi
93             done < $filename
94             if [ "$sphinxbuild_detected" = "0" ]; then
95               log_failure_msg "FAIL Sphinx-build command(s) missing in $filename. Please add it."
96               exitstatus="1"
97             fi
98             # second tox.ini @ root directory
99             if [ -f ./tox.ini ] ; then
100               # sphinx-build command
101               if cat ./tox.ini | grep -q '^[ \t]*sphinx-build.*' ; then
102                 log_warning_msg "WARN tox.ini also exists in root directory and contains sphinx-build command(s). Please check for redundancies."
103                 warning="1"
104               fi
105             fi
106             unset sphinxbuild_detected
107             unset linenumber
108           fi
109           unset filename
110           # ribbon.css
111           filename="docs/_static/css/ribbon.css"
112           if [ ! -f $filename ]; then
113             log_failure_msg "FAIL $filename missing. Please add it or remove the full docs directory."
114             exitstatus="1"
115           else
116             log_success_msg "INFO $filename found."
117             # max-width parameter
118             cssmaxwidth=$(grep '^[ \t]*max-width:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
119             if [[ ! $cssmaxwidth == *"max-width: 800px"* ]]; then
120               log_failure_msg "FAIL Setting 'max-width: 800px' missing in $filename. Please add it."
121               exitstatus="1"
122             else
123               log_success_msg "INFO Setting 'max-width: 800px' found in $filename."
124             fi
125             unset cssmaxwidth
126           fi
127           unset filename
128           # readthedocs.yaml
129           filename=".readthedocs.yaml"
130           if [ ! -f $filename ]; then
131             log_failure_msg "FAIL $filename missing. Please add it or remove the full docs directory."
132             exitstatus="1"
133           else
134             log_success_msg "INFO $filename found."
135             # obsolete parameter: (build:) image: latest
136             buildimage=$(grep '^[ \t]*image:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
137             if [[ $buildimage == *"latest"* ]]; then
138               log_failure_msg "FAIL Setting '(build: image:) latest' found in $filename. Please remove it."
139               exitstatus="1"
140             else
141               log_success_msg "INFO Setting '(build: image:) latest' not found in $filename."
142             fi
143             unset buildimage
144             # obsolete parameter: (python:) version: 3.7
145             pythonversion=$(grep '^[ \t]*version:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
146             if [[ $pythonversion == *"3.7"* ]]; then
147               log_failure_msg "FAIL Setting '(python:) version: 3.7' found in $filename. Please remove it."
148               exitstatus="1"
149             else
150               log_success_msg "INFO Setting '(python:) version: 3.7' not found in $filename."
151             fi
152             unset pythonversion
153             # obsolete parameter: submodules:
154             submodules=$(grep '^[ \t]*submodules:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
155             if [[ $submodules == *"submodules:"* ]]; then
156               log_failure_msg "FAIL Setting 'submodules:' found in $filename. Please remove it."
157               exitstatus="1"
158             else
159               log_success_msg "INFO Setting 'submodules:' not found in $filename."
160             fi
161             unset submodules
162             # required parameter: (build:) os:
163             buildos=$(grep '^[ \t]*os:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
164             if [[ ! $buildos == *"ubuntu-20.04"* ]]; then
165               log_failure_msg "FAIL Setting '(build:) os: ubuntu-20.04' missing in $filename. Please add it."
166               exitstatus="1"
167             else
168               log_success_msg "INFO Setting '(build:) os: ubuntu-20.04' found in $filename."
169             fi
170             unset buildos
171             # required parameter: (build: tools:) python
172             buildtoolspython=$(grep '^[ \t]*python:' $filename | sed -e 's/^[ \t]*//' | sed -e 's/;$//');
173             if [[ ! $buildtoolspython == *\"3.8\"* ]]; then
174               log_failure_msg "FAIL Setting '(build: tools:) python: \"3.8\"' missing in $filename. Please add it."
175               exitstatus="1"
176             else
177               log_success_msg "INFO Setting '(build: tools:) python: \"3.8\"' found in $filename."
178             fi
179             unset buildtoolspython
180           fi
181           unset filename
182           # message, end
183           if [ "$exitstatus" = "0" ]; then
184             if [ "$warning" = "0" ]; then
185               log_success_msg "INFO Congratulations! No documentation problem(s) detected."
186             else
187               log_warning_msg "WARN No major documentation problem(s) detected but there are warnings!"
188             fi
189           else
190             if [ ! "$warning" = "0" ]; then
191               log_warning_msg "WARN Please check the detected documentation warning(s)!"
192             fi
193             log_failure_msg "FAIL Please fix the detected documentation problem(s)!"
194           fi
195           exit $exitstatus
196       # yamllint enable
197
198 - job-template:
199     name: doc-rules
200     node: ubuntu1804-docker-8c-8g
201     triggers:
202       - doc-rules-patchset-created
203     scm:
204       - doc-scm:
205           ref: $GERRIT_REFSPEC
206           project: $GERRIT_PROJECT
207     builders:
208       - doc-rules
209
210 - project:
211     name: "doc-rules"
212     jobs:
213       - "doc-rules"