Test against a local Zuplo server before deploying anywhere.
Code
version: 2.1jobs: local-test: docker: - image: cimg/node:24.0 steps: - checkout - run: npm install - run: name: Start local server and run tests command: | npx zuplo dev & # Poll until the server answers — never a fixed sleep deadline=$((SECONDS + 60)) until curl --fail --silent --output /dev/null http://localhost:9000/health; do if (( SECONDS >= deadline )); then echo "Local server did not start within 60s" >&2 exit 1 fi sleep 1 done npx zuplo test --endpoint http://localhost:9000 kill %1 deploy: docker: - image: cimg/node:24.0 steps: - checkout - run: npm install - run: npx zuplo deploy --api-key "$ZUPLO_API_KEY"workflows: test-and-deploy: jobs: - local-test - deploy: requires: - local-test filters: branches: only: main
Local tests run first. Only if they pass does deployment proceed.
The readiness poll replaces a fixed sleep. A sleep is a guess about startup
time that is wrong in both directions, and it is the most common reason a
gateway test suite "needs" a retry. The example polls /health — add an
unauthenticated health route if your gateway does not have one. See
health checks.