Fix indentation not being stripped when the line starts with an inter… #226
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build loreline | |
| on: | |
| push: | |
| branches: | |
| - '**' | |
| tags: | |
| - v** | |
| jobs: | |
| loreline-windows: | |
| runs-on: windows-2022 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| $NEKOPATH = $(Convert-Path .)+'/git/haxe-binary/windows/neko' | |
| $HAXEPATH = $(Convert-Path .)+'/git/haxe-binary/windows/haxe' | |
| echo $NEKOPATH >> $GITHUB_PATH | |
| echo $HAXEPATH >> $GITHUB_PATH | |
| echo $NEKOPATH | |
| echo $HAXEPATH | |
| - name: Build loreline | |
| working-directory: . | |
| run: | | |
| node ./setup --cpp | |
| - name: Run loreline | |
| working-directory: . | |
| shell: cmd | |
| run: | | |
| loreline | |
| - name: Check loreline version | |
| if: startsWith(github.ref, 'refs/tags/') | |
| working-directory: . | |
| shell: cmd | |
| run: | | |
| loreline version --check-tag %GITHUB_REF:refs/tags/=% | |
| - name: Run unit tests | |
| shell: cmd | |
| run: loreline.exe test ./test | |
| - name: Setup MSVC | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| - name: Build C++ library | |
| run: node ./setup --cpp-lib | |
| - name: Run C++ library tests | |
| run: node ./setup --cpp-lib-test | |
| - name: Install scons | |
| run: pip install scons | |
| - name: Build GDExtension wrapper | |
| run: node ./setup --godot | |
| - name: Create zip archive | |
| working-directory: . | |
| run: | | |
| New-Item -ItemType Directory -Force -Path loreline-windows-pkg/cpp/include | |
| New-Item -ItemType Directory -Force -Path loreline-windows-pkg/cpp/lib | |
| Copy-Item loreline.exe loreline-windows-pkg/ | |
| Copy-Item build/cpp-lib/windows/Loreline.dll loreline-windows-pkg/cpp/lib/ | |
| Copy-Item build/cpp-lib/windows/Loreline.lib loreline-windows-pkg/cpp/lib/ | |
| Copy-Item cpp/include/Loreline.h loreline-windows-pkg/cpp/include/ | |
| Compress-Archive -Path loreline-windows-pkg/* -DestinationPath loreline-windows.zip -CompressionLevel Optimal | |
| - name: Create GDExtension zip archive | |
| working-directory: . | |
| run: | | |
| New-Item -ItemType Directory -Force -Path loreline-godot-windows-pkg | |
| Copy-Item godot/bin/loreline_godot.dll loreline-godot-windows-pkg/ | |
| Copy-Item build/cpp-lib/windows/Loreline.dll loreline-godot-windows-pkg/ | |
| Compress-Archive -Path loreline-godot-windows-pkg/* -DestinationPath loreline-godot-windows.zip -CompressionLevel Optimal | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-windows.zip | |
| path: loreline-windows.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-windows.zip | |
| path: loreline-godot-windows.zip | |
| compression-level: 0 | |
| loreline-mac: | |
| runs-on: macos-14 | |
| env: | |
| CODESIGN: ${{ secrets.APPLE_CERTIFICATE_P12 != '' }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| set -ex | |
| export NEKOPATH=$PWD'/git/haxe-binary/mac/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/mac/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.dylib /usr/local/lib/libneko.dylib | |
| sudo ln -s $NEKOPATH/libneko.2.4.0.dylib /usr/local/lib/libneko.2.4.0.dylib | |
| sudo ln -s $NEKOPATH/libneko.2.dylib /usr/local/lib/libneko.2.dylib | |
| set +x | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Build loreline | |
| working-directory: . | |
| run: | | |
| node ./setup --cpp | |
| - name: Run loreline | |
| working-directory: . | |
| run: | | |
| ./loreline | |
| - name: Check loreline version | |
| if: startsWith(github.ref, 'refs/tags/') | |
| working-directory: . | |
| run: | | |
| GIT_TAG=${GITHUB_REF/refs\/tags\//} | |
| ./loreline version --check-tag $GIT_TAG | |
| - name: Run unit tests | |
| working-directory: . | |
| run: | | |
| ./loreline test ./test | |
| - name: Build C++ library | |
| run: node ./setup --cpp-lib | |
| - name: Run C++ library tests | |
| run: node ./setup --cpp-lib-test | |
| - name: Install scons | |
| run: brew install scons | |
| - name: Build GDExtension wrapper | |
| run: node ./setup --godot | |
| - name: Assemble package | |
| run: | | |
| mkdir -p loreline-mac-pkg/cpp/include | |
| mkdir -p loreline-mac-pkg/cpp/lib | |
| cp loreline loreline-mac-pkg/ | |
| cp build/cpp-lib/mac/libLoreline.dylib loreline-mac-pkg/cpp/lib/ | |
| cp cpp/include/Loreline.h loreline-mac-pkg/cpp/include/ | |
| - name: Assemble GDExtension package | |
| run: | | |
| mkdir -p loreline-godot-mac-pkg | |
| cp godot/bin/libloreline_godot.dylib loreline-godot-mac-pkg/ | |
| cp build/cpp-lib/mac/libLoreline.dylib loreline-godot-mac-pkg/ | |
| - name: Patch GDExtension dylib for Godot | |
| run: | | |
| install_name_tool -change @rpath/libLoreline.dylib @loader_path/libLoreline.dylib \ | |
| loreline-godot-mac-pkg/libloreline_godot.dylib | |
| - name: Install Apple certificate | |
| if: env.CODESIGN == 'true' | |
| env: | |
| APPLE_CERTIFICATE_P12: ${{ secrets.APPLE_CERTIFICATE_P12 }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| run: | | |
| CERT_PATH=$RUNNER_TEMP/certificate.p12 | |
| KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
| KEYCHAIN_PASSWORD=$(openssl rand -hex 12) | |
| echo -n "$APPLE_CERTIFICATE_P12" | base64 --decode -o $CERT_PATH | |
| security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security set-keychain-settings -lut 21600 $KEYCHAIN_PATH | |
| security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security import $CERT_PATH -P "$APPLE_CERTIFICATE_PASSWORD" \ | |
| -A -t cert -f pkcs12 -k $KEYCHAIN_PATH | |
| security set-key-partition-list -S apple-tool:,apple: \ | |
| -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security list-keychains -d user -s $KEYCHAIN_PATH login.keychain | |
| - name: Sign macOS binaries | |
| if: env.CODESIGN == 'true' | |
| run: | | |
| IDENTITY="Developer ID Application" | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp \ | |
| loreline-mac-pkg/cpp/lib/libLoreline.dylib | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp \ | |
| loreline-mac-pkg/loreline | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp \ | |
| loreline-godot-mac-pkg/libloreline_godot.dylib | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp \ | |
| loreline-godot-mac-pkg/libLoreline.dylib | |
| codesign -vvv loreline-mac-pkg/loreline | |
| codesign -vvv loreline-mac-pkg/cpp/lib/libLoreline.dylib | |
| codesign -vvv loreline-godot-mac-pkg/libloreline_godot.dylib | |
| codesign -vvv loreline-godot-mac-pkg/libLoreline.dylib | |
| - name: Create zip archive | |
| run: | | |
| cd loreline-mac-pkg && zip --symlinks -9 ../loreline-mac.zip -r . | |
| - name: Create GDExtension zip archive | |
| run: | | |
| cd loreline-godot-mac-pkg && zip --symlinks -9 ../loreline-godot-mac.zip -r . | |
| - name: Notarize | |
| if: env.CODESIGN == 'true' | |
| env: | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| run: | | |
| xcrun notarytool submit loreline-mac.zip \ | |
| --apple-id "$APPLE_ID" \ | |
| --password "$APPLE_ID_PASSWORD" \ | |
| --team-id "$APPLE_TEAM_ID" \ | |
| --wait --timeout 10m | |
| xcrun notarytool submit loreline-godot-mac.zip \ | |
| --apple-id "$APPLE_ID" \ | |
| --password "$APPLE_ID_PASSWORD" \ | |
| --team-id "$APPLE_TEAM_ID" \ | |
| --wait --timeout 10m | |
| - name: Cleanup keychain | |
| if: ${{ always() }} | |
| run: security delete-keychain $RUNNER_TEMP/app-signing.keychain-db 2>/dev/null || true | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-mac.zip | |
| path: loreline-mac.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-mac.zip | |
| path: loreline-godot-mac.zip | |
| compression-level: 0 | |
| loreline-linux: | |
| strategy: | |
| matrix: | |
| include: | |
| - os: "ubuntu-22.04" | |
| arch: "x86_64" | |
| - os: "ubuntu-22.04-arm" | |
| arch: "arm64" | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-${{ matrix.arch }}/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-${{ matrix.arch }}/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Build loreline | |
| working-directory: . | |
| run: | | |
| node ./setup --cpp | |
| - name: Run loreline | |
| working-directory: . | |
| run: | | |
| ./loreline | |
| - name: Check loreline version | |
| if: startsWith(github.ref, 'refs/tags/') | |
| working-directory: . | |
| run: | | |
| GIT_TAG=${GITHUB_REF/refs\/tags\//} | |
| ./loreline version --check-tag $GIT_TAG | |
| - name: Run unit tests | |
| working-directory: . | |
| run: | | |
| ./loreline test ./test | |
| - name: Build C++ library | |
| run: node ./setup --cpp-lib | |
| - name: Run C++ library tests | |
| run: node ./setup --cpp-lib-test | |
| - name: Install scons | |
| run: pip install scons | |
| - name: Build GDExtension wrapper | |
| run: node ./setup --godot | |
| - name: Create zip archive | |
| run: | | |
| mkdir -p loreline-linux-pkg/cpp/include | |
| mkdir -p loreline-linux-pkg/cpp/lib | |
| cp loreline loreline-linux-pkg/ | |
| cp build/cpp-lib/linux/libLoreline.so loreline-linux-pkg/cpp/lib/ | |
| cp cpp/include/Loreline.h loreline-linux-pkg/cpp/include/ | |
| cd loreline-linux-pkg && zip --symlinks -9 ../loreline-linux-${{ matrix.arch }}.zip -r . | |
| - name: Install patchelf | |
| run: sudo apt-get install -y patchelf | |
| - name: Create GDExtension zip archive | |
| run: | | |
| mkdir -p loreline-godot-linux-pkg | |
| cp godot/bin/libloreline_godot.${{ matrix.arch }}.so loreline-godot-linux-pkg/ | |
| cp build/cpp-lib/linux/libLoreline.so loreline-godot-linux-pkg/libLoreline.${{ matrix.arch }}.so | |
| # Fix RPATH to look for dependencies in the same directory | |
| patchelf --set-rpath '$ORIGIN' loreline-godot-linux-pkg/libloreline_godot.${{ matrix.arch }}.so | |
| # Update the NEEDED entry to match the arch-suffixed filename | |
| patchelf --replace-needed libLoreline.so libLoreline.${{ matrix.arch }}.so \ | |
| loreline-godot-linux-pkg/libloreline_godot.${{ matrix.arch }}.so | |
| cd loreline-godot-linux-pkg && zip --symlinks -9 ../loreline-godot-linux-${{ matrix.arch }}.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-linux-${{ matrix.arch }}.zip | |
| path: loreline-linux-${{ matrix.arch }}.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-linux-${{ matrix.arch }}.zip | |
| path: loreline-godot-linux-${{ matrix.arch }}.zip | |
| compression-level: 0 | |
| loreline-neko: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup haxelib | |
| run: | | |
| mkdir -p .haxelib | |
| haxelib dev hscript git/hscript --quiet | |
| haxelib dev yaml git/yaml --quiet | |
| - name: Run Neko tests | |
| run: node run test ./test | |
| loreline-js: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Build JS | |
| working-directory: . | |
| run: | | |
| node ./setup --js | |
| - name: Run JS tests | |
| run: npx tsx js/test-runner.ts ./test | |
| - name: Create zip archive | |
| run: zip -9 'loreline-js.zip' js/loreline.js js/loreline.d.ts | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-js.zip | |
| path: loreline-js.zip | |
| compression-level: 0 | |
| loreline-csharp: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: '8.0.x' | |
| - name: Display dotnet version | |
| run: dotnet --version | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Build loreline | |
| working-directory: . | |
| run: | | |
| node ./setup --cs --cs-dll | |
| - name: Run C# tests | |
| run: dotnet run --project cs/TestRunner -- ./test | |
| - name: Publish C# AOT | |
| run: dotnet publish cs/TestRunner -c Release -r linux-x64 -p:AotBuild=true | |
| - name: Run C# AOT tests | |
| run: ./build/cs/bin/TestRunner/Release/net8.0/linux-x64/publish/TestRunner ./test | |
| - name: Create zip archive | |
| working-directory: cs | |
| run: | | |
| sed -i '/<Compile Remove="TestRunner/d' Loreline.csproj | |
| zip -r '../loreline-csharp.zip' ./* -x './TestRunner/*' | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-csharp.zip | |
| path: loreline-csharp.zip | |
| compression-level: 0 | |
| loreline-python: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup haxelib | |
| run: | | |
| mkdir -p .haxelib | |
| haxelib dev hscript git/hscript --quiet | |
| - name: Build Python | |
| run: node ./setup --py | |
| - name: Run Python tests | |
| run: python3 py/test-runner.py ./test | |
| - name: Assemble Python sample | |
| run: node ./setup --sample python | |
| - name: Create zip archive | |
| run: | | |
| mkdir loreline-python-pkg | |
| cp -r py/loreline loreline-python-pkg/loreline | |
| cp py/pyproject.toml loreline-python-pkg/ | |
| cp -r sample/loreline-python loreline-python-pkg/sample | |
| cd loreline-python-pkg | |
| zip -r ../loreline-python.zip . | |
| - name: Upload loreline-python.zip | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-python.zip | |
| path: loreline-python.zip | |
| compression-level: 0 | |
| loreline-lua: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Lua | |
| run: sudo apt-get install -y lua5.4 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup haxelib | |
| run: | | |
| mkdir -p .haxelib | |
| haxelib dev hscript git/hscript --quiet | |
| - name: Build Lua | |
| run: node ./setup --lua | |
| - name: Run Lua tests | |
| run: lua5.4 lua/test-runner.lua ./test | |
| - name: Assemble Lua sample | |
| run: node ./setup --sample lua | |
| - name: Create zip archive | |
| run: | | |
| mkdir loreline-lua-pkg | |
| cp -r lua/loreline loreline-lua-pkg/loreline | |
| cp -r sample/loreline-lua loreline-lua-pkg/sample | |
| cd loreline-lua-pkg | |
| zip -r ../loreline-lua.zip . | |
| - name: Upload loreline-lua.zip | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-lua.zip | |
| path: loreline-lua.zip | |
| compression-level: 0 | |
| loreline-jvm: | |
| runs-on: "ubuntu-22.04" | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Java | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: 11 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup haxelib | |
| run: | | |
| mkdir -p .haxelib | |
| haxelib dev hscript git/hscript --quiet | |
| - name: Build JVM | |
| run: node ./setup --jvm | |
| - name: Run JVM tests | |
| run: | | |
| javac -cp jvm/loreline.jar -d build/jvm/test jvm/test/TestRunner.java | |
| java -cp "jvm/loreline.jar:build/jvm/test" TestRunner ./test | |
| - name: Assemble Java sample | |
| run: node ./setup --sample java | |
| - name: Create zip archive | |
| run: | | |
| mkdir loreline-jvm-pkg | |
| cp jvm/loreline.jar loreline-jvm-pkg/loreline.jar | |
| cp -r sample/loreline-java loreline-jvm-pkg/sample | |
| cd loreline-jvm-pkg | |
| zip -r ../loreline-jvm.zip . | |
| - name: Upload loreline-jvm.zip | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-jvm.zip | |
| path: loreline-jvm.zip | |
| compression-level: 0 | |
| loreline-unity: | |
| needs: [loreline-csharp] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download C# library | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-csharp.zip | |
| path: . | |
| - name: Assemble Unity sample | |
| run: | | |
| unzip loreline-csharp.zip -d cs-temp | |
| mkdir -p cs/Loreline | |
| cp -r cs-temp/Loreline/* cs/Loreline/ | |
| node ./setup --sample unity | |
| node ./setup --unity-package | |
| - name: Create zip archive | |
| run: | | |
| cp loreline.unitypackage sample/loreline-unity/ | |
| cd sample/loreline-unity | |
| zip -r ../../loreline-unity.zip . \ | |
| -x 'Library/*' 'Temp/*' \ | |
| 'Logs/*' 'UserSettings/*' \ | |
| 'obj/*' | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-unity.zip | |
| path: loreline-unity.zip | |
| compression-level: 0 | |
| - name: Upload Unity Package | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline.unitypackage | |
| path: loreline.unitypackage | |
| compression-level: 0 | |
| loreline-web: | |
| needs: [loreline-js] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download JS library | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-js.zip | |
| path: . | |
| - name: Assemble web sample | |
| run: | | |
| unzip loreline-js.zip -d js-temp | |
| mkdir -p js | |
| cp js-temp/js/loreline.js js/loreline.js | |
| node ./setup --sample web | |
| - name: Create zip archive | |
| run: | | |
| cd sample/loreline-web | |
| zip -r ../../loreline-web.zip . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-web.zip | |
| path: loreline-web.zip | |
| compression-level: 0 | |
| loreline-cpp: | |
| needs: [loreline-mac, loreline-windows, loreline-linux] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download platform artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: artifacts | |
| - name: Assemble loreline-cpp package | |
| run: | | |
| PKG=loreline-cpp-pkg | |
| mkdir -p $PKG/loreline/include | |
| mkdir -p $PKG/loreline/mac | |
| mkdir -p $PKG/loreline/linux-x86_64 | |
| mkdir -p $PKG/loreline/linux-arm64 | |
| mkdir -p $PKG/loreline/windows | |
| mkdir -p $PKG/story | |
| # Copy sample source + build scripts | |
| cp sample/loreline-cpp/main.cpp $PKG/ | |
| cp sample/loreline-cpp/CMakeLists.txt $PKG/ | |
| cp sample/loreline-cpp/build-mac.sh $PKG/ | |
| cp sample/loreline-cpp/build-linux.sh $PKG/ | |
| cp sample/loreline-cpp/build-windows.bat $PKG/ | |
| chmod +x $PKG/build-mac.sh $PKG/build-linux.sh | |
| # Copy story files | |
| cp sample/CoffeeShop.lor $PKG/story/ | |
| cp sample/characters.lor $PKG/story/ | |
| # Copy header (same for all platforms) | |
| cp cpp/include/Loreline.h $PKG/loreline/include/ | |
| # Extract platform libraries from artifacts | |
| cd artifacts | |
| unzip -o loreline-mac.zip/loreline-mac.zip -d mac-tmp | |
| unzip -o loreline-windows.zip/loreline-windows.zip -d win-tmp | |
| unzip -o loreline-linux-x86_64.zip/loreline-linux-x86_64.zip -d linux-x86_64-tmp | |
| unzip -o loreline-linux-arm64.zip/loreline-linux-arm64.zip -d linux-arm64-tmp | |
| cd .. | |
| cp artifacts/mac-tmp/cpp/lib/libLoreline.dylib $PKG/loreline/mac/ | |
| cp artifacts/win-tmp/cpp/lib/Loreline.dll $PKG/loreline/windows/ | |
| cp artifacts/win-tmp/cpp/lib/Loreline.lib $PKG/loreline/windows/ | |
| cp artifacts/linux-x86_64-tmp/cpp/lib/libLoreline.so $PKG/loreline/linux-x86_64/ | |
| cp artifacts/linux-arm64-tmp/cpp/lib/libLoreline.so $PKG/loreline/linux-arm64/ | |
| - name: Create zip archive | |
| run: cd loreline-cpp-pkg && zip -9 ../loreline-cpp.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-cpp.zip | |
| path: loreline-cpp.zip | |
| compression-level: 0 | |
| loreline-ios: | |
| runs-on: macos-14 | |
| env: | |
| CODESIGN: ${{ secrets.APPLE_CERTIFICATE_P12 != '' }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| set -ex | |
| export NEKOPATH=$PWD'/git/haxe-binary/mac/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/mac/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.dylib /usr/local/lib/libneko.dylib | |
| sudo ln -s $NEKOPATH/libneko.2.4.0.dylib /usr/local/lib/libneko.2.4.0.dylib | |
| sudo ln -s $NEKOPATH/libneko.2.dylib /usr/local/lib/libneko.2.dylib | |
| set +x | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Install LLVM (for static framework symbol renaming) | |
| run: brew install llvm | |
| - name: Build iOS xcframework | |
| run: node ./setup --ios | |
| - name: Install scons | |
| run: brew install scons | |
| - name: Build GDExtension wrapper for iOS | |
| run: node ./setup --godot-ios | |
| - name: Install Apple certificate | |
| if: env.CODESIGN == 'true' | |
| env: | |
| APPLE_CERTIFICATE_P12: ${{ secrets.APPLE_CERTIFICATE_P12 }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| run: | | |
| CERT_PATH=$RUNNER_TEMP/certificate.p12 | |
| KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
| KEYCHAIN_PASSWORD=$(openssl rand -hex 12) | |
| echo -n "$APPLE_CERTIFICATE_P12" | base64 --decode -o $CERT_PATH | |
| security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security set-keychain-settings -lut 21600 $KEYCHAIN_PATH | |
| security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security import $CERT_PATH -P "$APPLE_CERTIFICATE_PASSWORD" \ | |
| -A -t cert -f pkcs12 -k $KEYCHAIN_PATH | |
| security set-key-partition-list -S apple-tool:,apple: \ | |
| -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security list-keychains -d user -s $KEYCHAIN_PATH login.keychain | |
| - name: Sign iOS framework slices | |
| if: env.CODESIGN == 'true' | |
| run: | | |
| IDENTITY="Developer ID Application" | |
| codesign --force --sign "$IDENTITY" --timestamp \ | |
| build/cpp-lib/ios/Loreline.xcframework/ios-arm64/Loreline.framework | |
| codesign --force --sign "$IDENTITY" --timestamp \ | |
| build/cpp-lib/ios/Loreline.xcframework/ios-arm64_x86_64-simulator/Loreline.framework | |
| codesign -vvv build/cpp-lib/ios/Loreline.xcframework/ios-arm64/Loreline.framework | |
| codesign -vvv build/cpp-lib/ios/Loreline.xcframework/ios-arm64_x86_64-simulator/Loreline.framework | |
| - name: Sign GDExtension iOS xcframework slices | |
| if: env.CODESIGN == 'true' | |
| run: | | |
| IDENTITY="Developer ID Application" | |
| XCFW=godot/bin/loreline_godot.xcframework | |
| if [ -d "$XCFW" ]; then | |
| for slice in "$XCFW"/*/*.framework; do | |
| codesign --force --sign "$IDENTITY" --timestamp "$slice" | |
| codesign -vvv "$slice" | |
| done | |
| fi | |
| - name: Cleanup keychain | |
| if: ${{ always() }} | |
| run: security delete-keychain $RUNNER_TEMP/app-signing.keychain-db 2>/dev/null || true | |
| - name: Create zip archive | |
| run: | | |
| mkdir -p loreline-ios-pkg/include | |
| cp -r build/cpp-lib/ios/Loreline.xcframework loreline-ios-pkg/ | |
| cp -r build/cpp-lib/ios/Loreline-static.xcframework loreline-ios-pkg/ | |
| cp cpp/include/Loreline.h loreline-ios-pkg/include/ | |
| cd loreline-ios-pkg && zip --symlinks -9 ../loreline-ios.zip -r . | |
| - name: Create GDExtension zip archive | |
| run: | | |
| mkdir -p loreline-godot-ios-pkg | |
| cp -r godot/bin/loreline_godot.xcframework loreline-godot-ios-pkg/ | |
| cp -r build/cpp-lib/ios/Loreline.xcframework loreline-godot-ios-pkg/ | |
| cd loreline-godot-ios-pkg && zip --symlinks -9 ../loreline-godot-ios.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-ios.zip | |
| path: loreline-ios.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-ios.zip | |
| path: loreline-godot-ios.zip | |
| compression-level: 0 | |
| loreline-android: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v2 | |
| - name: Install Android NDK | |
| run: | | |
| echo "y" | sdkmanager "ndk;27.3.13750724" | |
| echo "ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/27.3.13750724" >> $GITHUB_ENV | |
| - name: Build Android AAR | |
| run: node ./setup --android | |
| - name: Install scons | |
| run: pip install scons | |
| - name: Build GDExtension wrapper for Android | |
| run: node ./setup --godot-android | |
| - name: Create zip archive | |
| run: | | |
| mkdir -p loreline-android-pkg/include | |
| cp build/cpp-lib/android/loreline.aar loreline-android-pkg/ | |
| cp cpp/include/Loreline.h loreline-android-pkg/include/ | |
| cd loreline-android-pkg && zip -9 ../loreline-android.zip -r . | |
| - name: Create GDExtension zip archive | |
| run: | | |
| mkdir -p loreline-godot-android-pkg/arm64-v8a | |
| mkdir -p loreline-godot-android-pkg/x86_64 | |
| cp godot/bin/arm64-v8a/libloreline_godot.so loreline-godot-android-pkg/arm64-v8a/ | |
| cp godot/bin/x86_64/libloreline_godot.so loreline-godot-android-pkg/x86_64/ | |
| cd loreline-godot-android-pkg && zip -9 ../loreline-godot-android.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-android.zip | |
| path: loreline-android.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-android.zip | |
| path: loreline-godot-android.zip | |
| compression-level: 0 | |
| loreline-wasm: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Checkout submodules | |
| run: git submodule update --init --recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| - name: Setup Haxe | |
| working-directory: . | |
| run: | | |
| export NEKOPATH=$PWD'/git/haxe-binary/linux-x86_64/neko' | |
| export HAXEPATH=$PWD'/git/haxe-binary/linux-x86_64/haxe' | |
| echo 'neko path: '$NEKOPATH | |
| echo 'haxe path: '$HAXEPATH | |
| sudo mkdir -p /usr/local/bin | |
| sudo mkdir -p /usr/local/lib | |
| sudo mkdir -p /usr/local/share/haxe | |
| sudo ln -s $HAXEPATH/haxe /usr/local/bin/haxe | |
| sudo ln -s $HAXEPATH/haxelib /usr/local/bin/haxelib | |
| sudo ln -s $HAXEPATH/haxe-bin /usr/local/bin/haxe-bin | |
| sudo ln -s $HAXEPATH/haxelib-bin /usr/local/bin/haxelib-bin | |
| sudo ln -s $HAXEPATH/std /usr/local/share/haxe/std | |
| sudo ln -s $NEKOPATH/neko /usr/local/bin/neko | |
| sudo ln -s $NEKOPATH/nekoc /usr/local/bin/nekoc | |
| sudo ln -s $NEKOPATH/nekoml /usr/local/bin/nekoml | |
| sudo ln -s $NEKOPATH/nekotools /usr/local/bin/nekotools | |
| sudo ln -s $NEKOPATH /usr/local/lib/neko | |
| sudo ln -s $NEKOPATH/libneko.so /usr/local/lib/libneko.so | |
| sudo ln -s $NEKOPATH/libneko.so.2.4.0 /usr/local/lib/libneko.so.2.4.0 | |
| sudo ln -s $NEKOPATH/libneko.so.2 /usr/local/lib/libneko.so.2 | |
| sudo ldconfig | |
| sudo ldconfig /usr/local/lib | |
| echo 'neko: '$(neko -version) | |
| echo 'haxe: '$(haxe --version) | |
| - name: Setup Emscripten | |
| uses: mymindstorm/setup-emsdk@v14 | |
| - name: Build WASM | |
| run: node ./setup --wasm | |
| - name: Install scons | |
| run: pip install scons | |
| - name: Install npm dependencies (esbuild for JS minification) | |
| run: npm install | |
| - name: Build loreline.js (needed for GDExtension web bridge) | |
| run: node ./setup --js | |
| - name: Build GDExtension wrapper for WASM | |
| run: node ./setup --godot-wasm | |
| - name: Create zip archive | |
| run: | | |
| mkdir -p loreline-wasm-pkg/include | |
| mkdir -p loreline-wasm-pkg/lib | |
| cp build/cpp-lib/wasm/libLoreline.nothreads.a loreline-wasm-pkg/lib/ | |
| cp build/cpp-lib/wasm/libLoreline.threads.a loreline-wasm-pkg/lib/ | |
| cp cpp/include/Loreline.h loreline-wasm-pkg/include/ | |
| cd loreline-wasm-pkg && zip -9 ../loreline-wasm.zip -r . | |
| - name: Create GDExtension zip archive | |
| run: | | |
| mkdir -p loreline-godot-wasm-pkg | |
| cp godot/bin/libloreline_godot.nothreads.wasm loreline-godot-wasm-pkg/ 2>/dev/null || true | |
| cp godot/bin/libloreline_godot.wasm loreline-godot-wasm-pkg/ 2>/dev/null || true | |
| cd loreline-godot-wasm-pkg && zip -9 ../loreline-godot-wasm.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-wasm.zip | |
| path: loreline-wasm.zip | |
| compression-level: 0 | |
| - name: Upload GDExtension Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot-wasm.zip | |
| path: loreline-godot-wasm.zip | |
| compression-level: 0 | |
| loreline-godot: | |
| needs: [loreline-mac, loreline-windows, loreline-linux, loreline-wasm, loreline-ios, loreline-android] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download GDExtension artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: artifacts | |
| pattern: loreline-godot-*.zip | |
| - name: Download Android AAR artifact | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: artifacts | |
| name: loreline-android.zip | |
| - name: Assemble loreline-godot package | |
| run: | | |
| PKG=loreline-godot-pkg/addons/loreline | |
| mkdir -p $PKG/bin/macos | |
| mkdir -p $PKG/bin/windows | |
| mkdir -p $PKG/bin/linux | |
| mkdir -p $PKG/bin/web | |
| mkdir -p $PKG/bin/ios | |
| mkdir -p $PKG/bin/android/arm64-v8a | |
| mkdir -p $PKG/bin/android/x86_64 | |
| # Copy .gdextension manifest | |
| cp godot/loreline.gdextension $PKG/ | |
| # Extract GDExtension artifacts | |
| cd artifacts | |
| unzip -qo loreline-godot-mac.zip/loreline-godot-mac.zip -d godot-mac | |
| unzip -qo loreline-godot-windows.zip/loreline-godot-windows.zip -d godot-win | |
| unzip -qo loreline-godot-linux-x86_64.zip/loreline-godot-linux-x86_64.zip -d godot-linux-x86_64 | |
| unzip -qo loreline-godot-linux-arm64.zip/loreline-godot-linux-arm64.zip -d godot-linux-arm64 | |
| unzip -qo loreline-godot-wasm.zip/loreline-godot-wasm.zip -d godot-wasm | |
| unzip -qo loreline-godot-ios.zip/loreline-godot-ios.zip -d godot-ios | |
| unzip -qo loreline-godot-android.zip/loreline-godot-android.zip -d godot-android | |
| unzip -qo loreline-android.zip -d android-temp | |
| cd .. | |
| # macOS | |
| cp artifacts/godot-mac/libloreline_godot.dylib $PKG/bin/macos/ | |
| cp artifacts/godot-mac/libLoreline.dylib $PKG/bin/macos/ | |
| # Windows | |
| cp artifacts/godot-win/loreline_godot.dll $PKG/bin/windows/ | |
| cp artifacts/godot-win/Loreline.dll $PKG/bin/windows/ | |
| # Linux x86_64 | |
| cp artifacts/godot-linux-x86_64/libloreline_godot.x86_64.so $PKG/bin/linux/ | |
| cp artifacts/godot-linux-x86_64/libLoreline.x86_64.so $PKG/bin/linux/ | |
| # Linux arm64 | |
| cp artifacts/godot-linux-arm64/libloreline_godot.arm64.so $PKG/bin/linux/ | |
| cp artifacts/godot-linux-arm64/libLoreline.arm64.so $PKG/bin/linux/ | |
| # WASM | |
| cp artifacts/godot-wasm/libloreline_godot.nothreads.wasm $PKG/bin/web/ 2>/dev/null || true | |
| cp artifacts/godot-wasm/libloreline_godot.wasm $PKG/bin/web/ 2>/dev/null || true | |
| # iOS (Loreline is statically linked into the GDExtension) | |
| cp -r artifacts/godot-ios/loreline_godot.xcframework $PKG/bin/ios/ | |
| # Android | |
| cp artifacts/godot-android/arm64-v8a/libloreline_godot.so $PKG/bin/android/arm64-v8a/ | |
| cp artifacts/godot-android/x86_64/libloreline_godot.so $PKG/bin/android/x86_64/ | |
| unzip -qo artifacts/android-temp/loreline.aar -d artifacts/android-aar-temp | |
| cp artifacts/android-aar-temp/jni/arm64-v8a/libloreline.so $PKG/bin/android/arm64-v8a/ | |
| cp artifacts/android-aar-temp/jni/x86_64/libloreline.so $PKG/bin/android/x86_64/ | |
| # Copy sample project into package | |
| cp -r sample/loreline-godot loreline-godot-pkg/sample | |
| # Remove generated/editor files | |
| rm -rf loreline-godot-pkg/sample/.godot | |
| rm -rf loreline-godot-pkg/sample/android/build | |
| rm -rf loreline-godot-pkg/sample/addons/loreline/bin | |
| rm -f loreline-godot-pkg/sample/.gitattributes | |
| rm -f loreline-godot-pkg/sample/.gitignore | |
| rm -f loreline-godot-pkg/sample/.editorconfig | |
| find loreline-godot-pkg/sample -name "*.import" -delete | |
| find loreline-godot-pkg/sample -name "*.uid" -delete | |
| # Copy extension into sample so it's ready to use | |
| cp -r loreline-godot-pkg/addons loreline-godot-pkg/sample/ | |
| # Copy story files into sample | |
| mkdir -p loreline-godot-pkg/sample/story | |
| cp sample/CoffeeShop.lor loreline-godot-pkg/sample/story/ | |
| cp sample/characters.lor loreline-godot-pkg/sample/story/ | |
| cd loreline-godot-pkg && zip --symlinks -9 ../loreline-godot.zip -r . | |
| - name: Upload Files | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-godot.zip | |
| path: loreline-godot.zip | |
| compression-level: 0 | |
| loreline-sdl3: | |
| needs: [loreline-mac, loreline-windows, loreline-linux, loreline-ios, loreline-android] | |
| runs-on: macos-14 | |
| env: | |
| CODESIGN: ${{ secrets.APPLE_CERTIFICATE_P12 != '' }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download platform artifacts | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: artifacts | |
| - name: Assemble loreline-sdl3 package | |
| run: | | |
| set -e | |
| PKG=loreline-sdl3-pkg | |
| # --- Copy tracked sample sources --- | |
| cp -r sample/loreline-sdl3 $PKG | |
| rm -f $PKG/.gitignore | |
| # Story files (gitignored in sample, source is at sample/*.lor) | |
| mkdir -p $PKG/story | |
| cp sample/CoffeeShop.lor $PKG/story/ | |
| cp sample/characters.lor $PKG/story/ | |
| # Fonts (OFL-licensed, tracked in Unity sample) | |
| mkdir -p $PKG/fonts | |
| cp sample/loreline-unity/Assets/Resources/Fonts/*.ttf $PKG/fonts/ | |
| cp sample/loreline-unity/Assets/Resources/Fonts/*.txt $PKG/fonts/ | |
| # --- Download stb_truetype.h --- | |
| curl -fsSL -o $PKG/stb_truetype.h \ | |
| https://raw.githubusercontent.com/nothings/stb/master/stb_truetype.h | |
| # --- Download SDL3 prebuilt binaries --- | |
| SDL3_URL="https://github.com/jeremyfa/build-sdl3/releases/download/sdl3-77f4a8e" | |
| curl -fsSL -o /tmp/sdl3-mac.zip "$SDL3_URL/sdl3-mac-universal.zip" | |
| mkdir -p $PKG/sdl3/mac && unzip -qo /tmp/sdl3-mac.zip -d $PKG/sdl3/mac | |
| curl -fsSL -o /tmp/sdl3-linux-x64.tar.gz "$SDL3_URL/sdl3-linux-x64.tar.gz" | |
| mkdir -p $PKG/sdl3/linux-x64 && tar xzf /tmp/sdl3-linux-x64.tar.gz -C $PKG/sdl3/linux-x64 | |
| curl -fsSL -o /tmp/sdl3-linux-arm64.tar.gz "$SDL3_URL/sdl3-linux-arm64.tar.gz" | |
| mkdir -p $PKG/sdl3/linux-arm64 && tar xzf /tmp/sdl3-linux-arm64.tar.gz -C $PKG/sdl3/linux-arm64 | |
| curl -fsSL -o /tmp/sdl3-windows.zip "$SDL3_URL/sdl3-windows-x64.zip" | |
| mkdir -p $PKG/sdl3/windows && unzip -qo /tmp/sdl3-windows.zip -d $PKG/sdl3/windows | |
| curl -fsSL -o /tmp/sdl3-ios.zip "$SDL3_URL/sdl3-ios-universal.zip" | |
| mkdir -p $PKG/sdl3/ios && unzip -qo /tmp/sdl3-ios.zip -d $PKG/sdl3/ios | |
| curl -fsSL -o /tmp/sdl3-android.zip "$SDL3_URL/sdl3-android-r27.zip" | |
| mkdir -p $PKG/sdl3/android && unzip -qo /tmp/sdl3-android.zip -d $PKG/sdl3/android | |
| # Discard Android static libs (~71MB, not used) | |
| rm -rf $PKG/sdl3/android/lib | |
| # --- Download SDL3 Java sources for Android --- | |
| SDL3_COMMIT="77f4a8e2b8066d3bc376eab1ce443e57bc04d4ee" | |
| SDL3_JAVA_DIR="$PKG/android/app/src/main/java/org/libsdl/app" | |
| mkdir -p "$SDL3_JAVA_DIR" | |
| SDL3_JAVA_BASE="https://raw.githubusercontent.com/libsdl-org/SDL/$SDL3_COMMIT/android-project/app/src/main/java/org/libsdl/app" | |
| for f in SDL.java SDLActivity.java SDLAudioManager.java \ | |
| SDLControllerManager.java SDLDummyEdit.java \ | |
| SDLInputConnection.java SDLSurface.java \ | |
| HIDDevice.java HIDDeviceBLESteamController.java \ | |
| HIDDeviceManager.java HIDDeviceUSB.java; do | |
| curl -fsSL -o "$SDL3_JAVA_DIR/$f" "$SDL3_JAVA_BASE/$f" | |
| done | |
| # --- Extract Loreline binaries from CI artifacts --- | |
| cd artifacts | |
| unzip -qo loreline-mac.zip/loreline-mac.zip -d mac-tmp | |
| unzip -qo loreline-windows.zip/loreline-windows.zip -d win-tmp | |
| unzip -qo loreline-linux-x86_64.zip/loreline-linux-x86_64.zip -d linux-x86_64-tmp | |
| unzip -qo loreline-linux-arm64.zip/loreline-linux-arm64.zip -d linux-arm64-tmp | |
| unzip -qo loreline-ios.zip/loreline-ios.zip -d ios-tmp | |
| unzip -qo loreline-android.zip/loreline-android.zip -d android-tmp | |
| cd .. | |
| # Header | |
| mkdir -p $PKG/loreline/include | |
| cp artifacts/mac-tmp/cpp/include/Loreline.h $PKG/loreline/include/ | |
| # Mac | |
| mkdir -p $PKG/loreline/mac | |
| cp artifacts/mac-tmp/cpp/lib/libLoreline.dylib $PKG/loreline/mac/ | |
| # Windows | |
| mkdir -p $PKG/loreline/windows | |
| cp artifacts/win-tmp/cpp/lib/Loreline.dll $PKG/loreline/windows/ | |
| cp artifacts/win-tmp/cpp/lib/Loreline.lib $PKG/loreline/windows/ | |
| # Linux x86_64 | |
| mkdir -p $PKG/loreline/linux-x86_64 | |
| cp artifacts/linux-x86_64-tmp/cpp/lib/libLoreline.so $PKG/loreline/linux-x86_64/ | |
| # Linux aarch64 | |
| mkdir -p $PKG/loreline/linux-aarch64 | |
| cp artifacts/linux-arm64-tmp/cpp/lib/libLoreline.so $PKG/loreline/linux-aarch64/ | |
| # iOS xcframework | |
| mkdir -p $PKG/loreline/ios | |
| cp -r artifacts/ios-tmp/Loreline.xcframework $PKG/loreline/ios/ | |
| # Android: extract jni/{abi}/libloreline.so from .aar | |
| mkdir -p $PKG/loreline/android | |
| unzip -qo artifacts/android-tmp/loreline.aar "jni/*" -d $PKG/loreline/android/ | |
| # Make build scripts executable | |
| chmod +x $PKG/build-*.sh $PKG/run-*.sh 2>/dev/null || true | |
| - name: Install Apple certificate | |
| if: env.CODESIGN == 'true' | |
| env: | |
| APPLE_CERTIFICATE_P12: ${{ secrets.APPLE_CERTIFICATE_P12 }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| run: | | |
| CERT_PATH=$RUNNER_TEMP/certificate.p12 | |
| KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
| KEYCHAIN_PASSWORD=$(openssl rand -hex 12) | |
| echo -n "$APPLE_CERTIFICATE_P12" | base64 --decode -o $CERT_PATH | |
| security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security set-keychain-settings -lut 21600 $KEYCHAIN_PATH | |
| security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security import $CERT_PATH -P "$APPLE_CERTIFICATE_PASSWORD" \ | |
| -A -t cert -f pkcs12 -k $KEYCHAIN_PATH | |
| security set-key-partition-list -S apple-tool:,apple: \ | |
| -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
| security list-keychains -d user -s $KEYCHAIN_PATH login.keychain | |
| - name: Sign macOS and iOS binaries | |
| if: env.CODESIGN == 'true' | |
| run: | | |
| PKG=loreline-sdl3-pkg | |
| IDENTITY="Developer ID Application" | |
| # Sign all macOS dylibs (SDL3 + Loreline) | |
| find $PKG/sdl3/mac -name "*.dylib" -exec \ | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp {} \; | |
| codesign --force --options runtime \ | |
| --entitlements tpl/mac/entitlements.plist \ | |
| --sign "$IDENTITY" --timestamp \ | |
| $PKG/loreline/mac/libLoreline.dylib | |
| # Sign iOS frameworks | |
| find $PKG/sdl3/ios -name "*.framework" -exec \ | |
| codesign --force --sign "$IDENTITY" --timestamp {} \; | |
| find $PKG/loreline/ios -name "*.framework" -exec \ | |
| codesign --force --sign "$IDENTITY" --timestamp {} \; | |
| - name: Create zip archive | |
| run: cd loreline-sdl3-pkg && zip --symlinks -9 ../loreline-sdl3.zip -r . | |
| - name: Notarize SDL3 package | |
| if: env.CODESIGN == 'true' | |
| env: | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| run: | | |
| xcrun notarytool submit loreline-sdl3.zip \ | |
| --apple-id "$APPLE_ID" \ | |
| --password "$APPLE_ID_PASSWORD" \ | |
| --team-id "$APPLE_TEAM_ID" \ | |
| --wait --timeout 15m | |
| - name: Cleanup keychain | |
| if: ${{ always() }} | |
| run: security delete-keychain $RUNNER_TEMP/app-signing.keychain-db 2>/dev/null || true | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| retention-days: 1 | |
| name: loreline-sdl3.zip | |
| path: loreline-sdl3.zip | |
| compression-level: 0 | |
| loreline-sdl3-verify: | |
| needs: [loreline-sdl3] | |
| strategy: | |
| matrix: | |
| include: | |
| - os: macos-14 | |
| script: ./build-mac.sh | |
| - os: ubuntu-22.04 | |
| script: ./build-linux.sh | |
| - os: ubuntu-22.04-arm | |
| script: ./build-linux.sh | |
| - os: ubuntu-22.04 | |
| script: ./build-android.sh | |
| android: true | |
| - os: windows-2022 | |
| script: ./build-windows.bat | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Setup Java | |
| if: matrix.android | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| - name: Setup Android SDK | |
| if: matrix.android | |
| uses: android-actions/setup-android@v2 | |
| - name: Install Android NDK | |
| if: matrix.android | |
| run: echo "y" | sdkmanager "ndk;27.3.13750724" | |
| - name: Download loreline-sdl3.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-sdl3.zip | |
| path: . | |
| - name: Unpack and build | |
| shell: bash | |
| run: | | |
| unzip -qo loreline-sdl3.zip -d loreline-sdl3 | |
| cd loreline-sdl3 | |
| chmod +x build-*.sh 2>/dev/null || true | |
| ${{ matrix.script }} | |
| create-release: | |
| if: startsWith(github.ref, 'refs/tags/') | |
| needs: [loreline-windows, loreline-mac, loreline-linux, loreline-ios, loreline-android, loreline-wasm, loreline-js, loreline-csharp, loreline-python, loreline-lua, loreline-unity, loreline-web, loreline-jvm, loreline-cpp, loreline-sdl3, loreline-sdl3-verify, loreline-godot] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Download loreline-windows.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-windows.zip | |
| path: . | |
| - name: Download loreline-mac.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-mac.zip | |
| path: . | |
| - name: Download loreline-linux-x86_64.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-linux-x86_64.zip | |
| path: . | |
| - name: Download loreline-linux-arm64.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-linux-arm64.zip | |
| path: . | |
| - name: Download loreline-js.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-js.zip | |
| path: . | |
| - name: Download loreline-csharp.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-csharp.zip | |
| path: . | |
| - name: Download loreline-unity.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-unity.zip | |
| path: . | |
| - name: Download loreline.unitypackage | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline.unitypackage | |
| path: . | |
| - name: Download loreline-web.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-web.zip | |
| path: . | |
| - name: Download loreline-python.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-python.zip | |
| path: . | |
| - name: Download loreline-lua.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-lua.zip | |
| path: . | |
| - name: Download loreline-cpp.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-cpp.zip | |
| path: . | |
| - name: Download loreline-jvm.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-jvm.zip | |
| path: . | |
| - name: Download loreline-ios.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-ios.zip | |
| path: . | |
| - name: Download loreline-android.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-android.zip | |
| path: . | |
| - name: Download loreline-sdl3.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-sdl3.zip | |
| path: . | |
| - name: Download loreline-wasm.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-wasm.zip | |
| path: . | |
| - name: Download loreline-godot.zip | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: loreline-godot.zip | |
| path: . | |
| - name: Extract tag name | |
| id: extract_tag | |
| run: echo "TAG_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV | |
| - name: Create Release | |
| id: create_release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ github.ref }} | |
| name: Loreline ${{ env.TAG_NAME }} | |
| body: | | |
| Loreline ${{ env.TAG_NAME }} | |
| draft: false | |
| prerelease: false | |
| files: | | |
| loreline-windows.zip | |
| loreline-mac.zip | |
| loreline-linux-x86_64.zip | |
| loreline-linux-arm64.zip | |
| loreline-ios.zip | |
| loreline-android.zip | |
| loreline-sdl3.zip | |
| loreline-js.zip | |
| loreline-csharp.zip | |
| loreline-unity.zip | |
| loreline.unitypackage | |
| loreline-web.zip | |
| loreline-python.zip | |
| loreline-lua.zip | |
| loreline-jvm.zip | |
| loreline-cpp.zip | |
| loreline-wasm.zip | |
| loreline-godot.zip |