name: C++ Runtime Compatibility Test on: push: workflow_dispatch: jobs: test-cpp-java-compatibility: strategy: fail-fast: false matrix: os: [ubuntu-22.04, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: submodules: recursive - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '18' - name: Install build dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y build-essential cmake - name: Install build dependencies (macOS) if: matrix.os == 'macos-latest' run: | brew install cmake - name: Cache Gradle packages uses: actions/cache@v4 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} restore-keys: ${{ runner.os }}-gradle - name: Build spine-libgdx dependency working-directory: spine-libgdx run: ./gradlew build - name: Run C++ vs Java compatibility test working-directory: tests run: ./test.sh cpp -s spineboy -f - name: Show diff on failure if: failure() working-directory: tests run: | echo "=== Available output files ===" ls -la output/ || echo "No output directory" echo "" # Compare all JSON vs JSON pairs echo "=== DIFF: skeleton-data-java-json.json vs skeleton-data-cpp-json.json ===" if [ -f output/skeleton-data-java-json.json ] && [ -f output/skeleton-data-cpp-json.json ]; then diff -u output/skeleton-data-java-json.json output/skeleton-data-cpp-json.json || true else echo "Missing JSON skeleton-data files for comparison" fi echo "" echo "=== DIFF: skeleton-state-java-json.json vs skeleton-state-cpp-json.json ===" if [ -f output/skeleton-state-java-json.json ] && [ -f output/skeleton-state-cpp-json.json ]; then diff -u output/skeleton-state-java-json.json output/skeleton-state-cpp-json.json || true else echo "Missing JSON skeleton-state files for comparison" fi echo "" # Compare all SKEL vs SKEL pairs echo "=== DIFF: skeleton-data-java-skel.json vs skeleton-data-cpp-skel.json ===" if [ -f output/skeleton-data-java-skel.json ] && [ -f output/skeleton-data-cpp-skel.json ]; then diff -u output/skeleton-data-java-skel.json output/skeleton-data-cpp-skel.json || true else echo "Missing SKEL skeleton-data files for comparison" fi echo "" echo "=== DIFF: skeleton-state-java-skel.json vs skeleton-state-cpp-skel.json ===" if [ -f output/skeleton-state-java-skel.json ] && [ -f output/skeleton-state-cpp-skel.json ]; then diff -u output/skeleton-state-java-skel.json output/skeleton-state-cpp-skel.json || true else echo "Missing SKEL skeleton-state files for comparison" fi - name: Upload test artifacts on failure if: failure() uses: actions/upload-artifact@v4 with: name: test-output-files-${{ matrix.os }} path: tests/output/ retention-days: 7