Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
d5fae87
Core: Don't strip data in `class_get_method_list`
Repiteo Jan 12, 2026
1d244cd
Fix wrong play position for the `AnimationMarkerEdit`
YeldhamDev Jan 14, 2026
1b15795
Fix editor ColorPicker icon scale
passivestar Jan 14, 2026
8a44803
Wayland: Allow non-interactive window resizing
deralmas Dec 15, 2025
edd0607
CONNECT_APPEND_SOURCE_OBJECT on signal emission
kleonc Dec 26, 2025
b79de52
Limit maximum luminance for elevated surfaces in modern theme
passivestar Jan 14, 2026
1218413
Fix wrong offset for `TabBar` with hidden tabs
YeldhamDev Jan 14, 2026
c65d71a
Fix viewport rotation gizmo aligned axis reversing
ryevdokimov Jan 7, 2025
458d337
Remove checkbox icon tint in Create Scene popup
passivestar Jan 14, 2026
423326b
README: Minor tweaks and remove broken badge
akien-mga Jan 14, 2026
34a0ab7
OpenXR: change profile name for Valve Frame Controller
BastiaanOlij Jan 9, 2026
d59db26
Revert "Core: Switch `RID_alloc::owns` to lock-free"
akien-mga Jan 14, 2026
83600fc
Merge pull request #114784 from BastiaanOlij/openxr_valve_profile_rename
Repiteo Jan 15, 2026
354ed3a
Merge pull request #114950 from passivestar/negative-dimness-fix
Repiteo Jan 15, 2026
8c78591
Merge pull request #114956 from passivestar/checkbox-icon-tint
Repiteo Jan 15, 2026
9465655
Merge pull request #114960 from akien-mga/readme-tweak
Repiteo Jan 15, 2026
86b6007
Merge pull request #114935 from YeldhamDev/play_pos_marker_fix
Repiteo Jan 15, 2026
1549d51
Merge pull request #114938 from passivestar/color-picker-icons
Repiteo Jan 15, 2026
c3bef1b
Split `EmbeddedProcess::reset` to allow stopping timers without full …
bruvzg Jan 15, 2026
4a69505
Remove link for consoles in EditorExportPlatform
mhilbrunner Jan 15, 2026
601c864
Merge pull request #114978 from bruvzg/emb_timer
akien-mga Jan 15, 2026
2d53a62
Merge pull request #114979 from mhilbrunner/drop-console-docs
akien-mga Jan 15, 2026
329a9f1
Fix buffers in D3D12 not getting cleared with the right usage.
blueskythlikesclouds Jan 15, 2026
d70866b
Fix TileSet dock becoming focused when switching TileMapLayers
KoBeWi Jan 15, 2026
dac1721
Windows: Add missing `extern "C"` for `hidsdi.h` on MinGW < 12.0.0
akien-mga Jan 15, 2026
eeaf88d
Fix TileMap wide button errors
lodetrick Dec 4, 2025
13ad17e
Fix quick open history not always recorded
KoBeWi Jan 16, 2026
abb90e5
Merge pull request #101209 from ryevdokimov/fix-viewport-rotation-ali…
akien-mga Jan 16, 2026
5ce4e5d
Merge pull request #114082 from deralmas/telekinesis
akien-mga Jan 16, 2026
85ee87b
Merge pull request #114963 from akien-mga/revert-112657
akien-mga Jan 16, 2026
26d37c4
Merge pull request #114982 from blueskythlikesclouds/d3d12-uav-clear-…
akien-mga Jan 16, 2026
3211de5
Merge pull request #114994 from KoBeWi/tile_set_stop_it,_get_some_help
akien-mga Jan 16, 2026
9820f40
Merge pull request #115010 from akien-mga/windows-mingw-fix-hidsdi-ex…
akien-mga Jan 16, 2026
0c993df
Fix Sprite3D modulate propagation on reparenting
kleonc Jan 16, 2026
4742147
Merge pull request #115029 from KoBeWi/enter_the_history
akien-mga Jan 16, 2026
741fb8a
Merge pull request #115037 from kleonc/sprite3d_fix_color_propagation…
akien-mga Jan 16, 2026
81c2eae
Fix size issues with inspector editors
YeldhamDev Jan 16, 2026
f714eab
Do not store SPIR-V in memory unless pipeline statistics are used.
DarioSamo Jan 16, 2026
876ac8b
Add inner tab styling to Manage Theme Items dialog
Giganzo Jan 17, 2026
b962c91
Remove clip ignore from Tree background
KoBeWi Jan 17, 2026
829f4c0
Unify dock focus methods to prevent inconsistencies
lodetrick Jan 18, 2026
3a2a53f
Wayland: Fix IME
deralmas Jan 18, 2026
1d34edf
Process system events during boot splash wait time.
bruvzg Jan 19, 2026
998c876
OpenXR: Allow setting a specific version of OpenXR to initialize.
BastiaanOlij Jan 16, 2026
1cdf69b
Merge pull request #113594 from lodetrick/tilemap-fixes
akien-mga Jan 19, 2026
6f46be9
Merge pull request #115041 from YeldhamDev/how_did_this_even_cause_a_…
akien-mga Jan 19, 2026
88ea460
Merge pull request #115049 from DarioSamo/vulkan-driver-memory-usage-…
akien-mga Jan 19, 2026
2cda356
Merge pull request #115067 from Giganzo/manage-theme-items-dialog-inn…
akien-mga Jan 19, 2026
b9ebff1
Merge pull request #115074 from KoBeWi/📎is_dead
akien-mga Jan 19, 2026
5b2f3f8
Merge pull request #115084 from lodetrick/unify-focus
akien-mga Jan 19, 2026
a1e209b
Merge pull request #115090 from deralmas/wayland-ime-bruh-moment
akien-mga Jan 19, 2026
6521956
Merge pull request #115022 from BastiaanOlij/openxr_custom_version
akien-mga Jan 19, 2026
5f9a510
Sync translations with Weblate
akien-mga Jan 19, 2026
46e07a8
Audio: Check if on tree before calling can_process()
sigmund68k Jan 14, 2026
ed4689c
Fix favorite files handling
KoBeWi Jan 19, 2026
bb9d907
Merge pull request #114893 from Repiteo/core/fix-method-list
akien-mga Jan 19, 2026
f5b3183
Merge pull request #114952 from YeldhamDev/hidden_tabs_offset_fix
akien-mga Jan 19, 2026
122d0bf
Merge pull request #114966 from sigmund68k/issue-112477
akien-mga Jan 19, 2026
5177a2f
Merge pull request #115118 from bruvzg/splash_pump
akien-mga Jan 19, 2026
895630e
Merge pull request #115128 from KoBeWi/least_favorite_bug
akien-mga Jan 19, 2026
59b2bb1
Fix EditorFileDialog icon scale in list mode
KoBeWi Jan 19, 2026
c5d21df
Increase precision of ninepatch source rect to ensure pixel perfect a…
clayjohn Jan 19, 2026
a4a2676
Merge pull request #114328 from kleonc/node_duplicating_signal_source…
akien-mga Jan 19, 2026
aa6ab26
Merge pull request #115145 from KoBeWi/the_scale_of_this_issue_is_uni…
akien-mga Jan 19, 2026
dc57cd6
Merge pull request #115152 from clayjohn/RD-ninepatch-precision
akien-mga Jan 19, 2026
7bebe1b
Fix XR build regression reported in https://github.com/GodotVR/godot_…
m4gr3d Jan 19, 2026
bc0ffe1
Do not update script editor before scene root init.
bruvzg Jan 20, 2026
372e549
Add null verification to avoid background theme error in texture shad…
M4rchy-S Dec 11, 2025
f0fa171
Revert "Fix fixed size flag on StandardMaterial3D when rendering in s…
akien-mga Jan 20, 2026
d1a03b3
Merge pull request #113939 from M4rchy-S/shdr-text-err
akien-mga Jan 20, 2026
06adfa4
Merge pull request #115148 from m4gr3d/fix_vr_feature_collision
akien-mga Jan 20, 2026
2c373ff
Merge pull request #115161 from bruvzg/splash_tree
akien-mga Jan 20, 2026
1b00ad5
Merge pull request #115163 from akien-mga/revert-110410
akien-mga Jan 20, 2026
db17acb
Add Fossilize to the disabled Vulkan layer list for the editor.
bruvzg Jan 20, 2026
78c6632
Merge pull request #115166 from bruvzg/DISABLE_FOSSILIZE
akien-mga Jan 20, 2026
4cd3e5a
Allow ONE_SHOT_REQUEST_FIRE to override abort
vaner-org Jan 20, 2026
5d995a9
Fix crash when converting `Variant` to incompatible `RequiredPtr<T>`
dsnopek Jan 20, 2026
1e11fe9
Remove experimental flag from graph nodes
passivestar Jan 20, 2026
46436c1
Hide signals prefixed by underscore
raulsntos Jan 21, 2026
6b76a5a
Merge pull request #115198 from dsnopek/required-ptr-variant-conv-crash
akien-mga Jan 21, 2026
dc1a92b
Revert "Always stop script debugger when stopping game"
akien-mga Jan 21, 2026
2025985
Merge pull request #115199 from raulsntos/hidden-signals
akien-mga Jan 21, 2026
8b2d988
Merge pull request #115208 from akien-mga/revert-114457
akien-mga Jan 21, 2026
76addff
Merge pull request #115175 from vaner-org/oneshot-request-fire-overri…
akien-mga Jan 21, 2026
ff89f64
Restore period in loaded node paths
KoBeWi Jan 22, 2026
27b1916
Wayland: Update popup scale information on creation
deralmas Jan 22, 2026
77d98cf
Process events during splash on macOS only.
bruvzg Jan 22, 2026
0692200
Merge pull request #115231 from KoBeWi/pretend_prepend_still_exists
akien-mga Jan 22, 2026
d2a60eb
Merge pull request #115242 from deralmas/ssccaallee
akien-mga Jan 22, 2026
e0b046e
Merge pull request #115249 from bruvzg/splash_w_mac_only
akien-mga Jan 22, 2026
c305839
Merge pull request #115181 from passivestar/graph-experimental-docs
akien-mga Jan 22, 2026
5cc33d6
Remove arc_tolerance scaling and the comment related to that.
mooflu Jan 23, 2026
3172d44
Sync translations with Weblate
akien-mga Jan 23, 2026
c2b068d
Fix stale reference bug in FramebufferCache.
DarioSamo Jan 23, 2026
9e06645
Tweak IKModifier3D docs and comment
TokageItLab Jan 23, 2026
233a5ae
Merge pull request #115299 from DarioSamo/framebuffer-cache-stale-ref
akien-mga Jan 23, 2026
157f070
Fix colors of code editor in modern theme
passivestar Jan 23, 2026
1d0a3c8
Merge pull request #115303 from TokageItLab/tweak-ik3d-doc
akien-mga Jan 23, 2026
ebbdef7
Merge pull request #115316 from passivestar/codeedit-colors
akien-mga Jan 23, 2026
8b400ed
Don't force list icon size in EditorFileDialog
KoBeWi Jan 24, 2026
cca9d04
Merge pull request #115330 from KoBeWi/famous_last_fix
akien-mga Jan 24, 2026
0424946
Merge pull request #115293 from mooflu/arc-113263
akien-mga Jan 24, 2026
810b377
Fix not being able to remove empty theme overrides in the editor
YeldhamDev Jan 24, 2026
83e105e
Merge pull request #115348 from YeldhamDev/theme_goodies_nocheck_edition
akien-mga Jan 25, 2026
39ef602
Update DONORS list
akien-mga Jan 25, 2026
d5edd4a
Sync translations with Weblate
akien-mga Jan 25, 2026
8322eb1
Add changelog for Godot 4.6
akien-mga Jan 25, 2026
89cea14
Bump version to 4.6-stable \o/
akien-mga Jan 25, 2026
006e2e5
ci: add workflows for automation fork (#1)
randroid88 Dec 3, 2025
47c2f1e
feat(debugger): add automation protocol for external control (#2)
randroid88 Dec 4, 2025
7f64bef
Add PlayGodot integration test workflow (#3)
randroid88 Dec 5, 2025
fb13d92
Add input injection to automation protocol (Phase 2) (#4)
randroid88 Dec 7, 2025
27ad9a4
Update workflow to use `git checkout -B` for creating/updating branches
randroid88 Dec 7, 2025
7cef6fc
Add permissions to sync-upstream workflow
randroid88 Dec 7, 2025
865ee15
Remove unused trigger-build step from sync-upstream workflow
randroid88 Dec 7, 2025
70307e7
Remove unused `workflows: write` permission from sync-upstream workflow
randroid88 Dec 7, 2025
d6c9821
Remove unused `workflows: write` permission from sync-upstream workflow
randroid88 Dec 7, 2025
a6222d8
Add extended automation commands to RemoteDebugger
randroid88 Dec 7, 2025
1b740e2
Fix get_current_scene, pause, and time_scale commands
randroid88 Dec 7, 2025
b65a7ce
Add release step to automation build workflow
randroid88 Dec 7, 2025
20feeb6
Update README with automation support details
randroid88 Dec 7, 2025
9cd1687
Fix linux-editor artifact name in release workflow
randroid88 Dec 7, 2025
b3c2227
Fix automation commands failing before scene tree initialization
randroid88 Jan 5, 2026
cd78ba5
Fix GUI input in headless mode for automation
randroid88 Jan 6, 2026
888df53
Fix change_scene automation to wait for deferred scene load (#6)
randroid88 Jan 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions .github/workflows/build-automation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Build Godot automation branch and create release artifacts

name: Build Godot Automation

on:
push:
branches: [automation]
pull_request:
branches: [automation]
workflow_dispatch:
workflow_call:

concurrency:
group: ${{ github.workflow }}|${{ github.ref_name }}
cancel-in-progress: true

jobs:
static-checks:
name: Static Checks
uses: ./.github/workflows/static_checks.yml

linux-build:
name: Linux
needs: static-checks
uses: ./.github/workflows/linux_builds.yml

macos-build:
name: macOS
needs: static-checks
uses: ./.github/workflows/macos_builds.yml

# Create a release with the built binaries (only on push to automation branch)
release:
name: Create Release
needs: [linux-build, macos-build]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/automation'
permissions:
contents: write
steps:
- name: Download Linux Editor artifact
uses: actions/download-artifact@v4
with:
name: linux-editor-mono
path: artifacts/linux

- name: Download macOS Editor artifact
uses: actions/download-artifact@v4
with:
name: macos-editor
path: artifacts/macos

- name: Prepare release assets
run: |
cd artifacts
# Make binaries executable
chmod +x linux/godot.linuxbsd.editor.x86_64.mono || true
chmod +x macos/godot.macos.editor.universal || true
# Create zip files for release
cd linux && zip -r ../godot-automation-linux-x86_64.zip . && cd ..
cd macos && zip -r ../godot-automation-macos-universal.zip . && cd ..
ls -la *.zip

- name: Get short SHA
id: sha
run: echo "short=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_OUTPUT

- name: Create or update release
uses: softprops/action-gh-release@v2
with:
tag_name: automation-latest
name: Automation Build (latest)
body: |
Pre-built Godot binaries with PlayGodot automation support.

**Commit:** ${{ github.sha }}
**Built:** ${{ github.event.head_commit.timestamp }}

## Downloads
- `godot-automation-linux-x86_64.zip` - Linux x86_64 editor
- `godot-automation-macos-universal.zip` - macOS universal (Intel + Apple Silicon) editor

## Usage
```bash
# Linux
unzip godot-automation-linux-x86_64.zip
chmod +x godot.linuxbsd.editor.x86_64.mono
./godot.linuxbsd.editor.x86_64.mono --path /path/to/project --remote-debug tcp://127.0.0.1:6007

# macOS
unzip godot-automation-macos-universal.zip
chmod +x godot.macos.editor.universal
./godot.macos.editor.universal --path /path/to/project --remote-debug tcp://127.0.0.1:6007
```

See [PlayGodot](https://github.com/Randroids-Dojo/PlayGodot) for the Python client.
files: |
artifacts/godot-automation-linux-x86_64.zip
artifacts/godot-automation-macos-universal.zip
prerelease: true
make_latest: false
100 changes: 100 additions & 0 deletions .github/workflows/playgodot-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Run PlayGodot integration tests against the automation build
# This validates that the automation protocol works correctly

name: PlayGodot Integration Tests

on:
workflow_run:
workflows: ["🔗 GHA"]
types: [completed]
branches: [automation]
workflow_dispatch:

jobs:
test-integration:
# Only run if the build succeeded
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-22.04
name: PlayGodot Integration Tests

steps:
- name: Download Godot artifact
uses: dawidd6/action-download-artifact@v6
with:
workflow: runner.yml
workflow_conclusion: success
name: linux-editor-mono
path: godot-bin
# Use run_id from the triggering workflow, or latest for manual trigger
run_id: ${{ github.event.workflow_run.id }}
if_no_artifact_found: warn

- name: Fallback - Download from latest successful run
if: failure() || hashFiles('godot-bin/godot.*') == ''
uses: dawidd6/action-download-artifact@v6
with:
workflow: runner.yml
workflow_conclusion: success
name: linux-editor-mono
path: godot-bin
search_artifacts: true

- name: Setup Godot
run: |
ls -la godot-bin/ || echo "No godot-bin directory"
chmod +x godot-bin/godot.* || true

# Find the godot binary
GODOT_BIN=$(find godot-bin -name 'godot.*' -type f | head -1)
if [ -z "$GODOT_BIN" ]; then
echo "No Godot binary found, skipping tests"
exit 0
fi

sudo mv "$GODOT_BIN" /usr/local/bin/godot
godot --version

- name: Install display dependencies
run: |
sudo apt-get update
sudo apt-get install -y xvfb

- name: Checkout PlayGodot
uses: actions/checkout@v4
with:
repository: Randroids-Dojo/PlayGodot
path: playgodot

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install PlayGodot
run: |
cd playgodot/python
pip install -e ".[dev]"

- name: Run unit tests
run: |
cd playgodot/python
pytest tests/ -v --tb=short

- name: Run tic-tac-toe integration tests
run: |
cd playgodot/examples/tic-tac-toe
# Run with xvfb for headless display
xvfb-run -a pytest tests/ -v --tb=short
env:
GODOT_PATH: /usr/local/bin/godot

- name: Test results summary
if: always()
run: |
echo "## PlayGodot Integration Test Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ job.status }}" == "success" ]; then
echo "✅ All integration tests passed!" >> $GITHUB_STEP_SUMMARY
else
echo "❌ Some tests failed. Check the logs above for details." >> $GITHUB_STEP_SUMMARY
fi
95 changes: 95 additions & 0 deletions .github/workflows/sync-upstream.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Nightly job to sync with upstream godotengine/godot

name: Sync Upstream

on:
schedule:
# Run at 3 AM UTC every night
- cron: '0 3 * * *'
workflow_dispatch:

permissions:
contents: write
issues: write

jobs:
sync:
runs-on: ubuntu-latest

steps:
- name: Checkout fork
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.PAT_TOKEN }}

- name: Configure Git
run: |
git config user.name "GitHub Actions Bot"
git config user.email "actions@github.com"

- name: Add upstream and fetch
run: |
git remote add upstream https://github.com/godotengine/godot.git
git fetch upstream master
git fetch origin automation

- name: Update master from upstream
run: |
git checkout -B master origin/master
git reset --hard upstream/master
git push origin master --force

- name: Rebase automation onto master
id: rebase
continue-on-error: true
run: |
git checkout -B automation origin/automation
if git rebase master; then
echo "rebase_success=true" >> $GITHUB_OUTPUT
else
git rebase --abort
echo "rebase_success=false" >> $GITHUB_OUTPUT
fi

- name: Push automation branch
if: steps.rebase.outputs.rebase_success == 'true'
run: |
git push origin automation --force-with-lease

- name: Create issue if rebase failed
if: steps.rebase.outputs.rebase_success == 'false'
uses: actions/github-script@v7
with:
script: |
const title = 'Upstream sync failed - manual rebase required';
const body = `The nightly rebase of \`automation\` onto \`master\` failed due to conflicts.

**Action required:**

\`\`\`bash
git fetch origin
git checkout automation
git rebase origin/master
# Resolve conflicts
git push origin automation --force-with-lease
\`\`\`

Workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}`;

const issues = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
labels: 'upstream-sync'
});

if (issues.data.length === 0) {
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: title,
body: body,
labels: ['upstream-sync', 'needs-attention']
});
}
54 changes: 54 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Agent Guidelines for Godot Automation Fork

Guidelines to avoid common mistakes when working on this codebase.

## C++ Include Requirements

**Always explicitly include headers for any types or functions you use.** Do not rely on transitive includes - they vary by platform and can cause CI failures on some builds but not others.

**Includes must be alphabetically sorted.** The project uses clang-format which enforces include ordering. Run `clang-format -style=file -i <file>` before committing to fix formatting.

Common includes that must be explicit:

| Function/Type | Required Include |
|---------------|------------------|
| `callable_mp_static` | `#include "core/object/callable_method_pointer.h"` |
| `callable_mp` | `#include "core/object/callable_method_pointer.h"` |
| `Object::CONNECT_ONE_SHOT` | `#include "core/object/object.h"` (use `Object::` qualifier) |
| `Ref<T>` | `#include "core/object/ref_counted.h"` |
| `Vector`, `List`, `HashMap` | `#include "core/templates/<container>.h"` |

**`callable_mp_static` syntax differs by function type:**
```cpp
// File-scope static functions: NO '&'
static void my_callback() { ... }
obj->connect("signal", callable_mp_static(my_callback));

// Class static methods: USE '&'
obj->connect("signal", callable_mp_static(&ClassName::static_method));
```

## Automation Protocol (remote_debugger.cpp)

When modifying automation commands in `core/debugger/remote_debugger.cpp`:

1. **Add `is_inside_tree()` guards** - Always check if the scene tree is initialized before accessing nodes:
```cpp
Node *root = tree->get_root();
ERR_FAIL_NULL(root);
if (!root->is_inside_tree()) {
// Send empty/error response
return;
}
```

2. **Scene changes are deferred** - `change_scene_to_file()` returns immediately but the scene isn't loaded yet. Connect to `scene_changed` signal if you need to respond after the scene is ready.

3. **Flush input events** - After injecting input events, call `DisplayServer::get_singleton()->process_events()` to ensure they reach the GUI system in headless mode.

## Testing Changes

The CI builds for multiple platforms (Linux, macOS, Windows). A local build passing does not guarantee CI will pass due to:
- Different include resolution
- Platform-specific code paths
- Compiler differences (GCC vs Clang vs MSVC)
Loading
Loading