nathanhoad / godot_dialogue_manager

A powerful nonlinear dialogue system for Godot
MIT License
2.22k stars 170 forks source link

CI Build Failing with resource import errors #689

Closed kfechter closed 1 month ago

kfechter commented 1 month ago

Describe the bug When running in Gitlab CI with headless godot 4.3, The Import resource step ultimately fails with the error, the rest of the stack trace included further down in the bug report.

Unloading addon: res://addons/dialogue_manager/plugin.cfg
EditorFileSystem: Importing file: res://dialogue/intro.dialogue
ERROR: BUG: File queued for import, but can't be imported, importer for type 'dialogue_manager_compiler_13' not found.
   at: _reimport_file (editor/editor_file_system.cpp:2431)
Unloading addon: res://addons/dialogue_manager/plugin.cfg

Affected version

To Reproduce Steps to reproduce the behavior:

  1. Add Dialog Manager to Project
  2. Build and run locally (see that it works)
  3. check into gitlab source control with CI enabled using godot CI (https://github.com/abarichello/godot-ci)
  4. import-asset step fails with above error, as well as some other errors related to the plugin

Expected behavior Expected all steps to pass CI

Full Error stack trace

ERROR: Unable to open file: res://.godot/imported/icon.svg-17eb5d3e2a3cfbe59852220758c5b7bd.editor.ctex.
   at: _load_data (scene/resources/compressed_texture.cpp:41)
ERROR: Failed loading resource: res://.godot/imported/icon.svg-17eb5d3e2a3cfbe59852220758c5b7bd.editor.ctex. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
ERROR: Failed loading resource: res://addons/dialogue_manager/assets/icon.svg. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
ERROR: Unable to open file: res://.godot/imported/update.svg-f1628866ed4eb2e13e3b81f75443687e.ctex.
   at: _load_data (scene/resources/compressed_texture.cpp:41)
ERROR: Failed loading resource: res://.godot/imported/update.svg-f1628866ed4eb2e13e3b81f75443687e.ctex. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
ERROR: Failed loading resource: res://addons/dialogue_manager/assets/update.svg. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
ERROR: Unable to open file: res://.godot/imported/icon.svg-17eb5d3e2a3cfbe59852220758c5b7bd.editor.ctex.
   at: _load_data (scene/resources/compressed_texture.cpp:41)
ERROR: Failed loading resource: res://.godot/imported/icon.svg-17eb5d3e2a3cfbe59852220758c5b7bd.editor.ctex. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
ERROR: Failed loading resource: res://addons/dialogue_manager/assets/icon.svg. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:283)
Unloading addon: res://addons/dialogue_manager/plugin.cfg
EditorFileSystem: Importing file: res://dialogue/intro.dialogue
ERROR: BUG: File queued for import, but can't be imported, importer for type 'dialogue_manager_compiler_13' not found.
   at: _reimport_file (editor/editor_file_system.cpp:2431)
Unloading addon: res://addons/dialogue_manager/plugin.cfg
/usr/bin/bash: line 150:    14 Segmentation fault      (core dumped) godot --headless --verbose --editor --quit-after 2

Gitlab CI Yaml File in question (the import-assets is the failing step). I would share the repo, but its on my private gitlab instance. Builds were working until I added the plugin.

image: barichello/godot-ci:4.3

# Cache imported assets between runs
cache:
  key: import-assets
  paths:
    - .godot/imported/

stages:
  - import-assets
  - export

variables:
  EXPORT_NAME: workingtitle

# Open the editor to import assets in case the cache was empty or outdated
import-assets:
  stage: import-assets
  script:
    - godot --headless --verbose --editor --quit-after 2
  tags:
    - godot

linux:
  stage: export
  script:
    - mkdir -v -p build/linux
    - godot --headless --verbose --export-release "Linux" build/linux/$EXPORT_NAME.x86_64
  artifacts:
    name: $EXPORT_NAME-$CI_JOB_NAME
    paths:
      - build/linux
  tags:
    - godot

windows:
  stage: export
  script:
    - mkdir -v -p build/windows
    - godot --headless --verbose --export-release "Windows" build/windows/$EXPORT_NAME.exe
  artifacts:
    name: $EXPORT_NAME-$CI_JOB_NAME
    paths:
      - build/windows
  tags:
    - godot

# Android Release Job. You will need to include keystore and password in the GitLab variable settings:
# 1. Take your generated keystore and convert it to Base64:
#   Linux & macOS: `base64 release.keystore -w 0`
#   Windows: `certutil -encodehex -f release.keystore encoded.txt 0x40000001`
# 2. Go to GitLab Project > Settings > CI/CD > Variables and copy the Base64-encoded keystore value in a new variable `SECRET_RELEASE_KEYSTORE_BASE64` as type variable.
# 3. Create a second variable SECRET_RELEASE_KEYSTORE_USER as type variable with the alias of your keystore as value.
# 4. Create a third variable SECRET_RELEASE_KEYSTORE_PASSWORD as type variable with the password of your keystore as value.
android:
   stage: export
   rules:
     - if: $SECRET_RELEASE_KEYSTORE_USER
     - if: $SECRET_RELEASE_KEYSTORE_PASSWORD
     - if: $SECRET_RELEASE_KEYSTORE_BASE64
   script:
     - mkdir -v -p build/android
     - echo $CI_PIPELINE_IID
     - echo $CI_COMMIT_SHORT_SHA
     - echo $SECRET_RELEASE_KEYSTORE_BASE64 | base64 --decode > /root/release.keystore
     - export GODOT_ANDROID_KEYSTORE_RELEASE_PATH=/root/release.keystore
     - export GODOT_ANDROID_KEYSTORE_RELEASE_USER=$SECRET_RELEASE_KEYSTORE_USER
     - export GODOT_ANDROID_KEYSTORE_RELEASE_PASSWORD=$SECRET_RELEASE_KEYSTORE_PASSWORD
     - sed 's@version/code=.*@version/code='$CI_PIPELINE_IID'@g' -i export_presets.cfg
     - sed 's@version/name=".*"@version/name="'$CI_COMMIT_SHORT_SHA'"@g' -i export_presets.cfg
     - godot --headless --verbose --export-release "Android" ./build/android/$EXPORT_NAME.apk
   artifacts:
     name: $EXPORT_NAME-$CI_JOB_NAME
     paths:
       - build/android
   tags:
    - godot
kfechter commented 1 month ago

I might actually be a bit daft

replacing the line - godot --headless --verbose --editor --quit-after 2 with the line - timeout 10 godot --headless --verbose --editor --import --quit-after 2 fixed the issue