Files
setup-godot/.gdunit4_action/versioning/check/action.yml

115 lines
4.6 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: 'Verify GdUnit4 Version Compatibility'
description: 'Verifies that the Godot and GdUnit4 version combination is compatible'
inputs:
godot-version:
description: 'The Godot version'
required: true
gdunit-version:
description: 'The GdUnit4 version'
required: true
outputs:
exit_code:
description: 'Exit code from compatibility check'
value: ${{ steps.check-compatibility.outputs.exit_code }}
runs:
using: 'composite'
steps:
- name: 'Check Compatibility'
id: check-compatibility
shell: bash
run: |
echo ""
echo -e "\e[34mRun Version Compatibility Check\e[0m"
GODOT_VERSION="${{ inputs.godot-version }}"
GDUNIT_VERSION="${{ inputs.gdunit-version }}"
echo -e "\e[33mConfigured Godot Version:\e[0m ${GODOT_VERSION}"
echo -e "\e[33mConfigured GdUnit4 Version:\e[0m ${GDUNIT_VERSION}"
echo ""
# Load compatibility matrix
COMPATIBILITY_FILE="./.gdunit4_action/versioning/check/compatibility_matrix.json"
if [[ ! -f "${COMPATIBILITY_FILE}" ]]; then
echo -e "\e[31m✗ Error: Compatibility matrix file not found\e[0m"
echo "exit_code=1" >> "$GITHUB_OUTPUT"
exit 1
fi
# Normalize versions - remove 'v' prefix
GODOT_VER=${GODOT_VERSION#v}
GDUNIT_VER=${GDUNIT_VERSION#v}
# Function to compare version numbers (returns 0 if $1 >= $2)
version_ge() {
printf '%s\n%s\n' "$2" "$1" | sort -V -C
return $?
}
# Function to compare version numbers (returns 0 if $1 <= $2)
version_le() {
printf '%s\n%s\n' "$1" "$2" | sort -V -C
return $?
}
# Find matching GdUnit4 version in matrix
ALL_VERSIONS=$(grep -oP '^\s*"\K[0-9]+\.[0-9]+\.[0-9]+(?=":)' "${COMPATIBILITY_FILE}" | sort -V -r)
# Find the closest version that is <= GDUNIT_VER
for ver in $ALL_VERSIONS; do
if version_le "$ver" "$GDUNIT_VER"; then
echo -e "\e[92m✓ Using compatibility rules for GdUnit4 v${ver}\e[0m"
GODOT_MIN=$(grep -A 1 "\"${ver}\":" "${COMPATIBILITY_FILE}" | grep "godot_min" | cut -d'"' -f4)
GODOT_MAX=$(grep -A 2 "\"${ver}\":" "${COMPATIBILITY_FILE}" | grep "godot_max" | cut -d'"' -f4)
break
fi
done
# If still no match found, use default
if [[ -z "$GODOT_MIN" ]]; then
echo -e "\e[33m⚠ No specific version found, using default compatibility rules\e[0m"
GODOT_MIN=$(grep -A 1 "\"default\":" "${COMPATIBILITY_FILE}" | grep "godot_min" | cut -d'"' -f4)
fi
# Check if Godot version meets the minimum requirement
if ! version_ge "$GODOT_VER" "$GODOT_MIN"; then
echo -e "\e[31m✗ Incompatible version combination detected!\e[0m"
echo -e "\e[31m GdUnit4 v${GDUNIT_VER} requires at least Godot v${GODOT_MIN}, but you are using Godot v${GODOT_VER}\e[0m"
echo ""
REFERENCE=$(grep -oP '"reference":\s*"\K[^"]+' "${COMPATIBILITY_FILE}")
echo -e "\e[33mPlease check the compatibility matrix at:\e[0m"
echo -e "\e[34m${REFERENCE}\e[0m"
echo -e "\e[34m========================================\e[0m"
echo "exit_code=78" >> "$GITHUB_OUTPUT"
exit 78
fi
# Check if Godot version exceeds maximum (if max is defined)
if [[ -n "$GODOT_MAX" ]] && ! version_le "$GODOT_VER" "$GODOT_MAX"; then
echo -e "\e[31m✗ Incompatible version combination detected!\e[0m"
echo -e "\e[31m GdUnit4 v${GDUNIT_VER} supports Godot v${GODOT_MIN} to v${GODOT_MAX}, but you are using Godot v${GODOT_VER}\e[0m"
echo ""
REFERENCE=$(grep -oP '"reference":\s*"\K[^"]+' "${COMPATIBILITY_FILE}")
echo -e "\e[33mPlease check the compatibility matrix at:\e[0m"
echo -e "\e[34m${REFERENCE}\e[0m"
echo -e "\e[34m========================================\e[0m"
echo "exit_code=78" >> "$GITHUB_OUTPUT"
exit 78
fi
# All checks passed
echo -e "\e[92m✓ Configured GdUnit4 version is compatible!\e[0m"
if [[ -n "$GODOT_MAX" ]]; then
echo -e "\e[92m Godot v${GODOT_MIN} <= v${GODOT_VER} <= v${GODOT_MAX} ✓\e[0m"
else
echo -e "\e[92m Godot v${GODOT_VER} >= v${GODOT_MIN} ✓\e[0m"
fi
echo -e "\e[34m========================================\e[0m"
echo "exit_code=0" >> "$GITHUB_OUTPUT"
exit 0