Es uno de ellos, pero está realmente muy avanzado y hay mucho más en juego. Y estoy bastante seguro de que ahora mismo te estás preguntando ¿por qué es complicado? ¿Cuál es la complejidad? Y puedo abordar dos series diferentes de complejidades. El primer tipo está relacionado con una serie de cosas que ocurren en cualquier proyecto de código abierto de tamaño mediano a grande. Estas son complejidades genéricas que la mayoría de nosotros que hacemos código abierto podemos enfrentar. Por ejemplo, el hecho de que te preocupes por la comunidad. Puede sonar extraño, pero básicamente, cuando te preocupas por tu comunidad, cuando haces un lanzamiento, también quieres producir el material para que tus desarrolladores, los desarrolladores que usan tu biblioteca, puedan consumirlo correctamente. Entonces, en React Native, en particular, donde nos importa mucho, tenemos el blog de cambios, hacemos diferencias para que UpgradeHelper pueda mostrar lo que necesitas hacer, tenemos la documentación y muchas otras cosas. También hacemos muchas pruebas manuales porque sí, confiamos en CI, pero también desconfiamos. Además, el código se mueve muy, muy rápido. En particular, en React Native, tenemos alrededor de 400 confirmaciones cada mes, lo cual, ya sabes, es un desafío mantenerse al día con ese ritmo. Y hablando específicamente del código que se mueve rápido, dado que React Native depende de React, por ejemplo, depende de los ecosistemas de Android e iOS, también necesitamos movernos lo suficientemente rápido para poder alcanzar a todas estas otras bibliotecas. Puede parecer trivial, como, oh, bueno, React, solo necesitas actualizar la versión de la biblioteca, ¿verdad? Bueno, en realidad no. Para que React Native use una versión específica de React, necesita tener una confirmación de sincronización donde se requiere trabajo manual. Y dejé un ejemplo allí. Pero hablando de las complejidades específicas de React Native, he abordado dos en esta diapositiva. Uno, que probablemente es el que más malentendidos genera, es que Facebook es el propietario de React Native, pero la comunidad se encarga de los lanzamientos. Y esto es algo que, y hablaré un poco más sobre esto más adelante, ha estado mejorando, pero internamente, Facebook, en su monorepo, usa React Native. Es decir, no hacen React Native en sí, por lo que su experiencia con el código es diferente. Además, debido a que el código de React Native no es de código abierto en primer lugar, como sucede con React, sino que es un espejo del código que tienen en su monorepo, cuando una persona del equipo de React Native hace una confirmación internamente, luego se replica en la rama principal de la versión de código abierto sin pasar por el procedimiento estándar de PR. No pasa por el mismo CI. Por lo tanto, a veces, debido a que el CI interno y el CI externo son diferentes, a veces el CI externo puede fallar. Y también, Facebook siempre puede tener la última palabra o la última decisión. O pueden decidir algo sobre el lanzamiento y nosotros tenemos que cumplir con estos nuevos requisitos. Además, como mencioné, el código se mueve rápido, y el proceso de lanzamiento pasa por ramas, por lo que para cada lanzamiento estable, creamos una rama. A veces es difícil hacer lanzamientos de parches. Entonces, si, por ejemplo, 62.1, queríamos seleccionar una confirmación, pero esta confirmación se realizó, digamos, dos meses después del punto en el que creamos la rama, seleccionarla, que es un procedimiento en Git para tomar una confirmación y reaplicarla en una rama, puede generar conflictos. Por lo tanto, eso introduce un poco de complejidad. Entonces, como mencioné, aunque existen estas complejidades, en particular el aspecto de Facebook, está mejorando, está mejorando mucho, y hablaré un poco más sobre eso en un momento. Pero ahora, revisemos esos pasos. Como estaba diciendo, mucho trabajo, muchas iteraciones, muchos pasos que hacemos aquí no son estrictamente por el código, sino porque nos importa.
Comments