Référence du manifeste

Référence complète des champs pour le manifeste YAML v2 de SteadyCron — jobs, canaux, règles, variables, tags et namespaces.

Le manifeste v2 est la définition faisant autorité de votre compte SteadyCron. Un seul fichier (ou un répertoire de fichiers) déclare chaque job, canal d’alerte, tag et variable que gère la CLI.

Structure de niveau supérieur

namespace: my-app        # optionnel — délimite la propriété IaC
variables:               # variables de gabarit côté serveur (liste d'objets)
channels:                # définitions des canaux d'alerte
tags:                    # définitions de tags réutilisables
shaping:                 # limites de débit
jobs:                    # jobs HTTP et checks de heartbeat
                         # les règles d'alerte sont déclarées par job sous jobs[].rules

namespace

Une chaîne qui attribue une portée à toutes les ressources de ce manifeste. La CLI ne gère (et avec --prune, ne supprime) que les ressources appartenant à ce namespace — de sorte que les jobs gérés par IaC et ceux créés manuellement peuvent coexister en toute sécurité dans le même compte.

namespace: production

Omettre namespace utilise le namespace par défaut. Consultez Namespaces et propriété pour les configurations multi-environnement.

jobs[]

Chaque entrée est soit un job HTTP (kind: http) qui appelle votre endpoint selon un calendrier, soit un check de heartbeat (kind: heartbeat) qui attend un ping de votre propre cron.

Champs communs

ChampTypeRequisDescription
idstringNonClé de réconciliation stable. Lorsqu’elle est définie, les renommages sont sûrs — l’id ne change jamais, donc les URLs de ping heartbeat sont préservées. Revient à name si absent.
namestringOuiNom d’affichage dans le dashboard et dans les messages d’alerte. Doit être unique dans le manifeste.
kindhttp | heartbeatNonType de job. Par défaut : http.
schedulestringOui*Expression cron à cinq champs (minute hour dom month dow).
intervalintegerOui*Intervalle fixe en secondes (10–86400). Alternative à schedule.
timezonestringNonNom de fuseau horaire IANA, p. ex. Europe/Berlin. Par défaut : UTC.
pausedbooleanNonCréer ou maintenir le job en état suspendu.
tagsstring[]NonRéférences de tags en chaînes "key:value", p. ex. ["env:prod", "team:backend"].
rulesobject[]NonRègles d’alerte par job. Voir Règles d’alerte.

*Exactement l’un de schedule ou interval est requis.

Champs des jobs HTTP

ChampTypeRequisDescription
methodstringNonMéthode HTTP. L’une de GET, POST, PUT, PATCH, DELETE. Par défaut : GET.
urlstringOuiEndpoint à appeler. Supporte les espaces réservés ${ENV} (substitution CLI) et {{template_var}} (côté serveur).
headersobjectNonEn-têtes de requête supplémentaires. Les valeurs supportent les espaces réservés ${ENV}.
bodystringNonCorps de la requête. Supporte les espaces réservés {{template_var}}.
timeoutintegerNonDélai d’expiration de la requête en secondes. Par défaut : 60.
retriesintegerNonNombre de tentatives en cas de réponse non-2xx ou de timeout. Par défaut : 0.
retry_backoffintegerNonSecondes entre les tentatives. Par défaut : 30.
retry_on_timeoutbooleanNonCompter les timeouts comme des échecs pour les tentatives. Par défaut : true.
retry_on_statusinteger[]NonCodes de statut HTTP qui déclenchent une nouvelle tentative (100–599).
skip_if_runningbooleanNonIgnorer l’exécution si la précédente est encore active. Par défaut : false.
misfire_policystringNonComportement en cas d’exécution planifiée manquée : do_nothing (par défaut) ou fire_once_now.

Champs des checks de heartbeat

ChampTypeRequisDescription
graceintegerNonSecondes à attendre après le temps de ping attendu avant d’alerter. Par défaut : 60.
stuck_run_detectionbooleanNonAlerte quand une exécution dépasse max_run_duration. Par défaut : true.
max_run_durationintegerNonDurée maximale d’exécution autorisée en secondes (60–86400).

channels[]

Canaux d’alerte référencés par les règles de job via leur id ou name.

ChampTypeRequisDescription
idstringNonClé de référence stable utilisée dans jobs[].rules[].channel.
namestringOuiNom lisible affiché dans le dashboard et dans les messages d’alerte.
kindstringOuiL’un de slack, discord, email, telegram, webhook.
configobjectNonConfiguration clé-valeur spécifique au type. Utilisez des espaces réservés ${ENV} — ne commitez jamais de vrais secrets.
channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

Règles d’alerte {#alert-rules}

Les règles d’alerte sont définies par job sous jobs[].rules. Chaque règle lie un événement déclencheur à un canal de notification.

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    schedule: "0 9 * * 1"
    url: https://api.myapp.com/jobs/digest
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery
ChampTypeRequisDescription
channelstringOuiid ou name du canal à notifier.
triggerstringOuiÉvénement qui déclenche la règle : on_failure, on_recovery, on_missed_heartbeat.
severitystringNonLabel de sévérité transmis au canal (p. ex. p1, p2, p3).
paramsobjectNonParamètres spécifiques au déclencheur.
dedup_window_secondsintegerNonFenêtre de déduplication des alertes en secondes.

tags[]

Les tags regroupent les jobs dans le dashboard. Chaque tag a une key et une value ; les jobs les référencent en chaînes "key:value".

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

Référence dans un job : tags: ["env:prod", "team:backend"]

ChampTypeRequisDescription
idstringNonClé de référence stable.
keystringOuiCatégorie du tag (p. ex. env, team).
valuestringOuiValeur du tag (p. ex. prod, backend).
colorstringNonCode couleur hexadécimal pour le dashboard.

variables

Variables de gabarit côté serveur. Chaque variable est un objet avec id, name et value. La CLI résout ${ENV_VAR} dans value à l’application ; le serveur substitue {{name}} dans les champs HTTP du job à l’exécution. Les secrets ne finissent jamais dans git.

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

Utilisez {{digest_token}} dans les champs HTTP url, headers ou body.

ChampTypeRequisDescription
idstringNonClé de référence stable.
namestringOuiNom de variable utilisé dans les substitutions {{name}} côté serveur.
valuestringNonValeur de la variable. Supporte la substitution CLI ${ENV_VAR}.

shaping

Le shaping des requêtes contrôle la concurrence et les limites de débit pour les jobs HTTP — utile quand de nombreux jobs se déclenchent à la même minute et que vous devez répartir la charge.

shaping:
  max_concurrent_jobs: 5
  max_jobs_per_minute: 30
ChampTypeDescription
max_concurrent_jobsintegerNombre maximum de jobs HTTP s’exécutant en parallèle.
max_jobs_per_minuteintegerNombre maximum d’exécutions de jobs HTTP par minute.

Exemple complet

namespace: production

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    method: POST
    url: https://api.myapp.com/jobs/digest
    schedule: "0 9 * * 1"
    timezone: Europe/Berlin
    timeout: 120
    retries: 3
    tags: ["env:prod", "team:backend"]
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery

  - id: nightly-backup
    name: Nightly DB backup
    kind: heartbeat
    schedule: "0 2 * * *"
    grace: 1800
    tags: ["env:prod"]
    rules:
      - channel: ops-slack
        trigger: on_missed_heartbeat
        severity: p1

Secrets : deux mécanismes côte à côte

${ENV_VAR_NAME}{{template_var}}
Résolu parCLI à l’applicationServeur à l’exécution
Fonctionne dansN’importe quel champurl, headers, body des jobs HTTP uniquement
À utiliser pourClés API, URLs de webhook, valeurs spécifiques à l’environnementValeurs dynamiques par exécution
Exporté commeEspace réservé ${VAR}Espace réservé {{var}}

steadycron export émet automatiquement les deux types d’espaces réservés partout où il détecte un secret ou une variable de gabarit, de sorte que le manifeste exporté est sûr à commiter tel quel.