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