Merge remote-tracking branch 'origin/main'
Some checks failed
Version Static Assets / version-assets (push) Has been cancelled
Some checks failed
Version Static Assets / version-assets (push) Has been cancelled
# Conflicts: # www/index.html
This commit is contained in:
54
.gitea/workflows/version-assets.yml
Normal file
54
.gitea/workflows/version-assets.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
name: Version Static Assets
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'script.js'
|
||||
- 'styles.css'
|
||||
- 'logo.png'
|
||||
- 'index.html'
|
||||
- 'version-assets.sh'
|
||||
- '.github/workflows/version-assets.yml'
|
||||
|
||||
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
|
||||
BIN
logo.78f51359.png
Normal file
BIN
logo.78f51359.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
18
robots.txt
Normal file
18
robots.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
# Robots.txt for Juego del Impostor
|
||||
# https://impostor.dariosevilla.es
|
||||
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Sitemap location
|
||||
Sitemap: https://impostor.dariosevilla.es/sitemap.xml
|
||||
|
||||
# Allow all crawlers to access the main content
|
||||
User-agent: Googlebot
|
||||
Allow: /
|
||||
|
||||
User-agent: Bingbot
|
||||
Allow: /
|
||||
|
||||
# Crawl-delay for polite crawling (optional)
|
||||
Crawl-delay: 1
|
||||
1347
script.f88d8968.js
Normal file
1347
script.f88d8968.js
Normal file
File diff suppressed because it is too large
Load Diff
13
sitemap.xml
Normal file
13
sitemap.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>https://impostor.dariosevilla.es/</loc>
|
||||
<lastmod>2026-01-17</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
<xhtml:link rel="alternate" hreflang="es" href="https://impostor.dariosevilla.es/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://impostor.dariosevilla.es/?lang=en"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://impostor.dariosevilla.es/"/>
|
||||
</url>
|
||||
</urlset>
|
||||
1829
styles.1a37b506.css
Normal file
1829
styles.1a37b506.css
Normal file
File diff suppressed because it is too large
Load Diff
80
version-assets.sh
Executable file
80
version-assets.sh
Executable file
@@ -0,0 +1,80 @@
|
||||
#!/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"
|
||||
|
||||
# Obtener nombre base y extensión para el patrón
|
||||
base="${asset%.*}"
|
||||
ext="${asset##*.}"
|
||||
|
||||
# Actualizar referencia en HTML (busca versión original o hasheada)
|
||||
case "$asset" in
|
||||
*.js)
|
||||
sed -i -E "s|src=\"${base}(\.[a-f0-9]{8})?\.${ext}\"|src=\"${versioned}\"|g" "$HTML_FILE"
|
||||
;;
|
||||
*.css)
|
||||
sed -i -E "s|href=\"${base}(\.[a-f0-9]{8})?\.${ext}\"|href=\"${versioned}\"|g" "$HTML_FILE"
|
||||
;;
|
||||
*.png)
|
||||
sed -i -E "s|href=\"${base}(\.[a-f0-9]{8})?\.${ext}\"|href=\"${versioned}\"|g" "$HTML_FILE"
|
||||
sed -i -E "s|src=\"${base}(\.[a-f0-9]{8})?\.${ext}\"|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)"
|
||||
@@ -3,10 +3,83 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover">
|
||||
<title>Juego del Impostor</title>
|
||||
<title>Juego del Impostor - Juego de Rol Gratis Online | Encuentra al Impostor</title>
|
||||
|
||||
<!-- SEO Meta Tags -->
|
||||
<meta name="description" content="Juego del Impostor: un emocionante juego de rol social gratuito para 3-10 jugadores. Descubre quién es el impostor antes de que sea tarde. Sin descargas, juega desde el navegador.">
|
||||
<meta name="keywords" content="juego del impostor, impostor game, juego de rol, juego social, juego gratis, juego online, juego de palabras, juego de deducción, juego para fiestas, juego multijugador, among us estilo">
|
||||
<meta name="author" content="Darío Sevilla">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="theme-color" content="#1a1a2e">
|
||||
<link rel="canonical" href="https://impostor.dariosevilla.es/">
|
||||
<link rel="alternate" hreflang="es" href="https://impostor.dariosevilla.es/">
|
||||
<link rel="alternate" hreflang="en" href="https://impostor.dariosevilla.es/?lang=en">
|
||||
<link rel="alternate" hreflang="x-default" href="https://impostor.dariosevilla.es/">
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://impostor.dariosevilla.es/">
|
||||
<meta property="og:title" content="Juego del Impostor - Juego de Rol Social Gratis">
|
||||
<meta property="og:description" content="¿Podrás descubrir quién es el impostor? Juego de deducción social gratuito para 3-10 jugadores. Sin descargas, juega directamente en tu navegador.">
|
||||
<meta property="og:image" content="https://impostor.dariosevilla.es/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta property="og:locale" content="es_ES">
|
||||
<meta property="og:locale:alternate" content="en_US">
|
||||
<meta property="og:site_name" content="Juego del Impostor">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:url" content="https://impostor.dariosevilla.es/">
|
||||
<meta name="twitter:title" content="Juego del Impostor - Juego de Rol Social Gratis">
|
||||
<meta name="twitter:description" content="¿Podrás descubrir quién es el impostor? Juego de deducción social para 3-10 jugadores. Sin descargas.">
|
||||
<meta name="twitter:image" content="https://impostor.dariosevilla.es/og-image.png">
|
||||
|
||||
<!-- Additional SEO -->
|
||||
<meta name="application-name" content="Juego del Impostor">
|
||||
<meta name="apple-mobile-web-app-title" content="Impostor">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<!-- Structured Data JSON-LD -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebApplication",
|
||||
"name": "Juego del Impostor",
|
||||
"alternateName": "The Impostor Game",
|
||||
"description": "Juego de rol social gratuito donde los jugadores deben descubrir quién es el impostor usando pistas y deducción.",
|
||||
"url": "https://impostor.dariosevilla.es/",
|
||||
"applicationCategory": "GameApplication",
|
||||
"operatingSystem": "Web Browser",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "EUR"
|
||||
},
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "Darío Sevilla",
|
||||
"url": "https://dariosevilla.es"
|
||||
},
|
||||
"inLanguage": ["es", "en"],
|
||||
"genre": ["Party Game", "Social Deduction", "Word Game"],
|
||||
"numberOfPlayers": {
|
||||
"@type": "QuantitativeValue",
|
||||
"minValue": 3,
|
||||
"maxValue": 10
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Crimson+Text:wght@600;700&family=Courier+Prime:wght@400;700&family=JetBrains+Mono:wght@400;700;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="styles.1a37b506.css">
|
||||
<link rel="icon" type="image/png" href="logo.78f51359.png">
|
||||
<link rel="sitemap" type="application/xml" href="/sitemap.xml">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
<link rel="icon" type="image/png" href="logo.png">
|
||||
<link rel="manifest" href="manifest.webmanifest">
|
||||
|
||||
Reference in New Issue
Block a user