builderman

A dependency-aware task runner for building, developing, and orchestrating complex workflows

Key Features

  • ๐Ÿงฉ

    Explicit dependency graph โ€” tasks run only when their dependencies are satisfied

  • ๐Ÿ”

    Multi-mode commands โ€” dev, build, deploy, or any custom mode

  • โณ

    Readiness detection โ€” wait for long-running processes to become "ready"

  • ๐Ÿงน

    Guaranteed teardown โ€” automatic cleanup in reverse dependency order

  • ๐Ÿ›‘

    Cancellation support โ€” abort pipelines using AbortSignal

  • ๐Ÿ“Š

    Rich execution statistics โ€” always available, even on failure

  • โŒ

    Never throws โ€” failures are returned as structured results

  • ๐Ÿงฑ

    Composable pipelines โ€” pipelines can be converted into tasks

  • ๐Ÿ’พ

    Task-level caching โ€” skip tasks when inputs and outputs haven't changed

  • ๐ŸŽฏ

    Artifact dependencies โ€” reference outputs from other tasks in cache inputs

  • ๐Ÿ”Œ

    Input resolvers โ€” track package dependencies and other dynamic inputs

Quick Start

import { task, pipeline } from "builderman"

const build = task({
  name: "build",
  commands: {
    build: "tsc",
    dev: "tsc --watch",
  },
})

const test = task({
  name: "test",
  commands: {
    build: "npm test",
  },
  dependencies: [build],
})

const deploy = task({
  name: "deploy",
  commands: {
    build: "npm run deploy",
  },
  dependencies: [test],
})

const result = await pipeline([build, test, deploy]).run({
  command: "build",
})

console.log(result)