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.

This talk has been presented at React Day Berlin 2023, check out the latest edition of this React Conference.

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
Remix Flat Routes is a new convention that aims to make it easier to see and organize the routes in your app. It allows for the co-location of support files with routes, decreases refactor and redesign friction, and helps apps migrate to Remix. Flat Folders convention supports co-location and allows importing assets as relative imports. To migrate existing apps to Flat Routes, use the Remix Flat Routes package's migration tool.
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
This Talk discusses Rack Native at Microsoft and the efforts to improve code integration, developer experience, and leadership goals. The goal is to extend Rack Native to any app, utilize web code, and increase developer velocity. Implementing web APIs for React Native is being explored, as well as collaboration with Meta. The ultimate aim is to make web code into universal code and enable developers to write code once and have it work on all platforms.
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
This talk guides you on how to make a web game by yourself, emphasizing the importance of focusing on tasks that interest you and outsourcing the rest. It suggests choosing a game engine that allows distribution on the web and aligns with your understanding and enjoyment. The talk also highlights the significance of finding fun in the creative process, managing scope, cutting features that don't align with the game's direction, and iterating to the finish line. It concludes by discussing the options for publishing the game on the web and leveraging unique web features.
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
This Talk discusses atomic deployment for JavaScript and TypeScript, focusing on automated deployment processes, Git hooks, and using hard links to copy changes. The speaker demonstrates setting up a bare repository, configuring deployment variables, and using the post-receive hook to push changes to production. They also cover environment setup, branch configuration, and the build process. The Talk concludes with tips on real use cases, webhooks, and wrapping the deployment process.
Tu Ritmo con GraphQL
GraphQL Galaxy 2022GraphQL Galaxy 2022
31 min
Tu Ritmo con GraphQL
The Talk discusses the value proposition of GraphQL and its ability to solve common pain points in API development. It highlights the importance of making informed decisions when choosing GraphQL clients, servers, and schema builders. The Talk also emphasizes the need to focus on the best developer experience in the present rather than seeking a perfect long-term solution. Additionally, it mentions the future of the Urkel GraphQL client and the reasons for dropping ReScript support. Overall, the Talk provides insights into the current state and future trends of GraphQL development.

Workshops on related topic

Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
React Summit 2024React Summit 2024
92 min
Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web
Featured Workshop
Vivek Nayyar
Vivek Nayyar
Sumérgete en el mundo de la IA con nuestro masterclass interactivo diseñado específicamente para desarrolladores web. "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" ofrece una oportunidad única para cerrar la brecha entre la IA y el desarrollo web. A pesar de la prominencia de Python en el desarrollo de IA, el vasto potencial de JavaScript sigue siendo en gran medida inexplorado. Este masterclass tiene como objetivo cambiar eso.A lo largo de esta sesión práctica, los participantes aprenderán cómo aprovechar LangChain, una herramienta diseñada para hacer que los modelos de lenguaje grandes sean más accesibles y útiles, para construir agentes de IA dinámicos directamente dentro de entornos JavaScript. Este enfoque abre nuevas posibilidades para mejorar las aplicaciones web con funciones inteligentes, desde el soporte al cliente automatizado hasta la generación de contenido y más.Comenzaremos con los conceptos básicos de LangChain y los modelos de IA, asegurando una base sólida incluso para aquellos nuevos en IA. A partir de ahí, nos sumergiremos en ejercicios prácticos que demuestran cómo integrar estas tecnologías en proyectos reales de JavaScript. Los participantes trabajarán en ejemplos, enfrentando y superando los desafíos de hacer que la IA funcione sin problemas en la web.Este masterclass es más que una experiencia de aprendizaje; es una oportunidad de estar a la vanguardia de un campo emergente. Al final, los asistentes no solo habrán adquirido habilidades valiosas, sino que también habrán creado funciones mejoradas con IA que podrán llevar a sus proyectos o lugares de trabajo.Ya seas un desarrollador web experimentado curioso acerca de la IA o estés buscando expandir tus habilidades en áreas nuevas y emocionantes, "Masterclass: Integrando LangChain con JavaScript para Desarrolladores Web" es tu puerta de entrada al futuro del desarrollo web. Únete a nosotros para desbloquear el potencial de la IA en tus proyectos web, haciéndolos más inteligentes, interactivos y atractivos para los usuarios.
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
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.
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