Hace un par de días liberamos el código de dos juegos que hemos hecho en equipo:
- Rat and Furrius, para la Mermelada Jam
- La Falda de la Montaña, para la MálagaJam Weekend 17
Tiene todas las ñapas que podáis esperar de una jam, pero también hay cosas que os pueden resultar útiles. Entre ellas, un archivo para exportar un proyecto de Godot a web y subirlo a itch.io automáticamente.
¿Por qué querrías hacer eso en una jam? Pues porque se hace en 5 minutos y te permite:
- No bloquear a une programadore cada vez que quieras hacer una build.
- No depender de une programadore para poder lanzar el juego.
- Hacer builds más frecuentes para hacer playtesting de los prototipos más rápido.
- Asegurarte de que la build siempre será la misma. Que no te habrás equivocado al exportar/subir el proyecto.
- En los últimos 5 minutos de jam, no tienes que estar comprimiendo archivos, yendo a una web y subiéndo archivos. Sólo haces click en un botón y esperas relajadamente 🍹
Configuración
Lo que sigue es sólo una lista de instrucciones rápidas si ya sabes qué hay que hacer. Si no entiendes algo, en la guía de configuración que hay más abajo estará explicado 🙂
- Copiar
.github/workflows/main.yml
a tu repositorio de GitHub. - Cambiar los valores de estas variables. Si actualizas la versión de Godot, recuerda actualizar la versión de la imagen de Docker.
- Genera una API Key
de Itch y añádela como secreto en el repositorio
(
Settings > Secrets and variables > Repository secrets
). - Abre el proyecto en Godot y genera la configuración para exportar el
proyecto a web
(
Project > Export... > Add... > Web
). Como nombre de esa configuración dejaWeb
, y como export path ponlebuild/index.html
.
Sube los cambios al repositorio y ya está listo para usar.
Probando que funciona
Esto puede hacerlo cualquier persona con acceso al repositorio, no sólo les programadores:
- Entra en Actions.
- Selecciona el workflow
Build + Deploy
. - Haz click en
Run workflow > Run workflow
.
Si todo sale bien, en unos minutos os saldrá la ejecución en verde. Y si váis a vuestra página de Itch, os debería aparecer vuestro juego.
¿Y esto es gratis?
Hasta cierto límite. Tenéis 2.000 minutos de ejecución gratuitos por mes en el plan gratis. Para Godot y para jams, es difícil de alcanzar. Y la ventaja de no depender de/bloquear a une programadore y que siempre se suba el proyecto de la misma manera es considerable.
Guía de configuración en detalle
En esta guía se explica con pelos y señales cómo funciona esta automatización, por si tienes alguna duda o por si tienes curiosidad y quieres aprender más 😊
Copiar main.yml
Lo primero que tienes que hacer es copiar el fichero
.github/workflows/main.yml
a tu repositorio en GitHub,
dentro de esas mismas carpetas “.github” y “workflows”.
Esos son unos directorios especiales que GitHub interpreta como una configuración de su sistema de CI (Integración Continua), las GitHub Actions. Este permite automatizar todo tipo de procesos: desde las builds y subirlo (deploy) a Itch, hasta conversiones de ficheros, ejecución de pruebas, escribir mensajes en Discord/redes…
No puedo explicar en este post cómo funciona en detalle. Pero si te interesa aprender más, tienes la documentación oficial. Recomiendo aprender algo de Docker de antemano para entender cómo se configuran las máquinas en las que se ejecutan estos procesos. Para esta guía sólo nos hace falta saber que una “imagen de Docker” es algo parecido a un ordenador que ya viene con cosas instaladas.
¿Y qué es lo que hace este fichero? Pues define los pasos a seguir para generar esa build y subirla a Itch. Si lo abres, verás que tiene unos “steps” definidos. A grandes rasgos, esto es lo que hacen:
- Checkout: se descarga el código del repositorio.
- Setup: prepara las export templates de Godot. La imagen de Docker ya incluye esas templates, que a veces pesan ~1GB o más, dependiendo de la plataforma.
- Web Build: usa Godot desde la línea de comandos para exportar el proyecto para web.
- Itch.io Deploy: sube los ficheros exportados a Itch para que se puedan jugar.
Editar las variables
Variables en main.yml
Una vez copiado, hará falta modificar los valores de estas
variables en main.yml
para que sean los de tu
juego:
ITCHIO_USERNAME
yITCHIO_GAME
son tu nombre y el de tu juego que aparece en la url. Por ejemplo, parahttps://edearth.itch.io/falda-montana
seríanedearth
yfalda-montana
respectivamente.GODOT_VERSION
es la versión de Godot que estés usando. Si la actualizas, tendrás que actualizar también la versión en la línea que define la imagen de Docker. Puedes consultar las versiones disponibles en este enlace.- La variable
BUTLER_API_KEY
es especial y está definida en otro lugar. No hace falta modificarla aquí. Te lo explico a continuación.
API Key
Una API Key es una especie de “contraseña” que permitirá a esta GitHub Action usar vuestra cuenta de Itch. Si te parece peligroso, es porque puede serlo. Por eso no podemos guardarla con el resto de variables, porque tiene que mantenerse en secreto.
Para configurarla, accede a
Settings > Secrets and variables > Actions > Repository secrets
y cread un nuevo secreto. Dentro, copia la API key que generes desde
itch.
Esta API Key se puede usar con Butler, la herramienta para línea de comandos de Itch. Permite subir proyectos a Itch de maner super rápida, subiendo sólo los ficheros que se modificaron. Y es justo lo que nuestra automatización hará.
Es MUY importante que mantengas esta clave bien segura. No la pases por Discord, ni WhatsApp, ni ningún sitio. Y si sospechas que se ha filtrado, tienes que ir al dashboard y darle a “revoke” lo antes posible. Si alguien se hace con ella, puede llegar a acceder a tu cuenta de Itch y borrarte los juegos.
Export en Godot
El último paso es decirle a Godot cómo y dónde tiene que generar esa
build del juego. Para eso, abre el proyecto en Godot y navega hasta
Project > Export... > Add... > Web
. Si es la
primera vez que vas a exportar tu juego, esta ventana estará vacía como
en el video. Al darle al botón de Add...
y seleccionar
Web
se generará la configuración para exportar el proyecto
a web.
El fichero main.yml
está configurado para que la build
se exporte a una carpeta específica, por lo que tendrás que configurar
el “export path” para que sea build/index.html
. Ahí es
donde se creará la build. No es por nada que necesite GitHub ni Godot.
Es que usé ese directorio en main.yml
y es más fácil
dejarlo como está que modificarlo cada vez que crees un nuevo
proyecto.
Una vez hecho esto, ya habrás terminado. ¡Lo único que te queda es probar que funciona!