|
1 | 1 | name: Forensic / issue-245 dictionary hot-reload |
2 | 2 |
|
3 | | -# Manual one-shot to verify the macOS-only "newly-injected typed Dictionary |
4 | | -# field stays NIL after hot-reload" bug across Linux, macOS, and Windows |
5 | | -# Godot 4.6.2-stable runners. Triggered via workflow_dispatch only. |
| 3 | +# Manual one-shot to verify the "newly-introduced typed Dictionary field |
| 4 | +# stays NIL after hot-reload" bug across Linux, macOS, and Windows Godot |
| 5 | +# 4.6.2-stable runners. Initial macOS run from a Mac confirmed the crash; |
| 6 | +# this workflow checks Linux + Windows + a second macOS for completeness. |
6 | 7 |
|
7 | 8 | on: |
8 | 9 | workflow_dispatch: |
@@ -30,62 +31,30 @@ jobs: |
30 | 31 | version: 4.6.2 |
31 | 32 | use-dotnet: false |
32 | 33 |
|
33 | | - - name: Run synthetic dictionary-injection test (Linux/macOS) |
34 | | - if: matrix.os != 'windows-latest' |
| 34 | + - name: Run synthetic dictionary-injection test |
35 | 35 | shell: bash |
36 | 36 | run: | |
37 | 37 | set +e |
38 | 38 | godot --headless --editor \ |
39 | 39 | --path docs/forensic/issue-245/repro-dictinject \ |
40 | | - --quit-after 1500 > /tmp/synthetic.log 2>&1 |
| 40 | + --quit-after 1500 > synthetic.log 2>&1 |
41 | 41 | rc=$? |
42 | 42 | echo "::group::Full Godot output" |
43 | | - cat /tmp/synthetic.log |
| 43 | + cat synthetic.log |
44 | 44 | echo "::endgroup::" |
45 | 45 | echo "exit code: $rc" |
46 | 46 | echo |
47 | 47 | echo "===== Verdict =====" |
48 | | - if grep -q "post-reload property names" /tmp/synthetic.log; then |
49 | | - grep "post-reload property names" /tmp/synthetic.log |
| 48 | + if grep -q "post-reload property names" synthetic.log; then |
| 49 | + grep "post-reload property names" synthetic.log |
50 | 50 | fi |
51 | | - if grep -q "inst.get('injected_dict')" /tmp/synthetic.log; then |
52 | | - grep "inst.get('injected_dict')" /tmp/synthetic.log |
| 51 | + if grep -q "inst.get('injected_dict')" synthetic.log; then |
| 52 | + grep "inst.get('injected_dict')" synthetic.log |
53 | 53 | fi |
54 | | - if grep -q "Program crashed with signal" /tmp/synthetic.log; then |
| 54 | + if grep -q "Program crashed with signal" synthetic.log; then |
55 | 55 | echo "RESULT: CRASH (Dictionary::keys on null _p)" |
56 | | - elif grep -q "DONE — no SIGABRT" /tmp/synthetic.log; then |
| 56 | + elif grep -q "DONE — no SIGABRT" synthetic.log; then |
57 | 57 | echo "RESULT: OK (no crash, hot-reload initialized field correctly)" |
58 | 58 | else |
59 | 59 | echo "RESULT: INDETERMINATE (test did not complete normally; rc=$rc)" |
60 | 60 | fi |
61 | | -
|
62 | | - - name: Run synthetic dictionary-injection test (Windows) |
63 | | - if: matrix.os == 'windows-latest' |
64 | | - shell: pwsh |
65 | | - run: | |
66 | | - $log = "$env:TEMP\synthetic.log" |
67 | | - # `godot.exe` is on PATH after setup-godot |
68 | | - & godot --headless --editor ` |
69 | | - --path docs/forensic/issue-245/repro-dictinject ` |
70 | | - --quit-after 1500 *> $log |
71 | | - $rc = $LASTEXITCODE |
72 | | - Write-Host "::group::Full Godot output" |
73 | | - Get-Content $log |
74 | | - Write-Host "::endgroup::" |
75 | | - Write-Host "exit code: $rc" |
76 | | - Write-Host "" |
77 | | - Write-Host "===== Verdict =====" |
78 | | - $content = Get-Content $log -Raw |
79 | | - if ($content -match "post-reload property names: .*") { |
80 | | - Write-Host $matches[0] |
81 | | - } |
82 | | - if ($content -match "inst\.get\('injected_dict'\): .*") { |
83 | | - Write-Host $matches[0] |
84 | | - } |
85 | | - if ($content -match "Program crashed with signal") { |
86 | | - Write-Host "RESULT: CRASH (Dictionary::keys on null _p)" |
87 | | - } elseif ($content -match "DONE — no SIGABRT") { |
88 | | - Write-Host "RESULT: OK (no crash, hot-reload initialized field correctly)" |
89 | | - } else { |
90 | | - Write-Host "RESULT: INDETERMINATE (test did not complete normally; rc=$rc)" |
91 | | - } |
0 commit comments