Capturas de pantalla y publicación automatizada para pub.dev

Tenemos un par de nuevas características disponibles en pub.dev a partir de hoy: ahora puedes declarar capturas de pantalla para un paquete, habilitando un…

Tenemos un par de funcionalidades nuevas disponibles en pub.dev a partir de hoy: Ya puedes declarar capturas de pantalla para un paquete, habilitando un enfoque más visual para la búsqueda. Y el flujo de publicación ahora puede ser totalmente automatizado, gracias a GitHub Actions.

Añadir capturas de pantalla a pub.dev

#

Uno de los objetivos principales de pub.dev es facilitar encontrar el paquete adecuado para un propósito determinado. Cuando buscas widgets u otros componentes visuales, las imágenes juegan un papel importante. Ahora estamos mostrando capturas de pantalla en los resultados de búsqueda de paquetes, para que sea más fácil que nunca encontrar un paquete.

Capturas de pantalla en la búsqueda de paquetes y en la página del paquete

#

Las miniaturas de las capturas de pantalla ahora aparecen en los resultados de búsqueda y también puedes filtrar la búsqueda para listar solo paquetes con capturas de pantalla.

Resultados de búsqueda en pub.dev filtrados por has:screenshot, mostrando miniaturas de capturas de pantalla de paquetes junto a los resultados.

La miniatura de la captura de pantalla también se muestra en la página del paquete, y hacer clic en la miniatura abre un carrusel de imágenes con todas las capturas de pantalla.

Carrusel de imágenes mostrando capturas de pantalla en la página de un paquete.

Declarar capturas de pantalla en pubspec.yaml

#

Añadir capturas de pantalla a un paquete es realmente sencillo. Declara los archivos en pubspec.yaml bajo el campo screenshots con una description y un path. A continuación se muestra un ejemplo del paquete animations.

yaml
name: animations
...
screenshots:
 - description: 'Examples of the container transform pattern.'
   path: example/screenshots/container_transform_lineup.png
 - description: 'Examples of the fade pattern.'
   path: example/screenshots/fade_lineup.png
   ...

Para más detalles consulta dart.dev/tools/pub/pubspec#screenshots.

Publicación automatizada para pub.dev

#

Miles de miembros de la comunidad de Dart publican paquetes en pub.dev, para beneficio de todos los desarrolladores de Dart y Flutter. Tradicionalmente, estos publicadores de paquetes han publicado en pub.dev ejecutando un comando local en la terminal, dart pub publish, y autenticándose con su cuenta de Google. Detrás de escena se almacenaba un refresh token en un archivo de configuración en su máquina de desarrollo, lo que les permitía publicar una nueva versión sin tener que autenticarse de nuevo. Este flujo es sencillo y fácil de entender, pero requiere varios pasos manuales. Nos complace introducir un nuevo flujo de publicación automatizada, que permite publicar nuevas versiones en pub.dev directamente desde una GitHub Action. Esto tiene varios beneficios:

  • Cada lanzamiento se etiqueta automáticamente con etiquetas de lanzamiento consistentes en GitHub

  • Es fácil configurar un flujo de revisión y aprobación para publicar nuevas versiones.

  • El proceso de publicación se autentica mediante un token firmado por GitHub, garantizando que no haya credenciales almacenadas en disco.

Ejecución de GitHub Actions para Publish to pub.dev mostrando un comando dart pub publish exitoso para testpkg 1.1.5.

Haciendo segura la publicación automatizada

#

Actualmente, algunos usuarios han recurrido a almacenar el archivo de configuración pub-credentials.json que contiene el refresh token en una variable de entorno secreta en GitHub Actions. De esta manera, podían escribir un flujo de GitHub Action que recuperaba el archivo de configuración y lo usaba para publicar una nueva versión del paquete. Aunque este flujo funciona técnicamente, las herramientas no fueron diseñadas con esto en mente y el flujo tiene múltiples desventajas:

  • Los archivos pub-credentials.json se pueden usar para publicar cualquier paquete para el que el autor tenga permiso de publicación, no solo el paquete publicado desde el flujo configurado.

  • Si se filtran, los pub-credentials.json se pueden usar para publicar nuevas versiones y nuevos paquetes, suplantando al usuario que creó el archivo pub-credentials.json.

  • La interfaz para revocar el refresh token en pub-credentials.json no es fácil de encontrar.

De hecho, ha ocurrido más de una vez que un paquete fue publicado y accidentalmente incluyó el archivo pub-credentials.json del autor, porque el autor extrajo el archivo dentro de un trabajo de CI. Publicar un paquete junto con las credenciales necesarias para actualizarlo es una vulnerabilidad de seguridad bastante grave y eventualmente implementamos detección de fugas en dart pub publish.

Nuestro nuevo soporte de publicación automatizada mitiga estos problemas, haciendo posible autenticarse en pub.dev usando uno de los siguientes:

Estos flujos permiten la publicación automatizada basándose en tokens secretos de larga duración que pueden ser fácilmente abusados si se filtran por accidente. Si despliegas tu flujo de publicación en una máquina personalizada, por supuesto puedes confiar en claves de cuenta de servicio exportadas, pero se debe tener mucho cuidado para asegurar adecuadamente dichas claves.

Habilitando publicación segura

#

Puedes habilitar la publicación automatizada desde GitHub con solo unos pocos pasos — consulta dart.dev/go/automated-publishing para todos los detalles.

Más de Dart