2 de enero de 2025
Jenkins vs GitHub Actions
Hace poco me topé con un interesante artículo de la gente de Slack, donde narran su experiencia migrando de Jenkins a GitHub Actions (GHA).
Para comenzar, necesitas importar los módulos necesarios y tener acceso a tu base de datos Firestore:
import { getFirestore, collection, getDocs, writeBatch, doc, deleteField } from "firebase/firestore";
const firestore = getFirestore();
Un batch permite agrupar múltiples operaciones de escritura, como actualizaciones o eliminaciones, en una sola solicitud. Esto asegura que todas las operaciones se realicen de forma atómica, lo que significa que todas las modificaciones dentro del batch se aplican de manera simultánea y completa.
Si alguna de las operaciones falla, todas las operaciones en el batch se revierten, garantizando que la base de datos no quede en un estado inconsistente.
const batch = writeBatch(firestore);
Para modificar todos los documentos dentro de una colección, primero debes obtenerlos:
const postsSnapshot = await getDocs(collection(firestore, "posts"));
Con los documentos en mano, puedes iterar sobre cada uno de ellos para actualizar o eliminar los campos necesarios.
Aquí se muestra cómo agregar un campo llamado nuevoCampo y cómo eliminar un campo llamado antiguoCampo:
postsSnapshot.forEach((docSnapshot) => {
const docRef = docSnapshot.ref;
batch.update(docRef, {
nuevoCampo: [],
antiguoCampo: deleteField(),
});
});
Finalmente, después de preparar todas las modificaciones, es momento de aplicarlas usando batch.commit():
await batch.commit();
Este método asegura que todas las actualizaciones y eliminaciones se ejecuten de manera eficiente y sin errores.