🕵🏽‍♂️ Satisfaciendo dependencias a módulos Go privados

Cuando desarrollamos aplicaciones en Go que mantienen dependencias a módulos que no son de código abierto necesitamos especificar de forma correcta cómo dichas dependencias deben ser obtenidas para poder utilizarlas en nuestro entorno o producir los ejecutables deseados. Esta especificación requiere de una combinación de variables de entorno y configuración de GIT.

Las referencias en este artículo son para Gitlab, aunque los pasos para otras plataformas, como Github o Bitbucket, son las mismas.

Variables de Entorno

Go tiene su propia utilidad para obtener y definir variables de entorno. En este caso se requiere definir los argumentos para GOPRIVATE de la siguiente manera:

; go env -w GOPRIVATE=gitlab.com/<entorno_privado>/* 

Donde <entorno_privado> es el espacio de trabajo donde nuestros repositorios privados están alojados y debe ser sustituido de acuerdo a nuestra necesidad.

GOPRIVATE indica los módulos que el comando go considera como privados y, por lo tanto, no deben ser descargados a través de goproxy.io ni comprobar la suma de verificación del módulo con la disponible en sum.golang.org.

Especificación de GIT

Posteriormente debemos modificar la forma en la que git resuelve la dirección del repositorio para el módulo privado.

Mediante SSH

Comúnmente en nuestro entorno de desarrollo local accedemos a nuestros repositorios privados mediante un par de llaves SSH, es posible configurar git de forma local para que este mecanismo sea utilizado correctamente a nuestro favor ejecutando:

; git config --global url."ssh://git@gitlab.com:<entorno_privado>".insteadOf https://gitlab.com/<entorno_privado>

Mediante un token de acceso

En Gitlab podemos crear un token de acceso para nuestras cuentas que tenga, como mínimo, los permisos read_user, read_api y read_repository para ser usado como contraseña al resolver nuestros repositorios privados:

; git config --global url."https://<usuario>:<token_de_acceso>@gitlab.com/<entorno_privado>".insteadOf https://gitlab.com/<entorno_privado>

Verificando la configuración

Una vez hechos los cambios pertinentes podemos obtener nuestros módulos privados y ejecutar correctamente:

; go get gitlab.com/<entorno_privado>/<mi_modulo>
; go mod tidy