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.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí