Непрерывная интеграция

Wonderland Editor Docker Image позволяет настроить эффективную непрерывную интеграцию и доставку проектов Wonderland Engine.

Эта страница описывает, как настроить эффективную автоматическую сборку и развёртывание с использованием самых популярных CI-сервисов:

Кроме того, здесь описано, как настроить автоматизацию для загрузки сборок на:

Gitlab CI / Gitlab Pages 

Используйте любой docker runner (например, общие runner на gitlab.com) на Gitlab.

Конфигурация 

Ваш файл .gitlab-ci.yml должен выглядеть следующим образом:

stages:
  - build
  - deploy

package:
  image: wonderlandengine/editor:latest
  stage: build
  script:
    # Настройка переменной WLE_CREDENTIALS для входа в WonderlandEditor
    - WonderlandEditor --windowless --package --project Project.wlp
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - cache/
  artifacts:
    paths:
      - deploy

pages:
  image: alpine:3.14
  stage: deploy
  rules:
    # Развёртывание на pages только для основной ветки
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
  before_script:
    - apk add gzip
  script:
    - gzip -k deploy/*.*
    - mv deploy public
  artifacts:
    paths:
      - public

$WLE_CREDENTIALS — это переменная, содержащая токен доступа. Мы настроим её на следующем шаге.

Переменные 

Найдите переменные для Gitlab CI в веб-интерфейсе Gitlab: Settings > CI/CD > Variables.

Нажмите “Add Variable” и назовите её WLE_CREDENTIALS. Её значение должно быть API-токеном, который вы можете получить на странице аккаунта, в разделе “API-Token”. Введите имя и дату окончания, затем нажмите “Create New API-Token”. Токен можно скопировать из только что созданной записи в верхней части списка.

Для публичных проектов убедитесь, что включена опция “Protect variable” для предотвращения доступа к переменной CI из неслитых merge request.

Кэш 

Самая времязатратная задача в редакторе — это сжатие текстур. Этот процесс значительно быстрее, если результаты кэшируются (в папке cache/). Поэтому полезно либо указать эту папку для кэша CI, либо добавить файлы в систему управления версиями.

GitHub Workflows / GitHub Pages 

Используйте любой runner с поддержкой Docker (например, размещённые runner на GitHub) на GitHub.

Конфигурация 

Ваш файл workflow (например, .github/workflows/github-pages.yml) должен выглядеть следующим образом:

on: [push]

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  package:
    runs-on: ubuntu-latest
    container:
      image: wonderlandengine/editor:latest
    steps:
    - name: Install Git
      run: apt-get update && apt-get install -y git git-lfs
    - uses: actions/checkout@v4
      with:
        lfs: true
    - name: Package
      run: /usr/local/bin/entrypoint.sh WonderlandEditor --windowless --package --project Project.wlp --output ./public/
      env:
          WLE_CREDENTIALS: ${{ secrets.WLE_CREDENTIALS }}
    - name: Gzip
      run: find ./public/ -type f ! -name '*.gz' -exec gzip -k "{}" \;
    - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./public

  deploy-pages:
    needs: package
    runs-on: ubuntu-latest
    if: ${{ format('refs/heads/{0}', github.event.repository.default_branch) == github.ref }}
    steps:
      - name: Deploy to GitHub Pages
        uses: actions/deploy-pages@v4

Project.wlp — это ваш файл проекта.

$WLE_CREDENTIALS — это секрет, содержащий email:password. Мы настроим его на следующем шаге.

Задача deploy-pages будет выполняться только на основной ветке вашего репозитория (обычно main).

Секреты 

Найдите секреты для GitHub Workflows в веб-интерфейсе GitHub: Settings > Secrets > Actions.

Нажмите “New repository secret” в правом верхнем углу и назовите его WLE_CREDENTIALS. Его значение должно быть API-токеном, который вы можете получить на странице аккаунта, в разделе “API-Token”. Введите имя и дату окончания, затем нажмите “Create New API-Token”. Токен можно скопировать из только что созданной записи в верхней части списка.

Секреты не передаются в pull-реквестах из форков, что означает, что ваш workflow может не запускаться для pull-реквестов от внешних сотрудников.

Bitbucket CI 

Используйте любой runner с поддержкой Docker (например, размещённые runner на GitHub) на GitHub.

Конфигурация 

Ваш файл pipelines (например, bitbucket-pipelines.yml) должен выглядеть следующим образом:

image: wonderlandengine/editor:latest

pipelines:
  default:
    - step:
        name: 'Build'
        script:
          - /usr/local/bin/entrypoint.sh WonderlandEditor --windowless --package --project Project.wlp
        artifacts:
          - deploy/**

Project.wlp — это ваш файл проекта.

$WLE_CREDENTIALS — это секрет, содержащий email:password. Мы настроим его на следующем шаге.

Обратите внимание, что Bitbucket в настоящее время не предлагает услугу для хостинга статических страниц, как Gitlab Pages или GitHub Pages. Вместо этого вы можете комбинировать это с deploy to netlify.

Развёртывание на Netlify 

Здесь мы используем Netlify CLI для “непрерывного развёртывания”.

Конфигурация 

Настройте .gitlab-ci.yml, как описано в секции Gitlab CI.

Добавьте stage deploy:

stages:
  - build
  - deploy

Затем добавьте следующую задачу deploy в конец файла:

netlify:
  image: node:15
  stage: deploy
  script:
    - npm install -g netlify-cli
    - netlify deploy --dir=public --prod

Переменные 

Найдите переменные для Gitlab CI в веб-интерфейсе Gitlab: Settings > CI/CD > Variables.

Добавьте переменную с ключом NETLIFY_AUTH_TOKEN и значением в виде токена доступа netlify. Вы можете создать его здесь.

Также добавьте другую переменную с ключом NETLIFY_SITE_ID. Установите её значение в “Site ID” сайта, который вы хотите развернуть. Это можно найти в site settings > General > Site details > Site information. (Если вы ещё не создали сайт, следуйте инструкции здесь).

Публикация на HeyVR 

Чтобы публиковать из CI в HeyVR, вы можете использовать неофициальный пакет “heyvr-cli” на npm.

Последний этап публикации должен быть завершён в портале разработчика HeyVR.

Аутентификация 

Получите API-ключ в ваших настройках аккаунта HeyVR в разделе “Developer Access Token”.

Добавьте CI-переменную или секрет HEYVR_ACCESS_TOKEN с токеном в качестве значения.

Для GitHub Workflows вам нужно добавить токен в окружение:

  env:
    HEYVR_ACCESS_TOKEN: ${{ secrets.HEYVR_ACCESS_TOKEN }}

Загрузка сборок 

При загрузке сборок из CI убедитесь, что проект упакован в папку deploy/ и добавьте следующую команду в ваш CI-скрипт:

  - npm i -g heyvr-cli
  - heyvr --version $CI_COMMIT_TAG --gameId "heyvr-game-id"

“heyvr-game-id” — это slug игры, которую вы создали на heyvr.

Для GitHub Actions замените $CI_COMMIT_TAG на ${{ github.ref_name }}.

Публикация на Itch.io 

Itch.io предоставляет CLI-инструмент под названием “butler” для загрузки сборок на страницы ваших игр.

Аутентификация 

Для автоматизации публикации для Gitlab CI или GitHub Workflows вам понадобится получить API-ключ, запустив:

butler login

Команда выведет путь к файлу, в который был записан API-ключ. Скопируйте содержимое и добавьте переменную CI или секрет с названием BUTLER_API_KEY.

Дополнительную информацию смотрите на странице документации Itch.io.

Установка Butler 

Для того чтобы команда butler была доступна в вашем CI-задании, вы можете использовать docker-образ с предустановленным butler:

    image: dosowisko/butler

Здесь мы используем dosowisko/butler, но существуют и другие варианты.

Загрузка сборок 

При загрузке сборок из CI убедитесь, что проект упакован в папку deploy/ и добавьте следующую команду в ваш CI-скрипт:

  - butler push ./deploy user/game:channel-name

Смотрите страницу документации Itch.io.

Явная версия 

Также можно добавить явный номер версии при развёртывании из тегов. Для Gitlab CI используйте --userversion $CI_COMMIT_TAG, а для GitHub Actions используйте --userversion ${{ github.ref_name }}.