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