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

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

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

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

Gitlab CI / Gitlab Pages 

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

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

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

 1stages:
 2  - build
 3  - deploy
 4
 5package:
 6  image: wonderlandengine/editor:latest
 7  stage: build
 8  script:
 9    # Настройка переменной WLE_CREDENTIALS для входа в WonderlandEditor
10    - WonderlandEditor --windowless --package --project Project.wlp
11  cache:
12    key: ${CI_COMMIT_REF_SLUG}
13    paths:
14      - cache/
15  artifacts:
16    paths:
17      - deploy
18
19pages:
20  image: alpine:3.14
21  stage: deploy
22  rules:
23    # Развёртывание на pages только для основной ветки
24    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
25  before_script:
26    - apk add gzip
27  script:
28    - gzip -k deploy/*.*
29    - mv deploy public
30  artifacts:
31    paths:
32      - 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) должен выглядеть следующим образом:

 1on: [push]
 2
 3permissions:
 4  contents: read
 5  pages: write
 6  id-token: write
 7
 8jobs:
 9  package:
10    runs-on: ubuntu-latest
11    container:
12      image: wonderlandengine/editor:latest
13    steps:
14    - name: Install Git
15      run: apt-get update && apt-get install -y git git-lfs
16    - uses: actions/checkout@v4
17      with:
18        lfs: true
19    - name: Package
20      run: /usr/local/bin/entrypoint.sh WonderlandEditor --windowless --package --project Project.wlp --output ./public/
21      env:
22          WLE_CREDENTIALS: ${{ secrets.WLE_CREDENTIALS }}
23    - name: Gzip
24      run: find ./public/ -type f ! -name '*.gz' -exec gzip -k "{}" \;
25    - name: Upload artifact
26        uses: actions/upload-pages-artifact@v3
27        with:
28          path: ./public
29
30  deploy-pages:
31    needs: package
32    runs-on: ubuntu-latest
33    if: ${{ format('refs/heads/{0}', github.event.repository.default_branch) == github.ref }}
34    steps:
35      - name: Deploy to GitHub Pages
36        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) должен выглядеть следующим образом:

 1image: wonderlandengine/editor:latest
 2
 3pipelines:
 4  default:
 5    - step:
 6        name: 'Build'
 7        script:
 8          - /usr/local/bin/entrypoint.sh WonderlandEditor --windowless --package --project Project.wlp
 9        artifacts:
10          - 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:

1stages:
2  - build
3  - deploy

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

1netlify:
2  image: node:15
3  stage: deploy
4  script:
5    - npm install -g netlify-cli
6    - 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 вам нужно добавить токен в окружение:

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

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

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

1  - npm i -g heyvr-cli
2  - 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-ключ, запустив:

1butler login

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

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

Установка Butler 

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

1    image: dosowisko/butler

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

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

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

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

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

Явная версия 

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