Add 'engine/' from commit 'a8e37fc010'
git-subtree-dir: engine git-subtree-mainline:b74841629egit-subtree-split:a8e37fc010
This commit is contained in:
commit
c3f9669b10
14113 changed files with 7458101 additions and 0 deletions
290
engine/.github/CODEOWNERS
vendored
Normal file
290
engine/.github/CODEOWNERS
vendored
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
# Lines starting with '#' are comments.
|
||||
# Each line is a file pattern followed by one or more owners.
|
||||
# Owners can be @users, @org/teams or emails.
|
||||
|
||||
# Core
|
||||
|
||||
/core/ @godotengine/core
|
||||
/core/crypto/ @godotengine/network
|
||||
/core/debugger/ @godotengine/debugger
|
||||
/core/extension/ @godotengine/gdextension
|
||||
/core/input/ @godotengine/input
|
||||
|
||||
# Doc
|
||||
|
||||
/doc/ @godotengine/documentation
|
||||
/doc/translations/ @godotengine/i18n
|
||||
|
||||
# Drivers
|
||||
|
||||
## Audio
|
||||
/drivers/alsa/ @godotengine/audio
|
||||
/drivers/alsamidi/ @godotengine/audio
|
||||
/drivers/coreaudio/ @godotengine/audio
|
||||
/drivers/coremidi/ @godotengine/audio
|
||||
/drivers/pulseaudio/ @godotengine/audio
|
||||
/drivers/wasapi/ @godotengine/audio
|
||||
/drivers/winmidi/ @godotengine/audio
|
||||
/drivers/xaudio2/ @godotengine/audio
|
||||
|
||||
## Input
|
||||
/drivers/sdl/ @godotengine/input
|
||||
|
||||
## Rendering
|
||||
/drivers/d3d12/ @godotengine/rendering
|
||||
/drivers/dummy/ @godotengine/rendering
|
||||
/drivers/egl/ @godotengine/rendering
|
||||
/drivers/gles3/ @godotengine/rendering
|
||||
/drivers/metal/ @godotengine/rendering
|
||||
/drivers/spirv-reflect/ @godotengine/rendering
|
||||
/drivers/vulkan/ @godotengine/rendering
|
||||
|
||||
## OS
|
||||
/drivers/apple*/ @godotengine/macos
|
||||
/drivers/unix/ @godotengine/linux-bsd
|
||||
/drivers/windows/ @godotengine/windows
|
||||
|
||||
## Misc
|
||||
/drivers/register_driver_types.* @godotengine/buildsystem
|
||||
/drivers/accesskit/ @godotengine/buildsystem
|
||||
/drivers/png/ @godotengine/asset-pipeline
|
||||
|
||||
# Editor
|
||||
|
||||
/editor/ @godotengine/editor
|
||||
/editor/animation/ @godotengine/editor @godotengine/animation
|
||||
/editor/audio/ @godotengine/editor @godotengine/audio
|
||||
/editor/debugger/ @godotengine/editor @godotengine/debugger
|
||||
/editor/doc/ @godotengine/editor @godotengine/documentation
|
||||
/editor/gui/ @godotengine/editor @godotengine/gui-nodes
|
||||
/editor/import/ @godotengine/editor @godotengine/asset-pipeline
|
||||
/editor/scene/2d/ @godotengine/editor @godotengine/2d-nodes
|
||||
/editor/scene/2d/physics/ @godotengine/editor @godotengine/physics
|
||||
/editor/scene/3d/ @godotengine/editor @godotengine/3d-nodes
|
||||
/editor/scene/3d/physics/ @godotengine/editor @godotengine/physics
|
||||
/editor/scene/gui/ @godotengine/editor @godotengine/gui-nodes
|
||||
/editor/script/ @godotengine/editor @godotengine/script-editor
|
||||
/editor/shader/ @godotengine/editor @godotengine/script-editor @godotengine/shaders
|
||||
/editor/themes/ @godotengine/editor @godotengine/gui-nodes
|
||||
/editor/translations/ @godotengine/i18n
|
||||
|
||||
# Main
|
||||
|
||||
/main/ @godotengine/core
|
||||
|
||||
# Misc
|
||||
|
||||
/misc/ @godotengine/buildsystem
|
||||
/misc/extension_api_validation/ @godotengine/gdextension @godotengine/dotnet
|
||||
|
||||
# Modules
|
||||
|
||||
## Audio (+ video)
|
||||
/modules/interactive_music/ @godotengine/audio
|
||||
/modules/interactive_music/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/interactive_music/editor/ @godotengine/audio @godotengine/editor
|
||||
/modules/mp3/ @godotengine/audio
|
||||
/modules/mp3/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/ogg/ @godotengine/audio
|
||||
/modules/ogg/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/theora/ @godotengine/audio
|
||||
/modules/theora/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
/modules/theora/editor/ @godotengine/audio @godotengine/editor
|
||||
/modules/vorbis/ @godotengine/audio
|
||||
/modules/vorbis/doc_classes/ @godotengine/audio @godotengine/documentation
|
||||
|
||||
## Import
|
||||
/modules/astcenc/ @godotengine/asset-pipeline
|
||||
/modules/basis_universal/ @godotengine/asset-pipeline
|
||||
/modules/bcdec/ @godotengine/asset-pipeline
|
||||
/modules/betsy/ @godotengine/asset-pipeline
|
||||
/modules/bmp/ @godotengine/asset-pipeline
|
||||
/modules/cvtt/ @godotengine/asset-pipeline
|
||||
/modules/dds/ @godotengine/asset-pipeline
|
||||
/modules/dds/tests/ @godotengine/asset-pipeline @godotengine/tests
|
||||
/modules/etcpak/ @godotengine/asset-pipeline
|
||||
/modules/fbx/ @godotengine/asset-pipeline
|
||||
/modules/fbx/doc_classes/ @godotengine/asset-pipeline @godotengine/documentation
|
||||
/modules/fbx/editor/ @godotengine/asset-pipeline @godotengine/editor
|
||||
/modules/gltf/ @godotengine/asset-pipeline
|
||||
/modules/gltf/doc_classes/ @godotengine/asset-pipeline @godotengine/documentation
|
||||
/modules/gltf/editor/ @godotengine/asset-pipeline @godotengine/editor
|
||||
/modules/gltf/tests/ @godotengine/asset-pipeline @godotengine/tests
|
||||
/modules/hdr/ @godotengine/asset-pipeline
|
||||
/modules/jpg/ @godotengine/asset-pipeline
|
||||
/modules/ktx/ @godotengine/asset-pipeline
|
||||
/modules/squish/ @godotengine/asset-pipeline
|
||||
/modules/svg/ @godotengine/asset-pipeline
|
||||
/modules/tga/ @godotengine/asset-pipeline
|
||||
/modules/tinyexr/ @godotengine/asset-pipeline
|
||||
/modules/webp/ @godotengine/asset-pipeline
|
||||
|
||||
## Network
|
||||
/modules/enet/ @godotengine/network
|
||||
/modules/enet/doc_classes/ @godotengine/network @godotengine/documentation
|
||||
/modules/mbedtls/ @godotengine/network
|
||||
/modules/mbedtls/tests/ @godotengine/network @godotengine/tests
|
||||
/modules/multiplayer/ @godotengine/network
|
||||
/modules/multiplayer/doc_classes/ @godotengine/network @godotengine/documentation
|
||||
/modules/multiplayer/editor/ @godotengine/network @godotengine/editor
|
||||
/modules/multiplayer/tests/ @godotengine/network @godotengine/tests
|
||||
/modules/upnp/ @godotengine/network
|
||||
/modules/upnp/doc_classes/ @godotengine/network @godotengine/documentation
|
||||
/modules/webrtc/ @godotengine/network
|
||||
/modules/webrtc/doc_classes/ @godotengine/network @godotengine/documentation
|
||||
/modules/websocket/ @godotengine/network
|
||||
/modules/websocket/doc_classes/ @godotengine/network @godotengine/documentation
|
||||
/modules/websocket/editor/ @godotengine/network @godotengine/editor
|
||||
|
||||
## Physics
|
||||
/modules/godot_physics_2d/ @godotengine/physics
|
||||
/modules/godot_physics_3d/ @godotengine/physics
|
||||
/modules/jolt_physics/ @godotengine/physics @godotengine/jolt-physics
|
||||
|
||||
## Rendering
|
||||
/modules/glslang/ @godotengine/rendering
|
||||
/modules/lightmapper_rd/ @godotengine/rendering
|
||||
/modules/meshoptimizer/ @godotengine/rendering
|
||||
/modules/raycast/ @godotengine/rendering
|
||||
/modules/vhacd/ @godotengine/rendering
|
||||
/modules/xatlas_unwrap/ @godotengine/rendering
|
||||
|
||||
## Scripting
|
||||
/modules/gdscript/ @godotengine/gdscript
|
||||
/modules/gdscript/doc_classes/ @godotengine/gdscript @godotengine/documentation
|
||||
/modules/gdscript/editor/ @godotengine/gdscript @godotengine/script-editor
|
||||
/modules/gdscript/tests/ @godotengine/gdscript @godotengine/tests
|
||||
/modules/jsonrpc/ @godotengine/gdscript @godotengine/network
|
||||
/modules/jsonrpc/tests/ @godotengine/gdscript @godotengine/network @godotengine/tests
|
||||
/modules/mono/ @godotengine/dotnet
|
||||
/modules/mono/doc_classes/ @godotengine/dotnet @godotengine/documentation
|
||||
/modules/mono/editor/ @godotengine/dotnet @godotengine/script-editor
|
||||
|
||||
## Text
|
||||
/modules/freetype/ @godotengine/buildsystem
|
||||
/modules/msdfgen/ @godotengine/buildsystem
|
||||
/modules/text_server_adv/ @godotengine/gui-nodes
|
||||
/modules/text_server_adv/doc_classes/ @godotengine/gui-nodes @godotengine/documentation
|
||||
/modules/text_server_fb/ @godotengine/gui-nodes
|
||||
/modules/text_server_fb/doc_classes/ @godotengine/gui-nodes @godotengine/documentation
|
||||
|
||||
## XR
|
||||
/modules/camera/ @godotengine/xr
|
||||
/modules/mobile_vr/ @godotengine/xr
|
||||
/modules/mobile_vr/doc_classes/ @godotengine/xr @godotengine/documentation
|
||||
/modules/openxr/ @godotengine/xr
|
||||
/modules/openxr/doc_classes/ @godotengine/xr @godotengine/documentation
|
||||
/modules/openxr/editor/ @godotengine/xr @godotengine/editor
|
||||
/modules/webxr/ @godotengine/xr
|
||||
/modules/webxr/doc_classes/ @godotengine/xr @godotengine/documentation
|
||||
|
||||
## Misc
|
||||
/modules/register_module_types.* @godotengine/buildsystem
|
||||
/modules/csg/ @godotengine/3d-nodes
|
||||
/modules/csg/doc_classes/ @godotengine/3d-nodes @godotengine/documentation
|
||||
/modules/csg/editor/ @godotengine/3d-nodes @godotengine/editor
|
||||
/modules/csg/tests/ @godotengine/3d-nodes @godotengine/tests
|
||||
/modules/gridmap/ @godotengine/3d-nodes
|
||||
/modules/gridmap/doc_classes/ @godotengine/3d-nodes @godotengine/documentation
|
||||
/modules/gridmap/editor/ @godotengine/3d-nodes @godotengine/editor
|
||||
/modules/navigation_2d/ @godotengine/navigation
|
||||
/modules/navigation_2d/editor/ @godotengine/navigation @godotengine/editor
|
||||
/modules/navigation_3d/ @godotengine/navigation
|
||||
/modules/navigation_3d/editor/ @godotengine/navigation @godotengine/editor
|
||||
/modules/noise/ @godotengine/core
|
||||
/modules/noise/doc_classes/ @godotengine/core @godotengine/documentation
|
||||
/modules/noise/editor/ @godotengine/core @godotengine/editor
|
||||
/modules/noise/tests/ @godotengine/core @godotengine/tests
|
||||
/modules/objectdb_profiler/ @godotengine/debugger
|
||||
/modules/objectdb_profiler/editor/ @godotengine/debugger @godotengine/editor
|
||||
/modules/regex/ @godotengine/core
|
||||
/modules/regex/doc_classes/ @godotengine/core @godotengine/documentation
|
||||
/modules/regex/tests/ @godotengine/core @godotengine/tests
|
||||
/modules/zip/ @godotengine/core
|
||||
/modules/zip/doc_classes/ @godotengine/core @godotengine/documentation
|
||||
/modules/zip/tests/ @godotengine/core @godotengine/tests
|
||||
|
||||
# Platform
|
||||
|
||||
/platform/register_platform_apis.* @godotengine/buildsystem
|
||||
/platform/android/ @godotengine/android
|
||||
/platform/android/doc_classes/ @godotengine/android @godotengine/documentation
|
||||
/platform/ios/ @godotengine/ios
|
||||
/platform/ios/doc_classes/ @godotengine/ios @godotengine/documentation
|
||||
/platform/linuxbsd/ @godotengine/linux-bsd
|
||||
/platform/linuxbsd/doc_classes/ @godotengine/linux-bsd @godotengine/documentation
|
||||
/platform/macos/ @godotengine/macos
|
||||
/platform/macos/doc_classes/ @godotengine/macos @godotengine/documentation
|
||||
/platform/visionos/ @godotengine/xr
|
||||
/platform/visionos/doc_classes/ @godotengine/xr @godotengine/documentation
|
||||
/platform/web/ @godotengine/web
|
||||
/platform/web/doc_classes/ @godotengine/web @godotengine/documentation
|
||||
/platform/windows/ @godotengine/windows
|
||||
/platform/windows/doc_classes/ @godotengine/windows @godotengine/documentation
|
||||
|
||||
# Scene
|
||||
|
||||
/scene/property_* @godotengine/buildsystem
|
||||
/scene/register_scene_types.* @godotengine/buildsystem
|
||||
/scene/scene_string_names.* @godotengine/buildsystem
|
||||
/scene/2d/ @godotengine/2d-nodes
|
||||
/scene/2d/navigation/ @godotengine/2d-nodes @godotengine/navigation
|
||||
/scene/2d/physics/ @godotengine/2d-nodes @godotengine/physics
|
||||
/scene/3d/ @godotengine/3d-nodes
|
||||
/scene/3d/navigation/ @godotengine/3d-nodes @godotengine/navigation
|
||||
/scene/3d/physics/ @godotengine/3d-nodes @godotengine/physics
|
||||
/scene/3d/xr/ @godotengine/3d-nodes @godotengine/xr
|
||||
/scene/animation/ @godotengine/animation
|
||||
/scene/audio/ @godotengine/audio
|
||||
/scene/debugger/ @godotengine/debugger
|
||||
/scene/gui/ @godotengine/gui-nodes
|
||||
/scene/main/ @godotengine/core
|
||||
/scene/resources/* @godotengine/gui-nodes
|
||||
/scene/resources/2d/ @godotengine/2d-nodes
|
||||
/scene/resources/2d/skeleton/ @godotengine/2d-nodes @godotengine/animation
|
||||
/scene/resources/3d/ @godotengine/3d-nodes
|
||||
/scene/resources/animated* @godotengine/animation
|
||||
/scene/resources/animation* @godotengine/animation
|
||||
/scene/resources/audio* @godotengine/audio
|
||||
/scene/resources/bone* @godotengine/animation
|
||||
/scene/resources/font* @godotengine/gui-nodes
|
||||
/scene/resources/physics* @godotengine/physics
|
||||
/scene/resources/shader* @godotengine/shaders
|
||||
/scene/resources/skeleton* @godotengine/animation
|
||||
/scene/resources/text_* @godotengine/gui-nodes
|
||||
/scene/resources/visual_shader* @godotengine/shaders
|
||||
/scene/theme/ @godotengine/gui-nodes
|
||||
|
||||
# Servers
|
||||
|
||||
/servers/nav_heap.* @godotengine/navigation
|
||||
/servers/register_server_types.* @godotengine/buildsystem
|
||||
/servers/server_wrap_* @godotengine/buildsystem
|
||||
/servers/audio/ @godotengine/audio
|
||||
/servers/camera/ @godotengine/xr
|
||||
/servers/debugger/ @godotengine/debugger
|
||||
/servers/display/ @godotengine/rendering
|
||||
/servers/movie_writer/ @godotengine/rendering
|
||||
/servers/navigation_2d/ @godotengine/navigation
|
||||
/servers/navigation_3d/ @godotengine/navigation
|
||||
/servers/physics_2d/ @godotengine/physics
|
||||
/servers/physics_3d/ @godotengine/physics
|
||||
/servers/rendering/ @godotengine/rendering
|
||||
/servers/text/ @godotengine/gui-nodes
|
||||
/servers/xr/ @godotengine/xr
|
||||
|
||||
# Tests
|
||||
|
||||
/tests/ @godotengine/tests
|
||||
|
||||
# Thirdparty
|
||||
|
||||
/thirdparty/ @godotengine/buildsystem
|
||||
/thirdparty/jolt_physics/ @godotengine/buildsystem @godotengine/jolt-physics
|
||||
|
||||
# Buildsystem (After everything to catch all)
|
||||
|
||||
/*.* @godotengine/buildsystem
|
||||
*.py @godotengine/buildsystem
|
||||
SConstruct @godotengine/buildsystem
|
||||
SCsub @godotengine/buildsystem
|
||||
72
engine/.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
72
engine/.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
name: Bug report
|
||||
description: Report a bug in Godot
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
When reporting bugs, please follow the guidelines in this template. This helps identify the problem precisely and thus enables contributors to fix it faster.
|
||||
- Write a descriptive issue title above.
|
||||
- The golden rule is to **always open *one* issue for *one* bug**. If you notice several bugs and want to report them, make sure to create one new issue for each of them.
|
||||
- Search [open](https://github.com/godotengine/godot/issues) and [closed](https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported. If you don't find a relevant match or if you're unsure, don't hesitate to **open a new issue**. The bugsquad will handle it from there if it's a duplicate.
|
||||
- Verify that you are using a [supported Godot version](https://docs.godotengine.org/en/latest/about/release_policy.html). Please always check if your issue is reproducible in the latest version – it may already have been fixed!
|
||||
- If you use a custom build, please test if your issue is reproducible in official builds too. Likewise if you use any C++ modules, GDExtensions, or editor plugins, you should check if the bug is reproducible in a project without these.
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Tested versions
|
||||
description: |
|
||||
To properly fix a bug, we need to identify if the bug was recently introduced in the engine, or if it was always present.
|
||||
- Please specify the Godot version you found the issue in, including the **Git commit hash** if using a development or non-official build. The exact Godot version (including the commit hash) can be copied by clicking the version shown in the editor (bottom bar) or in the project manager (top bar).
|
||||
- If you can, **please test earlier Godot versions** (previous stable branch, and development snapshots of the current feature release) and, if applicable, newer versions (development snapshots for the next feature release). Mention whether the bug is reproducible or not in the versions you tested. You can find all Godot releases in our [download archive](https://godotengine.org/download/archive/).
|
||||
- The aim is for us to identify whether a bug is a **regression**, i.e. an issue that didn't exist in a previous version, but was introduced later on, breaking existing functionality. For example, if a bug is reproducible in 4.2.stable but not in 4.1.stable, we would like you to test intermediate 4.2 dev and beta snapshots to find which snapshot is the first one where the issue can be reproduced.
|
||||
placeholder: |
|
||||
|
||||
- Reproducible in: 4.3.dev [d76c1d0e5], 4.2.stable, 4.2.dev5 and later 4.2 snapshots.
|
||||
- Not reproducible in: 4.1.3.stable, 4.2.dev4 and earlier 4.2 snapshots.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: System information
|
||||
description: |
|
||||
- Specify the OS version, and when relevant hardware information.
|
||||
- For issues that are likely OS-specific and/or graphics-related, please specify the CPU model and architecture.
|
||||
- For graphics-related issues, specify the GPU model, driver version, and the rendering backend (GLES2, GLES3, Vulkan).
|
||||
- **Bug reports not including the required information may be closed at the maintainers' discretion.** If in doubt, always include all the requested information; it's better to include too much information than not enough information.
|
||||
- **Starting from Godot 4.1, you can copy this information to your clipboard by using *Help > Copy System Info* at the top of the editor window.**
|
||||
placeholder: Windows 10 - Godot v4.0.3.stable - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 970 (nvidia, 510.85.02) - Intel Core i7-10700KF CPU @ 3.80GHz (16 Threads)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Issue description
|
||||
description: |
|
||||
Describe your issue briefly. What doesn't work, and how do you expect it to work instead?
|
||||
You can include images or videos with drag and drop, and format code blocks or logs with <code>\`\`\`</code> tags, on separate lines before and after the text. (Use <code>\`\`\`gdscript</code> to add GDScript syntax highlighting.)
|
||||
Please do not add code examples or error messages as screenshots, but as text, this helps searching for issues and testing the code. If you are reporting a bug in the editor interface, like the script editor, please provide both a screenshot *and* the text of the code to help with testing.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: |
|
||||
List of steps or sample code that reproduces the issue. Having reproducible issues is a prerequisite for contributors to be able to solve them.
|
||||
If you include a minimal reproduction project below, you can detail how to use it here.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Minimal reproduction project (MRP)
|
||||
description: |
|
||||
- A small Godot project which reproduces the issue, with no unnecessary files included. Be sure to not include the `.godot` folder in the archive (but keep `project.godot`).
|
||||
- Having an MRP is very important for contributors to be able to reproduce the bug in the same way that you are experiencing it. When testing a potential fix for the issue, contributors will use the MRP to validate that the fix is working as intended.
|
||||
- If the reproduction steps are not project dependent (e.g. the bug is visible in a brand new project), you can write "N/A" in the field.
|
||||
- Drag and drop a ZIP archive to upload it (max 10 MB). **Do not select another field until the project is done uploading.**
|
||||
- **Note for C# users:** If your issue is *not* C#-specific, please upload a minimal reproduction project written in GDScript. This will make it easier for contributors to reproduce the issue locally as not everyone has a .NET setup available.
|
||||
validations:
|
||||
required: true
|
||||
14
engine/.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
14
engine/.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
blank_issues_enabled: false
|
||||
|
||||
contact_links:
|
||||
- name: Godot proposals
|
||||
url: https://github.com/godotengine/godot-proposals
|
||||
about: Please submit feature proposals on the Godot proposals repository, not here.
|
||||
|
||||
- name: Godot documentation repository
|
||||
url: https://github.com/godotengine/godot-docs
|
||||
about: Please report issues with documentation on the Godot documentation repository, not here.
|
||||
|
||||
- name: Godot community channels
|
||||
url: https://godotengine.org/community
|
||||
about: Please ask for technical support on one of the other community channels, not here.
|
||||
6
engine/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
6
engine/.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<!--
|
||||
Please target the `master` branch. We will take care of backporting relevant fixes to older versions.
|
||||
|
||||
Before submitting, please read our checklist for new contributors:
|
||||
https://contributing.godotengine.org/en/latest/engine/introduction.html#checklist-for-new-contributors
|
||||
-->
|
||||
20
engine/.github/actions/download-artifact/action.yml
vendored
Normal file
20
engine/.github/actions/download-artifact/action.yml
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
name: Download Godot artifact
|
||||
description: Download the Godot artifact.
|
||||
|
||||
inputs:
|
||||
name:
|
||||
description: The artifact name.
|
||||
default: ${{ github.job }}
|
||||
path:
|
||||
description: The path to download and extract to.
|
||||
required: true
|
||||
default: ./
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Download Godot Artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.name }}
|
||||
path: ${{ inputs.path }}
|
||||
42
engine/.github/actions/godot-build/action.yml
vendored
Normal file
42
engine/.github/actions/godot-build/action.yml
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
name: Build Godot
|
||||
description: Build Godot with the provided options.
|
||||
|
||||
inputs:
|
||||
target:
|
||||
description: Build target (editor, template_release, template_debug).
|
||||
default: editor
|
||||
type: choice
|
||||
options: [editor, template_debug, template_release]
|
||||
platform:
|
||||
description: Target platform.
|
||||
type: string
|
||||
scons-flags:
|
||||
description: Additional SCons flags.
|
||||
type: string
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
type: string
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: SCons Build
|
||||
shell: sh
|
||||
run: |
|
||||
echo "Building with flags:" platform=${{ inputs.platform }} target=${{ inputs.target }} ${{ inputs.scons-flags }} "cache_path=${{ inputs.scons-cache }}" redirect_build_objects=no
|
||||
|
||||
if [ "${{ inputs.target }}" != "editor" ]; then
|
||||
# Ensure we don't include editor code in export template builds.
|
||||
rm -rf editor
|
||||
fi
|
||||
|
||||
if [ "${{ github.event.number }}" != "" ]; then
|
||||
# Set build identifier with pull request number if available. This is displayed throughout the editor.
|
||||
export BUILD_NAME="gh-${{ github.event.number }}"
|
||||
else
|
||||
export BUILD_NAME="gh"
|
||||
fi
|
||||
|
||||
scons platform=${{ inputs.platform }} target=${{ inputs.target }} ${{ inputs.scons-flags }} "cache_path=${{ inputs.scons-cache }}" redirect_build_objects=no
|
||||
ls -l bin/
|
||||
39
engine/.github/actions/godot-cache-restore/action.yml
vendored
Normal file
39
engine/.github/actions/godot-cache-restore/action.yml
vendored
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
name: Restore Godot build cache
|
||||
description: Restore Godot build cache.
|
||||
inputs:
|
||||
cache-name:
|
||||
description: The cache base name (job name by default).
|
||||
default: ${{ github.job }}
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Restore default cache
|
||||
uses: actions/cache/restore@v4
|
||||
id: cache-ping
|
||||
with:
|
||||
path: ${{ inputs.scons-cache }}
|
||||
key: ${{ inputs.cache-name }}|${{ github.event.repository.default_branch }}|${{ github.sha }}
|
||||
restore-keys: ${{ inputs.cache-name }}|${{ github.event.repository.default_branch }}
|
||||
|
||||
- name: Log default cache files
|
||||
if: steps.cache-ping.outputs.cache-matched-key && github.ref_name != github.event.repository.default_branch
|
||||
shell: sh
|
||||
run: find "${{ inputs.scons-cache }}" >> redundant.txt
|
||||
|
||||
# This is done after pulling the default cache so that PRs can integrate any potential changes
|
||||
# from the default branch without conflicting with whatever local changes were already made.
|
||||
- name: Restore local cache
|
||||
uses: actions/cache/restore@v4
|
||||
if: github.ref_name != github.event.repository.default_branch
|
||||
with:
|
||||
path: ${{ inputs.scons-cache }}
|
||||
key: ${{ inputs.cache-name }}|${{ github.ref_name }}|${{ github.sha }}
|
||||
restore-keys: ${{ inputs.cache-name }}|${{ github.ref_name }}
|
||||
|
||||
- name: Store unix timestamp
|
||||
shell: sh
|
||||
run: echo "CACHE_TIMESTAMP=$(date +%s)" >> $GITHUB_ENV
|
||||
22
engine/.github/actions/godot-cache-save/action.yml
vendored
Normal file
22
engine/.github/actions/godot-cache-save/action.yml
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
name: Save Godot build cache
|
||||
description: Save Godot build cache.
|
||||
inputs:
|
||||
cache-name:
|
||||
description: The cache base name (job name by default).
|
||||
default: ${{ github.job }}
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Purge files before timestamp
|
||||
shell: sh
|
||||
run: misc/scripts/purge_cache.py ${{ env.CACHE_TIMESTAMP }} "${{ inputs.scons-cache }}"
|
||||
|
||||
- name: Save SCons cache directory
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ${{ inputs.scons-cache }}
|
||||
key: ${{ inputs.cache-name }}|${{ github.ref_name }}|${{ github.sha }}
|
||||
33
engine/.github/actions/godot-compat-test/action.yml
vendored
Normal file
33
engine/.github/actions/godot-compat-test/action.yml
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
name: Godot hash compatibility test
|
||||
description: Check if methods with given hashes used by the older GDExtensions still can be loaded with given Godot version.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: Path to the Godot binary.
|
||||
required: true
|
||||
type: string
|
||||
reftags:
|
||||
description: Reference tags of Godot versions to check (comma separated).
|
||||
required: true
|
||||
type: string
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Extract GDExtension interface
|
||||
shell: sh
|
||||
run: |
|
||||
${{ inputs.bin }} --headless --dump-gdextension-interface
|
||||
mkdir tests/compatibility_test/src/deps/
|
||||
mv gdextension_interface.h tests/compatibility_test/src/deps/
|
||||
|
||||
- name: Build minimal GDExtension
|
||||
shell: sh
|
||||
run: scons --directory=./tests/compatibility_test
|
||||
|
||||
- name: Download reference GDExtension API JSON and try to load it
|
||||
shell: sh
|
||||
env:
|
||||
GODOT4_BIN: ${{ inputs.bin }}
|
||||
REFTAGS: ${{ inputs.reftags }}
|
||||
run: ./tests/compatibility_test/run_compatibility_test.py
|
||||
20
engine/.github/actions/godot-converter-test/action.yml
vendored
Normal file
20
engine/.github/actions/godot-converter-test/action.yml
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
name: Test Godot project converter
|
||||
description: Test the Godot project converter.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Test 3-to-4 conversion
|
||||
shell: sh
|
||||
run: |
|
||||
mkdir converter_test
|
||||
cd converter_test
|
||||
touch project.godot
|
||||
../${{ inputs.bin }} --headless --validate-conversion-3to4
|
||||
cd ..
|
||||
rm converter_test -rf
|
||||
40
engine/.github/actions/godot-cpp-build/action.yml
vendored
Normal file
40
engine/.github/actions/godot-cpp-build/action.yml
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
name: Build godot-cpp
|
||||
description: Build godot-cpp with the provided options.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: Path to the Godot binary.
|
||||
required: true
|
||||
type: string
|
||||
scons-flags:
|
||||
description: Additional SCons flags.
|
||||
type: string
|
||||
scons-cache:
|
||||
description: The SCons cache path.
|
||||
default: ${{ github.workspace }}/.scons_cache/
|
||||
type: string
|
||||
godot-cpp-branch:
|
||||
description: The godot-cpp branch.
|
||||
default: master
|
||||
type: string
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
repository: godotengine/godot-cpp
|
||||
ref: ${{ inputs.godot-cpp-branch }}
|
||||
path: godot-cpp
|
||||
|
||||
- name: Extract API
|
||||
shell: sh
|
||||
run: ${{ inputs.bin }} --headless --dump-gdextension-interface --dump-extension-api
|
||||
|
||||
- name: SCons Build
|
||||
shell: sh
|
||||
env:
|
||||
SCONS_CACHE: ${{ inputs.scons-cache }}
|
||||
run: scons --directory=./godot-cpp/test "gdextension_dir=${{ github.workspace }}" ${{ inputs.scons-flags }}
|
||||
35
engine/.github/actions/godot-deps/action.yml
vendored
Normal file
35
engine/.github/actions/godot-deps/action.yml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
name: Setup Python and SCons
|
||||
description: Setup Python, install the pip version of SCons.
|
||||
|
||||
inputs:
|
||||
python-version:
|
||||
description: The Python version to use.
|
||||
default: 3.x
|
||||
python-arch:
|
||||
description: The Python architecture.
|
||||
default: x64
|
||||
scons-version:
|
||||
description: The SCons version to use.
|
||||
default: 4.10.1
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Set up Python 3.x
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
# Semantic version range syntax or exact version of a Python version.
|
||||
python-version: ${{ inputs.python-version }}
|
||||
# Optional - x64 or x86 architecture, defaults to x64.
|
||||
architecture: ${{ inputs.python-arch }}
|
||||
|
||||
- name: Setup SCons
|
||||
shell: bash
|
||||
run: |
|
||||
python -c "import sys; print(sys.version)"
|
||||
python -m pip install scons==${{ inputs.scons-version }}
|
||||
scons --version
|
||||
|
||||
- name: Setup problem matchers
|
||||
shell: bash
|
||||
run: echo ::add-matcher::misc/utility/problem-matchers.json
|
||||
55
engine/.github/actions/godot-project-export/action.yml
vendored
Normal file
55
engine/.github/actions/godot-project-export/action.yml
vendored
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
name: Export Godot project
|
||||
description: Export a test Godot project.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Import resources and export project
|
||||
shell: sh
|
||||
run: |
|
||||
git clone --depth=1 https://github.com/godotengine/godot-tests.git /tmp/godot-tests
|
||||
|
||||
echo "Exporting project for Linux (PCK)"
|
||||
${{ inputs.bin }} --headless --path /tmp/godot-tests/tests/test_project/ --export-pack "Linux" /tmp/test_project.pck 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
echo "Exporting project for Linux (ZIP)"
|
||||
${{ inputs.bin }} --headless --path /tmp/godot-tests/tests/test_project/ --export-pack "Linux" /tmp/test_project.zip 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
echo "Exporting project for Linux as dedicated server (PCK)"
|
||||
${{ inputs.bin }} --headless --path /tmp/godot-tests/tests/test_project/ --export-pack "Linux Server" /tmp/test_project_server.pck 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
- name: Run project files from folder
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} --path /tmp/godot-tests/tests/test_project/ --language fr --resolution 64x64 --write-movie /tmp/test_project_folder.png --quit 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
${{ inputs.bin }} --headless --path /tmp/godot-tests/tests/test_project/ --quit 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
- name: Run exported project PCK/ZIP
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} --main-pack /tmp/test_project.pck --language fr --resolution 64x64 --write-movie /tmp/test_project_pck.png --quit 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
xvfb-run ${{ inputs.bin }} --main-pack /tmp/test_project.zip --language fr --resolution 64x64 --write-movie /tmp/test_project_zip.png --quit 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
# Headless mode is implied for dedicated server PCKs.
|
||||
${{ inputs.bin }} --main-pack /tmp/test_project_server.pck --quit 2>&1 | tee log.txt || true
|
||||
GODOT_CHECK_CI_LOG_ALL_ERRORS=1 misc/scripts/check_ci_log.py log.txt
|
||||
|
||||
echo "Checking whether video output from project folder and exported project match..."
|
||||
md5sum /tmp/test_project*.png | md5sum --check
|
||||
|
||||
echo "Checking whether audio output from project folder and exported project match..."
|
||||
md5sum /tmp/test_project*.wav | md5sum --check
|
||||
45
engine/.github/actions/godot-project-test/action.yml
vendored
Normal file
45
engine/.github/actions/godot-project-test/action.yml
vendored
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
name: Test Godot project
|
||||
description: Run the test Godot project.
|
||||
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
# Download and extract zip archive with project, folder is renamed to be able to easy change used project
|
||||
- name: Download test project
|
||||
shell: sh
|
||||
run: |
|
||||
wget https://github.com/godotengine/regression-test-project/archive/4.0.zip
|
||||
unzip 4.0.zip
|
||||
mv "regression-test-project-4.0" "test_project"
|
||||
|
||||
# Editor is quite complicated piece of software, so it is easy to introduce bug here.
|
||||
|
||||
- name: Open and close editor (Headless)
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} --headless --import --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
- name: Open and close editor (Vulkan)
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} --audio-driver Dummy --import --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
- name: Open and close editor (GLES3)
|
||||
shell: sh
|
||||
run: |
|
||||
DRI_PRIME=0 xvfb-run ${{ inputs.bin }} --audio-driver Dummy --rendering-driver opengl3 --import --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
# Run test project
|
||||
- name: Run project
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
22
engine/.github/actions/upload-artifact/action.yml
vendored
Normal file
22
engine/.github/actions/upload-artifact/action.yml
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
name: Upload Godot artifact
|
||||
description: Upload the Godot artifact.
|
||||
|
||||
inputs:
|
||||
name:
|
||||
description: The artifact name.
|
||||
default: ${{ github.job }}
|
||||
path:
|
||||
description: The path to upload.
|
||||
required: true
|
||||
default: bin/*
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Upload Godot Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.name }}
|
||||
path: ${{ inputs.path }}
|
||||
# Default is 90 days.
|
||||
retention-days: 60
|
||||
16
engine/.github/changed_files.yml
vendored
Normal file
16
engine/.github/changed_files.yml
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# We lack a convenient means of gathering *all* the changes when specializations are passed, so
|
||||
# a catch-all variable is the easiest workaround.
|
||||
everything:
|
||||
- "**"
|
||||
|
||||
# Determines if build actions should occur after static checks are ran. Broadly speaking, these
|
||||
# files changing would result in SCons rebuilding the engine, or are otherwise pertinent to the
|
||||
# buildsystem itself.
|
||||
sources:
|
||||
- .github/{actions,workflows}/*.yml
|
||||
- "**/{SConstruct,SCsub,*.py}"
|
||||
- "**/*.{h,hpp,hh,hxx,c,cpp,cc,cxx,m,mm,inc,glsl}"
|
||||
- modules/mono/**/*.{cs,csproj,sln,props,targets}
|
||||
- platform/android/java/{gradle*,**/*.{jar,java,kt,gradle}}
|
||||
- platform/web/{package{,-lock}.json,js/**/*.js}
|
||||
- tests/**
|
||||
117
engine/.github/workflows/android_builds.yml
vendored
Normal file
117
engine/.github/workflows/android_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
name: 🤖 Android Builds
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
module_text_server_fb_enabled=yes
|
||||
swappy=yes
|
||||
|
||||
jobs:
|
||||
build-android:
|
||||
runs-on: ubuntu-24.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Editor (target=editor)
|
||||
cache-name: android-editor
|
||||
target: editor
|
||||
scons-flags: >-
|
||||
arch=arm64
|
||||
production=yes
|
||||
|
||||
- name: Template arm32 (target=template_debug, arch=arm32)
|
||||
cache-name: android-template-arm32
|
||||
target: template_debug
|
||||
scons-flags: arch=arm32
|
||||
|
||||
- name: Template arm64 (target=template_debug, arch=arm64)
|
||||
cache-name: android-template-arm64
|
||||
target: template_debug
|
||||
scons-flags: arch=arm64
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Java 17
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: 17
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Download Swappy
|
||||
run: python ./misc/scripts/install_swappy_android.py
|
||||
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }}
|
||||
platform: android
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Generate Godot templates
|
||||
if: matrix.target == 'template_debug'
|
||||
run: |
|
||||
cd platform/android/java
|
||||
./gradlew generateGodotTemplates
|
||||
cd ../../..
|
||||
ls -l bin/
|
||||
|
||||
- name: Generate Godot editor
|
||||
if: matrix.target == 'editor'
|
||||
run: |
|
||||
cd platform/android/java
|
||||
./gradlew generateGodotEditor
|
||||
./gradlew generateGodotHorizonOSEditor
|
||||
./gradlew generateGodotPicoOSEditor
|
||||
cd ../../..
|
||||
ls -l bin/android_editor_builds/
|
||||
|
||||
# Separate different editors for multiple artifacts
|
||||
mkdir horizonos
|
||||
mv bin/android_editor_builds/*-horizonos-* horizonos
|
||||
mkdir picoos
|
||||
mv bin/android_editor_builds/*-picoos-* picoos
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Upload artifact (Horizon OS)
|
||||
if: matrix.target == 'editor'
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}-horizonos
|
||||
path: horizonos
|
||||
|
||||
- name: Upload artifact (PICO OS)
|
||||
if: matrix.target == 'editor'
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}-picoos
|
||||
path: picoos
|
||||
49
engine/.github/workflows/ios_builds.yml
vendored
Normal file
49
engine/.github/workflows/ios_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
name: 🍏 iOS Builds
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
module_text_server_fb_enabled=yes
|
||||
debug_symbols=no
|
||||
|
||||
jobs:
|
||||
ios-template:
|
||||
# From https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job#choosing-github-hosted-runners
|
||||
runs-on: macos-latest
|
||||
name: Template (target=template_release)
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
# From https://github.com/actions/runner-images/blob/main/images/macos
|
||||
- name: Select Xcode 26
|
||||
run: sudo xcode-select -s /Applications/Xcode_26.0.1.app
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Compilation (arm64)
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }}
|
||||
platform: ios
|
||||
target: template_release
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
284
engine/.github/workflows/linux_builds.yml
vendored
Normal file
284
engine/.github/workflows/linux_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,284 @@
|
|||
name: 🐧 Linux Builds
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
changed-files:
|
||||
description: A list of changed files.
|
||||
required: true
|
||||
type: string
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
module_text_server_fb_enabled=yes
|
||||
GODOT_CPP_BRANCH: 4.5
|
||||
DOTNET_NOLOGO: true
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||
ASAN_OPTIONS: color=always:print_suppressions=1:suppressions=${{ github.workspace }}/misc/error_suppressions/asan.txt
|
||||
LSAN_OPTIONS: color=always:print_suppressions=1:suppressions=${{ github.workspace }}/misc/error_suppressions/lsan.txt
|
||||
TSAN_OPTIONS: color=always:print_suppressions=1:suppressions=${{ github.workspace }}/misc/error_suppressions/tsan.txt
|
||||
UBSAN_OPTIONS: color=always:print_suppressions=1:suppressions=${{ github.workspace }}/misc/error_suppressions/ubsan.txt
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
# Stay one LTS before latest to increase portability of Linux artifacts.
|
||||
runs-on: ubuntu-22.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Editor w/ Mono (target=editor)
|
||||
cache-name: linux-editor-mono
|
||||
target: editor
|
||||
scons-flags: module_mono_enabled=yes compiledb=yes
|
||||
bin: ./bin/godot.linuxbsd.editor.x86_64.mono
|
||||
build-mono: true
|
||||
doc-test: true
|
||||
proj-conv: true
|
||||
proj-export: true
|
||||
api-compat: true
|
||||
artifact: true
|
||||
# Validate godot-cpp compatibility on one arbitrary editor build.
|
||||
godot-cpp: true
|
||||
clang-tidy: true
|
||||
|
||||
- name: Editor with doubles and GCC sanitizers (target=editor, dev_build=yes, scu_build=yes, precision=double, use_asan=yes, use_ubsan=yes, linker=mold)
|
||||
cache-name: linux-editor-double-sanitizers
|
||||
target: editor
|
||||
# Debug symbols disabled as they're huge on this build and we hit the 14 GB limit for runners.
|
||||
scons-flags: >-
|
||||
dev_build=yes
|
||||
scu_build=yes
|
||||
debug_symbols=no
|
||||
precision=double
|
||||
use_asan=yes
|
||||
use_ubsan=yes
|
||||
linker=mold
|
||||
bin: ./bin/godot.linuxbsd.editor.dev.double.x86_64.san
|
||||
proj-test: true
|
||||
|
||||
- name: Editor with clang sanitizers (target=editor, dev_build=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes, linker=lld)
|
||||
cache-name: linux-editor-llvm-sanitizers
|
||||
target: editor
|
||||
scons-flags: >-
|
||||
dev_build=yes
|
||||
use_asan=yes
|
||||
use_ubsan=yes
|
||||
use_llvm=yes
|
||||
linker=lld
|
||||
bin: ./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san
|
||||
# Test our oldest supported SCons/Python versions on one arbitrary editor build.
|
||||
legacy-scons: true
|
||||
|
||||
- name: Editor with ThreadSanitizer (target=editor, dev_build=yes, use_tsan=yes, use_llvm=yes, linker=lld)
|
||||
cache-name: linux-editor-thread-sanitizer
|
||||
target: editor
|
||||
scons-flags: >-
|
||||
dev_build=yes
|
||||
use_tsan=yes
|
||||
use_llvm=yes
|
||||
linker=lld
|
||||
bin: ./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san
|
||||
|
||||
- name: Template w/ Mono, release (target=template_release)
|
||||
cache-name: linux-template-mono
|
||||
target: template_release
|
||||
scons-flags: module_mono_enabled=yes
|
||||
bin: ./bin/godot.linuxbsd.template_release.x86_64.mono
|
||||
artifact: true
|
||||
|
||||
- name: Template w/ Mono, debug (target=template_debug)
|
||||
cache-name: linux-template-mono-debug
|
||||
target: template_debug
|
||||
scons-flags: module_mono_enabled=yes
|
||||
bin: ./bin/godot.linuxbsd.template_debug.x86_64.mono
|
||||
artifact: true
|
||||
|
||||
- name: Minimal template (target=template_release, everything disabled)
|
||||
cache-name: linux-template-minimal
|
||||
target: template_release
|
||||
scons-flags: >-
|
||||
modules_enabled_by_default=no
|
||||
module_text_server_fb_enabled=no
|
||||
disable_3d=yes
|
||||
disable_advanced_gui=yes
|
||||
disable_physics_2d=yes
|
||||
disable_physics_3d=yes
|
||||
deprecated=no
|
||||
minizip=no
|
||||
brotli=no
|
||||
bin: ./bin/godot.linuxbsd.template_release.x86_64
|
||||
artifact: true
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install libwayland-bin # TODO: Figure out somehow how to embed this one.
|
||||
if [ "${{ matrix.proj-test }}" == "true" -o "${{ matrix.proj-export }}" == "true" ]; then
|
||||
sudo apt-get install mesa-vulkan-drivers
|
||||
fi
|
||||
|
||||
- name: Free disk space on runner
|
||||
run: |
|
||||
echo "Disk usage before:" && df -h
|
||||
sudo rm -rf /usr/local/lib/android
|
||||
echo "Disk usage after:" && df -h
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
if: "!matrix.legacy-scons"
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Setup Python and SCons (legacy versions)
|
||||
if: matrix.legacy-scons
|
||||
uses: ./.github/actions/godot-deps
|
||||
with:
|
||||
# Sync with Ensure*Version in SConstruct.
|
||||
python-version: 3.9
|
||||
scons-version: 4.0
|
||||
|
||||
- name: Force remove preinstalled .NET SDKs
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet/sdk/*
|
||||
|
||||
- name: Setup older .NET SDK as baseline
|
||||
if: matrix.build-mono
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
# Targeting the oldest version we want to support to ensure it still builds.
|
||||
dotnet-version: 8.0.100
|
||||
|
||||
- name: Download pre-built AccessKit
|
||||
shell: sh
|
||||
id: accesskit-sdk
|
||||
run: |
|
||||
if python ./misc/scripts/install_accesskit.py; then
|
||||
echo "ACCESSKIT_ENABLED=yes" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::warning::AccessKit SDK installation failed, building without AccessKit support."
|
||||
echo "ACCESSKIT_ENABLED=no" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Install mold linker
|
||||
if: matrix.proj-test
|
||||
uses: rui314/setup-mold@v1
|
||||
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }} accesskit=${{ steps.accesskit-sdk.outputs.ACCESSKIT_ENABLED }}
|
||||
platform: linuxbsd
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Style checks via pre-commit
|
||||
if: matrix.clang-tidy
|
||||
uses: pre-commit/action@v3.0.1
|
||||
with:
|
||||
extra_args: --files ${{ inputs.changed-files }} --hook-stage manual clang-tidy
|
||||
|
||||
- name: Compilation (godot-cpp)
|
||||
uses: ./.github/actions/godot-cpp-build
|
||||
if: matrix.godot-cpp
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
scons-flags: target=template_debug dev_build=yes verbose=yes
|
||||
godot-cpp-branch: ${{ env.GODOT_CPP_BRANCH }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Generate C# glue
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
${{ matrix.bin }} --headless --generate-mono-glue ./modules/mono/glue
|
||||
|
||||
- name: Build .NET solutions
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
dotnet --info
|
||||
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd --werror
|
||||
|
||||
- name: Prepare artifact
|
||||
if: matrix.artifact
|
||||
run: |
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: matrix.artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Unit tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --headless --test --force-colors
|
||||
|
||||
- name: .NET source generators tests
|
||||
if: matrix.build-mono
|
||||
run: |
|
||||
dotnet test modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators.Tests
|
||||
|
||||
# Check class reference
|
||||
- name: Check for class reference updates
|
||||
if: matrix.doc-test
|
||||
run: |
|
||||
echo "Running --doctool to see if this changes the public API without updating the documentation."
|
||||
echo -e "If a diff is shown, it means that your code/doc changes are incomplete and you should update the class reference with --doctool.\n\n"
|
||||
${{ matrix.bin }} --doctool --headless 2>&1 > /dev/null || true
|
||||
git diff --color --exit-code && ! git ls-files --others --exclude-standard | sed -e 's/^/New doc file missing in PR: /' | grep 'xml$'
|
||||
|
||||
# Check API backwards compatibility
|
||||
- name: Check for GDExtension compatibility – JSON check
|
||||
if: matrix.api-compat
|
||||
run: |
|
||||
./misc/scripts/validate_extension_api.sh "${{ matrix.bin }}"
|
||||
|
||||
- name: Test GDExtension compatibility – load methods
|
||||
uses: ./.github/actions/godot-compat-test
|
||||
if: matrix.api-compat
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
reftags: "4.5-stable,4.4-stable"
|
||||
|
||||
# Download and run the test project
|
||||
- name: Test Godot project
|
||||
uses: ./.github/actions/godot-project-test
|
||||
if: matrix.proj-test
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Test project export
|
||||
- name: Test project export
|
||||
uses: ./.github/actions/godot-project-export
|
||||
if: matrix.proj-export
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Test the project converter
|
||||
- name: Test project converter
|
||||
uses: ./.github/actions/godot-converter-test
|
||||
if: matrix.proj-conv
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
110
engine/.github/workflows/macos_builds.yml
vendored
Normal file
110
engine/.github/workflows/macos_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
name: 🍎 macOS Builds
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
module_text_server_fb_enabled=yes
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
# From https://docs.github.com/en/actions/how-tos/write-workflows/choose-where-workflows-run/choose-the-runner-for-a-job#choosing-github-hosted-runners
|
||||
runs-on: macos-latest
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Editor (target=editor)
|
||||
cache-name: macos-editor
|
||||
target: editor
|
||||
bin: ./bin/godot.macos.editor.universal
|
||||
|
||||
- name: Template (target=template_release)
|
||||
cache-name: macos-template
|
||||
target: template_release
|
||||
scons-flags: debug_symbols=no
|
||||
bin: ./bin/godot.macos.template_release.universal
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
# From https://github.com/actions/runner-images/blob/main/images/macos
|
||||
- name: Select Xcode 26
|
||||
run: sudo xcode-select -s /Applications/Xcode_26.0.1.app
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Download pre-built AccessKit
|
||||
shell: sh
|
||||
id: accesskit-sdk
|
||||
run: |
|
||||
if python3 ./misc/scripts/install_accesskit.py; then
|
||||
echo "ACCESSKIT_ENABLED=yes" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::warning::AccessKit SDK installation failed, building without AccessKit support."
|
||||
echo "ACCESSKIT_ENABLED=no" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Setup Vulkan SDK
|
||||
id: vulkan-sdk
|
||||
run: |
|
||||
if sh misc/scripts/install_vulkan_sdk_macos.sh; then
|
||||
echo "VULKAN_ENABLED=yes" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::warning::macOS: Vulkan SDK installation failed, building without Vulkan support."
|
||||
echo "VULKAN_ENABLED=no" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
continue-on-error: true
|
||||
|
||||
- name: Compilation (x86_64)
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }} arch=x86_64 vulkan=${{ steps.vulkan-sdk.outputs.VULKAN_ENABLED }} accesskit=${{ steps.accesskit-sdk.outputs.ACCESSKIT_ENABLED }}
|
||||
platform: macos
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Compilation (arm64)
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }} arch=arm64 vulkan=${{ steps.vulkan-sdk.outputs.VULKAN_ENABLED }} accesskit=${{ steps.accesskit-sdk.outputs.ACCESSKIT_ENABLED }}
|
||||
platform: macos
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Prepare artifact
|
||||
run: |
|
||||
lipo -create ./bin/godot.macos.${{ matrix.target }}.x86_64 ./bin/godot.macos.${{ matrix.target }}.arm64 -output ./bin/godot.macos.${{ matrix.target }}.universal
|
||||
rm ./bin/godot.macos.${{ matrix.target }}.x86_64 ./bin/godot.macos.${{ matrix.target }}.arm64
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Unit tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --test --force-colors
|
||||
54
engine/.github/workflows/runner.yml
vendored
Normal file
54
engine/.github/workflows/runner.yml
vendored
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
name: 🔗 GHA
|
||||
on: [push, pull_request, merge_group, workflow_dispatch]
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}|${{ github.ref_name }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# First stage: Only static checks, fast and prevent expensive builds from running.
|
||||
|
||||
static-checks:
|
||||
if: ${{ !vars.DISABLE_GODOT_CI || github.run_attempt > 1 || github.event_name == 'workflow_dispatch' }}
|
||||
name: 📊 Static checks
|
||||
uses: ./.github/workflows/static_checks.yml
|
||||
|
||||
# Second stage: Run all the builds and some of the tests.
|
||||
|
||||
android-build:
|
||||
name: 🤖 Android
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/android_builds.yml
|
||||
|
||||
ios-build:
|
||||
name: 🍏 iOS
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/ios_builds.yml
|
||||
|
||||
linux-build:
|
||||
name: 🐧 Linux
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/linux_builds.yml
|
||||
with:
|
||||
changed-files: ${{ needs.static-checks.outputs.changed-files }}
|
||||
|
||||
macos-build:
|
||||
name: 🍎 macOS
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/macos_builds.yml
|
||||
|
||||
windows-build:
|
||||
name: 🏁 Windows
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/windows_builds.yml
|
||||
|
||||
web-build:
|
||||
name: 🌐 Web
|
||||
needs: static-checks
|
||||
if: needs.static-checks.outputs.sources-changed == 'true' || github.event_name != 'pull_request'
|
||||
uses: ./.github/workflows/web_builds.yml
|
||||
47
engine/.github/workflows/static_checks.yml
vendored
Normal file
47
engine/.github/workflows/static_checks.yml
vendored
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
name: 📊 Static Checks
|
||||
on:
|
||||
workflow_call:
|
||||
outputs:
|
||||
changed-files:
|
||||
description: A list of changed files.
|
||||
value: ${{ jobs.static-checks.outputs.changed-files }}
|
||||
sources-changed:
|
||||
description: Determines if any source files were changed.
|
||||
value: ${{ jobs.static-checks.outputs.sources-changed }}
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
static-checks:
|
||||
name: Code style, file formatting, and docs
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 30
|
||||
outputs:
|
||||
changed-files: '"${{ steps.changed-files.outputs.everything_all_changed_files }}"' # Wrap with quotes to bookend internal quote separators.
|
||||
sources-changed: ${{ steps.changed-files.outputs.sources_any_changed }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0 # Treeless clone. Slightly less performant than a shallow clone, but makes finding diffs instantaneous.
|
||||
filter: tree:0 # See: https://github.blog/open-source/git/get-up-to-speed-with-partial-clone-and-shallow-clone/
|
||||
|
||||
# This needs to happen before Python and npm execution; it must happen before any extra files are written.
|
||||
- name: .gitignore checks (gitignore_check.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/gitignore_check.sh
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v47
|
||||
with:
|
||||
safe_output: false # Output passed to environment variable to avoid command injection.
|
||||
separator: '" "' # To account for paths with spaces, ensure our items are split by quotes internally.
|
||||
skip_initial_fetch: true
|
||||
files_yaml_from_source_file: .github/changed_files.yml
|
||||
|
||||
- name: Style checks via pre-commit
|
||||
uses: pre-commit/action@v3.0.1
|
||||
env:
|
||||
CHANGED_FILES: '"${{ steps.changed-files.outputs.everything_all_changed_files }}"' # Wrap with quotes to bookend internal quote separators.
|
||||
with:
|
||||
extra_args: --files ${{ env.CHANGED_FILES }}
|
||||
77
engine/.github/workflows/web_builds.yml
vendored
Normal file
77
engine/.github/workflows/web_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
name: 🌐 Web Builds
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
debug_symbols=no
|
||||
use_closure_compiler=yes
|
||||
EM_VERSION: 4.0.11
|
||||
|
||||
jobs:
|
||||
web-template:
|
||||
runs-on: ubuntu-24.04
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Template w/ threads, 64-bit (target=template_release, threads=yes, arch=wasm64)
|
||||
cache-name: web-template
|
||||
target: template_release
|
||||
scons-flags: threads=yes arch=wasm64
|
||||
artifact: true
|
||||
|
||||
- name: Template w/o threads, 32-bit (target=template_release, threads=no, arch=wasm32)
|
||||
cache-name: web-nothreads-template
|
||||
target: template_release
|
||||
scons-flags: threads=no arch=wasm32
|
||||
artifact: true
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Set up Emscripten latest
|
||||
uses: mymindstorm/setup-emsdk@v14
|
||||
with:
|
||||
version: ${{ env.EM_VERSION }}
|
||||
no-cache: true
|
||||
|
||||
- name: Verify Emscripten setup
|
||||
run: |
|
||||
emcc -v
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }}
|
||||
platform: web
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: matrix.artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
136
engine/.github/workflows/windows_builds.yml
vendored
Normal file
136
engine/.github/workflows/windows_builds.yml
vendored
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
name: 🏁 Windows Builds
|
||||
on:
|
||||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
SCONS_FLAGS: >-
|
||||
dev_mode=yes
|
||||
module_text_server_fb_enabled=yes
|
||||
debug_symbols=no
|
||||
"angle_libs=${{ github.workspace }}/"
|
||||
SCONS_CACHE_MSVC_CONFIG: true
|
||||
PYTHONIOENCODING: utf8
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
# Windows 10 with latest image
|
||||
runs-on: windows-latest
|
||||
name: ${{ matrix.name }}
|
||||
timeout-minutes: 120
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: Editor (target=editor)
|
||||
cache-name: windows-editor
|
||||
target: editor
|
||||
scons-flags: >-
|
||||
windows_subsystem=console
|
||||
vsproj=yes
|
||||
vsproj_gen_only=no
|
||||
bin: ./bin/godot.windows.editor.x86_64.exe
|
||||
compiler: msvc
|
||||
|
||||
- name: Editor w/ clang-cl (target=editor, use_llvm=yes)
|
||||
cache-name: windows-editor-clang
|
||||
target: editor
|
||||
scons-flags: >-
|
||||
windows_subsystem=console
|
||||
use_llvm=yes
|
||||
bin: ./bin/godot.windows.editor.x86_64.llvm.exe
|
||||
compiler: clang
|
||||
|
||||
- name: Template (target=template_release)
|
||||
cache-name: windows-template
|
||||
target: template_release
|
||||
bin: ./bin/godot.windows.template_release.x86_64.console.exe
|
||||
compiler: msvc
|
||||
|
||||
- name: Template w/ GCC (target=template_release, use_mingw=yes)
|
||||
cache-name: windows-template-gcc
|
||||
# MinGW takes MUCH longer to compile; save time by only targeting Template.
|
||||
target: template_release
|
||||
scons-flags: use_mingw=yes
|
||||
bin: ./bin/godot.windows.template_release.x86_64.console.exe
|
||||
compiler: gcc
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Restore Godot build cache
|
||||
uses: ./.github/actions/godot-cache-restore
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Setup Python and SCons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
- name: Download Direct3D 12 SDK components
|
||||
shell: sh
|
||||
id: d3d12-sdk
|
||||
run: |
|
||||
if python ./misc/scripts/install_d3d12_sdk_windows.py; then
|
||||
echo "D3D12_ENABLED=yes" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::warning::Windows: Direct3D 12 SDK installation failed, building without Direct3D 12 support."
|
||||
echo "D3D12_ENABLED=no" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
continue-on-error: true
|
||||
|
||||
- name: Download pre-built ANGLE static libraries
|
||||
uses: dsaltares/fetch-gh-release-asset@1.1.2
|
||||
with:
|
||||
repo: godotengine/godot-angle-static
|
||||
version: tags/chromium/6601.2
|
||||
file: godot-angle-static-x86_64-${{ matrix.compiler == 'gcc' && 'gcc' || 'msvc' }}-release.zip
|
||||
target: angle/angle.zip
|
||||
|
||||
- name: Extract pre-built ANGLE static libraries
|
||||
run: Expand-Archive -Force angle/angle.zip ${{ github.workspace }}/
|
||||
|
||||
- name: Download pre-built AccessKit
|
||||
shell: sh
|
||||
id: accesskit-sdk
|
||||
run: |
|
||||
if python ./misc/scripts/install_accesskit.py; then
|
||||
echo "ACCESSKIT_ENABLED=yes" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::warning::AccessKit SDK installation failed, building without AccessKit support."
|
||||
echo "ACCESSKIT_ENABLED=no" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
- name: Compilation
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
scons-flags: ${{ env.SCONS_FLAGS }} ${{ matrix.scons-flags }} d3d12=${{ steps.d3d12-sdk.outputs.D3D12_ENABLED }} accesskit=${{ steps.accesskit-sdk.outputs.ACCESSKIT_ENABLED }}
|
||||
platform: windows
|
||||
target: ${{ matrix.target }}
|
||||
|
||||
- name: Save Godot build cache
|
||||
uses: ./.github/actions/godot-cache-save
|
||||
with:
|
||||
cache-name: ${{ matrix.cache-name }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Prepare artifact
|
||||
if: matrix.compiler == 'msvc'
|
||||
run: |
|
||||
Remove-Item bin/* -Include *.exp,*.lib,*.pdb -Force
|
||||
|
||||
- name: Upload artifact
|
||||
if: matrix.compiler == 'msvc'
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Unit tests
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --test --force-colors
|
||||
Loading…
Add table
Add a link
Reference in a new issue