feat(modules): jira scoped a project=DATA + board=33 con seed CLI desde pass

Cambios:
- jiraConfig: nuevo campo BoardID. TestConnection valida que board.location.projectKey
  coincide con ProjectKey declarado. Refuse mismatched scopes so a typo in
  project_key cannot create issues in the wrong project.
- backend/seed_jira.go: subcomando 'kanban seed-jira-data' lee credenciales
  desde pass (jira/anjana/{email,api-token,domain}) e inserta module row con
  kind=jira, project_key=DATA, board_id=33, event_filter sensible. Idempotente
  (upsert por name). status_map vacio por defecto (operator lo edita por UI).
- main.go: wire del nuevo subcomando.

Requiere KANBAN_MODULE_KEY env var para encriptar/desencriptar config. El
servidor que ejecuta el dispatcher debe usar el mismo valor.
This commit is contained in:
egutierrez
2026-05-28 12:56:33 +02:00
parent 65771ebb12
commit ef197236db
3 changed files with 164 additions and 2 deletions
+10
View File
@@ -45,6 +45,16 @@ func main() {
return
}
// Subcommand `kanban seed-jira-data` provisions the Jira push module
// scoped to project DATA + board 33 using pass-stored credentials.
if len(os.Args) > 1 && os.Args[1] == "seed-jira-data" {
if err := runSeedJiraData(os.Args[2:]); err != nil {
fmt.Fprintf(os.Stderr, "kanban seed-jira-data: %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")