skills/akillness/oh-my-skills/workflow-automation

workflow-automation

SKILL.md

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)

  1. Idempotency: safe to run scripts multiple times
  2. Error handling: clear messages on failure
  3. Documentation: comments on how to use the scripts

Prohibited items (MUST NOT)

  1. Hardcoded secrets: do not include passwords or API keys in scripts
  2. Destructive commands: do not run rm -rf without confirmation

Best practices

  1. Use Make: platform-agnostic interface
  2. Git Hooks: automated quality checks
  3. CI/CD: automated with GitHub Actions

References

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

Weekly Installs
2
GitHub Stars
3
First Seen
5 days ago
Installed on
opencode2
antigravity2
qwen-code2
windsurf2
claude-code2
github-copilot2