All workflows run on GitHub Actions. Every PR must pass all checks before merge.
The repository contains components with different toolchains:
| Area | Toolchain | Managed By |
|---|---|---|
packages/*, examples/* |
pnpm workspace | Root pnpm install, pnpm build, pnpm test |
docs-site/ |
Astro Starlight (npm) | Independent npm install && npm run build |
webflow-agent-kit-python/ |
pip, pytest, ruff, mypy | pip install -e '.[dev]' |
skill-packs/ |
YAML + Markdown | Validated by @webflow-agent-kit/skills package + docs CI |
Each area has its own CI jobs that run when its files change.
Runs on every push to main and every pull request.
| Job | What it checks | Concurrency |
|---|---|---|
| Changed Files | Uses dorny/paths-filter@v3 to detect which paths changed. Outputs python and docs booleans used by downstream conditional jobs. Always runs. |
Always |
| TS Quality | pnpm lint, pnpm format:check, pnpm typecheck, pnpm test, pnpm build on Node 20 and Node 22 (matrix) |
Cancelled on new PR pushes |
| Package Smoke | Packs every npm package into a tarball, installs it into a clean temp project, verifies successful install. Checks that workspace:* references are resolved |
After quality |
| MCP Protocol Smoke | Starts @webflow-agent-kit/mcp with a fake token, sends MCP initialize + tools/list requests, verifies tool names appear in output |
After quality |
| Python Quality | ruff, mypy, pytest, python -m build, twine check on Python 3.10, 3.11, and 3.12 (matrix). Runs when webflow-agent-kit-python/** files change (detected by dorny/paths-filter), on workflow_dispatch, or on every push to main. Commit-message keywords are no longer used. |
After changed-files |
| Docs Build | Builds the Astro Starlight docs-site. Runs when docs/**, docs-site/**, README.md, CONTRIBUTING.md, or skill-packs/** change (detected by dorny/paths-filter), on workflow_dispatch, or on every push to main. |
After changed-files |
| Job | Frequency |
|---|---|
| CodeQL TypeScript | Every push/PR + weekly on main |
| CodeQL Python | Every push/PR + weekly on main |
| Dependency Review | Every PR |
| Job | What it does |
|---|---|
| Quality Gate | Runs full lint, typecheck, test, build before any publish |
| Release | Smoke tests all packages (pack verification), then uses Changesets to version and publish. Only runs after quality gate passes |
Keeps dependencies updated weekly:
| Ecosystem | Directory |
|---|---|
| npm (monorepo root) | / |
| npm (Next.js demo) | /examples/vercel-ai-agent |
| pip (Python package) | /webflow-agent-kit-python |
| GitHub Actions | / |
All workflows use permissions: contents: read by default. The release workflow additionally needs contents: write, pull-requests: write, and id-token: write for Changesets and npm publish.
| Secret | Used By | Purpose |
|---|---|---|
NPM_TOKEN |
Release workflow | Publishes packages to npm (@webflow-agent-kit/*). Must be a granular token with publish access. If not set, the release workflow runs Changesets but does not publish. |
GITHUB_TOKEN |
Release workflow | Auto-provided by GitHub. Used by Changesets for creating PRs and commits. |
No other secrets are required. No production Webflow API keys are used in CI.
pnpm install --frozen-lockfile
pnpm lint
pnpm format:check
pnpm typecheck
pnpm test
pnpm buildpnpm build
cd packages/core && pnpm pack --pack-destination /tmp/test
cd /tmp/test && mkdir core && cd core && npm init -y && npm install /tmp/test/webflow-agent-kit-core-*.tgz
# Repeat for each packageWEBFLOW_TOKEN=fake-token node packages/mcp/dist/server.js
# Send: {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}
# Send: {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}cd webflow-agent-kit-python
python -m pip install -e '.[dev]'
ruff check .
mypy webflow_agent_kit
pytest
python -m build
python -m twine check dist/*cd docs-site
npm install
npm run buildAll workflow files use standard GitHub Actions YAML syntax. Validate locally:
# Using actionlint (recommended)
brew install actionlint
actionlint .github/workflows/*.yml
# Or check GitHub's web validator at:
# https://rhysd.github.io/actionlint/