Saltar al contenido principal

Cargo Deny

cargo-deny es un complemento para cargo que te permite analizar el gráfico de dependencias de tu proyecto para asegurar que todas tus dependencias se ajustan a tus expectativas y requisitos. Te ayuda a hacer cumplir políticas de licencia, detectar y prevenir dependencias inseguras o no deseadas, y mantener la calidad del código en tus proyectos de Rust.

Inicio Rápido

Para usar cargo-deny, primero necesitas instalarlo. Puedes hacer esto ejecutando el siguiente comando en tu terminal:

cargo install --locked cargo-deny

inicializa tu proyecto con una configuración predeterminada y luego ejecuta todas las comprobaciones contra tu proyecto.

cargo-deny && cargo deny init && cargo deny check

Interfaz de Línea de Comandos

El comando init (cargo deny init)

La configuración de cargo-deny es un poco complicada, por eso proporcionamos el comando init para crear un archivo de configuración a partir de una plantilla para que tengas un punto de partida para configurar cómo quieres que cargo-deny analice tu proyecto.

El comando init puede tomar un camino como argumento para usarlo como ruta del archivo de configuración en lugar del predeterminado, que es cwd/deny.toml.

cargo deny init

o

cargo deny init path/to/deny.toml

El comando check (cargo deny check)

El comando check es el subcomando principal de cargo-deny ya que es lo que realmente pasa por todas las cajas de tu proyecto y las verifica contra tu configuración.

Uso: cargo-deny check [OPCIONES] [CUÁL]...

Argumentos

advisories

La comprobación de advisories se utiliza para detectar problemas en las cajas consultando una base de datos de avisos.

cargo deny check advisories

bans

La comprobación de bans se utiliza para denegar (o permitir) cajas específicas, así como para detectar y manejar múltiples versiones de la misma caja.

cargo deny check bans

licenses

La comprobación de licenses se utiliza para verificar que cada caja que usas tiene términos de licencia que consideras aceptables. cargo-deny hace esto evaluando los requisitos de licencia especificados por cada caja contra la configuración que has especificado, para determinar si tu proyecto cumple con los requisitos de licencia de esa caja.

cargo deny check licenses

sources

La comprobación de sources asegura que las cajas solo provienen de fuentes en las que confías.

cargo deny check sources

Opciones

-A, --allow

Establecer permitidos de linterna

--audit-compatible-output Para facilitar la transición de cargo-audit a cargo-deny, este indicador le dirá a cargo-deny que produzca la misma salida exacta que cargo-audit lo haría, a stdout en lugar de stderr, tal como con cargo-audit.

Tenga en cuenta que este indicador solo se aplica cuando el formato de salida es JSON, y tenga en cuenta que dado que cargo-deny admite múltiples bases de datos de avisos, en lugar de un solo objeto JSON, habrá 1 para cada base de datos de avisos única.

-c, --config Ruta al archivo de configuración que se usará

Por defecto es cwd/deny.toml si no se especifica

-d, --disable-fetch Desactivar la descarga de la base de datos de avisos

Cuando se ejecuta la comprobación de advisories, se descargará y abrirá la base de datos de avisos configurada. Si se pasa este indicador, la base de datos no se descargará, pero ocurrirá un error si no existe localmente.

Esta opción también se establece si se usa el indicador --offline en las opciones globales.

--exclude-dev Si se establece en verdadero, todas las dependencias de desarrollo, incluso una para las cajas de espacio de trabajo, no se incluyen en el gráfico de cajas utilizado para cualquiera de las comprobaciones.

-D, --deny Establecer negados de linterna

--feature-depth Especifica la profundidad a la que se añaden los bordes de función en los gráficos de inclusión

-g, --graph Ruta a la raíz de salida del gráfico

Si se establece, se creará un gráfico en dotviz para cada vez que se detecten múltiples versiones de la misma caja.

--hide-inclusion-graph Oculta el gráfico de inclusión al imprimir información sobre una caja

Por defecto, si un mensaje de diagnóstico pertenece a una caja específica, cargo-deny adjuntará un gráfico de dependencia inverso al diagnóstico para mostrarte cómo se introdujo esa caja en tu proyecto.

algún mensaje de diagnóstico

the-crate
├── a-crate
└── b-crate
└── c-crate

-s, --show-stats Mostrar estadísticas para todas las comprobaciones, independientemente del nivel de registro

-W, --warn Establecer advertencias de linterna

Preguntas Frecuentes

Permitir aceptar cualquier licencia de un paquete

  • Pregunta uno: no se pudo recuperar una expresión de licencia válida para la caja. información de error:
error[L003]: ring = 0.16.20 no tiene licencia
┌─ ring 0.16.20 (registro+https://github.com/rust-lang/crates.io-index):2:9

2 │ nombre = "ring"
│ ^^^^ no se pudo recuperar una expresión de licencia válida para la caja
3 │ versión = "0.16.20"
4 │ licencia = ""
│ - expresión de licencia no fue especificada
5 │ licencia-archivos = [
6 │ { path = "LICENCIA", hash = 0xbd0eed23, score = 0.67, licencia = "OpenSSL" },

¿Cómo resolverlo? En el archivo deny.toml, agrega la siguiente información:

[[licenses.clarify]]
name = "ring"
# SPDX considera que OpenSSL abarca tanto las licencias OpenSSL como SSLeay
# https://spdx.org/licenses/OpenSSL.html
# ISC - Tanto BoringSSL como ring utilizan esto para sus archivos nuevos
# MIT - "Los archivos en third_party/ tienen sus propias licencias, como se describe en ellos. La licencia MIT, para third_party/fiat, que, a diferencia de otros directorios third_party, se compila en bibliotecas no de prueba, se incluye a continuación."
# OpenSSL - Obviamente
expression = "ISC AND MIT AND OpenSSL"
license-files = [{ path = "LICENCIA", hash = 0xbd0eed23 }]