Mi Primera Contribución a GitLab en Ruby: De Golang Al Monolito

Introducción
En este artículo te cuento la historia de como, inesperadamente, mis contribuciones en GitLab me llevaron a mi primera contribución en Ruby. Y si, se perfectamente que Ruby es el lenguaje de programación principal en GitLab, pero mi enfoque fue y será el de aportar valor real a la plataforma usando Golang, que es el lenguaje que más domino y motivo principal por el que decidí contribuir en primer lugar.
El contexto
Como ya sabes si lees mis post, soy un Contribuidor Destacado en GitLab, y este reconocimiento lo gané principalmente debido a mis contribuciones en los repositorios client-go y terraform-provider, ambos desarrollados en Golang.
El lenguaje principal de GitLab es Ruby, pero mucho de los servicios de alto rendimiento, como GitLab Runner están desarrollados en Golang por las ventajas claras de este lenguaje relacionados con el rendimiento y la concurrencia.
Básicamente, el problema fue que estaba resolviendo este issue en el proveedor de Terraform, y junto a los mantenedores nos dimos cuenta de que necesitábamos hacer un cambio en el monolito de GitLab para poder completar la solución. Esto representó un reto para mi por dos razones principales:
- Nunca había desarrollado nada en Ruby
- El monolito de GitLab es un proyecto muy grande y complejo, lleno de particularidades que no conocía
La solución
En este merge request empleé bastante tiempo, primero entendiendo la estructura del código en Ruby, luego, implementando y probando los cambios necesarios, y por último, con las pruebas unitarias (que por cierto eran bastantes). En todo este proceso, hubo bastante intercambio con los mantenedores del proyecto, quienes al darse cuenta de que esto sería un cambio importante, me solicitaron que creara un feature flag para esta nueva funcionalidad.
Básicamente, sin dar mucho detalle técnico, el cambio consistió principalmente en permitir que se crearan tokens (tanto personales como de recursos, ya sean tokens de proyecto o de grupo) sin especificar el tiempo de expiración, esto siempre y cuando la configuración require_personal_access_token_expiry estuviera inhabilitada. El problema era que en el monolito se validaba que el campo expires_at siempre estuviera presente en el request, y por lo tanto, si no estaba presente, se devolvía un Bad Request. Teniendo esto en cuenta, cambié la validación para que en caso que la configuración require_personal_access_token_expiry estuviera inhabilitada, el campo expires_at pudiera estar ausente en el request.
Debo comentar que a pesar de ser la primera contribución que hago en Ruby, fue un MR bastante completo y que conllevó una gran catidad de cambios, más que nada por la gran cantidad de modificaciones que tuve que implementar en los test, en los cuales tuve que tener en cuenta ambos estados del feature flag.
Ruby, un lenguaje “mágico”
Antes de dar mi opinión sobre Ruby, quiero dejar claro que tengo basta experiencia con lenguajes de programación de alto nivel como por ejemplo, Node.js, y entiendo perfectamente que muchas veces estos lenguajes hacen que uno como desarrollador se abstraiga de muchos detalles que en lenguajes como, por ejemplo, Golang, debes manejar explícitamente.
Quizás el mejor ejemplo no es Golang, sino uno como C o C++, donde además de tener punteros, tienes que preocuparte por liberar la memoria dinámicamente asignada.
Ahora bien, teniendo esto en cuenta, y que no me enfoqué directamente en entender todo lo relacionado a Ruby, sino en resolver el problema que tenía, me parece que Ruby on Rails es un framework bastante mágico, se siente casi como que muchas cosas son así por arte de magia, aunque repito, esta es mi primera impresión luego de esta contribución, dejando claro que no soy un experto en Ruby y mucho menos en Ruby on Rails.
Hasta la próxima
Espero te haya servido esta experiencia que quise compartir contigo. Si te interesa este tipo de artículos y quieres saber más sobre mi experiencia como ingeniero de software y contribuidor en GitLab, te invito a que te suscribas a mi newsletter usando el formulario al final del artículo. Te espero en el próximo post!!!
Contenido relacionado
- De Apuntar Al 1ro a Ganar El 2do: Mi Experiencia en El Hackathon De GitLab
- Mi Experiencia Como Contribuidor Notable en GitLab
- Como GitLab Puede Impulsar Tu Carrera Profesional
- De Latinoamérica A Los Emiratos: Mi Viaje Personal Y Profesional en 2025