~psivaa/uci-engine/ppa-int-prod

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
Diagram of different delivery cases
===================================

=============
Trunk landing
=============

**Case 1: delivering a ticket to trunk, (no pre-build package), success**

.. image:: images/diagram22.png

Note: in case of failure in any step, the Projects manager will comment on the MP and reject it.

If direct push to trunk -> only set an error on the component and don’t enable any other landing to it.

Note 2: while monitoring the ppa or tests, we still can get signal from Projects manager to Landing manager telling “ignore this arch” or “ignore this step”. This impacts the landing manager on its view and can unblock/bypass some steps

**Case 2: delivering a ticket to trunk, merge fail**

.. image:: images/diagram16.png

**Case 3: delivering a ticket to trunk, build fail**

.. image:: images/diagram15.png

**Case 4: delivering a ticket to trunk, tests fail**

.. image:: images/diagram17.png

**Case 5: delivering a ticket to trunk, blocked in UNAPPROVED/NEW**

.. image:: images/diagram18.png

**Case 6: delivering a ticket to trunk, blocked in proposed**

Note: the package is in the archive at this moment. There is no way to backout the change, so the merge needs to go in one way or another. As the component is blocked in proposed, there is no advantage of unblocking the queue as blocked in proposed means that further unrelated landings will still be blocked in proposed. It will continue blocking potentially other unrelated packages (if a transition happens). The only way then is to unblock the package.

*variant a: fix in the same component itself*

.. image:: images/diagram20.png

*variant b: fix outside the CI system: in another component or by a direct upload to that component*

.. image:: images/diagram23.png

Workflow I: direct MP: low-cost ticket
--------------------------------------

Reminder: this is the case of a quick bug fix/feature (< 2 commits). The main case is manual ticket landing.

**Workflow I A: direct commit to trunk or MP, all infos set**

.. image:: images/diagram11.png

**Workflow I B: direct MP, not following project rules (no commit message/enough approver**

.. image:: images/diagram12.png

Workflow II: opening a ticket
-----------------------------

Notes: ticket manager and landing manager shares most of their code. Only the order and some interface changes.

**Workflow II A: opening a ticket with multiple components**

.. image:: images/diagram.png

**Case 1**

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image
| Integration test runner->Landing manager: results
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->archive: copy source from ppa to archive and monitor the transition
| Note over Landing manager: Push merged branch
| Note right of Landing manager: MP is going to be closed
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update final status
| Note over Projects manager: ticket closed and removed from queue

**Case 2**

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package can't merge to trunk
| Branch/Source builder->Landing manager: report failure
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager:update failure
| Note over Projects manager: ticket removed from the queue

**Case 3**

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state and FAILED
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update failure
| Note over Projects manager: ticket removed from the queue

**Case 4**

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image and FAILED
| Integration test runner->Landing manager: failure results
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update failure
| Note over Projects manager: ticket removed from the queue

**Case 5**

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive
 
| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image
| Integration test runner->Landing manager: results
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->archive: copy source from ppa to archive and monitor the transition
| Landing manager->archive: seeing it's in NEW/UNAPPROVED
| Landing manager->Projects manager: update status
| Note left of Landing manager: no-one looking at the NEW/UNAPPROVED package
| Note over Landing manager: warning for anormal wait
| Landing manager->Projects manager: update arnomal wait
| Note left of Landing manager: if package rejected -> reject ticket
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update failure to land
| Note over Projects manager: ticket removed from the queue

**Case 6**

*variant a*

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image
| Integration test runner->Landing manager: results
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->archive: copy source from ppa to archive and monitor the transition
| Landing manager->Projects manager: update status
| Note over Landing manager: warning for anormal wait
| Landing manager->Projects manager: update arnomal wait
| Note right of Projects manager: ticket updated with a new commit in a MP or direct push to trunk
| Projects manager->Landing manager: new req. for component X
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image
| Integration test runner->Landing manager: results
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->archive: copy source from ppa to archive and monitor the transition
| Note over Landing manager: Push merged branch
| Note right of Landing manager: MP is going to be closed
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update final status
| Note over Projects manager: ticket closed and removed from queue

*variant b*

| Title: Trunk delivery
| participant Projects manager
| participant Landing manager
| participant Branch/Source builder
| participant ppa assigner
| participant ppa
| participant Integration test runner
| participant archive

| Note over Projects manager: new ticket in the queue
| Projects manager->Landing manager: Assign branch responsability get metadata (like integration tests to run)
| Landing manager->ppa assigner:ask for a clean available ppa
| ppa assigner->Landing manager: give ppa infos
| Landing manager->Branch/Source builder: send branch and ppa infos
| Note over Branch/Source builder: prepare source package
| Branch/Source builder->ppa:push source
| Branch/Source builder->Landing manager: give prepared branch and version infos
| Landing manager->Projects manager:update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->ppa: monitoring build state
| Note over Landing manager:report of successful build
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager->Integration test runner: test against latest proposed image
| Integration test runner->Landing manager: results
| Landing manager->Projects manager: update status
| Projects manager->Landing manager:get possible overrides
| Landing manager-->archive: copy source from ppa to archive and monitor the transition
| Landing manager->Projects manager: update status
| Note over Landing manager: warning for anormal wait
| Landing manager->Projects manager: update arnomal wait
| Note over Landing manager: migration finally happened  or newer | version in the archive (direct upload)
| Note over Landing manager: Push merged branch
| Note right of Landing manager: MP is going to be closed
| Landing manager->ppa assigner: deprovision that ppa
| Landing manager->Projects manager: update final status
| Note over Projects manager: ticket closed and removed from queue

**Workflow I A**

| Title: Direct MP or commit to trunk
| participant Projects manager
| participant Branch listener
| participant launchpad MP API
| participant launchpad bugs API

| Projects manager->Branch listener: Assign branch responsability and rules (like 2 approvers)

| Note left of Branch listener:CASE OF DIRECT PUSH TO TRUNK
| Branch listener->Branch listener: get infos from unreleased commit message, and eventual bug reports mentioned/attached
| Note left of Branch listener:CASE OF MP
| Branch listener->launchpad MP API: pool for existing top approved MP
| launchpad MP API->Branch listener: grab MP infos and possible attached bugs
| Note left of Branch listener:END CASES
| Branch listener->launchpad bugs API: grab bugs infos (like title)
| launchpad bugs API->Branch listener: get those infos
| Branch listener->Projects manager: open a new low-cost ticket on the component associated



**Workflow I B**

| Title: Direct failing MP to trunk
| participant Projects manager
| participant Branch listener
| participant launchpad MP API

| Projects manager->Branch listener: Assign branch responsability and rules (like 2 approvers)
| Branch listener->launchpad MP API: pool for existing top approved MP
| launchpad MP API->Branch listener: grab MP infos and possible attached bugs
| Note left of Branch listener: check that MP didn't follow the rules
| Branch listener->launchpad MP API:comment and set back to needs review


**Workflow II A**

| Title: Ticket handling
| participant Projects manager
| participant Branch listener
| participant ppa assigner
| participant Ticket manager
| participant Branch/Source builder (branch)
| participant Branch/Source builder (trunk + branch)
| participant ppa (branch)
| participant ppa (trunk + branch)
| participant Integration test runner

| Note over Projects manager: new ticket opened, specifying components
| Projects manager->Ticket manager: Assign branch responsibility get metadata (like integration tests to run)
| Note over Ticket manager: create branches (if not existing)
| Ticket manager->ppa assigner:ask for two clean available ppas
| ppa assigner->Ticket manager: give ppas infos
| Ticket manager->Branch listener: Set up branches to watch
| Ticket manager->Projects manager:update status
| Note left of Ticket manager: REPEAT ON ALL REQUESTS
| Note over Branch listener: See workflow I A: see other diagram  same apply but on diverged branch
| Branch listener->Ticket manager: send incoming request
| Ticket manager->Branch/Source builder (branch): send branch info
| Note over Branch/Source builder (branch): prepare source package
| Branch/Source builder (branch)->ppa (branch):push source
| Branch/Source builder (branch)->Ticket manager: give ack back
| Ticket manager->Projects manager:update status
| Projects manager->Ticket manager:get possible overrides
| Ticket manager-->ppa (branch): monitoring build state
| Note over Ticket manager:report of successful build
| Ticket manager->Projects manager: update status
| Projects manager->Ticket manager:get possible overrides
| Note over Ticket manager: Push merged branch
| Note right of Ticket manager: MP is going to be closed
| Note left of Ticket manager: END REPEAT

| Note left of Ticket manager: (in parallel for all requests)
| Ticket manager->Branch/Source builder (trunk + branch): send branch info
| Note over Branch/Source builder (trunk + branch): prepare source package (merged with trunk)
| Branch/Source builder (trunk + branch)->ppa (trunk + branch):push source
| Branch/Source builder (trunk + branch)->Ticket manager: give ack back
| Ticket manager->Projects manager:update status
| Ticket manager-->ppa (trunk + branch): monitoring build state
| Note over Ticket manager:report of successful build
| Ticket manager->Projects manager: update status
| Note left of Ticket manager: END REPEAT

| Note over Ticket manager: EVERYTIME NOTHING IS BUILDING AND: * A NEW COMPONENT LANDED * OR A NEW AVAILABLE IMAGE * OR PROJECTS MANAGER CONFIG CHANGED IMAGE#
| Ticket manager->Image builder: send request for a new image
| Image builder-->ppa (branch): build IMAGE A (branch with fixed image num)
| Image builder-->ppa (branch): build IMAGE B (branch with latest image if different num)
| Image builder-->ppa (trunk + branch): build IMAGE C (trunk merged with latest image num)
| Image builder->Ticket manager: report and publish isos
| Ticket manager->Projects manager: push infos
| Ticket manager->Integration test runner: test against available images
| Integration test runner->Ticket manager: results
| Ticket manager->Projects manager: update status
| Note left of Ticket manager: END TESTING

| Ticket manager->Projects manager: request for more additional constraints (design review, packaging changes)
| Projects manager->Ticket manager: additional ack by release team or design or core-dev
| Note over Ticket manager: LANDING button only available if IMAGE 3 built, req. fulfill and tests pass Then go to landing manager case.
| Ticket manager->ppa assigner: deprovision the (branch) ppa