Skip to content

Schedule builds

A scheduler invokes the same meteo forecast build command you ran manually. It runs outside the data contract. The publisher communicates its schedule and availability to consumers.

models.json declares each forecast model’s runIntervalHours, stepHours, and horizonHours; observation datasets declare cadenceMinutes instead. The living forecast feed reference records provider schedules and verification dates. Use both when choosing a polling window; never run a builder more often than its provider publishes.

scheduler tick
├─ latest run incomplete ──→ no publication
├─ reference time unchanged → no rewrite
└─ complete new run ────────→ profiles + history + manifest
deploy static tree
  • Give each model its own step and its own failure label; group steps into jobs by provider rate-limit domain rather than by model, so a provider host never sees more than one builder’s connections at once — the reference operator instance does exactly this.
  • Prevent overlapping jobs against the same output directory.
  • Treat a zero exit as command completion, then inspect whether a new manifest identity was actually produced.
  • Deploy only after the builder has completed. Consumers still guard manifest/profile skew because CDN objects can expire independently.
  • Keep credentials and destination-specific settings in the scheduler or hosting platform, never in profile JSON.
  • Preserve logs containing model slug, start/end time, exit status, and the published (referenceTime, generatedAt) pair.

An operator’s pipeline — the scheduler, the site catalogue, the storage credentials — is its own repository composing this CLI; the reference deployment lives with its operator, not in the platform. An operator may choose any scheduler and access model, but should reuse the CLI and contract rather than copy builder internals.

For a multi-model schedule, prefer separate invocations over --all when failure isolation matters. --all is useful for controlled batch execution and follows catalogue order, but one failing model stops that command.