Aller au contenu
English

Automatiser les exécutions

Choisissez la CI, les files, les planifications ou les webhooks pour lancer du travail sans session interactive.

Un processus worker enregistre les traitements qu’il connaît et traite un job à la fois jusqu’à ce que son signal l’arrête. Les producteurs n’envoient jamais de code, seulement un nom de traitement et du JSON.

import { createSqliteTaskQueue, runQueueWorker } from "@elie-laloum/outpost";

const queue = await createSqliteTaskQueue(".outpost/jobs.sqlite");
const stop = new AbortController();
process.once("SIGINT", () => stop.abort());
try {
  await runQueueWorker({
    queue,
    worker: "worker-1",
    signal: stop.signal,
    handlers: {
      count: (input) => ({ value: Array.isArray(input) ? input.length : 0 }),
    },
  });
} finally {
  queue.close();
}

Enveloppez le workflow dans defineWorkflowJob() pour obtenir une exécution sous checkpoint par job, identifiée par le runId du job. Planifications et webhooks déposent dans la même file : le worker reste le seul processus à faire tourner des agents.

Déclenché parUtilisezTourne en continu
Un commit ou une étape de pipelineExécuter en CILe temps du job seulement
Votre propre code ou un serviceFiles de jobsLes workers que vous exploitez
L’horlogePlanification cronUn planificateur et des workers
Un événement GitHub, GitLab ou SlackWebhooksUn serveur HTTP et des workers

Un trigger ne lance jamais de workflow dans la requête ou le timer qui l’a déclenché. Il publie un job déterministe : une redélivraison, un redémarrage ou une deuxième réplique convergent vers une seule exécution.

  • Les entrées et les valeurs de job sont du JSON, jusqu’à 256 Kio chacune ; un seul job à la fois par runId.
  • Une file écarte les baux périmés, mais vos effets externes ne sont exactement-une-fois que si le service appelé déduplique votre clé d’idempotence.
  • Une source de webhook vérifie la signature avant d’analyser le contenu et échoue en se fermant ; un expéditeur vérifié n’est pas une approbation, et les étapes d’approbation gardent leur propre acteur.
  • Un créneau sauté par l’heure d’été ne se déclenche pas, un créneau répété ne se déclenche qu’une fois, et seul le dernier créneau dans maxLateMs est rattrapé.
  • Une exécution que personne ne regarde a quand même besoin d’une limite : associez-la aux pauses sur quota et aux budgets.

API : runQueueWorker · createSqliteTaskQueue · TaskQueue · defineWorkflowJob · createCronSchedule · runSchedules · serveTriggers · createGithubWebhook.