Merge pull request #80354 from RedworkDE/ci-compat-multi

CI: Compare API compatibility against both 4.0 and 4.1
This commit is contained in:
Rémi Verschelde 2023-08-31 08:53:11 +02:00
commit 79e87eee1d
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 148 additions and 123 deletions

View file

@ -1,12 +1,5 @@
This file contains the expected output of --validate-extension-api when run against the extension_api.json of the This file contains, when concatenated to the expected output since 4.1, the expected output of --validate-extension-api
4.0-stable tag (the basename of this file). when run against the extension_api.json of the 4.0-stable tag (first part of the basename of this file).
Only lines that start with "Validate extension JSON:" matter, everything else is considered a comment and ignored. They
should instead be used to justify these changes and describe how users should work around these changes.
Add new entries at the end of the file.
========================================================================================================================
## Changes between 4.0-stable and 4.1-stable ## Changes between 4.0-stable and 4.1-stable
@ -356,112 +349,3 @@ Validate extension JSON: Error: Hash changed for 'classes/EditorUndoRedoManager/
Validate extension JSON: Error: Hash changed for 'classes/UndoRedo/methods/create_action', from 0AEC1BFC to E87757EB. This means that the function has changed and no compatibility function was provided. Validate extension JSON: Error: Hash changed for 'classes/UndoRedo/methods/create_action', from 0AEC1BFC to E87757EB. This means that the function has changed and no compatibility function was provided.
Added a optional parameters with default values. No adjustments should be necessary. Added a optional parameters with default values. No adjustments should be necessary.
## Changes between 4.1-stable and 4.2-stable
GH-79911
--------
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_RASTER': value changed value in new API, from 1.0 to 9.
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_ALL_BARRIERS': value changed value in new API, from 7.0 to 32767.
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_NO_BARRIER': value changed value in new API, from 8.0 to 32768.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_update/arguments/3': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_copy/arguments/9': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_clear/arguments/6': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_resolve_multisample/arguments/2': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_update/arguments/4': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_clear/arguments/3': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/draw_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/draw_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/compute_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/compute_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/1': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/barrier', from 0FE50041 to DD9E8DAB. This means that the function has changed and no compatibility function was provided.
Raster barrier was split into vertex and fragment barriers for use in mobile renderer.
GH-79308
--------
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_scroll_ofs
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_zoom_hbox
Validate extension JSON: API was removed: classes/GraphEdit/methods/is_using_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_scroll_ofs
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_use_snap
Validate extension JSON: API was removed: classes/GraphEdit/properties/snap_distance
Validate extension JSON: API was removed: classes/GraphEdit/properties/use_snap
Validate extension JSON: API was removed: classes/GraphNode/methods/is_comment
Validate extension JSON: API was removed: classes/GraphNode/methods/set_comment
Validate extension JSON: API was removed: classes/GraphNode/properties/comment
Validate extension JSON: Error: Field 'classes/GraphEdit/properties/scroll_offset': getter changed value in new API, from "get_scroll_ofs" to &"get_scroll_offset".
Validate extension JSON: Error: Field 'classes/GraphEdit/properties/scroll_offset': setter changed value in new API, from "set_scroll_ofs" to &"set_scroll_offset".
Intentional compatibility breakage during refactoring of API marked as experimental.
FIXME: Still a WIP, review this list once the work is completed, especially if compatibility
code is added.
GH-73196
--------
Validate extension JSON: Error: Field 'classes/CodeEdit/methods/get_text_for_symbol_lookup': is_const changed value in new API, from false to true.
Function was made `const`. No adjustments should be necessary.
GH-78328
--------
Validate extension JSON: Error: Field 'classes/TileMap/methods/get_used_rect': is_const changed value in new API, from false to true.
Function was made `const`. No adjustments should be necessary.
GH-79606
--------
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/shader_create_from_bytecode/arguments': size changed value in new API, from 1 to 2.
Added optional argument. Compatibility method registered.
GH-78266
--------
Validate extension JSON: API was removed: classes/FontFile/properties/fallbacks
Validate extension JSON: API was removed: classes/FontVariation/properties/fallbacks
Validate extension JSON: API was removed: classes/SystemFont/properties/fallbacks
The property was moved to their common base class Font.
The setters and getters were already in Font, so this shouldn't affect compatibility.
GH-36493
--------
Validate extension JSON: Error: Field 'classes/PopupMenu/methods/add_icon_shortcut/arguments': size changed value in new API, from 4 to 5.
Validate extension JSON: Error: Field 'classes/PopupMenu/methods/add_shortcut/arguments': size changed value in new API, from 3 to 4.
Added optional argument. Compatibility methods registered.
GH-80954
--------
Validate extension JSON: Error: Field 'classes/Font/methods/find_variation/arguments': size changed value in new API, from 4 to 8.
Added optional arguments. Compatibility method registered.
GH-80852
--------
Validate extension JSON: API was removed: classes/GDScriptEditorTranslationParserPlugin
Validate extension JSON: API was removed: classes/GDScriptNativeClass
Validate extension JSON: API was removed: classes/GodotPhysicsServer2D
Validate extension JSON: API was removed: classes/GodotPhysicsServer3D
Validate extension JSON: API was removed: classes/IPUnix
Validate extension JSON: API was removed: classes/MovieWriterMJPEG
Validate extension JSON: API was removed: classes/MovieWriterPNGWAV
Validate extension JSON: API was removed: classes/ResourceFormatImporterSaver
Validate extension JSON: API was removed: classes/FramebufferCacheRD
Validate extension JSON: API was removed: classes/UniformSetCacheRD
Excluded unexposed classes from extension_api.json.

View file

@ -0,0 +1,118 @@
This file contains the expected output of --validate-extension-api when run against the extension_api.json of the
4.1-stable tag (the basename of this file).
Only lines that start with "Validate extension JSON:" matter, everything else is considered a comment and ignored. They
should instead be used to justify these changes and describe how users should work around these changes.
Add new entries at the end of the file.
## Changes between 4.1-stable and 4.2-stable
GH-79911
--------
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_RASTER': value changed value in new API, from 1.0 to 9.
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_ALL_BARRIERS': value changed value in new API, from 7.0 to 32767.
Validate extension JSON: Error: Field 'classes/RenderingDevice/enums/BarrierMask/values/BARRIER_MASK_NO_BARRIER': value changed value in new API, from 8.0 to 32768.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_update/arguments/3': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_copy/arguments/9': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_clear/arguments/6': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/texture_resolve_multisample/arguments/2': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_update/arguments/4': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/buffer_clear/arguments/3': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/draw_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/draw_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/compute_list_end/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/compute_list_end', from 19365687 to E9B4FA8E. This means that the function has changed and no compatibility function was provided.
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/0': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/barrier/arguments/1': default_value changed value in new API, from "7" to "32767".
Validate extension JSON: Error: Hash changed for 'classes/RenderingDevice/methods/barrier', from 0FE50041 to DD9E8DAB. This means that the function has changed and no compatibility function was provided.
Raster barrier was split into vertex and fragment barriers for use in mobile renderer.
GH-79308
--------
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_scroll_ofs
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/get_zoom_hbox
Validate extension JSON: API was removed: classes/GraphEdit/methods/is_using_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_scroll_ofs
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_snap
Validate extension JSON: API was removed: classes/GraphEdit/methods/set_use_snap
Validate extension JSON: API was removed: classes/GraphEdit/properties/snap_distance
Validate extension JSON: API was removed: classes/GraphEdit/properties/use_snap
Validate extension JSON: API was removed: classes/GraphNode/methods/is_comment
Validate extension JSON: API was removed: classes/GraphNode/methods/set_comment
Validate extension JSON: API was removed: classes/GraphNode/properties/comment
Validate extension JSON: Error: Field 'classes/GraphEdit/properties/scroll_offset': getter changed value in new API, from "get_scroll_ofs" to &"get_scroll_offset".
Validate extension JSON: Error: Field 'classes/GraphEdit/properties/scroll_offset': setter changed value in new API, from "set_scroll_ofs" to &"set_scroll_offset".
Intentional compatibility breakage during refactoring of API marked as experimental.
FIXME: Still a WIP, review this list once the work is completed, especially if compatibility
code is added.
GH-73196
--------
Validate extension JSON: Error: Field 'classes/CodeEdit/methods/get_text_for_symbol_lookup': is_const changed value in new API, from false to true.
Function was made `const`. No adjustments should be necessary.
GH-78328
--------
Validate extension JSON: Error: Field 'classes/TileMap/methods/get_used_rect': is_const changed value in new API, from false to true.
Function was made `const`. No adjustments should be necessary.
GH-79606
--------
Validate extension JSON: Error: Field 'classes/RenderingDevice/methods/shader_create_from_bytecode/arguments': size changed value in new API, from 1 to 2.
Added optional argument. Compatibility method registered.
GH-78266
--------
Validate extension JSON: API was removed: classes/FontFile/properties/fallbacks
Validate extension JSON: API was removed: classes/FontVariation/properties/fallbacks
Validate extension JSON: API was removed: classes/SystemFont/properties/fallbacks
The property was moved to their common base class Font.
The setters and getters were already in Font, so this shouldn't affect compatibility.
GH-36493
--------
Validate extension JSON: Error: Field 'classes/PopupMenu/methods/add_icon_shortcut/arguments': size changed value in new API, from 4 to 5.
Validate extension JSON: Error: Field 'classes/PopupMenu/methods/add_shortcut/arguments': size changed value in new API, from 3 to 4.
Added optional argument. Compatibility methods registered.
GH-80954
--------
Validate extension JSON: Error: Field 'classes/Font/methods/find_variation/arguments': size changed value in new API, from 4 to 8.
Added optional arguments. Compatibility method registered.
GH-80852
--------
Validate extension JSON: API was removed: classes/GDScriptEditorTranslationParserPlugin
Validate extension JSON: API was removed: classes/GDScriptNativeClass
Validate extension JSON: API was removed: classes/GodotPhysicsServer2D
Validate extension JSON: API was removed: classes/GodotPhysicsServer3D
Validate extension JSON: API was removed: classes/IPUnix
Validate extension JSON: API was removed: classes/MovieWriterMJPEG
Validate extension JSON: API was removed: classes/MovieWriterPNGWAV
Validate extension JSON: API was removed: classes/ResourceFormatImporterSaver
Validate extension JSON: API was removed: classes/FramebufferCacheRD
Validate extension JSON: API was removed: classes/UniformSetCacheRD
Validate extension JSON: API was removed: classes/GLTFDocumentExtensionPhysics
Validate extension JSON: API was removed: classes/GLTFDocumentExtensionTextureWebP
Excluded unexposed classes from extension_api.json.

View file

@ -10,7 +10,12 @@ if [ $# != 1 ]; then
echo "Usage: @0 <path-to-godot-executable>" echo "Usage: @0 <path-to-godot-executable>"
fi fi
api_validation_dir="$( dirname -- "$( dirname -- "${BASH_SOURCE[0]//\.\//}" )" )/extension_api_validation/"
has_problems=0 has_problems=0
warn_extra=0
reference_tag=""
expected_errors=""
make_annotation() make_annotation()
{ {
@ -27,26 +32,44 @@ make_annotation()
fi fi
} }
get_expected_output()
{
local parts=()
IFS='_' read -ra parts <<< "$(basename -s .expected "$1")"
if [[ "${#parts[@]}" == "2" ]]; then
cat "$1" >> "$expected_errors"
get_expected_output "$(find "$api_validation_dir" -name "${parts[1]}*.expected")"
reference_tag="${parts[0]}"
warn_extra=0
else
cat "$1" >> "$expected_errors"
reference_tag="${parts[0]}"
warn_extra=1
fi
}
while read -r file; do while read -r file; do
reference_file="$(mktemp)" reference_file="$(mktemp)"
validate="$(mktemp)" validate="$(mktemp)"
validation_output="$(mktemp)" validation_output="$(mktemp)"
allowed_errors="$(mktemp)" allowed_errors="$(mktemp)"
expected_errors="$(mktemp)"
get_expected_output "$file"
# Download the reference extension_api.json # Download the reference extension_api.json
reference_tag="$(basename -s .expected "$file")"
wget -qcO "$reference_file" "https://raw.githubusercontent.com/godotengine/godot-cpp/godot-$reference_tag/gdextension/extension_api.json" wget -qcO "$reference_file" "https://raw.githubusercontent.com/godotengine/godot-cpp/godot-$reference_tag/gdextension/extension_api.json"
# Validate the current API against the reference # Validate the current API against the reference
"$1" --headless --validate-extension-api "$reference_file" 2>&1 | tee "$validate" | awk '!/^Validate extension JSON:/' - || true "$1" --headless --validate-extension-api "$reference_file" 2>&1 | tee "$validate" | awk '!/^Validate extension JSON:/' - || true
# Collect the expected and actual validation errors # Collect the expected and actual validation errors
awk '/^Validate extension JSON:/' - < "$validate" | sort > "$validation_output" awk '/^Validate extension JSON:/' - < "$validate" | sort > "$validation_output"
awk '/^Validate extension JSON:/' - < "$file" | sort > "$allowed_errors" awk '/^Validate extension JSON:/' - < "$expected_errors" | sort > "$allowed_errors"
# Differences between the expected and actual errors # Differences between the expected and actual errors
new_validation_error="$(comm -23 "$validation_output" "$allowed_errors")" new_validation_error="$(comm -23 "$validation_output" "$allowed_errors")"
obsolete_validation_error="$(comm -13 "$validation_output" "$allowed_errors")" obsolete_validation_error="$(comm -13 "$validation_output" "$allowed_errors")"
if [ -n "$obsolete_validation_error" ]; then if [ -n "$obsolete_validation_error" ] && [ "$warn_extra" = "1" ]; then
make_annotation "The following validation errors no longer occur (compared to $reference_tag):" "$obsolete_validation_error" warning "$file" make_annotation "The following validation errors no longer occur (compared to $reference_tag):" "$obsolete_validation_error" warning "$file"
fi fi
if [ -n "$new_validation_error" ]; then if [ -n "$new_validation_error" ]; then
@ -54,7 +77,7 @@ while read -r file; do
has_problems=1 has_problems=1
fi fi
rm -f "$reference_file" "$validate" "$validation_output" "$allowed_errors" rm -f "$reference_file" "$validate" "$validation_output" "$allowed_errors" "$expected_errors"
done <<< "$(find "$( dirname -- "$( dirname -- "${BASH_SOURCE[0]//\.\//}" )" )/extension_api_validation/" -name "*.expected")" done <<< "$(find "$api_validation_dir" -name "*.expected")"
exit $has_problems exit $has_problems