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