Hace varios años que utilizo GitLab, pero recién hace 4 meses que
comencé a utilizar los issues y como no podía ser de otra manera, opté
por buscar la manera de integrarlo a la consola, porque hasta ahora no
era mas que un repositorio git
con permisos administrables.
# glab
vs gl
Encontré glab
1 que es una CLI de GitLab para usar desde la
terminal, y si bien es muy completa 2, me topé con una dificultad y
es que necesitaba utilizar una instancia de GitLab detrás de una VPN
dentro de una red aislada de INET y por ello, en principio no había
manera de llegar directamente, o al menos no encontré como configurar a
glab
.
Se me ocurrió hacer un wrapper llamado gl
que esencialmente solo
habilitaba el uso de la variable https_proxy
y mediante LocalForward
de ssh
pude redireccionar un puerto local 127.0.0.1:3128
a un Proxy
HTTP que puede llegar a la instancia de GitLab
1localhost -> vpn -> proxy-http -> gitlab
2
Con el pasar de los días, fui generando una serie de scripts que
simplificaban y/o permitían automatizar a glab
extendiendo de cierta
manera su funcionalidad con el comando gl
, el cual es invocado desde
muchos comandos específicos, algunos muy simples, pero que ayudan a usar
la misma metodología e integrar GitLab con otras tools propias.
# Registrando tiempos
La primer necesidad a cubrir fue el registro de tiempos de cada issue,
algo que anteriormente al usar Redmine 3 había resuelto con
redmine-bash-utils
4 y ahora daría origen a glab-bash-utils
5
Si bien GitLab utiliza el formato /spend 00h25m
, mi script
gl-issue-spend
espera recibir el formato 00:25
y obviamente lo
convierte, el porqué?, es simple, desde el 2008 que a todos mis
commits en la última línea del mensaje agrego el tiempo que tardé, de
la siguiente manera @ 00:25 hs
, entonces puedo usar pipe |
para
recuperar el tiempo registrado en el commit e enviárselo a GitLab.
Ejemplo:
1# git log -1
2
3 commit 6b3f0285abe9847124b17c2f9c4523f6caa01df4
4 Author: OSiRiS <osiris@gcoop.coop>
5 Date: Sat Aug 20 11:21:33 2022 -0300
6
7 gl-config: add GL_DEFAULT_REVIEWER: admin as config example
8
9 @ 00:01 hs
10
11# git log -1 | gl-issue-spend 14
12
13 send /spend 01m to 14
14
Trabajar con formato hh:mm
permite fácilmente hacer operaciones de
suma y resta de tiempos.
# Integrando con jrnl
Desde 2017 que utilizo jrnl
6 para registrar el desarrollo de cada
tarea, a veces es un simple paste luego del copy, pero muchas veces,
hay un paso a paso muy detallado y ordenado que vale la pena compartirlo
en forma de comentario de un issue y como ahí tengo registrado el
tiempo invertido, es muy fácil enviarlo a GitLab y en este caso ni
siquiera debo indicar el ID del issue porque ya es parte del
header del journal, entonces basta con ejecutar
1jv | glin
2
jv
es un alias dejrnl view
glin
es un alias degl-issue-note
1jv
2
32022-08-20 15:40 @gcoop-libre gitlab-bash-utils#14 gl-mr-new: set reviewer with default reviewer or assignee when default is empty
4
5 @ 00:01 hs
Un flujo común de trabajo usando jrnl
y gl
es el siguiente:
command | task |
---|---|
jngi 14 |
se crea journal desde issue 14 de GitLab |
jt |
se termina de trabajar en el journal y se registra duración |
jv ¦ glin |
se envía comentario y tiempo a GitLab desde el útimo journal |
gl ic 14 |
se cierra el issue 14 |
# Issues
Ahora para crear issues no necesito utilizar Firefox, lo puedo hacer
desde BASH invocando a gl-issue-new
(o usando el alias gliw
) de
la siguiente manera:
1gl-issue-new 'publish first public version' 'commit actual state of scripts art'
2
3 - Creating issue in gcoop-libre/gitlab-bash-utils
4 #1 publish first public version (less than a minute ago)
5 https://gitlab.com/gcoop-libre/gitlab-bash-utils/-/issues/1
6
# Un MR por cada Branch
Una gran utilidad de GitLab es crear un MR por cada Branch para
poder realizar una revisión de código antes de terminar un feature,
hotfix o un nuevo release y utilizando gl-mr-new
basta con indicar
el ID del issue y el MR se crea con una serie de valores por
defecto que aceleran la operatoria:
item | value |
---|---|
target_branch |
develop |
source_branch |
current branch |
assignee |
value defined GL_DEFAULT_ASSIGNEE in ~/.gl-config |
lables |
wip |
title |
value defined in related ISSUE_ID |
description |
checkbox with link of value defined in related ISSUE_ID |
# alias de glab
vs alias de gl
El comando glab
permite definir alias en el archivo
~/.config/glab-cli/aliases.yml
, y los que definí son los siguientes:
1ci: pipeline ci
2co: mr checkout
3ic: issue close
4il: issue list
5in: issue note
6iu: issue update
7iv: issue view
8iw: issue new
9ma: mr approve
10mc: mr close
11ml: mr list
12mv: mr view
13my: mr ready
14
Entonces si tipeo gl ic 14
voy a cerrar el issue 14.
En cambio para el comando gl
, los alias se definen en gl-src-alias
y
entonces si tipeo glic 14
el resultado es el siguiente:
1- [ ] gl-mr-new: set reviewer with default reviewer or assignee when default is empty [gitlab-bash-utils#14](https://gitlab.com/gcoop-libre/gitlab-bash-utils/-/issues/14)
2
Obtengo un checkbox del issue 14 con su descripción un link en formato Markdown, ésto me resulta muy útil para organizarme al registrar estado de las tareas en una minuta.
# Hay un alias para casi todo!
script | alias | description |
---|---|---|
gl-ci-lint |
glcl |
Validate .gitlab-ci.yml |
gl-issue-check |
glic |
Get issue URL link in Markdown format with checkbox |
gl-issue-jrnl |
glij |
Get Issue group and project ID with title for jrnl |
gl-issue-link |
glik |
Get the issue title with the URL link in Markdown format |
gl-issue-list |
glil |
Get the issue title with URL link in Markdown as a list item |
gl-issue-new |
gliw |
Create issue with defaults defined in ~/.gl-config |
gl-issue-note |
glin |
Insert note in Issue converting hh:mm time format into /spend time |
gl-issue-spend |
glis |
Insert /spend time in Issue converting from hh:mm time format |
gl-issue-title |
glit |
Get title of Issue |
gl-issue-url |
gliu |
Get URL of Issue |
gl-mr-check |
glmc |
Get MR URL link in Markdown format with checkbox |
gl-mr-jrnl |
glmj |
Get MR group and project ID with title for jrnl |
gl-mr-link |
glmk |
Get the MR title with the URL link in Markdown format |
gl-mr-new |
glmw |
Create MR with default values defined in ~/.gl-config |
gl-mr-note |
glmn |
Insert note in MR converting hh:mm time format into /spend time |
gl-mr-spend |
glms |
Insert /spend time in MR converting from hh:mm time format |
gl-mr-title |
glmt |
Get title of MR |
gl-mr-url |
glmu |
Get URL of MR |
gl-notifications-get |
glnu |
Get User notification level defined in GitLab |
gl-prj-list |
glpl |
List all projects in GitLab for current user |
gl-src-check |
glsk |
Check syntax using shellcheck and group errors by code |
gl-src-help |
glsh |
Generate Markdown Help |
gl-src-table |
glst |
Generate Markdown Table Overview |
# Releases
El 2022-08-04 liberé la primer versión pública con el tag v0.1.0
y
desde entonces, acepto sugerencias y parches, aunque ya registré varios
issues 7 por resolver sigo trabajando en mejoras a medida que las
voy necesitando.
# Seguro te interesará leer
# ChangeLog
2022-10-11 10:05
agregar cómo usar GitLab desde la línea de comandos