Update-informer

Liberando el código de «update-informer»: una biblioteca de Rust altamente personalizable para aplicaciones de CLI

update-informer es una biblioteca creada principalmente para herramientas de CLI desarrolladas en Rust (como «dotenv-linter» y «datanymizer»). Comprueba si se han publicado nuevas versiones y envía notificaciones si hay una actualización. update-informer ha sido desarrollada por Mikhail Grachev, un gran entusiasta del código abierto.

CLI son las siglas en inglés de «interfaz de la línea de comandos»: un programa de línea de comandos que interpreta comandos y ejecuta la acción solicitada. En general, cualquier programa que se usa mediante comandos de terminal se incluye en esta categoría.

 

¿Cómo funciona?

update-informer comprueba automáticamente si hay nuevas versiones en repositorios como Crates.io y GitHub. Crates.io es el registro de «crates» de la comunidad de Rust: el repositorio principal donde se almacenan todos los proyectos, bibliotecas, etc.

Al añadir la biblioteca update-informer su aplicación de CLI, que se ejecuta en la consola, comprobará de forma periódica (por ejemplo, una vez al día) si se ha publicado una nueva versión. Si hay disponible una nueva versión, «update-informer» enviará un mensaje a la consola (por ejemplo, «Hay disponible una nueva versión, use este enlace para actualizar»).

Hay varios proyectos con herramientas parecidas. Por ejemplo, la CLI de GitHub permite usar GitHub desde el terminal. Todas las funciones pueden usarse nada más instalarla, y permite trabajar con incidencias, solicitudes de incorporación de cambios, comprobaciones, publicación de versiones y más. También hay una biblioteca como esta en Javascript, que es muy popular.

Rust tiene una biblioteca parecida, pero hace mucho que no se actualiza, no es compatible con GitHub y no terminaba de convencernos su funcionamiento. No se puede personalizar ni cambiar. Así que desarrollamos una solución más universal para la comunidad de Rust que se puede personalizar de todas las formas posibles.

update-informer enera una notificación en el código al iniciarse el programa (en los registros). Una de las características principales de esta herramienta que hace que destaque es que es compatible con GitHub y también con Crates.io. También permite configurar la frecuencia de las comprobaciones (se puede especificar cualquier duración, incluso cada segundo) y tiene un número mínimo de dependencias (solo ureq, semver y serde. Esto es muy importante, ya que las soluciones de terceros suelen tener un gran número de dependencias, lo que incrementa la base de código, el tiempo de compilación, etc.

Este es un ejemplo del resultado:

update-informer

Uso

Agregue update-informer a Cargo.toml:

[dependencies]
update-informer = "0.2.0"

Para comprobar si hay una nueva versión en Crates.io, use la funciónUpdateInformer::check_version. Esta función obtiene el nombre del proyecto y la versión actual, así como el intervalo de comprobación:

use update_informer::{registry::Crates, Check, UpdateInformer};

let informer = UpdateInformer::new(Crates, "repo", "0.1.0", Duration::from_secs(60 * 60 * 24));
if let Ok(Some(version)) = informer.check_version() {
    println!("New version is available: {}", version);
}

Además, también se puede obtener el nombre y la versión del proyecto de Cargo con variables de entorno:

use update_informer::{registry::Crates, Check, UpdateInformer};

let name = env!("CARGO_PKG_NAME");
let version = env!("CARGO_PKG_VERSION");
UpdateInformer::new(Crates, name, version, Duration::from_secs(60 * 60 * 24)).check_version();

La primera comprobación solo se iniciará cuando finalice el intervalo:

use update_informer::{registry::Crates, Check, UpdateInformer};

const EVERY_HOUR: Duration = Duration::from_secs(60 * 60);

let informer = UpdateInformer::new(Crates, "repo", "0.1.0", EVERY_HOUR);
informer.check_version(); // The check will start only after an hour

Para comprobar si hay una nueva versión en GitHub (tenga en cuenta que el nombre del proyecto debe contener el propietario):

use update_informer::{registry::GitHub, Check, UpdateInformer};

let informer = UpdateInformer::new(GitHub, "owner/repo", "0.1.0", Duration::from_secs(60 * 60 * 24));
informer.check_version();

Planes para el futuro

Actualmente, se ha publicado la versión v0.2.0 de update-informer Si despierta el interés de la comunidad o se solicitan mejoras, seguiremos trabajando en mejorar la herramienta y añadir más funciones. En el futuro, tenemos previsto que sea compatible con los repositorios más populares como (GitLab y Bitbucket), y también con varios clientes HTTP para reducir las dependencias. ¡Vea el proyecto en GitHub y envíe solicitudes de incorporación de cambios!

Nuestro trabajo en proyectos de código abierto (y el hecho de que cada mes patrocinamos varios proyectos de software de código abierto) demuestra que tenemos iniciativa y que conocemos las necesidades y preferencias de los desarrolladores. Si necesita actualizar su proyecto a las últimas versiones de la pila tecnológica, use el formulario siguiente para ponerse en contacto con nosotros.

La idea para este proyecto se me ocurrió cuando trabajaba con la CLI de GitHub. Recibí la notificación de una nueva versión. Me gustó la idea y pensé en añadir algo similar a “dotenv-linter”. No había ninguna solución adecuada, así que decidí crear mi propia solución en Rust
Mikhail Grachev
entusiasta de código abierto
Contacto
¿Tiene algún proyecto en mente?
Vamos a hacerlo realidad
Adjuntar archivo
Los archivos deben ser menores que 8 MB.
Tipos de archivo permitidos: jpg jpeg png txt rtf pdf doc docx ppt pptx.
Este sitio está protegido por reCAPTCHA y se aplican las Condiciones del servicio y la Política de privacidad de Google.