Workflow para Trac

Para el Trac que utilizo he configurado mi propio workflow.
Para ello he instalado los plugins:

Los activo en [components]:

workfloweditor.workfloweditor_admin.workflowchangehandler = enabled
workfloweditor.workfloweditor_admin.workfloweditoradmin = enabled
advancedworkflow.* = enabled

Y después añado el workflow casi a mano :P


[ticket]
workflow = ConfigurableTicketWorkflow,TicketWorkflowOpOwnerReporter,
TicketWorkflowOpOwnerPrevious,TicketWorkflowOpStatusPrevious,
TicketWorkflowOpXRef

[ticket-workflow]
leave = * -> *
leave.name = leave
leave.default = 1
leave.operations = leave_status

accept = new -> accepted
accept.name = accept
accept.default = 0
accept.permissions = TICKET_MODIFY

discard = new,needinfo -> closed
discard.name = discard
discard.default = 0
discard.operations = set_resolution
discard.set_resolution = invalid,wontfix,duplicate,worksforme
discard.permissions = TICKET_MODIFY

take = accepted -> assigned
take.name = take ticket
take.default = 0
take.operations = set_owner_to_self
take.permissions = TICKET_MODIFY

resign = assigned -> accepted
resign.name = resign ticket
resign.default = 0
resign.operations = del_owner
resign.permissions = TICKET_MODIFY

resolve = assigned -> resolved
resolve.name = resolve
resolve.default = 0
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY

close = resolved -> closed
close.name = close
close.default = 0
close.permissions = TICKET_MODIFY

reopen = closed,resolved -> new
reopen.name = reopen
reopen.default = 0
reopen.operations = del_resolution,del_owner
reopen.permissions = TICKET_CREATE

needinfo = new,accepted,assigned,resolved -> needinfo
needinfo.name = need info
needinfo.default = 0
needinfo.operations = del_owner
needinfo.permissions = TICKET_MODIFY

supplyinfo = needinfo -> *
supplyinfo.default = 0
supplyinfo.name = supply info
supplyinfo.operations = set_status_to_previous,set_owner_to_previous

El resultado es el siguiente workflow:

Mi workflow de Trac

Mi workflow de Trac

Detalles del workflow:

  • No está orientado a cuestiones de pruebas. Entre “resolved” y “closed” estaría bien realizar una batería de pruebas del ticket.
  • El paso new->accepted es para verificar que el ticket es correcto, no duplicado, etc… y no se realiza asignación del ticket al usuario automáticamente. Es el usuario el que ha de cogerlo mediante “take”.
  • Una vez que un usuario coge un ticket, puede devolverlo al conjunto de en espera para ser tratados mediante “resign”.
  • En cualquier momento se puede pedir más información mediante “needinfo”. En ese momento se borra el propietario y se espera que alguien responda.
  • Tras ejecutar la acción “supplyinfo”, se vuelve al estado anterior a needinfo y el propietario se establece automáticamente a quien estaba resolviendo el ticket
  • Desde “new” y “needinfo” se puede descartar un ticket. En “needinfo” se permite hacer esto por si nadie responde en mucho tiempo y se desea limpiar la lista de tickets
  • En el diagrama no he indicado el ciclo “leave->leave” para cuando no se hace nada con un ticket

Cosas que quedarían por hacer:

  • Permitir que un usuario administrador pueda modificar los tickets a su antojo (sobretodo cambiar el propietario) en un workflow tan estricto como este
  • Añadir los estados necesarios para pruebas. Recordemos que es normal “olvidarse” de las pruebas y viene bien un recordatorio de que hay que realizarlas

Leave a Reply

Your email address will not be published.