Merge "Move iec jenkins job in jjb/akraino-templates"
[ci-management.git] / jjb / akraino-templates / akraino-ta-common-macros.yaml
1 ---
2 ##############
3 # PARAMETERS #
4 ##############
5 - parameter:
6     name: ta-parameters-manifest
7     parameters:
8      - string:
9         default: refs/heads/master
10         description: ''
11         name: SCM_REFSPEC_MANIFEST
12         trim: 'false'
13
14 - parameter:
15     name: ta-parameters-build-tools
16     parameters:
17      - string:
18         default: refs/heads/master
19         description: ''
20         name: SCM_REFSPEC_BUILD_TOOLS
21         trim: 'false'
22
23 - parameter:
24     name: ta-parameters-rpmbuilder
25     parameters:
26      - string:
27         default: refs/heads/master
28         description: ''
29         name: SCM_REFSPEC_RPMBUILDER
30         trim: 'false'
31
32 - parameter:
33     name: ta-parameters-ci
34     parameters:
35      - ta-parameters-manifest
36      - ta-parameters-build-tools
37      - ta-parameters-rpmbuilder
38
39 - parameter:
40     name: ta-parameters-ci-ta/rpmbuilder
41     parameters:
42      - ta-parameters-manifest
43      - ta-parameters-build-tools
44      - string:
45         default: ta/yarf
46         description: ''
47         name: SCM_PROJECT_TO_BUILD
48         trim: 'false'
49      - string:
50         default: refs/heads/master
51         description: ''
52         name: SCM_PROJECT_TO_BUILD_REFSPEC
53         trim: 'false'
54
55 #######
56 # SCM #
57 #######
58 - scm:
59     # Enhanced version of the global-jjb
60     name: ta-lf-infra-gerrit-scm
61     scm:
62       - git:
63           credentials-id: '{jenkins-ssh-credential}'
64           url: '{git-url}'
65           refspec: '{refspec}'
66           branches:
67             - 'refs/heads/{branch}'
68           skip-tag: true
69           wipe-workspace: true
70           submodule:
71             recursive: '{submodule-recursive}'
72             timeout: '{submodule-timeout}'
73           choosing-strategy: '{choosing-strategy}'
74           basedir: '{basedir}'
75
76 - scm:
77     name: ta-lf-infra-gerrit-scm-merge
78     scm:
79       - ta-lf-infra-gerrit-scm:
80           jenkins-ssh-credential: '{jenkins-ssh-credential}'
81           git-url: '{git-url}'
82           refspec: '{refspec}'
83           branch: '{branch}'
84           submodule-recursive: '{submodule-recursive}'
85           submodule-timeout: '{submodule-timeout}'
86           basedir: '{basedir}'
87           choosing-strategy: default
88
89 - scm:
90     name: ta-lf-infra-gerrit-scm-verify
91     scm:
92       - ta-lf-infra-gerrit-scm:
93           jenkins-ssh-credential: '{jenkins-ssh-credential}'
94           git-url: '{git-url}'
95           refspec: '{refspec}'
96           branch: '{branch}'
97           submodule-recursive: '{submodule-recursive}'
98           submodule-timeout: '{submodule-timeout}'
99           basedir: '{basedir}'
100           choosing-strategy: gerrit
101
102 ###########
103 # BUILDER #
104 ###########
105 - builder:
106     name: lf-display-node-uuid
107     builders:
108         - shell: |2-
109             echo "---> Node UUID:"
110             curl -s http://169.254.169.254/openstack/latest/meta_data.json | python -c 'import sys, json; data = json.load(sys.stdin); print(data["uuid"])' || true
111
112 - builder:
113     name: ta-builder-tox
114     builders:
115         - shell: |2-
116             #!/bin/bash -ex
117             source ~/lf-env.sh
118
119             lf-activate-venv tox
120             tox --version
121             for f in $(find $GERRIT_PROJECT -name tox.ini); do
122                 pushd $(dirname $f)
123                 tox
124                 popd
125             done
126
127 - builder:
128     name: ta-builder-rpm
129     builders:
130         - shell: |2-
131             #!/bin/bash -ex
132             #  Skip RPM build in case no *.spec file is found within the {project-to-build}
133             if [ -n "$(find {project-to-build} -name '*.spec')" ]
134             then
135                 if apt --version 2>1 >/dev/null; then
136                     # We need a specific version of mock (1.4.14) and devtools
137                     # not available in Ubuntu/Debian repos, so fetch them from RHEL mirrors
138                     if [ "$(mock --version 2>/dev/null)" != '1.4.14' ]; then
139                         sudo groupadd mock || true
140                         sudo usermod -aG mock $USER
141                         sudo apt update
142                         # Explicitly install mock dependencies
143                         sudo apt install -y createrepo alien systemd-container python-pip \
144                                             python-decoratortools yum-utils usermode pigz
145                         wget http://vault.centos.org/centos/7.6.1810/os/x86_64/Packages/rpmdevtools-8.3-5.el7.noarch.rpm \
146                              https://kojipkgs.fedoraproject.org/packages/mock/1.4.14/2.el7/noarch/mock-1.4.14-2.el7.noarch.rpm
147                         sudo alien -d *.rpm
148                         sudo dpkg -i *.deb
149                         rm -rf *.rpm *.deb
150                         # RHEL tools hardcode the full path for certain distro tools
151                         sudo ln -sf /bin/tar /usr/bin/gtar
152                         sudo ln -sf /bin/machinectl /bin/df /usr/bin/
153                         # Some mock dependencies are only available via pip
154                         sudo pip install distro pyroute2
155                     fi
156                 else
157                     sudo yum install -y createrepo
158                 fi
159                 ta/build-tools/build_rpms.sh \
160                  -m ta/manifest \
161                  -r ta/rpmbuilder \
162                  -w work \
163                  {project-to-build}
164                 find work/
165             fi
166
167 - builder:
168     name: ta-builder-scm
169     builders:
170         - shell: |2-
171             #!/bin/bash -ex
172             rm -rf {project}
173             git clone {git-url}/{project} {project}
174             pushd {project}
175             if echo {ref} | grep -q "refs/"; then
176                 git fetch origin {ref}
177                 git checkout FETCH_HEAD
178             else
179                 git checkout {ref}
180             fi
181             popd
182
183 - builder:
184     name: ta-lf-infra-ship-rpms
185     builders:
186       # Ensure no pre-existing .netrc files are overriding logs config
187       - lf-provide-maven-settings-cleanup
188       - config-file-provider:
189           files:
190             - file-id: 'ta-settings'
191               variable: 'SETTINGS_FILE'
192       - inject:
193           properties-content: 'ALT_NEXUS_URL=https://nexus3.akraino.org'
194       - lf-infra-create-netrc:
195           server-id: rpm.snapshots
196       - inject:
197           properties-content: |
198             ALT_NEXUS_URL=
199             SERVER_ID=
200       - shell: !include-raw:
201           # Ensure python-tools are installed in case job template does not
202           # call the lf-infra-pre-build macro.
203           - ../../global-jjb/shell/python-tools-install.sh
204       - shell: !include-raw:
205           - ../shell/ta-rpm-deploy.sh
206       - shell: !include-raw:
207           - ../../global-jjb/shell/logs-clear-credentials.sh
208
209 - builder:
210     name: ta-lf-infra-ship-isos
211     builders:
212       # Ensure no pre-existing .netrc files are overriding logs config
213       - lf-provide-maven-settings-cleanup
214       - config-file-provider:
215           files:
216             - file-id: 'ta-settings'
217               variable: 'SETTINGS_FILE'
218       - lf-infra-create-netrc:
219           server-id: images-snapshots
220       - shell: !include-raw:
221           # Ensure python-tools are installed in case job template does not
222           # call the lf-infra-pre-build macro.
223           - ../../global-jjb/shell/python-tools-install.sh
224       - shell: !include-raw:
225           - ../shell/ta-iso-deploy.sh
226       - shell: !include-raw:
227           - ../../global-jjb/shell/logs-clear-credentials.sh
228
229 - builder:
230     name: ta-builder-job-verify
231     builders:
232         - ta-builder-scm:
233               git-url: '{git-url}'
234               project: 'ta/manifest'
235               ref: '$SCM_REFSPEC_MANIFEST'
236         - ta-builder-scm:
237               git-url: '{git-url}'
238               project: 'ta/build-tools'
239               ref: '$SCM_REFSPEC_BUILD_TOOLS'
240         - ta-builder-scm:
241               git-url: '{git-url}'
242               project: 'ta/rpmbuilder'
243               ref: '$SCM_REFSPEC_RPMBUILDER'
244         - ta-builder-tox
245         - ta-builder-rpm:
246               project-to-build: '$GERRIT_PROJECT'
247
248 - builder:
249     name: ta-builder-job-verify-ta/rpmbuilder
250     builders:
251         - ta-builder-scm:
252               git-url: '{git-url}'
253               project: 'ta/manifest'
254               ref: '$SCM_REFSPEC_MANIFEST'
255         - ta-builder-scm:
256               git-url: '{git-url}'
257               project: 'ta/build-tools'
258               ref: '$SCM_REFSPEC_BUILD_TOOLS'
259         - ta-builder-scm:
260               git-url: '{git-url}'
261               project: '$SCM_PROJECT_TO_BUILD'
262               ref: '$SCM_PROJECT_TO_BUILD_REFSPEC'
263         - ta-builder-tox
264         - ta-builder-rpm:
265               # Just package some random project to verify "rpmbuilder" changes
266               project-to-build: '$SCM_PROJECT_TO_BUILD'
267
268 - builder:
269     name: ta-builder-job-merge
270     builders:
271         - ta-builder-scm:
272               git-url: '{git-url}'
273               project: 'ta/manifest'
274               ref: '$SCM_REFSPEC_MANIFEST'
275         - ta-builder-scm:
276               git-url: '{git-url}'
277               project: 'ta/build-tools'
278               ref: '$SCM_REFSPEC_BUILD_TOOLS'
279         - ta-builder-scm:
280               git-url: '{git-url}'
281               project: 'ta/rpmbuilder'
282               ref: '$SCM_REFSPEC_RPMBUILDER'
283         - ta-builder-rpm:
284               project-to-build: '$GERRIT_PROJECT'
285         - ta-lf-infra-ship-rpms
286
287 - builder:
288     name: ta-builder-install-docker
289     builders:
290       - shell: |2-
291           #!/bin/bash -ex
292           if apt --version 2>1 >/dev/null; then
293               if ! docker --version 2>1 >/dev/null; then
294                   sudo apt update
295                   sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
296                   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
297                   sudo add-apt-repository -y "deb http://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
298                   sudo apt update
299                   sudo apt install -y docker-ce
300               fi
301           else
302               sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
303               sudo yum -y install docker-ce docker-ce-cli containerd.io
304           fi
305           sudo mkdir -p /etc/docker/
306           echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
307           sudo systemctl start docker
308           # Ugly hack to make docker usable for non-root
309           # (adding to the group would require re-login)
310           sudo chmod 777 /var/run/docker.sock
311
312 - builder:
313     name: ta-builder-install-build-tools
314     builders:
315       - shell: |2-
316           #!/bin/bash -ex
317           if apt --version 2>1 >/dev/null; then
318               if ! createrepo --version 2>1 >/dev/null; then
319                   sudo apt update
320                   sudo apt install -y createrepo libguestfs-tools jq
321               fi
322           else
323               sudo yum -y install createrepo libguestfs-tools-c jq
324           fi
325           sudo systemctl start libvirtd
326           systemctl status libvirtd
327
328 ###########
329 # TRIGGER #
330 ###########
331
332 - trigger:
333     name: ta-trigger-job-verify
334     triggers:
335       - gerrit:
336           server-name: '{gerrit-server-name}'
337           trigger-on:
338             - patchset-created-event:
339                 exclude-drafts: 'false'
340                 exclude-trivial-rebase: 'false'
341                 exclude-no-code-change: 'false'
342             - draft-published-event
343             - comment-added-contains-event:
344                 comment-contains-value: 'recheck'
345             - comment-added-contains-event:
346                 comment-contains-value: 'reverify'
347           projects:
348             - project-compare-type: 'ANT'
349               project-pattern: '{project}'
350               branches:
351                 - branch-compare-type: 'ANT'
352                   branch-pattern: '**/{branch}'
353           readable-message: true
354           skip-vote:
355             successful: '{gerrit-skip-vote}'
356             failed: '{gerrit-skip-vote}'
357             unstable: '{gerrit-skip-vote}'
358             notbuilt: '{gerrit-skip-vote}'
359
360 - trigger:
361     name: ta-trigger-job-merge
362     triggers:
363       - gerrit:
364           server-name: '{gerrit-server-name}'
365           trigger-on:
366             # Not sure if it would be better to use "change-merged" here and just clone the master
367             # branch. With the current approach the SCM can be identical in verify and merge jobs.
368             - ref-updated-event
369             - comment-added-contains-event:
370                 comment-contains-value: 'remerge'
371           projects:
372             - project-compare-type: 'ANT'
373               project-pattern: '{project}'
374               branches:
375                 - branch-compare-type: 'ANT'
376                   branch-pattern: '**/{branch}'
377           readable-message: true
378
379 #############
380 # PUBLISHER #
381 #############
382
383 - publisher:
384     name: ta-publisher-job-verify
385     publishers:
386       - lf-infra-publish
387
388 - publisher:
389     name: ta-publisher-job-merge
390     publishers:
391       - ta-publisher-ci-build:
392           arch: '{arch}'
393       - trigger-parameterized-builds:
394           - project: 'ta-ci-build-{arch}'
395             condition: UNSTABLE_OR_BETTER
396             trigger-with-no-params: true
397
398 - publisher:
399     name: ta-publisher-ci-build
400     publishers:
401       - lf-infra-publish
402       - email:
403           recipients: !j2: |
404             {%- if 'arm64' in arch -%}
405             armband@enea.com
406             {%- endif -%}