🔧 Tech Tips Monday: 7 Scripts de Automatización que Te Ahorrarán Horas Semanales

¡Buenos días, dev community! :glowing_star:

Arrancamos una nueva semana con Tech Tips Monday. Hoy enfoque en automatización: scripts y herramientas que eliminan tareas repetitivas y liberan tiempo para código que realmente importa.

:high_voltage: 1. Script de Setup de Proyecto Inteligente

¿Cansado de repetir los mismos pasos cada vez que inicias un proyecto? Este script te configura todo automáticamente:

#!/bin/bash
# setup-project.sh

PROJECT_NAME=$1
PROJECT_TYPE=${2:-"react"}

if [ -z "$PROJECT_NAME" ]; then
    echo "Usage: ./setup-project.sh <project-name> [type]"
    echo "Types: react, next, node, python, vue"
    exit 1
fi

echo "🚀 Creando proyecto $PROJECT_NAME ($PROJECT_TYPE)..."

# Crear directorio y navegar
mkdir $PROJECT_NAME && cd $PROJECT_NAME

# Setup según tipo
case $PROJECT_TYPE in
    "react")
        npx create-react-app . --template typescript
        npm install -D prettier eslint-config-prettier
        ;;
    "next")
        npx create-next-app . --typescript --tailwind --eslint --app
        ;;
    "node")
        npm init -y
        npm install -D typescript @types/node ts-node nodemon
        mkdir src tests
        echo 'console.log("Hello TypeScript!");' > src/index.ts
        ;;
    "python")
        python -m venv .venv
        source .venv/bin/activate
        echo "fastapi==0.104.1" > requirements.txt
        pip install -r requirements.txt
        mkdir app tests
        ;;
esac

# Git setup
git init
git add .
git commit -m "🎉 Initial commit"

# Crear README básico
cat > README.md << EOF
# $PROJECT_NAME

## Setup
\`\`\`bash
npm install  # or pip install -r requirements.txt
npm start    # or python -m uvicorn app.main:app --reload
\`\`\`

## Development
- [ ] Configure environment variables
- [ ] Setup database (if needed)  
- [ ] Configure CI/CD
EOF

echo "✅ Proyecto $PROJECT_NAME creado exitosamente!"
echo "📁 Directorio: $(pwd)"

# Abrir en editor
code .

Uso:

chmod +x setup-project.sh
./setup-project.sh mi-api node
./setup-project.sh mi-app react

:broom: 2. Cleanup Automático del Sistema de Desarrollo

Script que limpia tu máquina de archivos temporales y caches:

#!/bin/bash
# dev-cleanup.sh

echo "🧹 Limpiando entorno de desarrollo..."

# Node.js cleanup
echo "📦 Limpiando node_modules huérfanos..."
find ~/Projects -name "node_modules" -type d -exec du -sh {} + | \
    sort -hr | head -10
read -p "¿Eliminar node_modules antiguos? (y/N): " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    find ~/Projects -name "node_modules" -type d -mtime +30 -exec rm -rf {} +
fi

# Docker cleanup
echo "🐳 Limpiando Docker..."
docker system prune -f
docker volume prune -f

# Homebrew cleanup
echo "🍺 Limpiando Homebrew..."
brew cleanup --prune=all

# npm/yarn cache
echo "📦 Limpiando package manager caches..."
npm cache clean --force
yarn cache clean

# Python cleanup
echo "🐍 Limpiando Python cache..."
find . -type d -name "__pycache__" -exec rm -r {} +
pip cache purge

# Git cleanup en todos los repos
echo "📚 Optimizando repositorios Git..."
find ~/Projects -name ".git" -type d | while read gitdir; do
    repo=$(dirname "$gitdir")
    echo "Optimizando $repo"
    cd "$repo"
    git gc --aggressive --prune=now
done

echo "✅ Cleanup completado!"

:bar_chart: 3. Monitor de Performance de Builds

Script que trackea tiempos de build y te alerta cuando se vuelven lentos:

#!/bin/bash
# build-monitor.sh

PROJECT_ROOT=$(pwd)
LOG_FILE="$HOME/.build-times.log"
ALERT_THRESHOLD=60  # segundos

echo "⏱️ Monitoreando build de $(basename $PROJECT_ROOT)..."

# Detectar tipo de proyecto y comando de build
if [ -f "package.json" ]; then
    BUILD_CMD="npm run build"
elif [ -f "Cargo.toml" ]; then
    BUILD_CMD="cargo build --release"
elif [ -f "requirements.txt" ]; then
    BUILD_CMD="python setup.py build"
else
    echo "❌ Tipo de proyecto no reconocido"
    exit 1
fi

# Ejecutar build con timing
start_time=$(date +%s)
echo "🔨 Ejecutando: $BUILD_CMD"

$BUILD_CMD
exit_code=$?

end_time=$(date +%s)
duration=$((end_time - start_time))

# Log resultado
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "$timestamp,$PROJECT_ROOT,$duration,$exit_code" >> $LOG_FILE

# Alertas
if [ $duration -gt $ALERT_THRESHOLD ]; then
    echo "⚠️  Build lento detectado: ${duration}s (threshold: ${ALERT_THRESHOLD}s)"
    
    # Notificación del sistema (macOS)
    osascript -e "display notification 'Build tardó ${duration}s' with title 'Build Slow Alert'"
fi

if [ $exit_code -eq 0 ]; then
    echo "✅ Build exitoso en ${duration}s"
else
    echo "❌ Build falló después de ${duration}s"
fi

# Mostrar estadísticas recientes
echo "\n📈 Últimos 5 builds:"
tail -5 $LOG_FILE | while IFS=',' read timestamp project duration exit_code; do
    status=$([ $exit_code -eq 0 ] && echo "✅" || echo "❌")
    echo "$status $(basename $project): ${duration}s"
done

:counterclockwise_arrows_button: 4. Auto-sync de Configuraciones

Mantén tus dotfiles sincronizados automáticamente:

#!/bin/bash
# sync-dotfiles.sh

DOTFILES_REPO="$HOME/dotfiles"
BACKUP_DIR="$HOME/.dotfiles-backup"

echo "🔄 Sincronizando dotfiles..."

# Crear backup
mkdir -p $BACKUP_DIR
cp ~/.zshrc ~/.gitconfig ~/.vimrc $BACKUP_DIR/ 2>/dev/null

# Sync desde repo
cd $DOTFILES_REPO
git pull origin main

# Crear symlinks
ln -sf $DOTFILES_REPO/.zshrc ~/.zshrc
ln -sf $DOTFILES_REPO/.gitconfig ~/.gitconfig  
ln -sf $DOTFILES_REPO/.vimrc ~/.vimrc

# VS Code settings
if [ -d "$HOME/Library/Application Support/Code/User" ]; then
    ln -sf $DOTFILES_REPO/vscode/settings.json "$HOME/Library/Application Support/Code/User/"
fi

echo "✅ Dotfiles sincronizados!"
echo "📁 Backup guardado en: $BACKUP_DIR"

# Reload shell
source ~/.zshrc

:mobile_phone: 5. Generador de Assets para Múltiples Plataformas

Script que genera iconos y assets para web, iOS y Android desde una imagen source:

#!/bin/bash
# generate-assets.sh

SOURCE_IMAGE=$1
OUTPUT_DIR="./assets"

if [ ! -f "$SOURCE_IMAGE" ]; then
    echo "❌ Imagen source no encontrada: $SOURCE_IMAGE"
    echo "Usage: ./generate-assets.sh <source-image.png>"
    exit 1
fi

echo "🎨 Generando assets desde $SOURCE_IMAGE..."

mkdir -p $OUTPUT_DIR/{web,ios,android}

# Web favicons
convert $SOURCE_IMAGE -resize 16x16 $OUTPUT_DIR/web/favicon-16x16.png
convert $SOURCE_IMAGE -resize 32x32 $OUTPUT_DIR/web/favicon-32x32.png
convert $SOURCE_IMAGE -resize 192x192 $OUTPUT_DIR/web/android-chrome-192x192.png
convert $SOURCE_IMAGE -resize 512x512 $OUTPUT_DIR/web/android-chrome-512x512.png

# iOS icons
convert $SOURCE_IMAGE -resize 120x120 $OUTPUT_DIR/ios/icon-60@2x.png
convert $SOURCE_IMAGE -resize 180x180 $OUTPUT_DIR/ios/icon-60@3x.png
convert $SOURCE_IMAGE -resize 152x152 $OUTPUT_DIR/ios/icon-76@2x.png
convert $SOURCE_IMAGE -resize 167x167 $OUTPUT_DIR/ios/icon-83.5@2x.png

# Android icons
convert $SOURCE_IMAGE -resize 48x48 $OUTPUT_DIR/android/ic_launcher_mdpi.png
convert $SOURCE_IMAGE -resize 72x72 $OUTPUT_DIR/android/ic_launcher_hdpi.png
convert $SOURCE_IMAGE -resize 96x96 $OUTPUT_DIR/android/ic_launcher_xhdpi.png
convert $SOURCE_IMAGE -resize 144x144 $OUTPUT_DIR/android/ic_launcher_xxhdpi.png
convert $SOURCE_IMAGE -resize 192x192 $OUTPUT_DIR/android/ic_launcher_xxxhdpi.png

echo "✅ Assets generados en $OUTPUT_DIR"
echo "📱 Web: $(ls $OUTPUT_DIR/web | wc -l) archivos"
echo "🍎 iOS: $(ls $OUTPUT_DIR/ios | wc -l) archivos"  
echo "🤖 Android: $(ls $OUTPUT_DIR/android | wc -l) archivos"

Prerequisito: brew install imagemagick

:rocket: 6. Deploy Automático con Validaciones

Script que valida tu código antes de deploy y hace rollback automático si algo falla:

#!/bin/bash
# smart-deploy.sh

ENVIRONMENT=${1:-"staging"}
SERVICE_NAME="mi-app"

echo "🚀 Iniciando deploy a $ENVIRONMENT..."

# Pre-deploy validations
echo "🔍 Ejecutando validaciones pre-deploy..."

# Tests
if ! npm test; then
    echo "❌ Tests fallaron. Deploy abortado."
    exit 1
fi

# Linting
if ! npm run lint; then
    echo "❌ Linting falló. Deploy abortado."
    exit 1
fi

# Build
if ! npm run build; then
    echo "❌ Build falló. Deploy abortado."
    exit 1
fi

# Health check URL
HEALTH_URL="https://$SERVICE_NAME-$ENVIRONMENT.com/health"

# Backup current version
CURRENT_VERSION=$(curl -s $HEALTH_URL | jq -r '.version')
echo "📦 Version actual: $CURRENT_VERSION"

# Deploy
echo "📤 Deploying..."
if [ "$ENVIRONMENT" = "production" ]; then
    # Production deploy command
    kubectl apply -f k8s/production/
else
    # Staging deploy command  
    kubectl apply -f k8s/staging/
fi

# Wait for deployment
sleep 30

# Health check
echo "🏥 Verificando health check..."
for i in {1..5}; do
    if curl -s $HEALTH_URL | grep -q "healthy"; then
        echo "✅ Deploy exitoso!"
        NEW_VERSION=$(curl -s $HEALTH_URL | jq -r '.version')
        echo "🎉 Version desplegada: $NEW_VERSION"
        exit 0
    fi
    echo "⏳ Reintentando health check... ($i/5)"
    sleep 10
done

# Rollback
echo "❌ Health check falló. Iniciando rollback..."
kubectl rollout undo deployment/$SERVICE_NAME -n $ENVIRONMENT
echo "🔄 Rollback completado"
exit 1

:bar_chart: 7. Reportes Automáticos de Productividad

Script que analiza tu actividad de desarrollo y genera insights:

#!/bin/bash
# productivity-report.sh

DAYS=${1:-7}
REPORT_FILE="productivity-report-$(date +%Y%m%d).md"

echo "📊 Generando reporte de productividad (últimos $DAYS días)..."

cat > $REPORT_FILE << EOF
# Reporte de Productividad - $(date +"%Y-%m-%d")

## Git Activity
EOF

# Git commits analysis
echo "### Commits por día" >> $REPORT_FILE
git log --since="$DAYS days ago" --date=short --pretty=format:"%ad" | \
    sort | uniq -c | \
    awk '{print "- " $2 ": " $1 " commits"}' >> $REPORT_FILE

echo -e "\n### Archivos más modificados" >> $REPORT_FILE
git log --since="$DAYS days ago" --name-only --pretty=format: | \
    sort | uniq -c | sort -rn | head -10 | \
    awk '{print "- " $2 " (" $1 " veces)"}' >> $REPORT_FILE

# Lines of code analysis
echo -e "\n## Líneas de Código" >> $REPORT_FILE
echo "### Adiciones vs Eliminaciones" >> $REPORT_FILE
git log --since="$DAYS days ago" --pretty=tformat: --numstat | \
    awk '{add+=$1; del+=$2} END {print "- Líneas agregadas: " add; print "- Líneas eliminadas: " del}' >> $REPORT_FILE

# Languages breakdown
echo -e "\n### Distribución por Lenguaje" >> $REPORT_FILE
find . -name "*.js" -o -name "*.ts" -o -name "*.py" -o -name "*.rb" | \
    awk -F. '{print $NF}' | sort | uniq -c | sort -rn | \
    awk '{print "- " $2 ": " $1 " archivos"}' >> $REPORT_FILE

# Working hours analysis
echo -e "\n## Patrones de Trabajo" >> $REPORT_FILE
echo "### Commits por hora" >> $REPORT_FILE
git log --since="$DAYS days ago" --date=format:'%H' --pretty=format:'%ad' | \
    sort | uniq -c | sort -k2n | \
    awk '{printf "- %02d:00: %d commits\n", $2, $1}' >> $REPORT_FILE

echo "✅ Reporte generado: $REPORT_FILE"
open $REPORT_FILE  # macOS

:hammer_and_wrench: Setup Rápido: Instalar Todos los Scripts

#!/bin/bash
# install-scripts.sh

SCRIPTS_DIR="$HOME/.dev-scripts"
mkdir -p $SCRIPTS_DIR

# Agregar al PATH
echo 'export PATH="$HOME/.dev-scripts:$PATH"' >> ~/.zshrc

# Hacer scripts ejecutables
chmod +x $SCRIPTS_DIR/*

echo "✅ Scripts instalados en $SCRIPTS_DIR"
echo "🔄 Reinicia tu terminal o ejecuta: source ~/.zshrc"

:light_bulb: Tips de Implementación

Esta Semana:

  • Elige 2 scripts que resuelvan tus mayores pain points
  • Personaliza los scripts según tu stack tecnológico
  • Configura aliases para scripts que uses frecuentemente
  • Comparte scripts útiles con tu equipo

Aliases Recomendados:

# Agregar a ~/.zshrc
alias newproject="$HOME/.dev-scripts/setup-project.sh"
alias cleanup="$HOME/.dev-scripts/dev-cleanup.sh"
alias deploy="$HOME/.dev-scripts/smart-deploy.sh"
alias report="$HOME/.dev-scripts/productivity-report.sh"

:bullseye: Desafío de la Semana

Automatiza una tarea que haces al menos 3 veces por semana:

  • Identifica el pain point más repetitivo de tu workflow
  • Escribe un script básico que lo automatice
  • Mejora el script agregando validaciones y error handling
  • Compártelo con tu equipo

Bonus: Configura cron jobs para scripts que se pueden ejecutar automáticamente:

# Ejecutar cleanup cada domingo a las 2 AM
0 2 * * 0 /Users/tu-usuario/.dev-scripts/dev-cleanup.sh

# Generar reporte semanal cada viernes a las 5 PM  
0 17 * * 5 /Users/tu-usuario/.dev-scripts/productivity-report.sh 7

:speech_balloon: Conversación Abierta

¿Qué tareas repetitivas consumen más tiempo en tu día a día?

¿Tienen scripts de automatización que les han cambiado la vida?

¿Qué herramientas usan para orquestar múltiples scripts?

La automatización no se trata de ser perezoso, se trata de ser estratégico. Cada minuto automatizado es un minuto que puedes invertir en resolver problemas complejos y crear valor real.

Compartamos scripts y automatizaciones para construir un arsenal colectivo de productividad.

techtipsmonday automation #Scripting productivity devops workflow #TimeHacks