The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
Showing SKILL.md
SKILL.md
Source instructions · Read-only preview
name
preflight
description
Webiny-only. Run all checks required before packages are ready for publish: deps, build, lint, format, tests.
# Preflight
Webiny-only skill. Run all checks required before packages are ready for publish.
## Important
- Run steps in order.
- If any step fails, diagnose and fix the issue, then restart from step 1.
- Never run tests in parallel. Run each package sequentially.
- Before running tests for each package, count active test cases and shard at 32 tests per shard.
- To count active tests: `rg "^\s*(it|test|it\.each|test\.each)\s*\(" packages/<name>/__tests__ -t ts --count-matches | awk -F: '{s+=$2} END {print s}'`
- Calculate shards: `shards = ceil(count / 32)`. If shards is 1, no `--shard` flag needed.
- Suppress noisy output: redirect stdout to `/dev/null` or pipe through `tail` as needed.
## Steps
### 1. Install dependencies
```bash
yarn > /dev/null 2>&1
```
### 2. Generate `webiny` package
```bash
yarn webiny-scripts generate-webiny-package
```
### 3. Sync dependency versions
```bash
yarn webiny sync-dependencies
```
Verify `packages/cli/files/duplicates.json` is an empty array (`[]`). If it contains entries, there are duplicate dependency versions that must be resolved before continuing.
### 4. Generate tsconfig files
```bash
node scripts/generateTsConfigsInPackages.js
```
### 5. Check package node_modules
```bash
node scripts/checkPackageNodeModules.js
```
### 6. Verify package.json dependencies match source imports
```bash
yarn adio
```
Must output "All dependencies in order!" to pass.
### 7. Format code
```bash
yarn format:fix > /dev/null 2>&1
```
This auto-fixes formatting issues. No manual intervention needed.
### 8. Lint
```bash
yarn eslint
```
This only checks — it does not auto-fix. If eslint reports errors, fix them manually, then restart from step 1.
### 9. Full clean build
```bash
yarn build --no-cache 2>&1 | tail -10
```
### 10. Check dist paths
```bash
node scripts/checkDistPaths.js
```
Verifies no `src/` paths remain in built output.
### 11. Run DDB tests
Run `yarn test` for each package below, sequentially. Count active tests first and shard at 32.
**Packages that need `yarn test`:**
- `api`
- `api-aco`
- `api-audit-logs`
- `api-core`
- `api-file-manager`
- `api-file-manager-aco`
- `api-headless-cms`
- `api-headless-cms-aco`
- `api-headless-cms-bulk-actions`
- `api-headless-cms-ddb`
- `api-headless-cms-import-export`
- `api-headless-cms-scheduler`
- `api-headless-cms-tasks`
- `api-headless-cms-workflows`
- `api-mailer`
- `api-record-locking`
- `api-scheduler`
- `api-sync-system`
- `api-website-builder`
- `api-website-builder-scheduler`
- `api-websockets`
- `api-workflows`
- `app-admin`
- `cognito`
- `db-dynamodb`
- `form`
- `handler`
- `handler-aws`
- `api-graphql`
- `lexical-converter`
- `plugins`
- `react-composition`
- `react-properties`
- `react-rich-text-lexical-renderer`
- `tasks`
- `utils`
```bash
# 1. Count active tests
count=$(rg "^\s*(it|test|it\.each|test\.each)\s*\(" packages/<name>/__tests__ -t ts --count-matches | awk -F: '{s+=$2} END {print s}')
shards=$(( (count + 31) / 32 ))
# 2a. If shards <= 1, run without sharding
yarn test packages/<name> 2>&1 | grep "Test Files"
# 2b. If shards > 1, run each shard sequentially
yarn test packages/<name> --shard=1/$shards 2>&1 | grep "Test Files"
yarn test packages/<name> --shard=2/$shards 2>&1 | grep "Test Files"
# ... etc
```
### 12. Run OpenSearch tests
Run `yarn test:os` for each package below, sequentially. Count active tests first and shard at 32.
**Packages that need BOTH `yarn test` (step 11) AND `yarn test:os`:**
- `api-aco`
- `api-audit-logs`
- `api-file-manager`
- `api-file-manager-aco`
- `api-headless-cms`
- `api-headless-cms-aco`
- `api-headless-cms-bulk-actions`
- `api-headless-cms-import-export`
- `api-mailer`
- `api-scheduler`
- `api-workflows`
- `tasks`
**Packages that need ONLY `yarn test:os` (not in step 11):**
- `api-dynamodb-to-elasticsearch`
- `api-elasticsearch-tasks`
- `api-headless-cms-ddb-es`
- `api-headless-cms-es-tasks`
- `api-opensearch`
```bash
yarn test:os packages/<name> 2>&1 | grep "Test Files"
```
### 13. Check for uncommitted changes
```bash
git status
```
Report any unexpected uncommitted changes from the steps above.
## Keeping the package lists up to date
If the lists seem stale, re-derive them:
```bash
# All testable packages (have vitest.config.ts)
find packages -maxdepth 2 -name "vitest.config.ts" | sed 's|packages/||;s|/vitest.config.ts||' | sort
# Packages with ddb-os support
grep -rl "ddb-os" --include="ci.config.json" packages/ | sed 's|packages/||;s|/ci.config.json||' | sort
# Check if a package has standalone ddb tests too
grep -o '"ddb"' packages/<name>/ci.config.json
```
Copy this prompt into the AI assistant you're using.
Follow https://skillsmp.com/skill-install/prompt.md to install only the Agent Skill at https://github.com/webiny/webiny-js/tree/next/.claude/skills/preflight.
A direct command skips the review prompt. Inspect the source before running it.