Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
CI: Compare API compatibility against both 4.0 and 4.1
  • Loading branch information
RedworkDE committed Aug 30, 2023
commit b83dff752ca3fad0940f2eb8a1af32cdfd7e3c68
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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.
118 changes: 118 additions & 0 deletions misc/extension_api_validation/4.1-stable.expected
Original file line number Diff line number Diff line change
@@ -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
Comment on lines 115 to 116
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two entries are new, but they are mentioned in this PR as being removed from the export, so this is correct and exactly the kind of thing that could slip through before this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The GitHub action still raises a warning for those but on the wrong file:
image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have hidden warnings from prior versions (as I originally intended), as it is kinda unavoidable that they happen (unless editing the expected files for old versions). (tho thinking about it there may still be some issues when changing a value in multiple versions, potentially still requiring changes to old expected files)


Excluded unexposed classes from extension_api.json.
33 changes: 28 additions & 5 deletions misc/scripts/validate_extension_api.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ if [ $# != 1 ]; then
echo "Usage: @0 <path-to-godot-executable>"
fi

api_validation_dir="$( dirname -- "$( dirname -- "${BASH_SOURCE[0]//\.\//}" )" )/extension_api_validation/"

has_problems=0
warn_extra=0
reference_tag=""
expected_errors=""

make_annotation()
{
Expand All @@ -27,34 +32,52 @@ 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
make_annotation "Compatibility to $reference_tag is broken in the following ways:" "$new_validation_error" error "$file"
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