feat(jira): issue_type=Epic + AssigneeMap + CLI resync-jira-fields
Cambios:
- jiraConfig: nuevo campo AssigneeMap (kanban_user_id -> jira_accountId).
- jiraHandler.create() y update(): aplican fields.assignee={accountId} cuando
card.AssigneeID esta en el map. NO se borra el assignee de Jira cuando no
hay mapeo (evita pisar asignaciones manuales).
- resolveJiraAssignee: helper compartido.
- seed-jira-data: cambio issue_type default Tarea Tecnica -> Epic (board 33
filtra issuetype=Epic). assignee_map inyectada con 3 mapeos confirmados:
egutierrez (Enmaa) -> 712020:2cf3b82f-... (Enmanuel Gutierrez Perez)
amassaguer (alfon) -> 712020:3f3ca9e1-... (Alfonso Massaguer Gomez)
ntajuelo (Nat) -> 712020:feb5f7c5-... (Natalia Tajuelo Gomez)
- Nueva CLI 'kanban resync-jira-fields' con flags
--set-issuetype/--set-assignee/--set-labels/--dry-run/--limit/--batch-size/--pause-sec
Idempotente. PUT /rest/api/3/issue/{key} con los fields del config actual.
Usado para patchear las 127 issues ya creadas con Tarea Tecnica -> Epic +
assignee (donde mapea).
- Ejecutado: 127/127 OK, 0 fail. Board 33 ahora muestra 219 issues totales
(92 Epics previas + 127 nuevas). Sample verificado contra Jira REST API.
This commit is contained in:
@@ -65,6 +65,16 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
// Subcommand `kanban resync-jira-fields` patches existing linked issues
|
||||
// so their issuetype/assignee/labels reflect the current module config.
|
||||
if len(os.Args) > 1 && os.Args[1] == "resync-jira-fields" {
|
||||
if err := runResyncJiraFields(os.Args[2:]); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "kanban resync-jira-fields: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
flags := flag.NewFlagSet("kanban", flag.ExitOnError)
|
||||
port := flags.Int("port", 8095, "HTTP port")
|
||||
dbPath := flags.String("db", "operations.db", "SQLite database path")
|
||||
|
||||
Reference in New Issue
Block a user