Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
52f3e5d
CI: add dart format as a standalone step, not a check
nmfisher Jul 14, 2026
ad52c3a
chore: format (CI)
github-actions[bot] Jul 14, 2026
46ad0ab
chore: track web test runner, COI proxy, and dart_test.yaml
nmfisher Jul 14, 2026
82420b0
chore: format (CI)
github-actions[bot] Jul 14, 2026
b6a614f
test: update tests to satisfy analyzer. These tests aren't run in CI …
nmfisher Jul 14, 2026
b0144be
chore: format (CI)
github-actions[bot] Jul 14, 2026
b1e084b
ci: gate dart analyze on errors only; exclude generated bindings
nmfisher Jul 14, 2026
fab6e80
chore: decouple from melos
nmfisher Jul 14, 2026
793e983
chore: reduce line length, .pubignore, imports, string interpolation
nmfisher Jul 14, 2026
37c2b45
release: publish 0.4.1 to pub.dev
nmfisher Jul 14, 2026
a19c4f2
chore: remove dependency_override for thermion_dart (this is only rel…
nmfisher Jul 14, 2026
0b073a4
chore: format (CI)
github-actions[bot] Jul 15, 2026
8eec549
feat: add Engine_destroyRenderer + RenderThread variant
nmfisher May 30, 2026
7c705f9
fix: free stb buffer after LinearImage decode
nmfisher Jul 14, 2026
0a21f7a
fix: add BLIT_SRC|BLIT_DST when decodeToTexture asks mipmaps
nmfisher Jul 14, 2026
5c9dd32
fix: pick readPixels type per-view from render-target format
nmfisher Jul 14, 2026
70ff5c3
fix: route loadKtx2 through the render thread on web
nmfisher Jul 14, 2026
02d25c9
fix: (web) disambiguate binding imports in web plugin
nmfisher Jul 14, 2026
c085b96
chore: format (CI)
github-actions[bot] Jul 15, 2026
06ad2ad
refactor: extract FrameScheduler into its own class
nmfisher Jul 15, 2026
7759158
chore: format (CI)
github-actions[bot] Jul 15, 2026
ad49f77
Merge pull request #176 from nmfisher/refactor/extract-frame-scheduler
nmfisher Jul 15, 2026
0345718
Add Flutter lifecycle listener (#152)
nmfisher Jul 15, 2026
cd6728f
CI: regenerate bindings before analyze; single-pusher pipeline (#177)
nmfisher Jul 15, 2026
ff45e54
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 15, 2026
9e6913d
fix: macOS lifecycle integration test
nmfisher Jul 15, 2026
b65fc57
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 15, 2026
23b85d8
chore: use perl rather than sed in material build script for cross-pl…
nmfisher Jul 15, 2026
5039648
test: start porting thermion_dart tests to web (Chrome/WASM).
nmfisher Jul 15, 2026
9702e56
test: port texture_tests to Chrome; add getFormat coverage
nmfisher Jun 3, 2026
91d53be
fix: (web) add UPLOADABLE default + GEN_MIPMAPPABLE for web texture u…
nmfisher Jul 15, 2026
86e0481
fix: (web) ensure rendering is properly suspended on web when calling…
nmfisher Jun 3, 2026
0909611
fix: add setTargetFramerate to FilamentApp.
nmfisher Jul 16, 2026
41a47f6
fix: pick readPixels type per-view from render-target format
nmfisher Jun 3, 2026
a11d740
fix: free FFI void callbacks
nmfisher Jul 16, 2026
0e1c045
fix: avoid future allocation for render frame tasks
nmfisher Jul 16, 2026
1bdbc6f
fix: stop polling idle render thread
nmfisher Jul 16, 2026
d0a255e
fix: drain render tasks on worker during shutdown
nmfisher Jul 16, 2026
b474837
fix: LinearImage ownership during texture uploads
nmfisher Jul 16, 2026
bad9509
test: disable unfinished texture projection tests
nmfisher Jul 16, 2026
cad789d
fix: suspend rendering when app is hidden
nmfisher Jul 16, 2026
4b2bd9b
ci: always regenerate Dart bindings
nmfisher Jul 16, 2026
5200310
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 16, 2026
626ff25
build: require SDK versions with build hooks
nmfisher Jul 16, 2026
bfa00b7
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 16, 2026
c3a675f
Android: migrate external texture to SurfaceProducer (fix transparenc…
frenradar Jul 16, 2026
ddf859c
fix: (flutter) avoid double-destroying resized textures (#184)
nmfisher Jul 19, 2026
527a9fa
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 19, 2026
4563f4e
refactor: (flutter) extract platform texture bindings (#182)
nmfisher Jul 20, 2026
0aaaca8
fix: (android) recover SurfaceProducer swapchains (#183)
nmfisher Jul 20, 2026
4430c6e
windows: fix VK_ERROR_DEVICE_LOST - give the D3D-interop blit its own…
nobandegani Jul 20, 2026
5ce9e55
chore: update web.version
github-actions[bot] Jul 20, 2026
db9cc4a
fix: (web) pin Emscripten toolchain (#186)
nmfisher Jul 28, 2026
fd7752f
chore: update web.version
github-actions[bot] Jul 28, 2026
20d0d7b
Statically link libc++ on Android (#185)
nmfisher Jul 28, 2026
33d14e7
chore: update web.version
github-actions[bot] Jul 28, 2026
e9849a3
CI: pin Flutter example toolchain & update Android compatibility (#187)
nmfisher Jul 28, 2026
042ef58
refactor: (darwin) move texture ownership into Dart (#189)
nmfisher Jul 29, 2026
916db64
refactor: (flutter) centralize texture descriptor lifecycle (#190)
nmfisher Jul 29, 2026
c17df74
refactor(flutter): extract native texture lifecycle
nmfisher Jul 29, 2026
5b86f83
chore: update web.version
github-actions[bot] Jul 29, 2026
ad1c28c
fix(flutter): harden platform texture teardown
nmfisher Jul 29, 2026
0fc70be
build(darwin): stop generating unused texture header
nmfisher Jul 29, 2026
00956ed
fix(android): restore SurfaceTexture rendering performance
nmfisher Jul 29, 2026
51ead1f
fix(flutter): harden render lifecycle transitions
nmfisher Jul 29, 2026
5323f80
chore: update web.version
github-actions[bot] Jul 29, 2026
df9beb7
ci: add temporary standalone libassimp build workflow (for fast itera…
nmfisher Jul 29, 2026
60d20c9
ci(standalone): extend libassimp workflow to all 6 platforms (ios/and…
nmfisher Jul 29, 2026
b04e5e7
fix: release viewer scene resources
nmfisher Jul 29, 2026
0d681d1
fix: (example) dispose quickstart viewer resources (#197)
nmfisher Jul 29, 2026
57191d5
fix: (ios) accept 0 as valid flutter texture ID on iOS#198
nmfisher Jul 30, 2026
f40cd80
ci: add one-off 'Publish Filament to R2' workflow (copy built artifac…
nmfisher Jul 30, 2026
63a61e8
fix: (darwin) share CVMetalTextureCache to stop per-texture IOSurface…
nmfisher Jul 30, 2026
8ee0eba
fix: (linux) ExternalImage deletion on Vulkan texture destroy (#201)
arthur-lfn Jul 31, 2026
f5b8856
chore: update web.version
github-actions[bot] Jul 31, 2026
d1b9681
chore: remove darwin IOSurface breakdown doc
nmfisher Jul 31, 2026
ef5ec5b
chore: update contributors
nmfisher Jul 31, 2026
71e58f6
chore: update quickstart example to demonstrate/check multiple viewer
nmfisher Jul 31, 2026
1252977
fix: (flutter) serialize initialize() to stop concurrent engine churn
nmfisher Jul 31, 2026
7e9d215
feat: (quickstart) allow adding/removing multiple viewers simultaneously
nmfisher Jul 31, 2026
d702e29
chore: update generated artifacts + format (CI)
github-actions[bot] Jul 31, 2026
99ea7b7
fix: correctly assign dummy UVs in Geometry (#203)
nmfisher Jul 31, 2026
054844d
feat: add releaseSourceData() to ThermionAsset (gh-179) (#204)
nmfisher Aug 4, 2026
c004c47
chore: update web.version
github-actions[bot] Aug 4, 2026
58ff1dd
fix: (web) link hook crashes when no code assets are built (#206)
nmfisher Aug 4, 2026
cea47a8
fix: (linux) (windows) serialize VkQueue calls on single-queue hardwa…
nmfisher Aug 5, 2026
044bbba
chore: update web.version
github-actions[bot] Aug 5, 2026
564c77a
refactor: make Filament engine ownership explicit (#207)
nmfisher Aug 5, 2026
904401d
chore: update web.version
github-actions[bot] Aug 5, 2026
1694e86
refactor: finish routing FilamentApp.instance → owning app (#209)
nmfisher Aug 5, 2026
b48c421
feat: (web) engine-per-viewer multi-viewer support (#205)
nmfisher Aug 5, 2026
bf07d10
chore: update web.version
github-actions[bot] Aug 5, 2026
971f369
chore: cap to 1 viewer on web
nmfisher Jul 31, 2026
796174d
chore: remove root CHANGELOG (now superseded by thermion_dart/CHANGEL…
nmfisher Aug 7, 2026
1ccbd22
chore: standardize on repo root README.md and CHANGELOG.md and update…
nmfisher Aug 7, 2026
683c82f
chore: update CHANGELOG.md
nmfisher Aug 7, 2026
e088cc9
chore: remove old package references from example app pubspec.yaml
nmfisher Aug 7, 2026
2671712
ci: add OIDC-based pub.dev release pipeline
nmfisher Aug 7, 2026
f6a96c2
chore(thermion_dart): make package publishable to pub.dev
nmfisher Aug 7, 2026
6d9c74f
chore(thermion_flutter): make package publishable to pub.dev
nmfisher Aug 7, 2026
410181e
chore: update generated artifacts + format (CI)
github-actions[bot] Aug 7, 2026
4daa639
fix(quickstart): remove duplicate _maxBatch field declaration
nmfisher Aug 7, 2026
97bb607
ci(publish): gate release on the full test suite + fix pub.dev versio…
nmfisher Aug 7, 2026
daf9680
docs: fix logo not rendering on pub.dev
nmfisher Aug 7, 2026
259d265
docs: switch README demo to YouTube; add headless render script
nmfisher Aug 7, 2026
e3e78ac
docs: remove dead/superseded links (dartpad, showcase, etc)
nmfisher Aug 7, 2026
e78591e
feat(cli_headless): add resolution/aspect presets to render_demo
nmfisher Aug 7, 2026
4ab58fd
docs: remove dead Showcase/Playground README links
nmfisher Aug 7, 2026
03a3876
fix: apply glTF animation on first update() instead of rest pose (#212)
nmfisher Aug 7, 2026
0e2a434
chore: update web.version
github-actions[bot] Aug 7, 2026
35764a1
fix: dispatch setGltfAnimationTime on the render thread (#213)
nmfisher Aug 7, 2026
f45013d
fix: correct procedural geometry and WebGL material lighting (#211)
nmfisher Aug 7, 2026
e4ec4d9
chore: update web.version
github-actions[bot] Aug 7, 2026
fe5ce41
feat: add various Dart examples + WASM gallery embedded in the docs (…
nmfisher Aug 8, 2026
4e696df
docs: update Astro docs + WASM gallery (#216)
nmfisher Aug 8, 2026
cba30e9
ci: deploy docs + gallery to one Cloudflare Pages project (#217)
nmfisher Aug 8, 2026
29b24f1
ci: only deploy the site on release tags, not every develop push (#218)
nmfisher Aug 8, 2026
35f027e
ci: use ubuntu-22.04 runner so the web download step works (#220)
nmfisher Aug 8, 2026
34f4516
ci: skip the native build when downloading web artifacts (#221)
nmfisher Aug 8, 2026
012d996
docs: stack gallery examples with lazy scroll-mount + loading overlay…
nmfisher Aug 8, 2026
d1c58f1
ci: gate pub.dev publish behind binding regen + add Create Release wo…
nmfisher Aug 8, 2026
050011e
chore: bump version to 0.5.0-pre.2
nmfisher Aug 8, 2026
697e37c
feat: add Filament build scripts targeting Linux arm64 (#223)
nmfisher Aug 8, 2026
e1201fd
build: bump pubspec er
nmfisher Aug 9, 2026
e696fa2
fix: build imageio/tinyexr with libc++ for single-ABI Filament Linux …
nmfisher Aug 9, 2026
a768b21
docs: add investigation brief for release failure (the-qxv6)
nmfisher Aug 9, 2026
c4e4a6d
docs: add implementation task for libc++ rebuild of imageio/tinyexr (…
nmfisher Aug 9, 2026
440a756
build: bump pubspec to 0.5.0-pre.4
nmfisher Aug 9, 2026
711ef3d
CI: implement release/publish on merge to master (#225)
nmfisher Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 56 additions & 0 deletions .github/workflows/build-filament.yml
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,62 @@ jobs:
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: auto

build-linux-arm64:
name: Build Linux (arm64)
# GitHub-hosted arm64 runner — build_linux.sh detects the host arch and
# produces filament-<version>-linux-arm64-{release,debug}.zip.
runs-on: ubuntu-24.04-arm
needs: setup
if: contains(needs.setup.outputs.matrix, 'linux')
env:
FILAMENT_VERSION: ${{ needs.setup.outputs.filament_version }}
FILAMENT_REPO: ${{ needs.setup.outputs.filament_repo }}
steps:
- name: Checkout thermion
uses: actions/checkout@v4

- name: Checkout Filament
run: git clone --depth 1 --branch ${{ env.FILAMENT_VERSION }} ${{ env.FILAMENT_REPO }} filament

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang libc++-dev libc++abi-dev ninja-build libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxxf86vm-dev

- name: Build Filament
run: |
mkdir -p output
chmod +x scripts/build_linux.sh
scripts/build_linux.sh filament ${{ env.FILAMENT_VERSION }} output --clean

- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: filament-linux-arm64-release
path: output/filament-${{ env.FILAMENT_VERSION }}-linux-arm64-release.zip
retention-days: 7

- name: Upload debug artifact
uses: actions/upload-artifact@v4
with:
name: filament-linux-arm64-debug
path: output/filament-${{ env.FILAMENT_VERSION }}-linux-arm64-debug.zip
retention-days: 7

- name: Upload to R2
if: inputs.upload_to_r2
run: |
for variant in release debug; do
aws s3 cp \
"output/filament-${{ env.FILAMENT_VERSION }}-linux-arm64-${variant}.zip" \
"s3://${{ env.R2_BUCKET_NAME }}/filament-${{ env.FILAMENT_VERSION }}-linux-arm64-${variant}.zip" \
--endpoint-url "${{ env.R2_ENDPOINT }}"
done
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: auto

build-windows:
name: Build Windows
runs-on: windows-2022
Expand Down
222 changes: 222 additions & 0 deletions .github/workflows/build-libassimp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
name: Build libassimp (standalone)

# Temporary workflow to iterate on the libassimp build (per-platform) WITHOUT
# waiting for the full ~40min Filament build. It builds ONLY libassimp from the
# third_party/libassimp/tnt overlay against the Filament tag in filament.version,
# mirroring the exact libassimp cmake invocation used by each build_*.sh /
# build_windows.bat (including the zlib include-path fix).
#
# Safe to delete once the libassimp build is green in the real "Build Filament"
# workflow on every platform.

on:
workflow_dispatch:
inputs:
filament_version:
description: 'Filament tag (overrides filament.version)'
required: false
type: string

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
setup:
runs-on: ubuntu-24.04
outputs:
version: ${{ steps.read.outputs.version }}
repo: ${{ steps.read.outputs.repo }}
steps:
- uses: actions/checkout@v4
- name: Read Filament version
id: read
run: |
read -r REPO VERSION < filament.version
[ -n "${{ inputs.filament_version }}" ] && VERSION="${{ inputs.filament_version }}"
echo "repo=$REPO" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Building libassimp against Filament repo=$REPO ref=$VERSION"

build:
needs: setup
strategy:
fail-fast: false
matrix:
include:
- platform: windows
runner: windows-2022
- platform: linux
runner: ubuntu-24.04
- platform: macos
runner: macos-14
- platform: ios
runner: macos-14
- platform: android
runner: ubuntu-24.04
- platform: web
runner: ubuntu-24.04
runs-on: ${{ matrix.runner }}
env:
FILAMENT_VERSION: ${{ needs.setup.outputs.version }}
FILAMENT_REPO: ${{ needs.setup.outputs.repo }}
steps:
- name: Checkout thermion
uses: actions/checkout@v4

- name: Checkout Filament
shell: bash
run: git clone --depth 1 --branch "$FILAMENT_VERSION" "$FILAMENT_REPO" filament

- name: Patch libassimp tnt overlay (if the patch script exists on this branch)
shell: bash
run: |
if [ -f scripts/patch_libassimp_tnt.py ]; then
python3 scripts/patch_libassimp_tnt.py "$GITHUB_WORKSPACE/filament"
else
echo "patch_libassimp_tnt.py not present on this branch — building the unpatched tnt overlay (still exercises the zlib include path)."
fi

- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v2
with:
cmake-version: '3.30.0'

- name: Setup Ninja (non-Windows)
if: matrix.platform != 'windows'
uses: seanmiddleditch/gha-setup-ninja@master

- name: Install deps (Linux runners)
if: matrix.platform == 'linux' || matrix.platform == 'android' || matrix.platform == 'web'
run: sudo apt-get update && sudo apt-get install -y ninja-build

- name: Setup Android NDK
if: matrix.platform == 'android'
uses: nttld/setup-ndk@v1
id: ndk
with:
ndk-version: r27c

- name: Setup Emscripten
if: matrix.platform == 'web'
uses: mymindstorm/setup-emsdk@v14
with:
version: '6.0.4'

# ---- Windows: MSVC, mirrors build_windows.bat libassimp cmake ----
- name: Build libassimp (Windows)
if: matrix.platform == 'windows'
shell: cmd
run: |
mkdir filament\out\assimp
cd filament\out\assimp
cmake -G "Visual Studio 17 2022" -T v142 ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_CXX_STANDARD=17 ^
-DCMAKE_C_FLAGS=/I..\..\third_party\libz ^
-DCMAKE_CXX_FLAGS=/I..\..\third_party\libz ^
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF ^
-DASSIMP_BUILD_TESTS=OFF ^
-DASSIMP_BUILD_SAMPLES=OFF ^
-DASSIMP_WARNINGS_AS_ERRORS=OFF ^
..\..\third_party\libassimp\tnt
cmake --build . --config Release

# ---- Linux / macOS: Ninja, mirrors build_linux.sh libassimp cmake ----
- name: Build libassimp (Linux/macOS)
if: matrix.platform == 'linux' || matrix.platform == 'macos'
shell: bash
run: |
mkdir -p filament/out/assimp
cd filament/out/assimp
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \
-DCMAKE_C_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DCMAKE_CXX_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF \
-DASSIMP_BUILD_TESTS=OFF \
-DASSIMP_BUILD_SAMPLES=OFF \
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
"$GITHUB_WORKSPACE/filament/third_party/libassimp/tnt"
cmake --build .

# ---- iOS: Ninja + iphoneos sysroot, mirrors build_ios.sh libassimp cmake ----
- name: Build libassimp (iOS)
if: matrix.platform == 'ios'
shell: bash
run: |
mkdir -p filament/out/assimp-ios
cd filament/out/assimp-ios
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_OSX_SYSROOT=iphoneos \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DIOS=1 \
-DCMAKE_C_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DCMAKE_CXX_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF \
-DASSIMP_BUILD_TESTS=OFF \
-DASSIMP_BUILD_SAMPLES=OFF \
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
"$GITHUB_WORKSPACE/filament/third_party/libassimp/tnt"
cmake --build .

# ---- Android: Ninja + NDK toolchain (arm64-v8a), mirrors build_android.sh ----
- name: Build libassimp (Android)
if: matrix.platform == 'android'
shell: bash
env:
ANDROID_NDK_HOME: ${{ steps.ndk.outputs.ndk-path }}
run: |
mkdir -p filament/out/assimp-android
cd filament/out/assimp-android
cmake -G Ninja \
-DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-21 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_C_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DCMAKE_CXX_FLAGS="-I$GITHUB_WORKSPACE/filament/third_party/libz" \
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF \
-DASSIMP_BUILD_TESTS=OFF \
-DASSIMP_BUILD_SAMPLES=OFF \
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
"$GITHUB_WORKSPACE/filament/third_party/libassimp/tnt"
cmake --build .

# ---- Web: Ninja + Emscripten, mirrors build_web.sh libassimp cmake ----
- name: Build libassimp (Web)
if: matrix.platform == 'web'
shell: bash
run: |
mkdir -p filament/out/assimp-web
cd filament/out/assimp-web
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_TOOLCHAIN_FILE="$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" \
-DCMAKE_C_FLAGS="-pthread -I$GITHUB_WORKSPACE/filament/third_party/libz -matomics -mbulk-memory" \
-DCMAKE_CXX_FLAGS="-pthread -I$GITHUB_WORKSPACE/filament/third_party/libz -matomics -mbulk-memory" \
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF \
-DASSIMP_BUILD_TESTS=OFF \
-DASSIMP_BUILD_SAMPLES=OFF \
-DASSIMP_WARNINGS_AS_ERRORS=OFF \
"$GITHUB_WORKSPACE/filament/third_party/libassimp/tnt"
cmake --build .

- name: Locate built libassimp
if: always()
shell: bash
run: |
echo "=== libassimp artifacts ==="
find filament/out -iname '*assimp*' -type f 2>/dev/null || true

- name: Upload libassimp
if: always()
uses: actions/upload-artifact@v4
with:
name: libassimp-${{ matrix.platform }}
path: |
filament/out/**/assimp.lib
filament/out/**/libassimp.a
if-no-files-found: warn
retention-days: 3
89 changes: 89 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Deploy site

# Builds the documentation site (Astro) and the WASM examples gallery, stages the
# gallery under /gallery/ in the docs output, and deploys both to a single
# Cloudflare Pages project (thermion-docs → thermion.dev).
#
# The whole site is already cross-origin-isolated via docs/public/_headers
# (COOP same-origin + COEP credentialless on /*), so the gallery's
# SharedArrayBuffer (multithreaded WASM) works without any path-scoped headers.
#
# Fires on:
# - a release tag push v* (same event publish-pub-dev.yml uses) — the site
# deploys on a Thermion release, NOT on every develop commit
# - manual dispatch (re-deploy without cutting a release)
#
# Requires repo secrets CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID.

on:
push:
tags: ['v[0-9]+.[0-9]+.[0-9]+*']
workflow_dispatch:

permissions:
contents: read

concurrency:
group: deploy-site-${{ github.ref }}
cancel-in-progress: true

jobs:
deploy:
name: Build & deploy site
# Any standard runner works: the web-artifact download step runs
# `dart run thermion_dart:download_web` with `skip_native_build` set (see
# examples/dart/web_gallery/pubspec.yaml + thermion_dart/hook/build.dart), so
# it does no host C++ compile and needs no C++ toolchain.
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4

# --- documentation (Astro) ---
- uses: pnpm/action-setup@v4
with:
package_json_file: docs/package.json
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
cache-dependency-path: docs/pnpm-lock.yaml
- name: Build docs
working-directory: docs
run: |
pnpm install --frozen-lockfile
pnpm build

# --- examples gallery (WASM) ---
- uses: dart-lang/setup-dart@v1
- name: Resolve gallery dependencies
run: |
(cd thermion_dart && dart pub get)
(cd examples/dart/examples_lib && dart pub get)
(cd examples/dart/web_gallery && dart pub get)
- name: Download thermion web artifacts (thermion_dart.js/wasm)
# Run from the gallery so thermion_dart's build hook picks up the
# `skip_native_build` userDefine (declared under hooks.user_defines in
# examples/dart/web_gallery/pubspec.yaml). That makes the hook no-op its
# host C++ build: download_web.dart only fetches prebuilt artifacts over
# HTTP, so no native compile — and no C++ toolchain on the runner — is
# needed. (The later `dart compile wasm` step is unaffected: the hook's
# buildCodeAssets branch runs before the skip and still downloads for web.)
working-directory: examples/dart/web_gallery
run: dart run thermion_dart:download_web -o web
- name: Copy shared assets
run: cp -r examples/assets examples/dart/web_gallery/web/assets
- name: Compile gallery to WASM
working-directory: examples/dart/web_gallery
run: dart compile wasm web/main.dart -o web/main.wasm
- name: Stage gallery under docs output
run: |
mkdir -p docs/dist/gallery
cp -r examples/dart/web_gallery/web/. docs/dist/gallery/

# --- deploy a single Cloudflare Pages project ---
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy docs/dist --project-name=thermion-docs
Loading
Loading