Cargo: Solicitar confirmación de ciertos datos de cajas en la primera publicación

Creado en 22 nov. 2020  ·  3Comentarios  ·  Fuente: rust-lang/cargo

Describa el problema que está tratando de resolver
La solicitud de soporte más común que recibimos para crates.io es eliminar crates. Para evitar romper otras cajas/consumidores, rara vez podemos cumplir con estas solicitudes. Las razones comunes para la solicitud incluyen:

  • Me gustaría cambiar entre - y _ , o modificar la carcasa ( foo vs Foo ) de mi caja.
  • Hice un error tipográfico. Ahora he publicado con el nombre correcto, pero quiero eliminarlo para evitar confusiones. (Recomendamos que retiren todas las versiones de la caja muerta).
  • No me di cuenta de que el campo de autores se completaba automáticamente con mi nombre y dirección de correo electrónico.
  • Estaba probando algo y nadie usará esta caja. (Podrían haber considerado usar la puesta en escena, pero ya es demasiado tarde).

Describa la solución que le gustaría

Durante una publicación, cargo podría comprobar si la caja se ha publicado antes. Si esta es la primera publicación, cargo solicitará al usuario que confirme varios metadatos de cajas. En particular, se le pedirá al usuario que confirme la ortografía exacta del nombre de la caja y el contenido de authors . El usuario debe ser consciente de que no hay forma de cambiar o eliminar estos datos una vez que se publica una caja.

Después de la publicación inicial, cualquier cambio en authors es un cambio explícito realizado en Cargo.toml por lo que esta confirmación solo debe ocurrir una vez. Alternativamente, la solicitud de autoría podría realizarse como parte de cargo new .

Algunas cajas se publican a través de CI u otros scripts. Para evitar interrumpir este caso de uso, la verificación y el aviso solo deben ocurrir en un TTY interactivo. Podríamos agregar un argumento de estilo --yes y advertir si falta el argumento para una primera publicación no interactiva, sin embargo, creo que el indicador interactivo solo cubriría a la gran mayoría de los usuarios que se encuentran con sorpresas aquí.

notas

Podríamos vincular al usuario a las instrucciones para configurar el registro provisional, para cubrir el cuarto punto anterior. Sin embargo, creo que la prioridad debe ser comunicar claramente al usuario que el nombre de la caja es inmutable después de una publicación y confirmar que se siente cómodo compartiendo la información de autoría generada automáticamente.

Teóricamente, los registros alternativos podrían permitir cambiar el nombre o mutar las cajas. Creo que esto rompería muchas suposiciones en cargo y el ecosistema. Por lo tanto, creo que esta verificación debería aplicarse a todos los registros, pero podría hacerse específica para crates.io si se desea. (Si decidimos señalar a los usuarios hacia la puesta en escena, eso solo debe hacerse para el registro predeterminado de crates.io).

C-feature-request Command-publish

Comentario más útil

Supongo que una alternativa a esto es que crates.io "ejecute en seco" y publique nuevas cajas de forma predeterminada, y envíe un correo electrónico al editor/propietario de la caja para confirmar que desea publicar. La caja no se agregaría al índice, tal vez, y no estaría disponible para su descarga, etc. hasta que se confirme la publicación a través de la interfaz de usuario web (o API, tal vez). Esto también podría ser útil, por ejemplo, para probar cambios en README u otros metadatos similares sin publicar varios parches en rápida sucesión.

Sin embargo, la implementación parece mucho más difícil para eso, por lo que tal vez la propuesta de este problema pueda ser un primer paso.

Todos 3 comentarios

Supongo que una alternativa a esto es que crates.io "ejecute en seco" y publique nuevas cajas de forma predeterminada, y envíe un correo electrónico al editor/propietario de la caja para confirmar que desea publicar. La caja no se agregaría al índice, tal vez, y no estaría disponible para su descarga, etc. hasta que se confirme la publicación a través de la interfaz de usuario web (o API, tal vez). Esto también podría ser útil, por ejemplo, para probar cambios en README u otros metadatos similares sin publicar varios parches en rápida sucesión.

Sin embargo, la implementación parece mucho más difícil para eso, por lo que tal vez la propuesta de este problema pueda ser un primer paso.

Además de pedirle al autor que confirme los detalles, Cargo también podría implementar controles para los errores comunes y advertir sobre ellos.

Advertencia: el nombre de la caja contiene letras mayúsculas. Los nombres de las cajas de óxido no distinguen entre mayúsculas y minúsculas y la mayoría de las cajas usan todos los nombres en minúsculas para mantener la coherencia.

Advertencia: el nombre de la caja contiene guiones. Cuando se usa el cajón en el código, los guiones se convierten en guiones bajos. El uso de guiones en los nombres de las cajas da como resultado que la caja tenga un nombre diferente en crates.io que en el código.

etc

publicación de "simulacro"

Esto me recuerda una solicitud de función interesante rust-lang/crates.io#1515 que sería bueno tener.

La caja no se agregaría al índice, tal vez, y no estaría disponible para su descarga, etc. hasta que se confirme la publicación a través de la interfaz de usuario web (o API, tal vez).

No creo que tengamos un problema abierto para esto, pero en algún lugar vi una sugerencia de que crates.io podría permitir la reserva de nombres de cajas por tiempo limitado (con la capacidad de actualizarlo manualmente cada pocos meses). Si tuviéramos la infraestructura para reservar nombres, entonces se podría construir una carcasa especial para la primera publicación. Nos gustaría que las cajas reservadas aparecieran en la búsqueda y que tuvieran algún tipo de página de destino que dijera que la caja está reservada o pendiente. (Y los nombres reservados podrían modificarse de forma compatible hasta que se publique la primera versión).

Esto también podría ser útil, por ejemplo, para probar cambios en README u otros metadatos similares sin publicar varios parches en rápida sucesión.

Realmente me gusta esta idea, ya que definitivamente hice algunos lanzamientos minutos después de ver que mi nuevo y brillante lanzamiento tiene un problema con el archivo README. Va más allá de los enfoques --dry-run[=verify] y de primera publicación anteriores. Los usuarios podrían publicar con --dry-run=pending y mostraríamos la versión como pendiente (similar a yanked ), pero solo los propietarios de la caja podrían ver la versión pendiente. Para el README en particular, el mayor problema que veo es que se pueden almacenar en caché (creo que durante 1 día actualmente) cuando se sirven desde S3. Por lo tanto, es posible que necesitemos casos especiales para las versiones pendientes.

Creo que estas características podrían funcionar bien juntas y proporcionar un buen camino para cambios incrementales. También estoy de acuerdo en que la carcasa especial del lado del servidor de primera publicación en este momento requeriría mucho trabajo. Sin embargo, me interesaría ver todas estas opciones exploradas más a fondo.

¿Fue útil esta página
0 / 5 - 0 calificaciones