# Stack EFÍMERO para la suite e2e (Playwright) y el smoke REST. # # ⚠️ Todo lo de aquí es desechable y se siembra BORRANDO colecciones # (e2e/seed.js, smoke/seed.js). Por eso el Mongo va en tmpfs y sin volumen # nombrado: no puede sobrevivir al `down`, y así no hay forma de que alguien lo # confunda con el stack local (docker-compose.yml) ni con staging. NUNCA apuntes # la suite a testfuegos.comunes.org. # # Uso: # docker compose -f docker-compose.e2e.yml up -d --build # E2E_BASE_URL=http://localhost:3300 npm --prefix e2e test # docker compose -f docker-compose.e2e.yml down -v # # settings-ci.json se monta tal cual: no lleva secretos (ver el fichero). name: tcef-e2e services: mongo: image: mongo:7 # replSet aunque sea de un nodo: sin oplog, Meteor cae a polling cada 10s y # la unión de zonas tardaría eso en llegar al navegador — justo lo que los # tests miden. command: ["--replSet", "rs0", "--bind_ip_all"] tmpfs: - /data/db healthcheck: test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"] interval: 5s timeout: 5s retries: 20 start_period: 10s mongo-init: image: mongo:7 depends_on: mongo: condition: service_healthy restart: "no" volumes: - ./e2e/seed.js:/seed/e2e-seed.js:ro entrypoint: - bash - -ec - | mongosh --host mongo --quiet --eval 'try { rs.status().ok } catch (e) { rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongo:27017"}]}) }' for i in $$(seq 1 30); do state=$$(mongosh --host mongo --quiet --eval 'try { rs.isMaster().ismaster } catch (e) { false }') [ "$$state" = "true" ] && break sleep 1 done # Las migraciones históricas de Meteor (up() aún síncronos) se marcan # como aplicadas, igual que en el compose local. mongosh --host mongo --quiet fuegos --eval 'db.migrations.replaceOne({_id: "control"}, {_id: "control", version: 18, locked: false}, {upsert: true})' mongosh --host mongo --quiet fuegos /seed/e2e-seed.js echo "mongo-init: replica set + migraciones + seed OK" web: build: context: . dockerfile: Dockerfile image: tcef-web:e2e depends_on: mongo-init: condition: service_completed_successfully environment: PORT: "3000" ROOT_URL: http://localhost:3300 MONGO_URL: mongodb://mongo:27017/fuegos?replicaSet=rs0 MONGO_OPLOG_URL: mongodb://mongo:27017/local?replicaSet=rs0 METEOR_SETTINGS_FILE: /run/settings-ci.json # Usuarios de prueba (fixtures.js): el e2e crea los suyos, pero el smoke y # la exploración manual esperan admin@admin.com / password. TCEF_SEED: "1" volumes: - ./settings-ci.json:/run/settings-ci.json:ro ports: - "3300:3000"