- Workflow Automation
- When to use this skill
- Repetitive tasks
-
- running the same commands every time
- Complex builds
-
- multi-step build processes
- Team onboarding
- a consistent development environment Instructions Step 1: npm scripts package.json : { "scripts" : { "dev" : "nodemon src/index.ts" , "build" : "tsc && vite build" , "test" : "jest --coverage" , "test:watch" : "jest --watch" , "lint" : "eslint src --ext .ts,.tsx" , "lint:fix" : "eslint src --ext .ts,.tsx --fix" , "format" : "prettier --write \"src/*/.{ts,tsx,json}\"" , "type-check" : "tsc --noEmit" , "pre-commit" : "lint-staged" , "prepare" : "husky install" , "clean" : "rm -rf dist node_modules" , "reset" : "npm run clean && npm install" , "docker:build" : "docker build -t myapp ." , "docker:run" : "docker run -p 3000:3000 myapp" } } Step 2: Makefile Makefile : .PHONY : help install dev build test clean docker .DEFAULT_GOAL := help help :
Show this help
@ grep -E '^[a-zA-Z_-]+:.?## .$$' $ ( MAKEFILE_LIST ) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' install :
Install dependencies
npm install dev :
Start development server
npm run dev build :
Build for production
npm run build test :
Run all tests
npm test lint :
Run linter
npm run lint lint-fix :
Fix linting issues
npm run lint : fix clean :
Clean build artifacts
rm -rf dist coverage docker-build :
Build Docker image
docker build -t myapp : latest . docker-run :
Run Docker container
docker run -d -p 3000 : 3000 --name myapp myapp : latest deploy : build
Deploy to production
@ echo "Deploying to production..." ./scripts/deploy.sh production ci : lint test build
Run CI pipeline locally
@ echo "✅ CI pipeline passed!" Usage : make help
Show all commands
make dev
Start development
make ci
Run full CI locally
Step 3: Husky + lint-staged (Git Hooks) package.json : { "lint-staged" : { ".{ts,tsx}" : [ "eslint --fix" , "prettier --write" ] , ".{json,md}" : [ "prettier --write" ] } } .husky/pre-commit :
!/usr/bin/env sh
. " $( dirname -- " $0 " ) /_/husky.sh" echo "Running pre-commit checks..."
Lint staged files
npx lint-staged
Type check
npm run type-check
Run tests related to changed files
npm test -- --onlyChanged echo "✅ Pre-commit checks passed!" Step 4: Task Runner scripts scripts/dev-setup.sh :
!/bin/bash
set -e echo "🚀 Setting up development environment..."
Check prerequisites
if ! command -v node &> /dev/null ; then echo "❌ Node.js is not installed" exit 1 fi if ! command -v docker &> /dev/null ; then echo "❌ Docker is not installed" exit 1 fi
Install dependencies
echo "📦 Installing dependencies..." npm install
Copy environment file
if [ ! -f .env ] ; then echo "📄 Creating .env file..." cp .env.example .env echo "⚠️ Please update .env with your configuration" fi
Start Docker services
echo "🐳 Starting Docker services..." docker-compose up -d
Wait for database
echo "⏳ Waiting for database..." ./scripts/wait-for-it.sh localhost:5432 --timeout = 30
Run migrations
echo "🗄️ Running database migrations..." npm run migrate
Seed data (optional)
read -p "Seed database with sample data? (y/n) " -n 1 -r echo if [ [ $REPLY =~ ^ [ Yy ] $ ] ] ; then npm run seed fi echo "✅ Development environment ready!" echo "Run 'make dev' to start the development server" scripts/deploy.sh :
!/bin/bash
set -e ENV = $1 if [ -z " $ENV " ] ; then echo "Usage: ./deploy.sh [staging|production]" exit 1 fi echo "🚀 Deploying to $ENV ..."
Build
echo "📦 Building application..." npm run build
Run tests
echo "🧪 Running tests..." npm test
Deploy based on environment
if [ " $ENV " == "production" ] ; then echo "🌍 Deploying to production..."
Production deployment logic
ssh production "cd /app && git pull && npm install && npm run build && pm2 restart all" elif [ " $ENV " == "staging" ] ; then echo "🧪 Deploying to staging..."
Staging deployment logic
- ssh
- staging
- "cd /app && git pull && npm install && npm run build && pm2 restart all"
- fi
- echo
- "✅ Deployment to
- $ENV
- completed!"
- Step 5: GitHub Actions workflow automation
- .github/workflows/ci.yml
- :
- name
- :
- CI
- on
- :
- push
- :
- branches
- :
- [
- main
- ,
- develop
- ]
- pull_request
- :
- branches
- :
- [
- main
- ]
- jobs
- :
- test
- :
- runs-on
- :
- ubuntu
- -
- latest
- steps
- :
- -
- uses
- :
- actions/checkout@v4
- -
- name
- :
- Setup Node.js
- uses
- :
- actions/setup
- -
- node@v4
- with
- :
- node-version
- :
- '18'
- cache
- :
- 'npm'
- -
- name
- :
- Install dependencies
- run
- :
- npm ci
- -
- name
- :
- Run linter
- run
- :
- npm run lint
- -
- name
- :
- Type check
- run
- :
- npm run type
- -
- check
- -
- name
- :
- Run tests
- run
- :
- npm test
- -
- -
- -
- -
- coverage
- -
- name
- :
- Upload coverage
- uses
- :
- codecov/codecov
- -
- action@v3
- Output format
- project/
- ├── scripts/
- │ ├── dev-setup.sh
- │ ├── deploy.sh
- │ ├── test.sh
- │ └── cleanup.sh
- ├── Makefile
- ├── package.json
- └── .husky/
- ├── pre-commit
- └── pre-push
- Constraints
- Required rules (MUST)
- Idempotency
-
- safe to run scripts multiple times
- Error handling
-
- clear messages on failure
- Documentation
-
- comments on how to use the scripts
- Prohibited items (MUST NOT)
- Hardcoded secrets
-
- do not include passwords or API keys in scripts
- Destructive commands
-
- do not run rm -rf without confirmation
- Best practices
- Use Make
-
- platform-agnostic interface
- Git Hooks
-
- automated quality checks
- CI/CD
-
- automated with GitHub Actions
- References
- npm scripts
- Make Tutorial
- Husky
- Metadata
- Version
- --
- Current version
-
1.0.0
- Last updated
-
2025-01-01
- Compatible platforms
- Claude, ChatGPT, Gemini Tags
automation
scripts
workflow
npm-scripts
Makefile
utilities
Examples Example 1: Basic usage Example 2: Advanced usage