El día que rompí React Native

Rate this content
Bookmark

4 de noviembre de 2022 - Era solo un día normal para el "equipo de lanzamiento" mientras nos preparábamos para preparar el primer candidato a la liberación para React Native 0.71. Poco sabíamos cómo un lanzamiento inocuo podría haber desencadenado un efecto dominó que resulta en compilaciones fallidas para casi todos los desarrolladores de React Native.


Con la sabiduría de la retrospectiva, repasaremos lo que sucedió, cuáles son nuestras lecciones aprendidas y los puntos bajos de este incidente. Tendremos la oportunidad de mirar a través de las entrañas de React Native, descubrir nuestra cultura de respuesta a incidentes y aprender cómo estamos fortaleciendo nuestro ecosistema para protegernos contra eventos similares en el futuro.  


Únete a mí mientras revivimos este incidente, y no pierdas esta oportunidad de obtener información, inspirarte y abrazar las lecciones aprendidas del día que rompí React Native.

FAQ

La Starbucks Reserve Roastery en Seattle es un lugar especializado donde se realizan catas de café. Es ideal para los aficionados al café que desean explorar diferentes sabores y preparaciones.

El incidente involucró un problema donde las compilaciones de React Native comenzaron a fallar debido a una versión inestable (0.71.0.rc0) que se publicó erróneamente en Maven Central, causando que las compilaciones que usaban dependencias dinámicas se rompieran.

El problema se solucionó lanzando parches para todas las versiones de React Native hasta la 0.63, cubriendo el 99% de las descargas, y eventualmente eliminando los artefactos problemáticos de Maven Central con la ayuda de Sonotype.

Tras el incidente, el equipo de React Native implementó mejores prácticas y soluciones preventivas en su infraestructura, eliminaron muchas dependencias dinámicas y consideraron establecer una ventana de soporte de lanzamiento para versiones compatibles.

Maven Central es un repositorio donde se distribuyen las bibliotecas de Android, incluyendo los artefactos de React Native. Esencialmente, es un cubo S3 utilizado para almacenar bibliotecas que son demasiado grandes para ser incluidas en el paquete NPM.

El paquete NPM de React Native se volvió demasiado grande, superando los 200 megabytes, lo que llevó a problemas con la publicación en NPM. Esto forzó al equipo a mover los artefactos de Android a Maven Central para manejar mejor el tamaño y la distribución.

La 'dependencia plus' en Gradle permitía obtener la versión más alta disponible de una biblioteca, lo que causó que las compilaciones comenzaran a usar una versión inestable recién publicada en Maven Central, rompiendo así las compilaciones existentes.

Nicola Corti
Nicola Corti
30 min
08 Dec, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla discute un incidente en el que un lanzamiento de React Native provocó compilaciones fallidas y cómo se solucionó. El incidente ocurrió debido a que el paquete NPM se volvió demasiado grande, lo que llevó al traslado de los artefactos de Android a Maven central. El uso de versiones dinámicas y la dependencia plus en React Native se identificaron como factores contribuyentes al problema. Las lecciones aprendidas incluyen la importancia de eliminar las dependencias plus y la necesidad de mejores recomendaciones para crear bibliotecas resistentes.

Available in English: The day I broke React Native

1. El Día Que Rompí React Native

Short description:

Hola a todos. Hoy quiero contarles una historia de un lluvioso día de noviembre del año pasado en Seattle. La gente comenzó a informar sobre compilaciones de React Native rotas, y descubrimos que una próxima versión de React Native estaba causando el problema. Yo, Nicola Corti, ingeniero de Android en Meta, les guiaré a través del incidente y cómo lo solucionamos.

Hola a todos. Así que hoy quiero contarles una historia. Es la historia de un lluvioso día de noviembre del año pasado. Estaba en Seattle. Si alguna vez han estado en Seattle, asegúrense de visitar la Starbucks Reserve Roastery. Es un Starbucks especial donde hacen catas de café. Si te gusta el café, definitivamente querrás echarle un vistazo. Y yo estaba allí. Estaba revisando mi correo electrónico, revisando mis notificaciones de GitHub. Y sí, todo parecía genial. Pero luego la gente comenzó a enviarme mensajes de que por alguna razón sus compilaciones, sus compilaciones de React Native estaban rotas. Y bueno, estaba en Discord. Así que déjame ver qué está pasando realmente.

Y en React Native, ejecutarás Android para ejecutar la aplicación Android. Y la gente comenzó a informar sobre mensajes de error de la nada, de una manera realmente terrible. Imagina que tu compilación estaba funcionando hace un minuto, luego vuelves a compilar, no haces ningún cambio de código y tu compilación está rota. Esto es terrible desde el punto de vista de la experiencia del desarrollador. Y obviamente no debería suceder. Luego comenzamos a investigar, oye, ¿por qué estas compilaciones se están rompiendo realmente? Y nos dimos cuenta de que en el mensaje de error, se mencionaba una próxima versión de React Native, como 0.710.rc0. E incluso para los usuarios que estaban en versiones anteriores de React Native, como en 68 y 69 y así sucesivamente. En ese punto, nos dimos cuenta, sí, creo que tenemos un problema. Y personalmente tuve un gran problema porque se suponía que debía volar de regreso a Londres en un par de horas. Entonces, ¿cómo lo solucionamos?

Así que mi nombre es Nicola Corti. Trabajo como ingeniero de Android en el equipo de React Native en Meta. Y hoy estoy emocionado de contar la historia del día en que rompí React Native. Para entender completamente qué fue esto, les guiaré a través de lo que sucedió, qué fue el incidente real, por qué se rompió y cómo lo solucionamos realmente. Así que la advertencia aquí es, bueno, el incidente fue en Android, pero efectivamente rompimos la compilación para todos. Así que bueno, no muchas personas aquí usan React Native, pero confíen en mí, hay muchas lecciones aprendidas que se aplican a cualquier tecnología. Así que comencemos con lo que sucedió. Dentro de React Native y dentro del equipo de React Native, tenemos este grupo de personas llamado el equipo de lanzamiento.

2. Proceso de Lanzamiento de React Native

Short description:

El equipo responsable de los lanzamientos de React Native ejecuta el script Bump.OSS version con la próxima versión. El primer candidato a la liberación, RC0, se envía para pruebas. En 0.71, el paquete NPM se volvió demasiado grande, lo que llevó a la mudanza de los artefactos de Android a Maven central.

Son responsables de elaborar nuevas versiones de React Native cada cuatro a seis meses. Y lo que hacen, lanzan el script desde la consola, que se llama Bump.OSS version, con la próxima versión que tienen la intención de lanzar. Cuando cortamos una nueva rama, hacemos el RC0, que es el primer candidato a la liberación. El primer candidato a la liberación generalmente es inestable. Simplemente lo cortamos y lo enviamos al mercado para que la gente pueda comenzar a testing y decirnos si hay problemas de integración o regresiones. Así que 0.71, que fue a principios de este año, en realidad, fue bastante grande, y hubo muchos cambios dentro.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Remix Flat Routes – Una Evolución en el Enrutamiento
Remix Conf Europe 2022Remix Conf Europe 2022
16 min
Remix Flat Routes – Una Evolución en el Enrutamiento
Top Content
Esta charla presenta la nueva convención Flat Routes que probablemente será la predeterminada en una futura versión de Remix. Simplifica la convención existente y también te brinda nuevas capacidades.
Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
React Advanced Conference 2023React Advanced Conference 2023
29 min
Elevando el Listón: Nuestro Viaje Haciendo de React Native una Opción Preferida
En Microsoft, estamos comprometidos a proporcionar a nuestros equipos las mejores herramientas y tecnologías para construir aplicaciones móviles de alta calidad. React Native ha sido durante mucho tiempo una opción preferida por su alto rendimiento y gran experiencia de usuario, pero conseguir que los stakeholders se suban al carro puede ser un desafío. En esta charla, compartiremos nuestro viaje de hacer de React Native una opción preferida para los stakeholders que priorizan la facilidad de integración y la experiencia del desarrollador. Discutiremos las estrategias específicas que utilizamos para alcanzar nuestro objetivo y los resultados que logramos.
Cómo hacer un juego web tú solo
JS GameDev Summit 2023JS GameDev Summit 2023
27 min
Cómo hacer un juego web tú solo
Nunca ha sido tan fácil hacer tu propio juego web, pero sigue siendo extremadamente difícil. ¿Qué juego deberías hacer? ¿Qué motor deberías elegir? Vamos a discutir cómo responder a estos problemas y formas de aprovechar la plataforma única que es la web.
Opensource Documentation—Tales from React and React Native
React Finland 2021React Finland 2021
27 min
Opensource Documentation—Tales from React and React Native
Documentation is often your community's first point of contact with your project and their daily companion at work. So why is documentation the last thing that gets done, and how can we do it better? This talk shares how important documentation is for React and React Native and how you can invest in or contribute to making your favourite project's docs to build a thriving community
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
Desplegar una aplicación no es un proceso fácil. Te encontrarás con muchos problemas y puntos de dolor que resolver para que funcione correctamente. Lo peor es: ahora que puedes desplegar tu aplicación en producción, ¿cómo no vas a poder desplegar también todas las ramas del proyecto para tener acceso a vistas previas en vivo? ¿Y poder hacer un revert rápido a pedido?Afortunadamente, el clásico conjunto de herramientas de DevOps tiene todo lo que necesitas para lograrlo sin comprometer tu salud mental. Al mezclar expertamente Git, herramientas de Unix y llamadas a API, y orquestar todo ello con JavaScript, dominarás el secreto de los despliegues atómicos seguros.No necesitarás depender de servicios comerciales: ¡conviértete en el maestro perfecto de las herramientas y netlifica tu aplicación desde casa!
Tu Ritmo con GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
31 min
Tu Ritmo con GraphQL
Construir con GraphQL por primera vez puede ser desde desafiante hasta pan comido. Comprender qué características buscar en tus herramientas de cliente y servidor y adoptar los hábitos correctos (y deshacerte de los viejos hábitos) es la clave para tener éxito con un equipo de cualquier tamaño en GraphQL.

Esta charla ofrece una visión general de los desafíos comunes que he visto en numerosos equipos al construir con GraphQL, cómo superaron las fuentes comunes de frustración y la mentalidad que finalmente adoptaron, y las lecciones aprendidas, para que puedas adoptar y seguir confiando en GraphQL con confianza.

Workshops on related topic

Presentando FlashList: Construyamos juntos una lista performante en React Native
React Advanced Conference 2022React Advanced Conference 2022
81 min
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
WorkshopFree
David Cortés Fulla
Marek Fořt
Talha Naqvi
3 authors
En esta masterclass aprenderás por qué creamos FlashList en Shopify y cómo puedes usarlo en tu código hoy. Te mostraremos cómo tomar una lista que no es performante en FlatList y hacerla performante usando FlashList con mínimo esfuerzo. Usaremos herramientas como Flipper, nuestro propio código de benchmarking, y te enseñaremos cómo la API de FlashList puede cubrir casos de uso más complejos y aún así mantener un rendimiento de primera categoría.Sabrás:- Breve presentación sobre qué es FlashList, por qué lo construimos, etc.- Migrando de FlatList a FlashList- Enseñando cómo escribir una lista performante- Utilizando las herramientas proporcionadas por la biblioteca FlashList (principalmente el hook useBenchmark)- Usando los plugins de Flipper (gráfico de llamas, nuestro perfilador de listas, perfilador de UI & JS FPS, etc.)- Optimizando el rendimiento de FlashList utilizando props más avanzados como `getType`- 5-6 tareas de muestra donde descubriremos y solucionaremos problemas juntos- Preguntas y respuestas con el equipo de Shopify
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
React Summit 2022React Summit 2022
117 min
Detox 101: Cómo escribir pruebas de extremo a extremo estables para su aplicación React Native
Top Content
WorkshopFree
Yevheniia Hlovatska
Yevheniia Hlovatska
A diferencia de las pruebas unitarias, las pruebas de extremo a extremo buscan interactuar con su aplicación tal como lo haría un usuario real. Y como todos sabemos, puede ser bastante desafiante. Especialmente cuando hablamos de aplicaciones móviles.
Las pruebas dependen de muchas condiciones y se consideran lentas e inestables. Por otro lado, las pruebas de extremo a extremo pueden dar la mayor confianza de que su aplicación está funcionando. Y si se hace correctamente, puede convertirse en una herramienta increíble para aumentar la velocidad del desarrollador.
Detox es un marco de pruebas de extremo a extremo en caja gris para aplicaciones móviles. Desarrollado por Wix para resolver el problema de la lentitud e inestabilidad y utilizado por React Native en sí como su herramienta de pruebas E2E.
Únete a mí en esta masterclass para aprender cómo hacer que tus pruebas de extremo a extremo móviles con Detox sean excelentes.
Prerrequisitos- iOS/Android: MacOS Catalina o más reciente- Solo Android: Linux- Instalar antes de la masterclass
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
React Summit Remote Edition 2021React Summit Remote Edition 2021
60 min
Cómo construir una animación interactiva de “Rueda de la Fortuna” con React Native
Top Content
Workshop
Oli Bates
Oli Bates
- Introducción - Cleo & nuestra misión- Lo que queremos construir, cómo encaja en nuestro producto & propósito, revisar los diseños- Comenzando con la configuración del entorno & “hola mundo”- Introducción a la animación de React Native- Paso 1: Hacer girar la rueda al presionar un botón- Paso 2: Arrastrar la rueda para darle velocidad- Paso 3: Agregar fricción a la rueda para frenarla- Paso 4 (extra): Agregar hápticos para una sensación inmersiva
Pruebas Efectivas con Detox
React Advanced Conference 2023React Advanced Conference 2023
159 min
Pruebas Efectivas con Detox
Workshop
Josh Justice
Josh Justice
Así que has configurado Detox para probar tu aplicación React Native. ¡Buen trabajo! Pero aún no has terminado: todavía hay muchas preguntas que necesitas responder. ¿Cuántas pruebas escribes? ¿Cuándo y dónde las ejecutas? ¿Cómo te aseguras de que hay datos de prueba disponibles? ¿Qué haces con partes de tu aplicación que utilizan APIs móviles que son difíciles de automatizar? Podrías invertir mucho esfuerzo en estas cosas, ¿vale la pena?
En esta masterclass de tres horas abordaremos estas preguntas discutiendo cómo integrar Detox en tu flujo de trabajo de desarrollo. Saldrás con las habilidades e información que necesitas para hacer de las pruebas Detox una parte natural y productiva del desarrollo diario.
Tabla de contenidos:
- Decidir qué probar con Detox vs React Native Testing Library vs pruebas manuales- Configuración de una capa de API falsa para pruebas- Cómo hacer que Detox funcione en CI en GitHub Actions de forma gratuita- Decidir cuánto de tu aplicación probar con Detox: una escala móvil- Integración de Detox en tu flujo de trabajo de desarrollo local
Prerrequisitos
- Familiaridad con la construcción de aplicaciones con React Native- Experiencia básica con Detox- Configuración de la máquina: un entorno de desarrollo CLI de React Native en funcionamiento que incluye Xcode o Android Studio
Despliegue de aplicaciones React Native en la nube
React Summit 2023React Summit 2023
88 min
Despliegue de aplicaciones React Native en la nube
WorkshopFree
Cecelia Martinez
Cecelia Martinez
Desplegar aplicaciones React Native manualmente en una máquina local puede ser complejo. Las diferencias entre Android e iOS requieren que los desarrolladores utilicen herramientas y procesos específicos para cada plataforma, incluidos los requisitos de hardware para iOS. Los despliegues manuales también dificultan la gestión de las credenciales de firma, las configuraciones de entorno, el seguimiento de las versiones y la colaboración en equipo.
Appflow es la plataforma de DevOps móvil en la nube creada por Ionic. Utilizar un servicio como Appflow para construir aplicaciones React Native no solo proporciona acceso a potentes recursos informáticos, sino que también simplifica el proceso de despliegue al proporcionar un entorno centralizado para gestionar y distribuir tu aplicación en múltiples plataformas. Esto puede ahorrar tiempo y recursos, permitir la colaboración, así como mejorar la confiabilidad y escalabilidad general de una aplicación.
En este masterclass, desplegarás una aplicación React Native para su entrega en dispositivos de prueba Android e iOS utilizando Appflow. También aprenderás los pasos para publicar en Google Play y Apple App Stores. No se requiere experiencia previa en el despliegue de aplicaciones nativas, y obtendrás una comprensión más profunda del proceso de despliegue móvil y las mejores prácticas para utilizar una plataforma de DevOps móvil en la nube para enviar rápidamente a gran escala.
Introducción a React Native Testing Library
React Advanced Conference 2022React Advanced Conference 2022
131 min
Introducción a React Native Testing Library
Workshop
Josh Justice
Josh Justice
¿Estás satisfecho con tus suites de pruebas? Si dijiste que no, no estás solo, la mayoría de los desarrolladores no lo están. Y hacer pruebas en React Native es más difícil que en la mayoría de las plataformas. ¿Cómo puedes escribir pruebas en JavaScript cuando el código JS y nativo están tan entrelazados? ¿Y qué diablos se supone que debes hacer con esa persistente advertencia de act()? Ante estos desafíos, algunos equipos nunca logran avanzar en las pruebas de su aplicación de React Native, y otros terminan con pruebas que no parecen ayudar y solo requieren tiempo adicional para mantener.
Pero no tiene que ser así. React Native Testing Library (RNTL) es una excelente biblioteca para pruebas de componentes, y con el modelo mental adecuado puedes usarla para implementar pruebas de bajo costo y alto valor. En este taller de tres horas aprenderás las herramientas, técnicas y principios que necesitas para implementar pruebas que te ayudarán a lanzar tu aplicación de React Native con confianza. Saldrás con una visión clara del objetivo de tus pruebas de componentes y con técnicas que te ayudarán a superar cualquier obstáculo que se interponga en ese objetivo.aprenderás:- Los diferentes tipos de pruebas en React Native, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos de texto, imagen y código nativo para verificar e interactuar con ellos- El valor de las simulaciones y por qué no se deben evitar- Los desafíos con la asincronía en las pruebas de RNTL y cómo manejarlos- Opciones para manejar funciones y componentes nativos en tus pruebas de JavaScript
Requisitos previos:- Familiaridad con la construcción de aplicaciones con React Native- Experiencia básica en la escritura de pruebas automatizadas con Jest u otro framework de pruebas unitarias- No necesitas experiencia previa con React Native Testing Library- Configuración de la máquina: Node 16.x o 18.x, Yarn, ser capaz de crear y ejecutar con éxito una nueva aplicación Expo siguiendo las instrucciones en https://docs.expo.dev/get-started/create-a-new-app/