From b83dff752ca3fad0940f2eb8a1af32cdfd7e3c68 Mon Sep 17 00:00:00 2001 From: RedworkDE <10944644+RedworkDE@users.noreply.github.com> Date: Wed, 30 Aug 2023 18:50:41 +0200 Subject: [PATCH] CI: Compare API compatibility against both 4.0 and 4.1 --- ...xpected => 4.0-stable_4.1-stable.expected} | 120 +----------------- .../4.1-stable.expected | 118 +++++++++++++++++ misc/scripts/validate_extension_api.sh | 33 ++++- 3 files changed, 148 insertions(+), 123 deletions(-) rename misc/extension_api_validation/{4.0-stable.expected => 4.0-stable_4.1-stable.expected} (81%) create mode 100644 misc/extension_api_validation/4.1-stable.expected diff --git a/misc/extension_api_validation/4.0-stable.expected b/misc/extension_api_validation/4.0-stable_4.1-stable.expected similarity index 81% rename from misc/extension_api_validation/4.0-stable.expected rename to misc/extension_api_validation/4.0-stable_4.1-stable.expected index 4fbe671ebdf..5c3bf07fb20 100644 --- a/misc/extension_api_validation/4.0-stable.expected +++ b/misc/extension_api_validation/4.0-stable_4.1-stable.expected @@ -1,12 +1,5 @@ -This file contains the expected output of --validate-extension-api when run against the extension_api.json of the -4.0-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. - -======================================================================================================================== +This file contains, when concatenated to the expected output since 4.1, the expected output of --validate-extension-api +when run against the extension_api.json of the 4.0-stable tag (first part of the basename of this file). ## 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. 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. diff --git a/misc/extension_api_validation/4.1-stable.expected b/misc/extension_api_validation/4.1-stable.expected new file mode 100644 index 00000000000..ff66f9d51d0 --- /dev/null +++ b/misc/extension_api_validation/4.1-stable.expected @@ -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. diff --git a/misc/scripts/validate_extension_api.sh b/misc/scripts/validate_extension_api.sh index f2f7c28e709..75f03a7086a 100755 --- a/misc/scripts/validate_extension_api.sh +++ b/misc/scripts/validate_extension_api.sh @@ -10,7 +10,12 @@ if [ $# != 1 ]; then echo "Usage: @0 " fi +api_validation_dir="$( dirname -- "$( dirname -- "${BASH_SOURCE[0]//\.\//}" )" )/extension_api_validation/" + has_problems=0 +warn_extra=0 +reference_tag="" +expected_errors="" make_annotation() { @@ -27,26 +32,44 @@ make_annotation() 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 reference_file="$(mktemp)" validate="$(mktemp)" validation_output="$(mktemp)" allowed_errors="$(mktemp)" + expected_errors="$(mktemp)" + get_expected_output "$file" # 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" # Validate the current API against the reference "$1" --headless --validate-extension-api "$reference_file" 2>&1 | tee "$validate" | awk '!/^Validate extension JSON:/' - || true # Collect the expected and actual validation errors 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 new_validation_error="$(comm -23 "$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" fi if [ -n "$new_validation_error" ]; then @@ -54,7 +77,7 @@ while read -r file; do has_problems=1 fi - rm -f "$reference_file" "$validate" "$validation_output" "$allowed_errors" -done <<< "$(find "$( dirname -- "$( dirname -- "${BASH_SOURCE[0]//\.\//}" )" )/extension_api_validation/" -name "*.expected")" + rm -f "$reference_file" "$validate" "$validation_output" "$allowed_errors" "$expected_errors" +done <<< "$(find "$api_validation_dir" -name "*.expected")" exit $has_problems