feat(versioning): add script and workflow for versioning static assets
All checks were successful
Version Static Assets / version-assets (push) Successful in 24s

This commit is contained in:
2026-01-14 13:26:17 +01:00
parent 5bfb857f41
commit 750a90f059
2 changed files with 127 additions and 0 deletions

51
.github/workflows/version-assets.yml vendored Normal file
View File

@@ -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

76
version-assets.sh Executable file
View File

@@ -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)"