Files
composiohq__composio/turbo.jsonc
T
Alberto Schiabel b0a02c9693 feat(examples): make validation provider agnostic (#3790)
This PR:

- makes example typecheck, lint, and Workers dry-runs discover packages
by script presence instead of a Mastra-only filter
- runs the nightly staging suite as a provider matrix, starting with
Mastra and failing when a matrix package is missing
- keeps direct and Tool Router agents explicit while sharing the Tool
Router agent between Node.js and Cloudflare Workers
- keeps root ESLint rules in Turbo's lint cache key and documents both
Worker secrets

## Testing

- `pnpm run typecheck`
- `pnpm run typecheck:examples`
- `./node_modules/.bin/eslint ts/packages --ext .ts,.tsx` (0 errors; 72
existing warnings)
- `pnpm run lint:examples`
- `pnpm exec turbo cf:dry-run --filter='./ts/examples/*'`
- confirmed Turbo includes `eslint.config.mjs` in the Mastra lint task
inputs
- confirmed a missing provider package fails instead of silently passing
the nightly smoke step

## Post-Deploy Monitoring & Validation

- after merge, dispatch `ts.examples-nightly.yml` on `next` and confirm
the `mastra examples against staging` matrix leg runs smoke,
direct-tools, and Tool Router successfully
- healthy signal: smoke reports wrapped tools and both agent steps
return non-empty output
- failure signal: workflow logs contain `SMOKE FAIL`, `Agent returned
empty output`, `No projects matched`, or a secret preflight error;
revert this PR if the foundation gate begins false-passing or blocking
unrelated example work
- validation window and owner: the first post-merge dispatch plus the
next scheduled 06:00 UTC nightly, owned by the TypeScript examples
maintainers

---

[![Compound
Engineering](https://img.shields.io/badge/Compound-Engineering-6C5CE7)](https://github.com/EveryInc/compound-engineering-plugin)
![Codex](https://img.shields.io/badge/GPT--5-000000)
2026-07-10 11:42:59 +04:00

102 lines
3.1 KiB
JSON

{
"$schema": "https://turbo.build/schema.json",
// pnpm is installed and enforced by mise (`npm:pnpm` in mise.toml). The root
// `packageManager` field exists for tools like Turbo that need explicit
// workspace package-manager metadata; keep it aligned with mise.toml.
"dangerouslyDisablePackageManagerCheck": true,
// The toolchain (node, bun, pnpm, tsgo host) is pinned by mise, not by
// package.json/lockfile, so toolchain bumps must invalidate every task hash
// or restored CI caches would skip the very runs meant to validate them.
"globalDependencies": ["mise.toml", "mise.lock"],
"tasks": {
"build": {
"dependsOn": ["^build"],
"inputs": [
"$TURBO_DEFAULT$",
"tsdown.config.ts",
// for core
"../../../tsdown.config.base.ts",
"../../../tsconfig.base.json",
// for providers
"../../../../tsdown.config.base.ts",
"../../../../tsconfig.base.json"
],
"outputs": ["dist/"]
},
"test": {
"dependsOn": ["^build"]
},
"test:e2e": {
"dependsOn": ["^build"],
"env": ["ANTHROPIC_API_KEY", "COMPOSIO_API_KEY", "COMPOSIO_BASE_URL", "COMPOSIO_USER_API_KEY", "OPENAI_API_KEY"],
"cache": false
},
"test:e2e:node": {
"dependsOn": ["^build"],
"env": ["ANTHROPIC_API_KEY", "COMPOSIO_API_KEY", "COMPOSIO_BASE_URL", "COMPOSIO_USER_API_KEY", "COMPOSIO_E2E_NODE_VERSION", "OPENAI_API_KEY"],
"cache": false
},
"test:e2e:deno": {
"dependsOn": ["^build"],
"env": ["COMPOSIO_API_KEY", "COMPOSIO_BASE_URL", "COMPOSIO_USER_API_KEY", "COMPOSIO_E2E_DENO_VERSION", "OPENAI_API_KEY"],
"cache": false
},
"test:e2e:cli": {
"dependsOn": ["^build"],
"env": ["COMPOSIO_API_KEY", "COMPOSIO_BASE_URL", "COMPOSIO_USER_API_KEY", "COMPOSIO_E2E_CLI_VERSION", "OPENAI_API_KEY"],
"cache": false
},
"test:e2e:cloudflare": {
"dependsOn": ["^build"],
"env": ["COMPOSIO_API_KEY", "COMPOSIO_BASE_URL", "COMPOSIO_USER_API_KEY", "OPENAI_API_KEY"],
"cache": false
},
"install:binary": {
"dependsOn": ["build:binary"],
"cache": false
},
"clean": {
"cache": false
},
"typecheck": {
"dependsOn": ["^build"],
// package tsconfigs extend the root base config, which lives outside the
// package dirs and is therefore not part of $TURBO_DEFAULT$
"inputs": [
"$TURBO_DEFAULT$",
// for core
"../../../tsconfig.base.json",
// for providers
"../../../../tsconfig.base.json"
]
},
"typecheck:tsc": {
"dependsOn": ["^build"],
"cache": false
},
"lint": {
"inputs": ["$TURBO_DEFAULT$", "../../../eslint.config.mjs"]
},
"cf:dry-run": {
"dependsOn": ["^build"]
},
"//#clean": {
"cache": false
},
"record": {
"dependsOn": ["^build"],
"inputs": [
"src/**",
"scripts/record.ts",
"recordings/recordings.yaml"
],
"outputs": [
"recordings/tapes/**",
"recordings/svgs/**",
"recordings/ascii/**"
],
"env": ["COMPOSIO_API_KEY"]
}
}
}