En un artículo anterior vimos lo sencillo que era empezar a usar Go Modules, pero, ¿y si os digo que es igual de fácil migrar un proyecto a Go Modules desde los anteriores gestores de dependencias? Sí seguro que pensaréis que estoy de coña, así que vamos a verlo.
Buscar un repositorio con Glide o Dep
Esto no debería ser muy complicado, de hecho, seguro que a día de hoy muchos de los repositorios de proyectos GO en GitHub utilizan uno de estos gestores de dependencias. Nosotros, como le tenemos mucho cariño a Francesc Campoy (sino lo conocéis aún, deberíais empezar a seguirle, ¡pero ya!), utilizaremos una de las líbrerias de Source{d}, empresa en la que actualmente trabaja.
https://github.com/src-d/go-license-detector
Se trata de una líbreria para detectar la licencia (LICENSE) de un proyecto a partir de su repositorio o de su código fuente. Para más información acerca del algoritmo que usa podéis echar un vistazo a la explicación aquí.
Comprobaciones antes de la migración
Lo primero que vamos a hacer es un fork del repositorio en cuestión y, antes de meterle mano, comprobaremos que todo nos funciona:
$ go test ./...
ok gopkg.in/src-d/go-license-detector.v2/cmd/license-detector 3.222s
ok gopkg.in/src-d/go-license-detector.v2/licensedb 11.727s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/filer 0.053s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal 0.237s
? gopkg.in/src-d/go-license-detector.v2/licensedb/internal/assets [no test files]
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/fastlog 0.025s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/normalize 0.018s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/processors 0.017s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/wmh 0.021s
$ go run cmd/license-detector/main.go https://github.com/friendsofgo/graphiql
https://github.com/friendsofgo/graphiql
99% MIT
83% MIT-feh
Una vez vemos que todo responde como debería, podremos migrar. Este primer paso es muy importante ya que, en caso de tener algún problema durante la migración, deberíamos saber si hemos roto algo durante el proceso o si ya estaba roto con anterioridad, lo que nos ahorrará muchos dolores de cabeza.
Vamos a migrar
En el ejemplo escogido, originalmente se hacía uso de Dep, sin embargo, el proceso debería ser el mismo para un proyecto con Glide.
Para empezar la migración desde Dep a Go Modules lo primero que debemos hacer es iniciar la herramienta:
$ go mod init
Este proceso nos habrá creado un fichero go.mod
con todas las dependencias y sus respectivas versiones que tuvieramos listadas en nuestro fichero Gopkg.lock
Ahora ejecutaremos:
$ go mod tidy
Ya en este punto podremos hacer lo siguiente sin ningún miedo:
$ rm -rf Gopkg.toml Gopkg.lock vendor
Y, en principio, ¡ya lo tenemos! Pero ahora viene la prueba de fuego: lanzar de nuevo los comandos que lanzamos al principio para ver que todo sigue funcionando.
$ go test ./...
ok gopkg.in/src-d/go-license-detector.v2/cmd/license-detector 3.131s
ok gopkg.in/src-d/go-license-detector.v2/licensedb 10.738s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/filer 0.069s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal 0.376s
? gopkg.in/src-d/go-license-detector.v2/licensedb/internal/assets [no test files]
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/fastlog 0.025s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/normalize 0.021s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/processors 0.021s
ok gopkg.in/src-d/go-license-detector.v2/licensedb/internal/wmh 0.023s
$ go run cmd/license-detector/main.go https://github.com/friendsofgo/graphiql
https://github.com/friendsofgo/graphiql
99% MIT
83% MIT-feh
Pues ya está, hemos migrado la líbreria de Source{d} desde Dep a Go Modules de manera sencilla y rápida. Recordar que, si queréis que siga siendo compatible con los sistemas antiguos, simplemente tendríamos que ejecutar go mod vendor
.
Además, como viene siendo habitual en nuestros artículos, queremos que sean prácticos de verdad, y, por ello, hemos realizado toda ésta migración a la par que escribíamos el artículo, así que hemos aprovechado para hacerles una PR(Pull Request) a Source{d}. Podéis seguir todo el proceso en el link anterior.
Recordar que cualquier duda que tengáis la podéis dejar en los comentarios o podéis encontrarnos vía Twitter en @FriendsOfGoTech.