Add CI job templates for icn/daaas
[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         - lf-pip-install:
116             pip-packages: tox
117         - shell: |2-
118             #!/bin/bash -ex
119             source /tmp/v/tox/bin/activate
120             for f in $(find $GERRIT_PROJECT -name tox.ini); do
121                 pushd $(dirname $f)
122                 tox
123                 popd
124             done
125
126 - builder:
127     name: ta-builder-rpm
128     builders:
129         - shell: |2-
130             #!/bin/bash -ex
131             #  Skip RPM build in case no *.spec file is found within the {project-to-build}
132             if [ -n "$(find {project-to-build} -name '*.spec')" ]
133             then
134                 if apt --version 2>1 >/dev/null; then
135                     # We need a specific version of mock (1.4.14) and devtools
136                     # not available in Ubuntu/Debian repos, so fetch them from RHEL mirrors
137                     if [ "$(mock --version 2>/dev/null)" != '1.4.14' ]; then
138                         sudo groupadd mock || true
139                         sudo usermod -aG mock $USER
140                         sudo apt update
141                         # Explicitly install mock dependencies
142                         sudo apt install -y createrepo alien systemd-container python-pip \
143                                             python-decoratortools yum-utils usermode pigz
144                         wget http://vault.centos.org/centos/7.6.1810/os/x86_64/Packages/rpmdevtools-8.3-5.el7.noarch.rpm \
145                              https://kojipkgs.fedoraproject.org/packages/mock/1.4.14/2.el7/noarch/mock-1.4.14-2.el7.noarch.rpm
146                         sudo alien -d *.rpm
147                         sudo dpkg -i *.deb
148                         rm -rf *.rpm *.deb
149                         # RHEL tools hardcode the full path for certain distro tools
150                         sudo ln -sf /bin/tar /usr/bin/gtar
151                         sudo ln -sf /bin/machinectl /bin/df /usr/bin/
152                         # Some mock dependencies are only available via pip
153                         sudo pip install distro pyroute2
154                     fi
155                 else
156                     sudo yum install -y createrepo
157                 fi
158                 ta/build-tools/build_rpms.sh \
159                  -m ta/manifest \
160                  -r ta/rpmbuilder \
161                  -w work \
162                  {project-to-build}
163                 find work/
164             fi
165
166 - builder:
167     name: ta-builder-scm
168     builders:
169         - shell: |2-
170             #!/bin/bash -ex
171             rm -rf {project}
172             git clone {git-url}/{project} {project}
173             pushd {project}
174             if echo {ref} | grep -q "refs/"; then
175                 git fetch origin {ref}
176                 git checkout FETCH_HEAD
177             else
178                 git checkout {ref}
179             fi
180             popd
181
182 - builder:
183     name: ta-lf-infra-ship-rpms
184     builders:
185       # Ensure no pre-existing .netrc files are overriding logs config
186       - lf-provide-maven-settings-cleanup
187       - config-file-provider:
188           files:
189             - file-id: 'ta-settings'
190               variable: 'SETTINGS_FILE'
191       - inject:
192           properties-content: 'ALT_NEXUS_URL=https://nexus3.akraino.org'
193       - lf-infra-create-netrc:
194           server-id: rpm.snapshots
195       - inject:
196           properties-content: |
197             ALT_NEXUS_URL=
198             SERVER_ID=
199       - shell: !include-raw:
200           # Ensure python-tools are installed in case job template does not
201           # call the lf-infra-pre-build macro.
202           - ../../global-jjb/shell/python-tools-install.sh
203           - ../shell/ta-rpm-deploy.sh
204       - shell: !include-raw:
205           - ../../global-jjb/shell/logs-clear-credentials.sh
206
207 - builder:
208     name: ta-lf-infra-ship-isos
209     builders:
210       # Ensure no pre-existing .netrc files are overriding logs config
211       - lf-provide-maven-settings-cleanup
212       - config-file-provider:
213           files:
214             - file-id: 'ta-settings'
215               variable: 'SETTINGS_FILE'
216       - lf-infra-create-netrc:
217           server-id: images-snapshots
218       - shell: !include-raw:
219           # Ensure python-tools are installed in case job template does not
220           # call the lf-infra-pre-build macro.
221           - ../../global-jjb/shell/python-tools-install.sh
222           - ../shell/ta-iso-deploy.sh
223       - shell: !include-raw:
224           - ../../global-jjb/shell/logs-clear-credentials.sh
225
226 - builder:
227     name: ta-builder-job-verify
228     builders:
229         - ta-builder-scm:
230               git-url: '{git-url}'
231               project: 'ta/manifest'
232               ref: '$SCM_REFSPEC_MANIFEST'
233         - ta-builder-scm:
234               git-url: '{git-url}'
235               project: 'ta/build-tools'
236               ref: '$SCM_REFSPEC_BUILD_TOOLS'
237         - ta-builder-scm:
238               git-url: '{git-url}'
239               project: 'ta/rpmbuilder'
240               ref: '$SCM_REFSPEC_RPMBUILDER'
241         - ta-builder-tox
242         - ta-builder-rpm:
243               project-to-build: '$GERRIT_PROJECT'
244
245 - builder:
246     name: ta-builder-job-verify-ta/rpmbuilder
247     builders:
248         - ta-builder-scm:
249               git-url: '{git-url}'
250               project: 'ta/manifest'
251               ref: '$SCM_REFSPEC_MANIFEST'
252         - ta-builder-scm:
253               git-url: '{git-url}'
254               project: 'ta/build-tools'
255               ref: '$SCM_REFSPEC_BUILD_TOOLS'
256         - ta-builder-scm:
257               git-url: '{git-url}'
258               project: '$SCM_PROJECT_TO_BUILD'
259               ref: '$SCM_PROJECT_TO_BUILD_REFSPEC'
260         - ta-builder-tox
261         - ta-builder-rpm:
262               # Just package some random project to verify "rpmbuilder" changes
263               project-to-build: '$SCM_PROJECT_TO_BUILD'
264
265 - builder:
266     name: ta-builder-job-merge
267     builders:
268         - ta-builder-scm:
269               git-url: '{git-url}'
270               project: 'ta/manifest'
271               ref: '$SCM_REFSPEC_MANIFEST'
272         - ta-builder-scm:
273               git-url: '{git-url}'
274               project: 'ta/build-tools'
275               ref: '$SCM_REFSPEC_BUILD_TOOLS'
276         - ta-builder-scm:
277               git-url: '{git-url}'
278               project: 'ta/rpmbuilder'
279               ref: '$SCM_REFSPEC_RPMBUILDER'
280         - ta-builder-rpm:
281               project-to-build: '$GERRIT_PROJECT'
282         - ta-lf-infra-ship-rpms
283
284 - builder:
285     name: ta-builder-install-docker
286     builders:
287       - shell: |2-
288           #!/bin/bash -ex
289           if apt --version 2>1 >/dev/null; then
290               if ! docker --version 2>1 >/dev/null; then
291                   sudo apt update
292                   sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
293                   curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
294                   sudo add-apt-repository -y "deb http://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
295                   sudo apt update
296                   sudo apt install -y docker-ce
297               fi
298           else
299               sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
300               sudo yum -y install docker-ce docker-ce-cli containerd.io
301           fi
302           sudo mkdir -p /etc/docker/
303           echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
304           sudo systemctl start docker
305           # Ugly hack to make docker usable for non-root
306           # (adding to the group would require re-login)
307           sudo chmod 777 /var/run/docker.sock
308
309 - builder:
310     name: ta-builder-install-build-tools
311     builders:
312       - shell: |2-
313           #!/bin/bash -ex
314           if apt --version 2>1 >/dev/null; then
315               if ! createrepo --version 2>1 >/dev/null; then
316                   sudo apt update
317                   sudo apt install -y createrepo libguestfs-tools jq
318               fi
319           else
320               sudo yum -y install createrepo libguestfs-tools-c jq
321           fi
322           sudo systemctl start libvirtd
323           systemctl status libvirtd
324
325 ###########
326 # TRIGGER #
327 ###########
328
329 - trigger:
330     name: ta-trigger-job-verify
331     triggers:
332       - gerrit:
333           server-name: '{gerrit-server-name}'
334           trigger-on:
335             - patchset-created-event:
336                 exclude-drafts: 'false'
337                 exclude-trivial-rebase: 'false'
338                 exclude-no-code-change: 'false'
339             - draft-published-event
340             - comment-added-contains-event:
341                 comment-contains-value: 'recheck'
342             - comment-added-contains-event:
343                 comment-contains-value: 'reverify'
344           projects:
345             - project-compare-type: 'ANT'
346               project-pattern: '{project}'
347               branches:
348                 - branch-compare-type: 'ANT'
349                   branch-pattern: '**/{branch}'
350           readable-message: true
351           skip-vote:
352             successful: '{gerrit-skip-vote}'
353             failed: '{gerrit-skip-vote}'
354             unstable: '{gerrit-skip-vote}'
355             notbuilt: '{gerrit-skip-vote}'
356
357 - trigger:
358     name: ta-trigger-job-merge
359     triggers:
360       - gerrit:
361           server-name: '{gerrit-server-name}'
362           trigger-on:
363             # Not sure if it would be better to use "change-merged" here and just clone the master
364             # branch. With the current approach the SCM can be identical in verify and merge jobs.
365             - ref-updated-event
366             - comment-added-contains-event:
367                 comment-contains-value: 'remerge'
368           projects:
369             - project-compare-type: 'ANT'
370               project-pattern: '{project}'
371               branches:
372                 - branch-compare-type: 'ANT'
373                   branch-pattern: '**/{branch}'
374           readable-message: true
375
376 #############
377 # PUBLISHER #
378 #############
379
380 - publisher:
381     name: ta-publisher-job-verify
382     publishers:
383       - lf-infra-publish
384
385 - publisher:
386     name: ta-publisher-job-merge
387     publishers:
388       - lf-infra-publish
389       - trigger-parameterized-builds:
390           - project: 'ta-ci-build-{arch}'
391             condition: UNSTABLE_OR_BETTER
392             trigger-with-no-params: true