a0d578c57b50c4fcf03c0e92e187ca2bbb4083b1
[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               sudo chmod +r /boot/vmlinuz*
294               if ! docker --version 2>1 >/dev/null; then
295                   sudo apt update
296                   sudo apt install -y apt-transport-https ca-certificates curl software-properties-common rename
297                   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
298                   sudo add-apt-repository -y "deb http://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
299                   sudo apt update
300                   sudo apt install -y docker-ce
301               fi
302           else
303               sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
304               sudo yum -y install docker-ce docker-ce-cli containerd.io
305           fi
306           sudo mkdir -p /etc/docker/
307           echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
308           sudo systemctl start docker
309           # Ugly hack to make docker usable for non-root
310           # (adding to the group would require re-login)
311           sudo chmod 777 /var/run/docker.sock
312
313 - builder:
314     name: ta-builder-install-build-tools
315     builders:
316       - shell: |2-
317           #!/bin/bash -ex
318           if apt --version 2>1 >/dev/null; then
319               if ! createrepo --version 2>1 >/dev/null; then
320                   sudo apt update
321                   sudo apt install -y createrepo libguestfs-tools jq
322               fi
323           else
324               sudo yum -y install createrepo libguestfs-tools-c jq
325           fi
326           sudo systemctl start libvirtd
327           systemctl status libvirtd
328
329 ###########
330 # TRIGGER #
331 ###########
332
333 - trigger:
334     name: ta-trigger-job-verify
335     triggers:
336       - gerrit:
337           server-name: '{gerrit-server-name}'
338           trigger-on:
339             - patchset-created-event:
340                 exclude-drafts: 'false'
341                 exclude-trivial-rebase: 'false'
342                 exclude-no-code-change: 'false'
343             - draft-published-event
344             - comment-added-contains-event:
345                 comment-contains-value: 'recheck'
346             - comment-added-contains-event:
347                 comment-contains-value: 'reverify'
348           projects:
349             - project-compare-type: 'ANT'
350               project-pattern: '{project}'
351               branches:
352                 - branch-compare-type: 'ANT'
353                   branch-pattern: '**/{branch}'
354           readable-message: true
355           skip-vote:
356             successful: '{gerrit-skip-vote}'
357             failed: '{gerrit-skip-vote}'
358             unstable: '{gerrit-skip-vote}'
359             notbuilt: '{gerrit-skip-vote}'
360
361 - trigger:
362     name: ta-trigger-job-merge
363     triggers:
364       - gerrit:
365           server-name: '{gerrit-server-name}'
366           trigger-on:
367             # Not sure if it would be better to use "change-merged" here and just clone the master
368             # branch. With the current approach the SCM can be identical in verify and merge jobs.
369             - ref-updated-event
370             - comment-added-contains-event:
371                 comment-contains-value: 'remerge'
372           projects:
373             - project-compare-type: 'ANT'
374               project-pattern: '{project}'
375               branches:
376                 - branch-compare-type: 'ANT'
377                   branch-pattern: '**/{branch}'
378           readable-message: true
379
380 #############
381 # PUBLISHER #
382 #############
383
384 - publisher:
385     name: ta-publisher-job-verify
386     publishers:
387       - lf-infra-publish
388
389 - publisher:
390     name: ta-publisher-job-merge
391     publishers:
392       - ta-publisher-ci-build:
393           arch: '{arch}'
394       - trigger-parameterized-builds:
395           - project: 'ta-ci-build-{arch}'
396             condition: UNSTABLE_OR_BETTER
397             trigger-with-no-params: true
398
399 - publisher:
400     name: ta-publisher-ci-build
401     publishers:
402       - lf-infra-publish
403       - email:
404           recipients: !j2: |
405             {%- if 'arm64' in arch -%}
406             armband@enea.com
407             {%- endif -%}