Update global-jjb to v0.51.1
[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/ta-rpm-deploy.sh
205       - shell: !include-raw:
206           - ../../global-jjb/shell/logs-clear-credentials.sh
207
208 - builder:
209     name: ta-lf-infra-ship-isos
210     builders:
211       # Ensure no pre-existing .netrc files are overriding logs config
212       - lf-provide-maven-settings-cleanup
213       - config-file-provider:
214           files:
215             - file-id: 'ta-settings'
216               variable: 'SETTINGS_FILE'
217       - lf-infra-create-netrc:
218           server-id: images-snapshots
219       - shell: !include-raw:
220           # Ensure python-tools are installed in case job template does not
221           # call the lf-infra-pre-build macro.
222           - ../../global-jjb/shell/python-tools-install.sh
223           - ../shell/ta-iso-deploy.sh
224       - shell: !include-raw:
225           - ../../global-jjb/shell/logs-clear-credentials.sh
226
227 - builder:
228     name: ta-builder-job-verify
229     builders:
230         - ta-builder-scm:
231               git-url: '{git-url}'
232               project: 'ta/manifest'
233               ref: '$SCM_REFSPEC_MANIFEST'
234         - ta-builder-scm:
235               git-url: '{git-url}'
236               project: 'ta/build-tools'
237               ref: '$SCM_REFSPEC_BUILD_TOOLS'
238         - ta-builder-scm:
239               git-url: '{git-url}'
240               project: 'ta/rpmbuilder'
241               ref: '$SCM_REFSPEC_RPMBUILDER'
242         - ta-builder-tox
243         - ta-builder-rpm:
244               project-to-build: '$GERRIT_PROJECT'
245
246 - builder:
247     name: ta-builder-job-verify-ta/rpmbuilder
248     builders:
249         - ta-builder-scm:
250               git-url: '{git-url}'
251               project: 'ta/manifest'
252               ref: '$SCM_REFSPEC_MANIFEST'
253         - ta-builder-scm:
254               git-url: '{git-url}'
255               project: 'ta/build-tools'
256               ref: '$SCM_REFSPEC_BUILD_TOOLS'
257         - ta-builder-scm:
258               git-url: '{git-url}'
259               project: '$SCM_PROJECT_TO_BUILD'
260               ref: '$SCM_PROJECT_TO_BUILD_REFSPEC'
261         - ta-builder-tox
262         - ta-builder-rpm:
263               # Just package some random project to verify "rpmbuilder" changes
264               project-to-build: '$SCM_PROJECT_TO_BUILD'
265
266 - builder:
267     name: ta-builder-job-merge
268     builders:
269         - ta-builder-scm:
270               git-url: '{git-url}'
271               project: 'ta/manifest'
272               ref: '$SCM_REFSPEC_MANIFEST'
273         - ta-builder-scm:
274               git-url: '{git-url}'
275               project: 'ta/build-tools'
276               ref: '$SCM_REFSPEC_BUILD_TOOLS'
277         - ta-builder-scm:
278               git-url: '{git-url}'
279               project: 'ta/rpmbuilder'
280               ref: '$SCM_REFSPEC_RPMBUILDER'
281         - ta-builder-rpm:
282               project-to-build: '$GERRIT_PROJECT'
283         - ta-lf-infra-ship-rpms
284
285 - builder:
286     name: ta-builder-install-docker
287     builders:
288       - shell: |2-
289           #!/bin/bash -ex
290           if apt --version 2>1 >/dev/null; then
291               if ! docker --version 2>1 >/dev/null; then
292                   sudo apt update
293                   sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
294                   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
295                   sudo add-apt-repository -y "deb http://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
296                   sudo apt update
297                   sudo apt install -y docker-ce
298               fi
299           else
300               sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
301               sudo yum -y install docker-ce docker-ce-cli containerd.io
302           fi
303           sudo mkdir -p /etc/docker/
304           echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
305           sudo systemctl start docker
306           # Ugly hack to make docker usable for non-root
307           # (adding to the group would require re-login)
308           sudo chmod 777 /var/run/docker.sock
309
310 - builder:
311     name: ta-builder-install-build-tools
312     builders:
313       - shell: |2-
314           #!/bin/bash -ex
315           if apt --version 2>1 >/dev/null; then
316               if ! createrepo --version 2>1 >/dev/null; then
317                   sudo apt update
318                   sudo apt install -y createrepo libguestfs-tools jq
319               fi
320           else
321               sudo yum -y install createrepo libguestfs-tools-c jq
322           fi
323           sudo systemctl start libvirtd
324           systemctl status libvirtd
325
326 ###########
327 # TRIGGER #
328 ###########
329
330 - trigger:
331     name: ta-trigger-job-verify
332     triggers:
333       - gerrit:
334           server-name: '{gerrit-server-name}'
335           trigger-on:
336             - patchset-created-event:
337                 exclude-drafts: 'false'
338                 exclude-trivial-rebase: 'false'
339                 exclude-no-code-change: 'false'
340             - draft-published-event
341             - comment-added-contains-event:
342                 comment-contains-value: 'recheck'
343             - comment-added-contains-event:
344                 comment-contains-value: 'reverify'
345           projects:
346             - project-compare-type: 'ANT'
347               project-pattern: '{project}'
348               branches:
349                 - branch-compare-type: 'ANT'
350                   branch-pattern: '**/{branch}'
351           readable-message: true
352           skip-vote:
353             successful: '{gerrit-skip-vote}'
354             failed: '{gerrit-skip-vote}'
355             unstable: '{gerrit-skip-vote}'
356             notbuilt: '{gerrit-skip-vote}'
357
358 - trigger:
359     name: ta-trigger-job-merge
360     triggers:
361       - gerrit:
362           server-name: '{gerrit-server-name}'
363           trigger-on:
364             # Not sure if it would be better to use "change-merged" here and just clone the master
365             # branch. With the current approach the SCM can be identical in verify and merge jobs.
366             - ref-updated-event
367             - comment-added-contains-event:
368                 comment-contains-value: 'remerge'
369           projects:
370             - project-compare-type: 'ANT'
371               project-pattern: '{project}'
372               branches:
373                 - branch-compare-type: 'ANT'
374                   branch-pattern: '**/{branch}'
375           readable-message: true
376
377 #############
378 # PUBLISHER #
379 #############
380
381 - publisher:
382     name: ta-publisher-job-verify
383     publishers:
384       - lf-infra-publish
385
386 - publisher:
387     name: ta-publisher-job-merge
388     publishers:
389       - ta-publisher-ci-build:
390           arch: '{arch}'
391       - trigger-parameterized-builds:
392           - project: 'ta-ci-build-{arch}'
393             condition: UNSTABLE_OR_BETTER
394             trigger-with-no-params: true
395
396 - publisher:
397     name: ta-publisher-ci-build
398     publishers:
399       - lf-infra-publish
400       - email:
401           recipients: !j2: |
402             {%- if 'arm64' in arch -%}
403             armband@enea.com
404             {%- endif -%}