Sign inSign up

witchpixels/godot-ci

By witchpixels

•Updated over 3 years ago

Docker image to export Godot Engine games. Actively maintained for 4.x

Image
0

10K+

witchpixels/godot-ci repository overview

⁠godot-ci

Docker image to export Godot Engine games and deploy to GitLab/GitHub Pages and Itch.io using GitLab CI and GitHub Actions.

⁠Docker Hub

https://hub.docker.com/r/seanmaxwell/godot-ci⁠

⁠How To Use

.gitlab-ci.yml and .github/workflows/godot-ci.yml are included in this project as reference.
For live projects, examples and tutorials using this template check the list below:

⁠Mono/C#

To build a Godot project with Mono (C#) enabled, you must do two things for each job:

  1. Change the container's image tag from barichello/godot-ci:VERSION to barichello/godot-ci:mono-VERSION in .gitlab-ci.yml (Gitlab) or godot-ci.yml (Github). (e.g. barichello/godot-ci:mono-3.2.1).
  2. You will also need to change your "Setup" step's run commands (looks like run: mv /root/.local ...) from ending with ...${GODOT_VERSION}.stable to ending with ...${GODOT_VERSION}.stable.mono. You will need to do this for both directories in the command.
mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable ~/.local/share/godot/templates/${GODOT_VERSION}.stable

becomes:

mv /root/.local/share/godot/templates/${GODOT_VERSION}.stable.mono ~/.local/share/godot/templates/${GODOT_VERSION}.stable.mono
⁠Android

To build a debug release (debug.keystore), use the android_debug job example in the gitlab-ci.yml file.

If you want to export for Android with your own keystore, you can do this with the following steps:

  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.
  5. Use the android job example in the gitlab-ci.yml file.
⁠GDNative/C++

See this repository⁠ for automating GDNative C++ compilation, which is based off this repository.

⁠Modules

You have to compile Godot with the modules included first. See this excellent repository⁠ by Calinou for automating Godot builds.

After that, you would use the custom build to export your project as usual. See this guide⁠ by Greenfox on how to use a custom Godot build for automated exports.

⁠iOS

Not available yet. Automating Xcode projects is doable but not trivial, and macOS runners only recently became available for GitHub actions, so it will happen eventually.

⁠Platforms

Here's a mapping between each supported CI service, the template jobs and a live example.

⁠Environment configuration

First you need to remove unused jobs/stages from the .yml file you are using as a template(.gitlab-ci.yml or .github/workflows/godot-ci.yml).
Then you have to add these environments to a configuration panel depending on the chosen CI and jobs:

  • GitHub: https://github.com/<username>/<project-name>/settings/secrets
  • GitLab: https://gitlab.com/<username>/<repo-name>/settings/ci_cd
⁠GitHub Pages

Secrets needed for a GitHub Pages deploy via GitLab CI:

VariableDescriptionExample
REMOTE_URLThe git remote where the web export will be hosted (in this case GitHub), it should contain your deploy/personal access token⁠https://<github username>:<deploy token>@github.com/<username>/<repository>.git
GIT_EMAILGit email of the account that will commit to the gh-pages branch.[email protected]
GIT_USERNAMEUsername of the account that will commit to the gh-pages branch.username

Others variables are set automatically by the gitlab-runner, see the documentation for predefined variables⁠.

⁠Itch.io

Deployment to Itch.io is done via Butler⁠.
Secrets needed for a Itch.io deploy via GitLab CI:

VariableDescriptionExample
ITCHIO_USERNAMEYour username on Itch.io, as in your personal page will be at https://<username>.itch.iousername
ITCHIO_GAMEthe name of your game on Itchio, as in your game will be available at https://<username>.itch.io/<game>game
BUTLER_API_KEYAn Itch.io API key⁠ is necessary for Butler so that the CI can authenticate on Itch.io on your behalf. Make that API key Masked(GitLab CI) to keep it secretxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

⁠Troubleshoot

⁠Problems while exporting
  • Check that the export presets file (export_presets.cfg) is committed to version control. In other words, export_presets.cfg must not be in .gitignore.
    • Make sure you don't accidentally commit Android release keystore or Windows codesigning credentials. These credentials cannot be revoked if they are leaked!
  • Check that the export names on export_presets.cfg match the ones used in your CI script (case-sensitive). Export preset names that contain spaces must be written within quotes (single or double).
  • Check the paths used in your CI script. Some commands may be running in the wrong place if you are keeping the project in a folder (like the test-project template) or not.
⁠Authentication errors with Butler

⁠Additional Resources

Greenfox has an excellent repo⁠ that is also for automating Godot exports.

Tag summary

Content type

Image

Digest

sha256:b8a959700…

Size

3 GB

Last updated

over 3 years ago

docker pull witchpixels/godot-ci