IntelliJ IDEA + git-flow + Bitbucket issue tracker

Sobre el plugin Task Management

IntelliJ IDEA o cualquiera de sus IDEs permiten gestionar las tareas gracias a la incorporación del plugin Task Management. Este plugin permite conectar diferentes trackers, sin embargo, no existe la conexión con el issue tracker de Bitbucket (aunque sí lo hace con Jira y Trello, siendo también productos de Atlassian).

Aquí explico cómo conectar este tracker mediante la API REST de Bitbucket y el plugin Task Management de IntelliJ IDEA.

Integración del issue tracker de Bitbucket en IntelliJ IDEA

Abrimos la gestión de trackers desde el menú Tools > Tasks & Contexts > Configure Servers… Desde este menú observamos los diferentes servidores configurados. Podemos añadir cualquiera de los trackers predefinidos o también el de tipo genérico (llamado Generic). En este ejemplo, utilizaremos el genérico para poder configurarlo con las llamadas REST de la API 2.0 de Bitbucket.

Una vez añadido el servidor, debemos configurar la conexión al mismo con la autenticación básica HTTP con usuario y contraseña (solo si tenemos la autenticación de verificación en dos pasos descativada, en caso contrario tendremos que autenticar con OAuth2):

  • Server URL: introducimos la url de autenticación que nos proporciona la API https://api.bitbucket.org/2.0/user/repositories
  • Username: nuestro usuario en Bitbucket.
  • Password: la contraseña de nuestro usuario en Bitbucket.
  • Use HTTP authentication: marcamos esta casilla para que realice la autenticación básica HTTP enviando usuario y contraseña a la URL especificada.
General

Tras esto, accedemos a la pestaña de Server Configuration donde debemos especificar las diferentes llamas REST para poder consultar las tareas en nuestro tracker.

  • Login URL: al haber definido autenticación HTTP este campo se encuentra deshabilitado y no necesitamos indicar ninguna URL.
  • Tasks List URL: en este caso indicaremos la llamada que debe hacer para resolver la lista de tareas, que como indica el API será una llamada GET a https://api.bitbucket.org/2.0/repositories/{username}/{repo_slug}/issues (como veremos más adelante podemos utilizar variables de plantilla, que se declararán entre llaves).
  • Single Task URL: aquí indicaremos la llamada que se hará para resolver los datos de una tarea específica, utilizando la llamada GET a la API mediante la URL https://api.bitbucket.org/2.0/repositories/{username}/{repo_slug}/issues/{id}
  • Marcaremos el tipo de respuesta como JSON, que es el formato de la respuesta a las llamadas de la API.
Server Configuration
  • Marcaremos también la relación de cada campo esperado por el plugin Tasks Management con el campo que vendrá en la respuesta JSON. Las siguientes relaciones atañen a la respuesta de la llamada a Tasks List URL que contiene la lista de tareas; la primera es tasks e indicamos el nombre del elemento relacionado en la respuesta, que en en el caso del tracker de Bitbucket, viene en el elemento values (como se indica en el esquema especificado en la aquí).

  • También podemos relacionar el id con el campo JSON id que marca el id de cada tarea en la respuesta; el campo summary lo relacionamos con title y el campo description con description.raw. Las siguientes relaciones con el prefijo singleTask indican lo mismo que las anteriores, pero atañen a la respuesta de la llamada a Single Task URL.

Mapping
  • Abrimos el gestor de variables de plantilla desde el botón Manage Template Variables… Aquí tenemos que indicar el valor de las variables usadas en las URLs anteriores, y además, indicaremos si aparece o no como campo editable para el usuario. Por defecto, encontramos definidas las variables username y password, pero además añadiremos repo_slug que indicará el nombre en código del repositorio y que lo utilizamos en las llamadas URL definidas anteriormente; y este campo lo haremos editable marcando la casilla de Show on first tab y le asignaremos como valor el nombre en código del repositorio.
Template Variables

Ahora, en la primera pestaña llamada General se nos mostrarán, además de los campos username, password ya comentados, el campo repo_slug que acabamos de insertar.

NOTA: podemos insertar también la variable de plantilla state y pasarla en la Tasks List URL como parámetro https://api.bitbucket.org/2.0/repositories/{username}/{repo_slug}/issues?q=state=%22{state}%22 La definimos en la primera pestaña General con el valor de new lo que hará que se filtren las tareas mostrando únicamente las que tienen este estado.

Integración de git-flow en IntelliJ IDEA

Para aquellos que usan la filosofía git-flow en el control de versiones, existe el plugin para IntelliJ IDEA que nos muestra y permite trabajar con features, hotfix y releases integrando todo esto con el plugin Tasks Management.

Git Flow

Como observaremos en la siguiente imagen, al seleccionar un tarea pendiente (Tools > Tasks & Contexts > + Open Task…) se nos mostrará las opciones del control de versiones y también las opciones de git-flow. En este caso, deshabilitamos la opción de crear rama del VCS pero dejaremos habilitado la casilla de verificación que creará el changelist de Git donde iran registrándose los cambios realizados en el código. Además, activaremos ls opción Start feature o Start hotfix de la sección Gitflow operations según el tipo de tarea a implementar. Al aceptar, se creará la rama de feature o hotfix y la changelist de Git.

Open Task

Una vez finalicemos los cambios haremos el commit del changelist, que únicamente contendrá los cambios relaizados para esta feature o hotfix. El mensaje de commit que aparecerá será el definido en el plugin Tasks Management, en la pestaña Commit Message, que por defecto viene definido con la plantilla:

{id} {summary}

Es importante saber que con este mensaje de commit podemos ejecutar cambios de estados de las tareas automáticamente en el issue tracker de Bitbucket (más información aquí). Podemos usar las palabras fix, resolve, etc. al inicio del mensaje seguidas del id de la tarea (con el prefijo #) para que cuando se suba este commit se resuelva la tarea de manera automática. Por lo tanto, configuramos el Commit Message del plugin Tasks Management como la plantilla siguiente:

fixed #{id} {summary}

Al realizar el commit del changelist, el mensaje por defecto será el de la plantilla anterior; tras este commit, podemos cerrar la feature o hotfix, acabando con el comando feature finish o hotfix finish que de manera automática hará los merges entre las ramas de master y develop.

Flujo de trabajo

Una vez tenemos configurado el IDE con el gestor de tareas integrado y el plugin de git-flow podemos seguir el flujo de trabajo siguiente:

  • Desde el menú Tools > Tasks & Contexts > + Open Task… buscamos y abrimos la tarea a realizar.
  • Seleccionamos crear la changelist y la opción feature o hotfix.
  • Realizamos los cambios de código.
  • Hacemos commit.
  • Finalizamos la feature o hotfix desde el menú del plugin de IntelliJ IDEA.
  • Realizamos el push de las diferentes ramas para acabar publicando los cambios en el repositorio (el mensaje del commit configurado hará que se cierre la tarea automáticamente).
Git
Escrito el 15/01/2017