Extract logic for when CI jobs execute.
[alexxy/gromacs.git] / admin / gitlab-ci / lint.gitlab-ci.yml
1 # Repository cleanliness. Source tidiness, linting, and policy compliance.
2
3 clang-tidy:configure:
4   extends:
5     - .gromacs:base:configure
6     - .use-clang7
7     - .rules:not-for-release
8   needs:
9     - job: simple-build
10       artifacts: false
11   variables:
12     BUILD_DIR: build-clang-tidy
13     CMAKE_EXTRA_OPTIONS: -DCLANG_TIDY=clang-tidy-$COMPILER_MAJOR_VERSION -DGMX_CLANG_TIDY=ON -DGMX_COMPILER_WARNINGS=ON
14     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
15     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
16   # TODO: Enable GMX_PYTHON_PACKAGE for clang-tidy when dependencies are in Docker image.
17
18 clang-tidy:build:
19   extends:
20     - .gromacs:base:build
21     - .use-ccache
22     - .variables:default
23     - .use-clang7
24     - .rules:not-for-release
25   stage: source-check
26   needs:
27     - job: simple-build
28       artifacts: false
29     - job: clang-tidy:configure
30       artifacts: true
31   variables:
32     BUILD_DIR: build-clang-tidy
33     EXTRA_INSTALLS: clang-tidy-$COMPILER_MAJOR_VERSION
34
35 clang-format:
36   extends:
37     - .gromacs:base:build
38     - .variables:default
39     - .use-clang7
40     - .rules:not-for-release
41   cache: {}
42   stage: source-check
43   when: always
44   needs:
45     - job: simple-build
46       artifacts: false
47   variables:
48     KUBERNETES_CPU_LIMIT: 1
49     KUBERNETES_CPU_REQUEST: 1
50     KUBERNETES_MEMORY_LIMIT: 2Gi
51     EXTRA_INSTALLS: clang-format-$COMPILER_MAJOR_VERSION
52   script:
53     - export CLANG_FORMAT=clang-format-$COMPILER_MAJOR_VERSION
54     - admin/clang-format.sh check --rev=HEAD^ --warnings=clang-format.log
55     - grep -iq "needs formatting" clang-format.log | tee formatting.txt || true
56     - if [ -s formatting.txt ] ; then echo "clang-format.sh found issues"; exit 1; fi
57   artifacts:
58     when: on_failure
59     paths:
60       - clang-format.log
61       - formatting.txt
62
63 copyright-check:
64   extends:
65     - .gromacs:base:build
66     - .variables:default
67     - .use-clang7
68     - .rules:not-for-release
69   cache: {}
70   stage: source-check
71   when: always
72   needs:
73     - job: simple-build
74       artifacts: false
75   variables:
76     KUBERNETES_CPU_LIMIT: 1
77     KUBERNETES_CPU_REQUEST: 1
78     KUBERNETES_MEMORY_LIMIT: 2Gi
79   script:
80     - admin/copyright.sh check --rev=HEAD^ --warnings=copyright.log
81     - grep -iq "copyright year" copyright.log | tee years.log || true
82     - grep -iq "copyright header" copyright.log | tee headers.log || true
83     - if [[ -s years.log || -s headers.log ]] ; then
84       echo "Copyright information needs updating" ;
85       exit 1 ;
86       fi
87   artifacts:
88     when: on_failure
89     paths:
90       - copyright.log
91       - years.log
92       - headers.log
93
94 check-source:
95   extends:
96     - .variables:default
97     - .docs:build
98     - .before_script:default
99     - .rules:not-for-release
100   cache: {}
101   stage: source-check
102   needs:
103     - job: simple-build
104       artifacts: false
105     - job: docs:build
106       artifacts: true
107   variables:
108     KUBERNETES_CPU_LIMIT: 1
109     KUBERNETES_CPU_REQUEST: 1
110     KUBERNETES_MEMORY_LIMIT: 2Gi
111     BUILD_DIR: build-docs
112   script:
113     - cd $BUILD_DIR
114     - cmake --build . --target check-source
115     - grep -qi "error" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee doxygenError.txt || true
116     - grep -qi "warning" docs/doxygen/doxygen*log docs/doxygen/check-source.log | tee -a doxygenError.txt || true
117     - if [ -s doxygenError.txt ] ; then echo "Found errors while running doxygen"; exit 1; fi
118   artifacts:
119     name: docs-artifacts-$CI_COMMIT_REF_SLUG
120     when: always
121     expire_in: 1 week
122     paths:
123       - $BUILD_DIR/docs/doxygen/doxygen-xml.log
124       - $BUILD_DIR/docs/doxygen/check-source.log
125
126 linkchecker:
127   extends:
128     - .webpage:build
129     - .rules:nightly-not-for-release
130   stage: nightly-build
131   dependencies:
132     - webpage:build
133   variables:
134     KUBERNETES_CPU_LIMIT: 1
135     KUBERNETES_CPU_REQUEST: 1
136     KUBERNETES_MEMORY_LIMIT: 2Gi
137     BUILD_DIR: build-docs
138   script:
139     - cd $BUILD_DIR
140     - linkchecker docs/html/index.html -f ../docs/linkcheckerrc -Fxml --ignore-url html-full
141       --ignore-url html-user --ignore-url html-lib --ignore-url .tar.gz --ignore-url _sources
142       -o xml
143   artifacts:
144     reports:
145       junit: $BUILD_DIR/linkchecker-out.xml