[kteam-tools][PATCH 2/2] swm: close bug when pkg will not be promoted to -updates
Andy Whitcroft
apw at canonical.com
Tue Jun 27 11:24:21 UTC 2017
On Wed, Jun 14, 2017 at 06:11:55PM +0200, Kleber Sacilotto de Souza wrote:
> When the promote-to-updates tasks is set to invalid, set the workflow to
> 'Fix Released' when all the other tasks have been completed.
>
> Signed-off-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>
> ---
> stable/wfl/wft/promote_to_updates.py | 38 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 38 insertions(+)
>
> diff --git a/stable/wfl/wft/promote_to_updates.py b/stable/wfl/wft/promote_to_updates.py
> index 5903394d..baf986ff 100644
> --- a/stable/wfl/wft/promote_to_updates.py
> +++ b/stable/wfl/wft/promote_to_updates.py
> @@ -19,6 +19,7 @@ class PromoteToUpdates(Promoter):
> s.jumper['In Progress'] = s._verify_promotion
> s.jumper['Fix Committed'] = s._verify_promotion
> s.jumper['Fix Released'] = s._fix_released
> + s.jumper['Invalid'] = s._invalid
>
> cleave(s.__class__.__name__ + '.__init__')
>
> @@ -128,4 +129,41 @@ class PromoteToUpdates(Promoter):
> cleave(s.__class__.__name__ + '._fix_released (%s)' % retval)
> return retval
>
> + # _invalid
> + #
> + def _invalid(s):
> + """
> + """
> + center(s.__class__.__name__ + '._invalid')
> + retval = False
> +
> + while True:
> + if s.bug.packages_released:
> + cinfo(' packages have been released, but the task is set to "Invalid"', 'yellow')
> + break
> +
> + if s.bug.sru_workflow_project:
> + if s.bug.tasks_by_name['security-signoff'] == "Fix Released":
> + if not s.bug.packages_released_to_security:
> + cinfo(' the packages have not been released to the security pocket', 'yellow')
> + break
As the current handling does not handle security-signoff specially we
will mark the promote-to-security as Invalid and then complain that we
have not copied these out to security if the security-signoff is not
set appropriatly.
I think this should more properly confirm that the package
promote-to-security status matches the in pocket status, present for
Fix Released and absent for Invalid. It should also confirm that the
security-signoff has been completed. Finally it should confirm that
the security-signoff and the status of the promote-to-security are in
agreement. If any of that is incorrect we are not done.
That also applied of course to _fix_released() equally. So if we also
made the same changes to the promote-to-updates status as well then we
would have mostly identicle code for the _fix_released and _invalid
cases. We could and should then merge them.
This all applied gives us the following _complete() callback (used for
both Fix Released and Invalid):
# _complete
#
def _complete(s):
"""
"""
center(s.__class__.__name__ + '._complete')
retval = False
while True:
# Check that the promote-to-updates status matches -updates pocket.
promote_to_updates = s.bug.tasks_by_name['promote-to-updates']
#if promote_to_updates.status not in ['Invalid', 'Fix Released']:
# break
if promote_to_updates.status == 'Invalid' and s.bug.packages_released:
cinfo(' packages have been released, but the task is set to "Invalid"', 'yellow')
break
elif promote_to_updates.status == 'Fix Released' and not s.bug.packages_released:
cinfo(' packages have not been released, but the task is set to "Fix Released"', 'yellow')
break
# Since this is the one place where the master, project task is set Fix Released it needs to
# do more than just look at the promote-to-updates. It needs to also look at promote-to-security,
# confirm the testing is complete and that security signoff is completed.
# Confirm we have completed all testing.
if not s._testing_completed():
break
# Confirm we have a valid security signoff.
if not s._security_signoff_verified():
break
if s.bug.sru_workflow_project:
# Check that the promote-to-security status matches -security pocket.
promote_to_security = s.bug.tasks_by_name['promote-to-security']
if promote_to_security.status not in ['Invalid', 'Fix Released']:
cinfo(' promote-to-security is neither "Fix Released" nor "Invalid" (%s)' % (s.bug.tasks_by_name['promote-to-security'].status), 'yellow')
break
if promote_to_security.status == 'Invalid' and s.bug.packages_released_to_security:
cinfo(' packages have been released to security, but the task is set to "Invalid"', 'yellow')
break
elif promote_to_security.status == 'Fix Released' and not s.bug.packages_released_to_security:
cinfo(' packages have not been released to security, but the task is set to "Fix Released"', 'yellow')
break
# Check that the promote-to-security status matches that of the security-signoff.
security_signoff = s.bug.tasks_by_name['security-signoff']
if promote_to_security.status != security_signoff.status:
cinfo(' package promote-to-security status (%s) does not match security-signoff status (%s)' % (promote_to_security.status, security_signoff.status), 'yellow')
break
# All is completed so we can finally close out this workflow bug.
s.bug.tasks_by_name[s.bug.workflow_project].status = 'Fix Released'
if promote_to_updates.status == 'Invalid':
msgbody = 'All tasks have been completed and the bug is being set to Fix Released\n'
s.bug.add_comment('Workflow done!', msgbody)
else:
s.bug.phase = 'Released'
msgbody = 'The package has been published and the bug is being set to Fix Released\n'
s.bug.add_comment('Package Released!', msgbody)
break
cleave(s.__class__.__name__ + '._complete (%s)' % retval)
return retval
I propose to test this and apply make it so on top of yours if it
passes.
-apw
More information about the kernel-team
mailing list