¡Buenos días, dev community! ![]()
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.
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
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!"
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
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
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
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
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
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"
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"
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
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