Mostrando entradas con la etiqueta CI. Mostrar todas las entradas
Mostrando entradas con la etiqueta CI. Mostrar todas las entradas

16 de mayo de 2022

Cómo portar tu software a bioconda, ejemplo paso a paso con GET_HOMOLOGUES

Hola,

hace poco logramos portar el software GET_HOMOLOGUES a la plataforma bioconda (ver artículo), el canal especializado en bioinformática del gestor de paquetes conda. En esta entrada voy a resumir cómo lo hicimos por si sirve de ayuda a otros programadores desprevenidos. La documentación en línea que he consultado por el camino incluye estos enlaces, me pareció que estaba todo mejor documentado en conda, el proyecto principal, que en bioconda:


Los pasos que seguí fueron:

  1. Análisis de dependencias del software GET_HOMOLOGUES. Como ya lo teníamos en GitHub, Travis y Dockerhub lo teníamos bastante claro, pero aun así tuvimos que explorar las recetas ya existentes en bioconda (https://github.com/bioconda/bioconda-recipes/tree/master/recipes) para aprovechar los binarios disponibles. Tras esta tarea descubrimos que las recetas blast, hmmer, diamond, mcl y phylip resolvían casi todas nuestras necesidades, pero faltaba el software COGtriangles, necesario para ejecutar $ get_homologues.pl -G
  2. Por recomendación de mi colega Borja Latorre, y siguiendo la filosofía de bioconda, lo lógico era crear una nueva receta independiente para esta dependencia, así que eso decidimos hacer.
  3. Hacer un fork del repositorio bioconda (https://github.com/bioconda/bioconda-recipes) con tu usuario de GitHub
  4. Clonar localmente el nuevo repositorio
  5. $ cd bioconda-recipes/recipes
  6. Crea una nueva rama como se explica en la documentación y selecciónala
  7. $ mkdir cogtriangles
  8. Los siguientes pasos consistieron en preparar la receta cogtriangles, lo cual implicó editar dos ficheros de texto con ayuda de la documentación y cotilleando otras recetas en el repositorio:
    1.  meta.yaml : define los metadatos de la receta, incluyendo el origen del código fuente, su suma SHA256 para comprobar que la descarga es correcta, su licencia y publicaciones, las dependencias para construir esta receta (las recetas make, el compilador de C++ y perl) y, lo más importante, la batería de tests para comprobar que la receta funciona. 
    2.  build.sh : define cómo se construye el paquete, colocando los binarios compilados de COGtriangles en la carpeta $PREFIX/bin 
  9. $ cd .. && mkdir get_homologues && cd get_homologues
  10. Edito dos ficheros similares para esta segunda receta:
    1. meta.yaml
      1. en la sección build puedes declarar variables de ambiente
      2. verás que la sección requirements->run importa la receta cogtriangles 
      3. los tests se ejecutan invocando directamente dos comandos sin indicar un camino/path
    2. build.sh : copia a la carpeta $PREFIX/bin los scripts y dependencias de GET_HOMOLOGUES para que los tests funcionen tanto en local como en modo mulled test (mira el punto 11). 
    3. $ cd ../..
  11. Tras instalar minicondaDocker deberás configurar los canales de bioconda (gracias José María! Si ya tenías conda instalado igual no los necesitáis; una alternativa a conda es mamba)
    1. $ conda config --add channels defaults 
    2. $ conda config --add channels bioconda 
    3. $ conda config --add channels conda-forge 
    4. $ conda create -c base -n bioconda 
    5. $ conda install -c bioconda bioconda-utils
  12. Ahora prueba las nuevas recetas en tu máquina local
    1. $ conda activate bioconda
    2. $ bioconda-utils lint --packages get_homologues
    3. $ bioconda-utils build --docker --mulled-test --packages get_homologues
  13. Si hay problemas de permisos de escritura en Docker puedes resolverlos con
    1. $ sudo chmod 666 /var/run/docker.sock
  14. Si te aparence un error como FileNotFoundError: [Errno 2] No such file or directory: 'miniconda3/envs/bioconda/conda-bld/conda_build_config_0_-e_conda_build_config.yaml' puedes resolverlo con (gracias José María!):
    1. $ mkdir ~/miniconda3/envs/bioconda/conda-bld
  15. Si los paquetes de las respectivas recetas se construyen correctamente es momento de 
    1. Registrar todos los cambios con git add, git commit, git push 
    2. Abrir un Pull Request (PR) y documentar tus recetas. Puedes ver por ejemplo el nuestro en  https://github.com/bioconda/bioconda-recipes/pull/34595 . Cada cambio que hagas, por ejemplo por nuevos git push, lanza de manera automática los tests que definiste en tus metadatos.  
    3. Escribir en https://gitter.im/bioconda/lobby para pedir por favor que alguien revise el PR, y  si todo va bien, una tu rama al repositorio oficial
  16. Prueba a instalar el paquete desde la nube, posiblemente desde otra máquina, con algo como 
    1. $ conda activate bioconda
    2. $ conda create -n get_homologues -c conda-forge -c bioconda get_homologues
    3. $ conda activate get_homologues 
Espero que esta explicación os ayude,
un saludo,
Bruno











6 de abril de 2021

Dependencias del sistema de un módulo Perl

Hola, 

un problema con el que tropecé recientemente al preparar un fichero .travis.yaml para un repositorio en GitHub es que algunos módulos Perl pueden fallar al ser instalados porque dependen de software adicional que no está instalado en el sistema operativo. La solución pasa por instalar esas dependencias antes de los módulos en cuestión, tal como se hace por ejemplo con libgd-dev en https://github.com/eead-csic-compbio/get_homologues/blob/master/.travis.yml

En esta entrada lo que quería compartir es el módulo CPAN-Plugin-Sysdeps, que sirve precisamente para averiguar qué dependencias del sistema tiene cualquier módulo. Un ejemplo vale más que mil palabras:

# instalamos cpan-sysdeps
cpanm CPAN::Plugin::Sysdeps
--> Working on CPAN::Plugin::Sysdeps
Fetching http://www.cpan.org/authors/id/S/SR/SREZIC/CPAN-Plugin-Sysdeps-0.68.tar.gz ... OK
Configuring CPAN-Plugin-Sysdeps-0.68 ... OK
Building and testing CPAN-Plugin-Sysdeps-0.68 ... OK
Successfully installed CPAN-Plugin-Sysdeps-0.68
1 distribution installed

# ahora comprobamos las dependencias de cualquier módulo
cpan-sysdeps --cpanmod DB_File
libdb5.3-dev

# si quieres ver solamente las que faltan por instalar
cpan-sysdeps --cpanmod DB_File --uninstalled

# finalmente, puedes instalar directamente esas dependencias
apt-get install $(cpan-sysdeps --uninstalled --cpanmod DB_File)

Hasta pronto,

Bruno