
Security News
Packagist Urges Immediate Composer Update After GitHub Actions Token Leak
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.
create-quality-automation
Advanced tools
Bootstrap quality automation for JavaScript/TypeScript and Python projects with GitHub Actions, pre-commit hooks, linting, formatting, and freemium dependency monitoring
Bootstrap quality automation in JavaScript/TypeScript and Python projects with comprehensive tooling. Features GitHub Actions, pre-commit and pre-push hooks, lint-staged processing, security scanning, SEO validation, and freemium dependency monitoring with smart project detection.
npx create-quality-automation@latest--template flagThe Problem: Early-stage projects fail CI/CD checks not because of code quality issues, but because tests, docs, and dependencies haven't been created yet.
The Solution: Adaptive quality checks that automatically adjust based on your project's maturity level.
Your project is automatically detected as one of 4 maturity levels:
β
No false failures - CI stays green during early development
β
Clear progression - See which checks activate as you add files
β
Reduced noise - Only see failures that matter for your project stage
β
Zero config - Auto-detection works out of the box
β
Manual override - Force strict mode via config file (see .qualityrc.json.example for template)
npx create-quality-automation@latest --check-maturity
Output:
π Project Maturity Report
Maturity Level: Development
Description: Active development - has source files and tests
Project Statistics:
β’ Source files: 5
β’ Test files: 3
β’ Documentation: No
β’ Dependencies: Yes
Quality Checks:
β
Required: prettier, eslint, stylelint, tests
π΅ Optional: security-audit
βοΈ Disabled: coverage, documentation
π¨ Development project - most checks enabled.
Add documentation to enable doc validation.
Copy .qualityrc.json.example to create your own quality config file and override auto-detection:
{
"version": "1.0.0",
"maturity": "production-ready", // Force all checks
"checks": {
"prettier": { "enabled": true, "required": true },
"eslint": { "enabled": "auto", "required": false },
"tests": { "enabled": true, "required": true } // Force enable
}
}
create-quality-automation includes smart test placeholders to prevent early-stage project failures:
β What's Included:
--passWithNoTests flag (CI won't fail on empty test directories)describe.skip() and it.todo() examplesπ Example Generated Test:
// tests/placeholder.test.js
import { describe, it, expect } from 'vitest'
describe.skip('Example test suite (placeholder)', () => {
it.todo('should test core functionality')
it.todo('should handle edge cases')
})
describe('Test framework validation', () => {
it('should confirm Vitest is properly configured', () => {
expect(true).toBe(true) // Ensures test runner works
})
})
π― Progressive Tightening:
it.todo() with real tests as you build--passWithNoTests flag to enforce test coverageπ‘ Tip: Your CI will show warnings like β οΈ Only 2 test file(s) found - consider adding more tests to maintain visibility without blocking development.
Troubleshooting
- Using Volta:
volta install node@20.11.1- Using nvm:
nvm install 20 && nvm use 20- npm cache permission errors (
EPERMon~/.npm): either fix ownership (sudo chown -R $(id -u):$(id -g) ~/.npm) or point npm to a writable cache (npm_config_cache=$PWD/.npm-cache npm install).
Configure optional behavior with environment variables:
NO_EMOJI=true - Use text-only mode for screen readers and accessibility (e.g., [OK] instead of β
)SCREEN_READER=true - Enable screen reader friendly output (same as NO_EMOJI)CQA_TELEMETRY=true - Enable local usage tracking (opt-in only)CQA_ERROR_REPORTING=true - Enable local error reporting (opt-in only)Example usage:
# Run with accessibility mode enabled
NO_EMOJI=true npx create-quality-automation@latest
# Run with telemetry enabled
CQA_TELEMETRY=true npx create-quality-automation@latest
# Navigate to your project (must be a git repository)
cd your-project/
# Bootstrap quality automation
npx create-quality-automation@latest
# Install new dependencies
npm install
# Set up pre-commit hooks
npm run prepare
That's it! Your project now has comprehensive quality automation.
# Update to latest configurations
npx create-quality-automation@latest --update
# Install any new dependencies
npm install
# Verify everything works
npm run lint
Use organization-specific coding standards by providing a custom template directory:
# Use custom templates from a local directory
npx create-quality-automation@latest --template ./my-org-templates
# Custom template directory structure example:
# my-org-templates/
# βββ .prettierrc # Custom Prettier config
# βββ eslint.config.cjs # Custom ESLint rules
# βββ .github/
# β βββ workflows/
# β βββ quality.yml # Custom CI workflow
# βββ config/
# βββ pyproject.toml # Custom Python tooling config
# How it works:
# - Custom templates override package defaults
# - Missing files fall back to package defaults
# - Partial templates supported (override only specific files)
# - Enables consistent standards across organization projects
Use Cases:
# Add basic dependency monitoring (FREE TIER)
npx create-quality-automation@latest --deps
# What you get for free:
# β
Basic Dependabot configuration for npm packages
# β
Weekly dependency updates on Monday 9am (configurable)
# β
GitHub Actions dependency monitoring
# β
Automatic PR creation for dependency updates
#
# Note: Auto-merge requires manual GitHub Actions workflow setup
# See: https://docs.github.com/en/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions
# Check your current license tier and features
npx create-quality-automation@latest --license-status
BETA ENDED! Framework-aware dependency grouping and multi-language support are now Pro/Enterprise features.
Free tier provides basic npm dependency monitoring. Upgrade to Pro for advanced features.
π FREE TIER - What You Get
π PRO TIER ($39/month) - Premium Features
β Framework-aware dependency grouping for JavaScript/TypeScript
@tanstack/*, @radix-ui/*)β Multi-language dependency monitoring
π’ ENTERPRISE TIER ($197/month) - Advanced Features
π° Pricing & Upgrades
Premium features are available now:
π Limited-time founder pricing available for early adopters
π¬ Join Waitlist - Lock in Founder Pricing
After purchasing a Pro or Enterprise license, activate it in your project (oneβtime network fetch to download the signed license registry):
# Activate your purchased license
npx create-quality-automation@latest --activate-license
# Follow prompts to enter:
# - License key (from your purchase email)
# - Email address (used for purchase)
# - Internet access for the first run (downloads the license registry)
Offline? The registry is cached at ~/.create-quality-automation/legitimate-licenses.json.
CQA_LICENSE_DB_URL=https://your-domain/licenses.json npx create-quality-automation@latest --activate-licenseCheck your license status anytime:
# View current license and available features
npx create-quality-automation@latest --license-status
Admin License Management:
For administrators (server/ops) managing licenses across teams:
Server-side tools are NOT included in the npm package. Clone the repository to access server-only files:
# Clone repository for server-side tools
git clone https://github.com/brettstark73/quality-automation-template.git
cd quality-automation-template
# Add licenses to the central registry (server-side only)
node admin-license.js CQA-XXXX-XXXX-XXXX-XXXX customer_id PRO [founder_status] [email]
# Example:
node admin-license.js CQA-1234-ABCD-5678-EF90 cus_stripe123 PRO false user@company.com
# Serve the registry to clients (e.g., via CDN or static hosting)
# Ensure the URL matches CQA_LICENSE_DB_URL (default: https://license.aibuilderlab.com/cqa/legitimate-licenses.json)
For webhook deployment and complete server integration, see DEPLOYMENT_GUIDE.md
Example: React Project Dependency Grouping
# Before (Free Tier): 15+ individual PRs for React dependencies
# After (Pro Tier): 3-5 grouped PRs
groups:
react-core: # Core React packages
patterns: [react, react-dom, react-router*]
react-ecosystem: # State management, data fetching
patterns: [@tanstack/*, zustand, swr]
testing-frameworks: # All testing tools
patterns: [jest, @testing-library/*, vitest]
# Validate configuration security (detects Next.js/Vite secret exposure)
npx create-quality-automation@latest --security-config
# Validate documentation accuracy (README file references, npm scripts)
npx create-quality-automation@latest --validate-docs
# Run comprehensive validation (security + documentation + more)
npx create-quality-automation@latest --comprehensive
# For existing projects with setup, use npm scripts:
npm run security:config # Configuration security check
npm run validate:docs # Documentation validation
npm run validate:comprehensive # Full validation suite
npm run validate:all # Validation + security audit
# Create new project
mkdir my-awesome-project && cd my-awesome-project
git init
npm init -y
# Add quality automation
npx create-quality-automation@latest
npm install && npm run prepare
# Start coding with quality tools active!
echo "console.log('Hello, quality world!')" > index.js
git add . && git commit -m "feat: initial commit with quality tools"
your-project/
βββ .github/
β βββ workflows/
β βββ quality.yml # GitHub Actions workflow
βββ .editorconfig # Editor defaults
βββ .eslintignore # ESLint ignore patterns
βββ .nvmrc # Node version pinning
βββ .npmrc # npm configuration (engine-strict)
βββ .prettierrc # Prettier configuration
βββ .prettierignore # Files to ignore in formatting
βββ .stylelintrc.json # Stylelint CSS/SCSS rules
βββ .lighthouserc.js # Lighthouse CI configuration (SEO/performance)
βββ eslint.config.cjs # ESLint flat config (JavaScript)
βββ .husky/ # Pre-commit hooks (created after npm run prepare)
βββ package.json # Updated with scripts and dependencies
your-project/
βββ eslint.config.ts.cjs # ESLint flat config with TypeScript support
βββ package.json # Enhanced with TypeScript-aware lint-staged patterns
your-project/
βββ .github/
β βββ workflows/
β βββ quality-python.yml # Python-specific GitHub Actions
βββ .pre-commit-config.yaml # Python pre-commit hooks
βββ pyproject.toml # Python project configuration
βββ requirements-dev.txt # Python development dependencies
βββ tests/
β βββ __init__.py # Python test package marker
βββ package.json # Python helper scripts (for hybrid projects)
.nvmrc β auto-switch with nvm usepackage.json β engines.node ">=20" and Volta pin for Node/npm.npmrc β engine-strict = true to enforce engine checksConservative behavior:
.prettierrc){
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 80,
"bracketSpacing": true,
"arrowParens": "avoid"
}
package.json){
"lint-staged": {
"package.json": ["prettier --write"],
"**/*.{js,jsx,mjs,cjs,html}": ["eslint --fix", "prettier --write"],
"**/*.{css,scss,sass,less,pcss}": ["stylelint --fix", "prettier --write"],
"**/*.{json,md,yml,yaml}": ["prettier --write"]
}
}
If the setup script detects TypeScript (via a typescript dependency or a tsconfig file), the **/*.{js,jsx,mjs,cjs,html} pattern automatically expands to include .ts and .tsx.
The CLI scans your repository for existing CSS, Sass, Less, and PostCSS files so Stylelint targets only the directories you already use. If you have custom CSS globs in lint-staged, the setup script keeps them instead of overwriting them with broad defaults.
eslint.config.cjs. Adjust the exported array to tweak rulesβfor example, update the final rule block to warn on console usage:
// eslint.config.cjs
module.exports = [
/* ...existing entries... */
{
files: ['**/*.{js,jsx,mjs,cjs,html}'],
rules: {
// existing rules...
'no-console': 'warn',
},
},
]
When TypeScript is detected the script writes a variant with @typescript-eslint; customize the files: ['**/*.{ts,tsx}'] block in the same way..stylelintrc.json; example to relax specificity:
{
"extends": ["stylelint-config-standard"],
"rules": { "no-descending-specificity": null }
}
npm install --save-dev typescriptnpm run setup or node setup.js) to enable @typescript-eslint linting and TypeScript-aware lint-staged patterns.- name: TypeScript Check
run: npx tsc --noEmit
The tool automatically detects Python projects and configures appropriate tooling:
Detection criteria (any of these):
.py files in the projectpyproject.toml file existsrequirements.txt or requirements-dev.txt existsPython tools configured:
For Python-only projects: Uses .pre-commit-config.yaml with Python hooks
For hybrid JS/Python projects: Adds Python patterns to lint-staged configuration
Lighthouse CI provides automated SEO and performance monitoring:
Features configured:
Configuration (.lighthouserc.js):
// Performance thresholds
'categories:performance': ['warn', { minScore: 0.8 }]
'categories:seo': ['error', { minScore: 0.9 }]
'first-contentful-paint': ['warn', { maxNumericValue: 2000 }]
'largest-contentful-paint': ['warn', { maxNumericValue: 4000 }]
Usage: Lighthouse CI runs automatically in GitHub Actions when .lighthouserc.js exists
Comprehensive security scanning built into the workflow:
Vulnerability Detection:
Supply Chain Security:
GITLEAKS_PATH β global installation β cached pinned version β fail with clear error--allow-latest-gitleaks flag only when explicitly accepting supply chain riskSecurity patterns checked:
# XSS vulnerability patterns
innerHTML.*\${ # Template literal injection
eval\(.*\${ # Code injection via eval
onclick.*\${ # Event handler injection
# Secret detection patterns
password|secret|key|token.*[=:].*['"][^'"]{8,} # Long credential values
-----BEGIN.*KEY----- # PEM private keys
npm test) that exercises setup.js end-to-end.tests/setup.test.js with your projectβs preferred test runner (Jest, Vitest, Playwright, etc.).test script aligned with your chosen framework so CI executes the same checks.After setup, your project will have these scripts:
npm run format - Format all files with Prettiernpm run format:check - Check if files are formatted (used in CI)npm run prepare - Set up Husky hooks (run after npm install)npm run lint / npm run lint:fix - ESLint flat config (auto-extending to TS) + Stylelintnpm run security:audit - Check for security vulnerabilitiesnpm run security:secrets - Scan for hardcoded secretsnpm run security:config - Check configuration security (Next.js/Vite secret exposure)npm run lighthouse:ci - Run Lighthouse CI performance/SEO checksnpm test - Runs the bootstrap regression test (customize per project)npm run validate:pre-push - Pre-push validation (lint + format + tests) - used by git hooknpm run validate:docs - Validate documentation accuracy (README file references, npm scripts)npm run validate:comprehensive - Run all validation checks (security + documentation)npm run validate:all - Full validation suite including security auditnpm run python:format - Format Python code with Blacknpm run python:lint - Lint Python code with Ruffnpm run python:type-check - Type check with mypynpm run python:test - Run Python tests with pytestThis tool automatically sets up two Husky git hooks to enforce quality before code leaves your machine:
.husky/pre-commit)Runs lint-staged on staged files only:
When it runs: Before every git commit
.husky/pre-push)Runs comprehensive validation before pushing to remote:
npm run test:patterns (if available) - Catches deprecated command patternsnpm run lint (ESLint + Stylelint)npm run format:check (Prettier)npm run test:commands (if available) - Validates generated commands actually worknpm test (if test script exists)When it runs: Before every git push
Why this matters: Catches errors locally before CI runs, saving time and preventing broken builds from reaching your team. The hook intelligently detects which scripts are available and only runs what exists.
Cross-platform: Uses Node.js for script detection (works on Windows, Mac, Linux).
# Skip pre-commit (not recommended)
git commit --no-verify
# Skip pre-push (not recommended)
git push --no-verify
β οΈ Warning: Bypassing hooks defeats the purpose of quality automation. Only use in genuine emergencies.
Test what the pre-push hook will run:
npm run validate:pre-push
Both workflows run on:
main, master, or develop branchesquality.yml)Code Quality Steps:
Security Steps:
Performance & SEO (when configured):
quality-python.yml)Code Quality Steps:
Security Steps:
Run npm run prepare after installing dependencies.
Add conflicting formatters to .prettierignore or configure them to work together.
Ensure your repository has Actions enabled in Settings > Actions.
package.json engines when deploying to Vercel.runtime value in vercel.json unless confirmed against current Vercel docs β incorrect values can break deploys..nvmrc, engines, and optional Volta; this is independent of Vercelβs runtime.To update an existing project:
npx create-quality-automation@latest --update
npm install
The tool safely merges new configurations without overwriting your customizations.
Want to improve this template?
MIT License - feel free to use in any project!
If you run into issues:
Made with β€οΈ to make code quality effortless
FAQs
Bootstrap quality automation for JavaScript/TypeScript and Python projects with GitHub Actions, pre-commit hooks, linting, formatting, and freemium dependency monitoring
We found that create-quality-automation demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Packagist urges PHP projects to update Composer after a GitHub token format change exposed some GitHub Actions tokens in CI logs.

Research
GemStuffer abuses RubyGems as an exfiltration channel, packaging scraped UK council portal data into junk gems published from new accounts.

Company News
Socket was named to the Rising in Cyber 2026 list, recognizing 30 private cybersecurity startups selected by CISOs and security executives.