GitHub Actions ha transformado la forma en que los desarrolladores automatizan sus proyectos, permitiendo un flujo de trabajo más eficiente. En el ámbito de los videojuegos, un desarrollador ha compartido su experiencia al implementar un pipeline de lanzamiento automatizado para su juego de 2D «hide-and-seek» en Steam.
Después de varios intentos exitosos, el desarrollador logró automatizar todo el proceso. Usando etiquetas de versión, logró que el cliente de Steam descargara las actualizaciones en cuestión de minutos. Esto incluye la compilación en paralelo para múltiples plataformas: Windows, macOS, Linux y WebAssembly.
La configuración del pipeline de lanzamiento es sencilla. El YAML de configuración incluye una serie de pasos que permiten la gestión de dependencias a través de Conan, la preparación del directorio de construcción, la instalación de bibliotecas necesarias y la compilación del código con CMake. Los artefactos generados para cada plataforma son comprimidos y organizados para facilitar su distribución.
name: Release
on:
push:
tags:
- "v*.*.*"
jobs:
release:
runs-on: $
permissions:
contents: write
strategy:
fail-fast: true
matrix:
config:
- name: macOS
os: macos-latest
- name: Ubuntu
os: ubuntu-latest
- name: WebAssembly
os: ubuntu-latest
- name: Windows
os: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache Dependencies
uses: actions/cache@v4
with:
path: |
~/.conan2/p
C:/Users/runneradmin/.conan2/p
key: $-$
restore-keys: |
$-
- name: Prepare Build Directory
run: mkdir build
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install Conan
run: pip install conan
- name: Detect Conan Profile
run: conan profile detect --force
- name: Set Conan Center
run: conan remote update conancenter --url https://center2.conan.io
- name: Detect WebAssembly Conan Profile
if: matrix.config.name == 'WebAssembly'
run: |
cat > ~/.conan2/profiles/webassembly <<EOF
include(default)
[settings]
arch=wasm
os=Emscripten
[tool_requires]
*: emsdk/3.1.73
EOF
- name: Install Windows Or macOS Dependencies
if: matrix.config.name == 'Windows' || matrix.config.name == 'macOS'
run: conan install . --output-folder=build --build=missing --settings compiler.cppstd=20 --settings build_type=Release
- name: Install Ubuntu Dependencies
if: matrix.config.name == 'Ubuntu'
run: conan install . --output-folder=build --build=missing --settings compiler.cppstd=20 --settings build_type=Release --conf "tools.system.package_manager:mode=install" --conf "tools.system.package_manager:sudo=True"
- name: Install WebAssembly Dependencies
if: matrix.config.name == 'WebAssembly'
run: conan install . --output-folder=build --build=missing --profile=webassembly --settings compiler.cppstd=20 --settings build_type=Release
- name: Configure
run: cmake .. -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release
working-directory: build
- name: Build
run: cmake --build . --parallel 8 --config Release --verbose
working-directory: build
- name: Create Artifacts Directory
run: mkdir artifacts
- name: Compress Artifacts
if: matrix.config.name == 'macOS'
working-directory: build
run: |
chmod -R a+rwx carimbo
tar -cpzvf macOS.tar.gz carimbo
mv macOS.tar.gz ../artifacts
- name: Compress Artifacts
if: matrix.config.name == 'Ubuntu'
working-directory: build
run: |
chmod +x carimbo
tar -czvf Ubuntu.tar.gz --mode='a+rwx' carimbo
mv Ubuntu.tar.gz ../artifacts
- name: Compress Artifacts
if: matrix.config.name == 'WebAssembly'
working-directory: build
run: |
zip -jr WebAssembly.zip carimbo.wasm carimbo.js
mv WebAssembly.zip ../artifacts
- name: Compress Artifacts
if: matrix.config.name == 'Windows'
working-directory: build
shell: powershell
run: |
Compress-Archive -LiteralPath 'Release/carimbo.exe' -DestinationPath "../artifacts/Windows.zip"
- name: Release
uses: softprops/action-gh-release@v1
with:
tag_name: $
prerelease: $
files: artifacts/*
Para publicar en Steam, el desarrollador resaltó la necesidad de tener una cuenta de desarrollador y realizar el pago correspondiente de las tarifas. Al inicio del proceso de publicación, se requiere iniciar sesión utilizando steamcmd
, y es necesario tener habilitada la autenticación de múltiples factores (MFA). Además, se deben generar y almacenar en GitHub Variables secretas como STEAM_USERNAME
y STEAM_APP_ID
.
Posteriormente, se despliega el juego en Steam usando un simple flujo de trabajo que se refiere a la automatización de la descarga del runtime de Carimbo, seguido de la preparación y carga de los builds generados a la plataforma.
Esta automatización no solo ahorra tiempo, sino que también permite a los desarrolladores concentrarse más en la creación de su juego, en lugar de perder tiempo en tareas repetitivas y manuales. Con este enfoque, los desarrolladores pueden ver su trabajo recompensado rápidamente, teniendo su juego disponible para la comunidad en cuestión de momentos.