mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-10 18:21:14 +00:00
* - Set defaults if ini exists, but empty. - Create a new dictionary object, not use null object. * Switch Port Todo: Fix: Misc crashes when interacting on island. Todo: Fix: Joystick pointer is slow to move. Todo: Fix: Touch doesn't behave. * Fix: base GetPathInfo fixup in the SDL implementation, with check for null SDL_PathInfo. Fix: Disable imgui shell functions. Todo: Display imgui debug if enabled. * Fix: Correction to suite style guidelines * - Switch build homebrew NRO - CI/CD to build Switch * Fix typo in CI * clang-format fix * Clang-format against isleapp.cpp * Use correct docker container for CI/CD * Remove SDL fixups and use an SDL3 port with fixes. Fixes crash bug and world issues! * Fix: use Clang-Format 17 instead of 21 --------- Co-authored-by: SnepOMatic (Rhew) <github@rhew.co.uk>
373 lines
14 KiB
YAML
373 lines
14 KiB
YAML
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
clang-format:
|
|
name: 'clang-format'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Run clang-format
|
|
run: |
|
|
find CONFIG LEGO1 ISLE miniwin -iname '*.h' -o -iname '*.cpp' | xargs \
|
|
pipx run "clang-format>=17,<18" \
|
|
--style=file \
|
|
-i
|
|
- name: Check diff
|
|
run: |
|
|
git diff --exit-code
|
|
|
|
build:
|
|
name: ${{ matrix.name }}
|
|
runs-on: ${{ matrix.os }}
|
|
container: ${{ matrix.container || '' }}
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.shell || 'sh' }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- { name: 'Linux', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: true, linux: true, werror: true, clang-tidy: true, build-assets: true }
|
|
- { name: 'Linux (Debug)', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: true, linux: true, werror: true, clang-tidy: true, debug: true }
|
|
- { name: 'MSVC (x86)', os: 'windows-latest', generator: 'Ninja', dx5: true, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64_x86' }
|
|
- { name: 'MSVC (x64)', os: 'windows-latest', generator: 'Ninja', dx5: false, config: true, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64' }
|
|
- { name: 'MSVC (x64 Debug)', os: 'windows-latest', generator: 'Ninja', dx5: false, config: true, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', debug: true }
|
|
- { name: 'MSVC (arm64)', os: 'windows-latest', generator: 'Ninja', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64_arm64' }
|
|
- { name: 'msys2 mingw32', os: 'windows-latest', generator: 'Ninja', dx5: false, config: false, mingw: true, werror: true, clang-tidy: true, msystem: 'mingw32', msys-env: 'mingw-w64-i686', shell: 'msys2 {0}' }
|
|
- { name: 'msys2 mingw64', os: 'windows-latest', generator: 'Ninja', dx5: false, config: true, mingw: true, werror: true, clang-tidy: true, msystem: 'mingw64', msys-env: 'mingw-w64-x86_64', shell: 'msys2 {0}' }
|
|
- { name: 'macOS', os: 'macos-latest', generator: 'Ninja', dx5: false, config: true, brew: true, werror: true, clang-tidy: false }
|
|
- { name: 'iOS', os: 'macos-15', generator: 'Xcode', dx5: false, config: false, brew: true, werror: true, clang-tidy: false, cmake-args: '-DCMAKE_SYSTEM_NAME=iOS', ios: true }
|
|
- { name: 'Emscripten', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, emsdk: true, werror: true, clang-tidy: false, cmake-wrapper: 'emcmake' }
|
|
- { name: 'Nintendo 3DS', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, n3ds: true, werror: true, clang-tidy: false, container: 'devkitpro/devkitarm:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake' }
|
|
- { name: 'Nintendo Switch', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, nx: true, werror: true, clang-tidy: false, container: 'devkitpro/devkita64:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake' }
|
|
- { name: 'Xbox One', os: 'windows-latest', generator: 'Visual Studio 17 2022', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', cmake-args: '-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0', xbox-one: true}
|
|
- { name: 'Android', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, android: true, werror: true, clang-tidy: false,}
|
|
- { name: 'Vita', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, vita: true, werror: true, clang-tidy: false, cmake-args: '--toolchain /usr/local/vitasdk/share/vita.toolchain.cmake'}
|
|
steps:
|
|
- name: Setup vcvars
|
|
if: ${{ !!matrix.msvc }}
|
|
uses: ilammy/msvc-dev-cmd@v1
|
|
with:
|
|
arch: ${{ matrix.vc-arch }}
|
|
|
|
- name: Set up MSYS2
|
|
if: ${{ !!matrix.msystem }}
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{ matrix.msystem }}
|
|
install: >-
|
|
${{ matrix.msys-env }}-cc
|
|
${{ matrix.msys-env }}-cmake
|
|
${{ matrix.msys-env }}-ninja
|
|
${{ matrix.msys-env }}-clang-tools-extra
|
|
${{ (matrix.config && format('{0}-qt6-base', matrix.msys-env)) || '' }}
|
|
- name: Install Qt
|
|
if: ${{ !!matrix.msvc && matrix.config }}
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
cache: 'true'
|
|
|
|
- name: Install 3DS dependencies
|
|
if: ${{ matrix.n3ds }}
|
|
run: |
|
|
wget https://github.com/diasurgical/bannertool/releases/download/1.2.0/bannertool.zip
|
|
unzip -j "bannertool.zip" "linux-x86_64/bannertool" -d "/opt/devkitpro/tools/bin"
|
|
wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18/makerom-v0.18-ubuntu_x86_64.zip
|
|
unzip "makerom-v0.18-ubuntu_x86_64.zip" "makerom" -d "/opt/devkitpro/tools/bin"
|
|
chmod a+x /opt/devkitpro/tools/bin/makerom
|
|
|
|
- name: Install Linux dependencies (apt-get)
|
|
if: ${{ matrix.linux }}
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
libx11-dev libxext-dev libxrandr-dev libxrender-dev libxfixes-dev libxi-dev libxinerama-dev \
|
|
libxcursor-dev libwayland-dev libxkbcommon-dev wayland-protocols libgl1-mesa-dev qt6-base-dev \
|
|
libasound2-dev qt6-xdgdesktopportal-platformtheme libxss-dev libxtst-dev
|
|
|
|
- name: Install macOS dependencies (brew)
|
|
if: ${{ matrix.brew }}
|
|
run: |
|
|
brew update
|
|
brew uninstall cmake || true
|
|
brew install cmake ninja llvm qt6
|
|
echo "LLVM_ROOT=$(brew --prefix llvm)/bin" >> $GITHUB_ENV
|
|
|
|
- name: Use latest Xcode
|
|
if: ${{ matrix.ios }}
|
|
uses: maxim-lobanov/setup-xcode@v1.6.0
|
|
with:
|
|
xcode-version: latest-stable
|
|
|
|
- name: Install iOS components
|
|
if: ${{ matrix.ios }}
|
|
run: |
|
|
xcrun simctl list > /dev/null
|
|
xcodebuild -downloadPlatform iOS
|
|
|
|
- name: Setup Emscripten
|
|
uses: mymindstorm/setup-emsdk@master
|
|
if: ${{ matrix.emsdk }}
|
|
|
|
- name: Setup ninja
|
|
if: ${{ matrix.msvc }}
|
|
uses: ashutoshvarma/setup-ninja@master
|
|
|
|
- name: Setup vitasdk
|
|
if: ${{ matrix.vita }}
|
|
run: |
|
|
git clone https://github.com/vitasdk/vdpm
|
|
cd vdpm
|
|
./bootstrap-vitasdk.sh
|
|
export VITASDK=/usr/local/vitasdk
|
|
export PATH=$VITASDK/bin:$PATH
|
|
echo "VITASDK=/usr/local/vitasdk" >> $GITHUB_ENV
|
|
echo "$VITASDK/bin" >> $GITHUB_PATH
|
|
./install-all.sh
|
|
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Checkout LFS
|
|
if: ${{ matrix.build-assets }}
|
|
run: |
|
|
git lfs pull
|
|
|
|
- name: Setup Java (Android)
|
|
if: ${{ matrix.android }}
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: '17'
|
|
|
|
- name: Get CMake (Android)
|
|
if: ${{ matrix.android }}
|
|
uses: lukka/get-cmake@latest
|
|
with:
|
|
cmakeVersion: 3.30.5
|
|
|
|
- name: Build (Android)
|
|
if: ${{ matrix.android }}
|
|
env:
|
|
SIGNING_KEY_ALIAS: ${{ secrets.keyAlias }}
|
|
SIGNING_KEY_PASSWORD: ${{ secrets.keyPassword }}
|
|
SIGNING_STORE_PASSWORD: ${{ secrets.keystorePassword }}
|
|
SIGNING_STORE_FILE: ${{ github.workspace }}/release.keystore
|
|
run: |
|
|
echo "${{ secrets.keystore }}" | base64 -d > release.keystore
|
|
cd android-project
|
|
./gradlew $([ -n "$SIGNING_KEY_ALIAS" ] && echo packageRelease || echo assembleDebug ) \
|
|
--info \
|
|
-PcmakeArgs="-DCMAKE_BUILD_TYPE=Release \
|
|
-DISLE_USE_DX5=${{ !!matrix.dx5 }} \
|
|
-DISLE_BUILD_CONFIG=${{ !!matrix.config }} \
|
|
-DENABLE_CLANG_TIDY=${{ !!matrix.clang-tidy }} \
|
|
-DISLE_WERROR=${{ !!matrix.werror }} \
|
|
-DISLE_DEBUG=${{ matrix.debug || 'OFF' }} \
|
|
-Werror=dev"
|
|
|
|
- name: Configure (CMake)
|
|
if: ${{ !matrix.android }}
|
|
run: |
|
|
${{ matrix.cmake-wrapper || '' }} cmake -S . -B build -G "${{ matrix.generator }}" \
|
|
${{ matrix.cmake-args || '' }} \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DISLE_USE_DX5=${{ !!matrix.dx5 }} \
|
|
-DISLE_BUILD_CONFIG=${{ !!matrix.config }} \
|
|
-DISLE_BUILD_ASSETS=${{ !!matrix.build-assets }} \
|
|
-DENABLE_CLANG_TIDY=${{ !!matrix.clang-tidy }} \
|
|
-DISLE_WERROR=${{ !!matrix.werror }} \
|
|
-DISLE_DEBUG=${{ matrix.debug || 'OFF' }} \
|
|
-Werror=dev
|
|
|
|
- name: Build (CMake)
|
|
if: ${{ !matrix.android }}
|
|
run: cmake --build build --verbose --config Release
|
|
|
|
- name: Package (CPack)
|
|
if: ${{ !matrix.n3ds && !matrix.nx && !matrix.android && !matrix.vita }}
|
|
run: |
|
|
cd build
|
|
success=0
|
|
max_tries=10
|
|
for i in $(seq $max_tries); do
|
|
cpack . && success=1
|
|
if test $success = 1; then
|
|
break
|
|
fi
|
|
echo "Package creation failed. Sleep 1 second and try again."
|
|
sleep 1
|
|
done
|
|
if test $success = 0; then
|
|
echo "Package creation failed after $max_tries attempts."
|
|
exit 1
|
|
fi
|
|
|
|
- name: Install linuxdeploy
|
|
if: ${{ matrix.linux }}
|
|
id: install-linuxdeploy
|
|
uses: miurahr/install-linuxdeploy-action@v1.8.0
|
|
with:
|
|
plugins: qt appimage
|
|
|
|
- name: Package (AppImage)
|
|
if: ${{ matrix.linux }}
|
|
run: |
|
|
cd build && \
|
|
export LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH" && \
|
|
NO_STRIP=1 ${{ steps.install-linuxdeploy.outputs.linuxdeploy }} \
|
|
-p qt \
|
|
-e isle \
|
|
-e isle-config \
|
|
-d packaging/linux/org.legoisland.Isle.desktop \
|
|
-i icons/org.legoisland.Isle.svg \
|
|
--custom-apprun=../packaging/linux/appimage/AppRun \
|
|
--appdir packaging/linux/appimage/AppDir \
|
|
--output appimage && \
|
|
mv *.AppImage dist/
|
|
|
|
- name: Package (3DS)
|
|
if: ${{ matrix.n3ds }}
|
|
run: |
|
|
cd build
|
|
mkdir dist
|
|
mv *.3dsx dist/
|
|
mv *.cia dist/
|
|
|
|
- name: Package (Switch)
|
|
if: ${{ matrix.nx }}
|
|
run: |
|
|
cd build
|
|
mkdir dist
|
|
mv *.nro dist/
|
|
|
|
- name: Package (Vita)
|
|
if: ${{ matrix.vita }}
|
|
run: |
|
|
cd build
|
|
mkdir dist
|
|
mv *.vpk dist/
|
|
|
|
- name: Package (Android)
|
|
if: ${{ matrix.android }}
|
|
run: |
|
|
mkdir -p build/dist
|
|
mv android-project/app/build/outputs/apk/*/*.apk build/dist/
|
|
|
|
- name: Package Assets Separately
|
|
if: matrix.build-assets
|
|
run: (cd build/assets && zip -r ../dist/isle-assets.zip .)
|
|
|
|
- name: Upload Build Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: '${{ matrix.name }}'
|
|
path: |
|
|
build/dist/isle-*
|
|
build/dist/*.AppImage
|
|
build/dist/*.3dsx
|
|
build/dist/*.cia
|
|
build/dist/*.nro
|
|
build/dist/*.apk
|
|
build/dist/*.vpk
|
|
|
|
flatpak:
|
|
name: "Flatpak (${{ matrix.arch }})"
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- arch: x86_64
|
|
os: ubuntu-latest
|
|
|
|
- arch: aarch64
|
|
os: ubuntu-22.04-arm
|
|
|
|
container:
|
|
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.8
|
|
options: --privileged
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Build Flatpak
|
|
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
|
with:
|
|
bundle: org.legoisland.Isle.${{ matrix.arch }}.flatpak
|
|
manifest-path: packaging/linux/flatpak/org.legoisland.Isle.json
|
|
arch: ${{ matrix.arch }}
|
|
|
|
ncc:
|
|
name: 'C++'
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install LLVM and Clang
|
|
uses: KyleMayes/install-llvm-action@v1
|
|
with:
|
|
version: "16"
|
|
|
|
- name: Install python libraries
|
|
run: |
|
|
pip install -r tools/requirements.txt
|
|
|
|
- name: Run ncc
|
|
run: |
|
|
action_headers=$(find LEGO1/lego/legoomni/include/actions \
|
|
-name '*.h' -print0 | xargs -0 echo)
|
|
|
|
python3 tools/ncc/ncc.py \
|
|
--clang-lib ${{ env.LLVM_PATH }}/lib/libclang.so \
|
|
--recurse \
|
|
--style tools/ncc/ncc.style \
|
|
--skip tools/ncc/skip.yml \
|
|
--definition WINAPI FAR BOOL CALLBACK HWND__=HWND SDLCALL \
|
|
--include \
|
|
util \
|
|
LEGO1 \
|
|
LEGO1/omni/include \
|
|
LEGO1/lego/legoomni/include \
|
|
LEGO1/lego/sources \
|
|
--exclude \
|
|
LEGO1/omni/include/flic.h \
|
|
LEGO1/omni/src/video/flic.cpp \
|
|
$action_headers \
|
|
--path LEGO1/omni LEGO1/lego/legoomni
|
|
|
|
release:
|
|
name: 'Release'
|
|
if: ${{ github.event_name == 'push' && github.ref_name == 'master' }}
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build
|
|
- flatpak
|
|
steps:
|
|
- name: Download All Artifacts
|
|
uses: actions/download-artifact@main
|
|
with:
|
|
pattern: "*"
|
|
path: Release
|
|
merge-multiple: true
|
|
|
|
- name: Checkout uploadtool
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: 'probonopd/uploadtool'
|
|
path: 'uploadtool'
|
|
|
|
- name: Upload Continuous Release
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
./uploadtool/upload.sh Release/*
|