Skip to content

Load Dark Cloud's models from glTF, and add Enhanced cloth #405

Load Dark Cloud's models from glTF, and add Enhanced cloth

Load Dark Cloud's models from glTF, and add Enhanced cloth #405

Workflow file for this run

# The native PC port (docs/PC.md): builds PLATFORM=PC with clang 22 and runs
# its tests, the headless smoke runs of darkcloud among them, on Mesa's
# lavapipe software Vulkan driver. Every library comes from Ubuntu's packages.
# No game data is needed: the smoke tests build their own fixtures.
#
# The Windows job (docs/WINDOWS.md) builds with tools/windows' scripts and runs
# the cases that need no Vulkan device. The Flatpak job (docs/FLATPAK.md)
# packages the Linux build in Flathub's freedesktop 26.08 image. Its manifest
# uses the commit under test as a git source, and its smoke run checks that the
# packaged binary reaches its data check. macOS and the Switch have their own
# workflows (macos.yml, switch.yml).
name: PC builds
on:
push:
branches: [master]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
build:
name: Build and test (Linux x64)
runs-on: ubuntu-26.04
steps:
- uses: actions/checkout@v7
with:
submodules: true
# The Flatpak configures without network, so its manifest has to stage every file Kazarov's CMake
# downloads; this fails on the pull request that pins a Kazarov with one the manifest lacks.
- name: Check the Flatpak stages Kazarov's downloads
run: python3 scripts/port/flatpak_sources.py
- name: Check the vanilla item IDs follow port/include/game/itemdata.hpp
run: python3 scripts/port/item_ids.py --check
- name: Install the toolchain and libraries
run: |
sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu#https://archive.ubuntu.com/ubuntu#g' /etc/apt/apt-mirrors.txt
sudo apt-get update
sudo apt-get install -y clang-22 lld-22 llvm-22 libclang1-22 python3-clang-22 cmake ninja-build glslang-tools \
mesa-vulkan-drivers vulkan-validationlayers libsdl3-dev libvulkan-dev libgtest-dev nlohmann-json3-dev
# ld.lld and llvm-readobj under their plain names.
echo "/usr/lib/llvm-22/bin" >> "$GITHUB_PATH"
# dcdata links Kazarov's Rust bridge; FFmpeg uses Kazarov's pinned build configuration and cxxbridge-cmd is a
# prebuilt release asset.
rustup toolchain install 1.99.0 --profile minimal
rustup default 1.99.0
tools/ci/prebuilt-deps.sh linux-x64
# lavapipe takes seconds to start each renderer, and some of Kazarov's GfxGpu cases start several.
- name: Configure
run: |
cmake -S . -B port/build/pc -G Ninja -DPLATFORM=PC -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_COMPILER=clang++-22 -DDC_TEST_TIMEOUT=60 -DDC_GPU_TEST_TIMEOUT=300
- name: Build
run: cmake --build port/build/pc
# darkcloud is PIE and its arenas lie above 4 GiB (a debug build checks), so a pointer the game
# truncates to 32 bits faults here. The real-data cases skip without DC_DATA. lavapipe filters alpha
# across a texel edge differently from the GPUs GEqualFiltersAroundQuantizedReferences was written
# against, and its depth bounds test disagrees with the opt-in KZ_DEPTH_PLANES one-pass path.
- name: Test
working-directory: port/build/pc
run: |
llvm-readobj --file-headers darkcloud | grep -q 'Type: SharedObject'
env -u DC_DATA ctest --output-on-failure -j4 \
-E 'GEqualFiltersAroundQuantizedReferences|^GfxGpuDepthCopy[.]DepthPlanesOnACopiedDepthMatchPlaneByPlane$'
- name: Audit pointer truncations
run: /usr/bin/python3 scripts/port/truncations.py --build port/build/pc --check
windows:
name: Build and test (Windows x64)
runs-on: windows-2025
defaults:
run:
shell: pwsh
steps:
- uses: actions/checkout@v7
with:
submodules: true
# The runner has no GPU and may have no Vulkan loader; the tests need the loader to start.
- name: Install the toolchain and libraries
run: |
./tools/windows/acquire.ps1 -Root $env:RUNNER_TEMP -VulkanLoader
"VULKAN_RUNTIME=$env:RUNNER_TEMP/deps/vulkan-runtime/VulkanRT-X64-1.4.363.0-Components/x64" >> $env:GITHUB_ENV
- name: Configure
run: |
./tools/windows/configure.ps1 -Root $env:RUNNER_TEMP -BuildDirectory $env:GITHUB_WORKSPACE/port/build/windows -Tests `
-VulkanLibrary $env:VULKAN_RUNTIME/vulkan-1.dll
# Beside the executables, the downloaded loader is found before any in System32.
- name: Build
run: |
./tools/windows/build.ps1 -Root $env:RUNNER_TEMP -BuildDirectory $env:GITHUB_WORKSPACE/port/build/windows -Tests
if ($LASTEXITCODE) { exit $LASTEXITCODE }
Copy-Item $env:VULKAN_RUNTIME/vulkan-1.dll port/build/windows
# The renderer's cases run on Linux and macOS: this runner has a Vulkan loader but no driver, so the cases that
# need a device, labeled gpu (port/src/tests/CMakeLists.txt), cannot start here.
- name: Test
run: ctest --test-dir port/build/windows --output-on-failure -j4 -LE gpu
- name: Package the Windows build
run: |
$files = @('darkcloud.exe', 'dcdata.exe', 'libc++.dll', 'libunwind.dll', 'libwinpthread-1.dll', 'SDL3.dll', 'vulkan-1.dll', 'lang', 'glyphs')
$files += Get-ChildItem 'port/build/windows' -Filter '*.dll' | Where-Object Name -Match '^(avcodec|avformat|avutil|swresample|swscale)-' | ForEach-Object Name
$paths = $files | ForEach-Object { Join-Path 'port/build/windows' $_ }
Compress-Archive -LiteralPath $paths -DestinationPath chronicle-windows-x64.zip
- name: Upload the Windows build
uses: actions/upload-artifact@v7
with:
name: chronicle-windows-x64
path: chronicle-windows-x64.zip
if-no-files-found: error
flatpak:
name: Build the Flatpak (Linux x86_64)
runs-on: ubuntu-26.04
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:freedesktop-26.08
options: --privileged
env:
MANIFEST: port/flatpak/ci.yml
steps:
- uses: actions/checkout@v7
with:
submodules: true
- name: Point the manifest at this commit
run: |
# flatpak-builder clones the workspace, which belongs to another user in the container.
git config --global --add safe.directory "$GITHUB_WORKSPACE"
awk -v commit="$GITHUB_SHA" '
/# chronicle-source:/ {
print
print " - type: git"
print " path: ../.."
print " commit: " commit
skip = 1
next
}
/# chronicle-source-end/ { skip = 0 }
!skip { print }
' port/flatpak/org.themoonpeople.Chronicle.yml > "$MANIFEST"
sed -n '/name: chronicle$/,$p' "$MANIFEST"
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
manifest-path: ${{ env.MANIFEST }}
bundle: chronicle.flatpak
artifact-name: chronicle-x86_64.flatpak
cache-key: flatpak-builder-${{ hashFiles('port/flatpak/org.themoonpeople.Chronicle.yml') }}
- name: Start darkcloud without data
run: |
set +e
flatpak build --env=XDG_DATA_HOME=/tmp/xdg flatpak_app darkcloud --headless --frames 1 > run.txt 2>&1
status=$?
cat run.txt
echo "darkcloud exited $status"
[ "$status" -eq 3 ] && grep -q 'no game data: /tmp/xdg/chronicle/data' run.txt