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
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | Non | Clé 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. |
name | string | Oui | Nom d’affichage dans le dashboard et dans les messages d’alerte. Doit être unique dans le manifeste. |
kind | http | heartbeat | Non | Type de job. Par défaut : http. |
schedule | string | Oui* | Expression cron à cinq champs (minute hour dom month dow). |
interval | integer | Oui* | Intervalle fixe en secondes (10–86400). Alternative à schedule. |
timezone | string | Non | Nom de fuseau horaire IANA, p. ex. Europe/Berlin. Par défaut : UTC. |
paused | boolean | Non | Créer ou maintenir le job en état suspendu. |
tags | string[] | Non | Références de tags en chaînes "key:value", p. ex. ["env:prod", "team:backend"]. |
rules | object[] | Non | Règles d’alerte par job. Voir Règles d’alerte. |
*Exactement l’un de schedule ou interval est requis.
Champs des jobs HTTP
| Champ | Type | Requis | Description |
|---|---|---|---|
method | string | Non | Méthode HTTP. L’une de GET, POST, PUT, PATCH, DELETE. Par défaut : GET. |
url | string | Oui | Endpoint à appeler. Supporte les espaces réservés ${ENV} (substitution CLI) et {{template_var}} (côté serveur). |
headers | object | Non | En-têtes de requête supplémentaires. Les valeurs supportent les espaces réservés ${ENV}. |
body | string | Non | Corps de la requête. Supporte les espaces réservés {{template_var}}. |
timeout | integer | Non | Délai d’expiration de la requête en secondes. Par défaut : 60. |
retries | integer | Non | Nombre de tentatives en cas de réponse non-2xx ou de timeout. Par défaut : 0. |
retry_backoff | integer | Non | Secondes entre les tentatives. Par défaut : 30. |
retry_on_timeout | boolean | Non | Compter les timeouts comme des échecs pour les tentatives. Par défaut : true. |
retry_on_status | integer[] | Non | Codes de statut HTTP qui déclenchent une nouvelle tentative (100–599). |
skip_if_running | boolean | Non | Ignorer l’exécution si la précédente est encore active. Par défaut : false. |
misfire_policy | string | Non | Comportement en cas d’exécution planifiée manquée : do_nothing (par défaut) ou fire_once_now. |
Champs des checks de heartbeat
| Champ | Type | Requis | Description |
|---|---|---|---|
grace | integer | Non | Secondes à attendre après le temps de ping attendu avant d’alerter. Par défaut : 60. |
stuck_run_detection | boolean | Non | Alerte quand une exécution dépasse max_run_duration. Par défaut : true. |
max_run_duration | integer | Non | Duré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.
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | Non | Clé de référence stable utilisée dans jobs[].rules[].channel. |
name | string | Oui | Nom lisible affiché dans le dashboard et dans les messages d’alerte. |
kind | string | Oui | L’un de slack, discord, email, telegram, webhook. |
config | object | Non | Configuration 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
| Champ | Type | Requis | Description |
|---|---|---|---|
channel | string | Oui | id ou name du canal à notifier. |
trigger | string | Oui | Événement qui déclenche la règle : on_failure, on_recovery, on_missed_heartbeat. |
severity | string | Non | Label de sévérité transmis au canal (p. ex. p1, p2, p3). |
params | object | Non | Paramètres spécifiques au déclencheur. |
dedup_window_seconds | integer | Non | Fenê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"]
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | Non | Clé de référence stable. |
key | string | Oui | Catégorie du tag (p. ex. env, team). |
value | string | Oui | Valeur du tag (p. ex. prod, backend). |
color | string | Non | Code 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.
| Champ | Type | Requis | Description |
|---|---|---|---|
id | string | Non | Clé de référence stable. |
name | string | Oui | Nom de variable utilisé dans les substitutions {{name}} côté serveur. |
value | string | Non | Valeur 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
| Champ | Type | Description |
|---|---|---|
max_concurrent_jobs | integer | Nombre maximum de jobs HTTP s’exécutant en parallèle. |
max_jobs_per_minute | integer | Nombre 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 par | CLI à l’application | Serveur à l’exécution |
| Fonctionne dans | N’importe quel champ | url, headers, body des jobs HTTP uniquement |
| À utiliser pour | Clés API, URLs de webhook, valeurs spécifiques à l’environnement | Valeurs dynamiques par exécution |
| Exporté comme | Espace 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.