diff --git a/.github/workflows/version-assets.yml b/.github/workflows/version-assets.yml new file mode 100644 index 0000000..9f577da --- /dev/null +++ b/.github/workflows/version-assets.yml @@ -0,0 +1,51 @@ +name: Version Static Assets + +on: + push: + branches: + - main + paths: + - 'script.js' + - 'styles.css' + - 'logo.png' + +jobs: + version-assets: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.APP_SECRET }} + fetch-depth: 0 + + - name: Delete old versioned assets + run: | + echo "🗑️ Borrando archivos hasheados antiguos..." + rm -f *.*.js *.*.css *.*.png || true + git add -A + + - name: Run asset versioning + run: | + chmod +x version-assets.sh + ./version-assets.sh + + - name: Check for changes + id: check_changes + run: | + if git diff --quiet && git diff --cached --quiet; then + echo "changes=false" >> $GITHUB_OUTPUT + echo "No hay cambios para commitear" + else + echo "changes=true" >> $GITHUB_OUTPUT + fi + + - name: Commit and push versioned assets + if: steps.check_changes.outputs.changes == 'true' + run: | + git config --local user.email "ci@dariosevilla.es" + git config --local user.name "CI Action" + git add *.*.js *.*.css *.*.png index.html + git commit -m "chore: update asset versions [skip ci]" + git push \ No newline at end of file diff --git a/version-assets.sh b/version-assets.sh new file mode 100755 index 0000000..b729216 --- /dev/null +++ b/version-assets.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# Script de versionado de archivos estáticos +# Genera hashes basados en el contenido y actualiza referencias en HTML + +set -e + +echo "🚀 Iniciando versionado de archivos estáticos..." +echo "" + +# Archivos a versionar +ASSETS=("script.js" "styles.css" "logo.png") +HTML_FILE="index.html" + +# Función para generar hash MD5 de un archivo +generate_hash() { + local file=$1 + md5sum "$file" | cut -c1-8 +} + +# Función para obtener el nombre versionado +get_versioned_name() { + local file=$1 + local hash=$2 + local base="${file%.*}" + local ext="${file##*.}" + echo "${base}.${hash}.${ext}" +} + +# Limpiar archivos versionados antiguos +echo "🗑️ Limpiando versiones antiguas..." +rm -f *.*.js *.*.css *.*.png 2>/dev/null || true +echo "" + +# Crear backup del HTML +cp "$HTML_FILE" "${HTML_FILE}.bak" + +# Versionar cada archivo +for asset in "${ASSETS[@]}"; do + if [[ ! -f "$asset" ]]; then + echo "⚠️ Advertencia: $asset no encontrado, saltando..." + continue + fi + + # Generar hash + hash=$(generate_hash "$asset") + versioned=$(get_versioned_name "$asset" "$hash") + + # Copiar archivo con versión + echo "📦 Versionando: $asset → $versioned" + cp "$asset" "$versioned" + + # Actualizar referencia en HTML + case "$asset" in + *.js) + sed -i "s|src=\"${asset}\"|src=\"${versioned}\"|g" "$HTML_FILE" + ;; + *.css) + sed -i "s|href=\"${asset}\"|href=\"${versioned}\"|g" "$HTML_FILE" + ;; + *.png) + sed -i "s|href=\"${asset}\"|href=\"${versioned}\"|g" "$HTML_FILE" + sed -i "s|src=\"${asset}\"|src=\"${versioned}\"|g" "$HTML_FILE" + ;; + esac + + echo "✏️ Actualizado: $asset → $versioned en $HTML_FILE" + echo "" +done + +# Limpiar backup +rm -f "${HTML_FILE}.bak" + +echo "✅ Versionado completado exitosamente!" +echo "" +echo "📋 Archivos versionados:" +ls -1 *.*.{js,css,png} 2>/dev/null || echo " (ninguno)" \ No newline at end of file