Commit Graph
336 Commits
Author SHA1 Message Date
Mike-Solar 36ca413a84 ci: restore macOS and move all runners back to WarpBuild
CI matrix: warp-ubuntu-latest-x64-8x / warp-macos-15-arm64-6x /
warp-windows-latest-x64-16x (the macOS steps were still in place, only
the matrix entry was missing). CD: macOS DMG job re-enabled on the warp
Apple Silicon runner; linux and release jobs back on warp-ubuntu;
Windows NSIS stays disabled until the engine links there.
2026-08-16 18:21:10 +08:00
Mike-Solar 8334894984 ci(cd): packaging verified end-to-end on macOS
- every job builds -p oakengine first (the dylib is a build-dep-only
  artifact otherwise and cli/worker link-search the profile dir)
- 512px icon (tauri-icns only maps 512@1x/1024@2x); dylib embedding
  derives the path from the binary's otool reference; fpm invoked from
  the gem bin dir; GITHUB_ENV blocks batched (SC2129); actionlint.yaml
  whitelists the warp runner labels
- Windows job disabled with a reference block until the engine links
  there
- real run: Oak-macOS-arm64.dmg produced, app launches from the volume
  (known gap recorded: the dmg still dynamically links Homebrew codec
  libs; not self-contained yet)
2026-08-16 18:05:03 +08:00
Mike-Solar a209f63d52 ci: rewrite CI/CD for the Rust workspace
- CI: push/PR to main only; ubuntu/macos-15-arm64/windows-ucrt64 matrix;
  deps via tooling/install-deps.sh; project FFmpeg built once and cached
  under .cache/ffmpeg keyed on the build script; rust-cache for target/
- CD: tag v* packages with cargo-packager — deb/AppImage/pacman on
  Linux (rpm converted from the deb with fpm), NSIS on Windows, and a
  DMG (Apple Silicon) whose .app embeds liboakengine.dylib via
  install_name_tool; tag pushes publish a GitHub release with all
  packages attached
- root Cargo.toml gains [package.metadata.packager]; the app icon is
  generated from Oak_Icon.svg with rsvg-convert in CI
- root build.rs now also links the app on Linux (link-search + rpath +
  --export-dynamic); Windows remains blocked on the DLL undefined-symbol
  problem (oakcore_* host imports), documented in build.rs
2026-08-11 20:04:44 +08:00
Mike-Solar d77348ad9f refactor(node): de-Qt oaknode and wrap it in a pure C ABI
- copy engine/node (188 files) to src/node/src, de-Qt in waves:
  core infra (Node/Param/Value/Variant/mathtypes), project/serializer,
  block/output, color, effect leaves, generator, gizmo/plugins
- strip QObject/signals/slots: notifications move to the facade's
  oakengine_event channel, ownership becomes explicit (unique_ptr,
  add_keyframe/add_gizmo), sender() replaced by current_gizmo
- QVariant replaced by olive::Variant, Qt math types by POD mathtypes,
  QXmlStreamReader/Writer by oakcommon's expat-based classes
- sink VideoParams/SubtitleParams/LoopMode/ColorTransform to oakcommon
  (M3.5); polygon/text rasterization behind backend hooks
- pure C ABI in include/node + src/node/c_api (oaknode_ prefix,
  OAKNODE_E_* codes, undoable variants take OakUndoCommand out-params)
- fix Project::clear() root_ reset + disconnect assert, Sequence
  TrackList leak
- 96 gtest cases green in standalone build (build-oaknode)
- docs: signal/slot handling strategy + M3 implementation status
2026-08-05 23:55:54 +08:00
Mike-Solar 40eea8d97c ci: use smaller runners 2026-08-05 00:59:09 +08:00
Mike-Solar 712badbaa7 build/ci: green builds and tests on all three platforms
Compiler hygiene (all platforms):
- Silence warnings across the tree: missing override, -Wreorder ctor
  init, -Wshadow, -Wsign-compare, missing switch cases, unused
  functions/captures, Qt 6.11 deprecations (QMouseEvent/QDropEvent
  accessors, qAsConst, Q_FOREACH over non-shared containers,
  AA_UseHighDpiPixmaps) and the .bak/ backup tree removal.
- Fix regressions from the cleanup: missing clip decls in
  capi/timeline.cpp, plugin.cpp rename fallout, panel setFocus
  ambiguity, QGraphicsItem::pos vs event->position(), duplicate
  k_push_button case, boolean test variable.

Windows:
- Qt portability: CommandLineParser is_set/add_option, QTimeZone
  systemTimeZone (QTimeZone::LocalTime is 6.11-only), k_progress_* enum.
- Linking: stop adding oakengine to OLIVE_LIBRARIES (import lib plus
  oakengine-obj caused multiple definitions); add OAKENGINE_STATIC so
  internal consumers no longer reference __imp_* stubs.
- oakengine.ver: export olive::Renderer typeinfo so liboakgl.so can be
  dlopened (Linux), DynamicRenderer no longer dlcloses backend libraries
  (crash in RenderManager's dtor calling into unmapped memory).
- OTIO runtime: copy DLLs next to every binary on Windows instead of
  relying on PATH (0xc0000135 in gtest discovery).
- Headless GL: the runner only has GDI OpenGL 1.1, killing every render
  worker. Deploy Mesa llvmpipe as opengl32sw.dll (Qt's software-GL
  channel) with QT_OPENGL=software, and let QT_OPENGL override the
  AA_UseDesktopOpenGL default. ExportTask fails fast after 8 consecutive
  undelivered frames instead of segfaulting or grinding forever;
  FFmpegEncoder::write_frame tolerates null frames.
- Tests: GetTempPathA+PID temp dirs, GetLongPathNameA for 8.3 names,
  forward-slash normalization when comparing project filenames.

Linux:
- Install libshaderc-dev so oakvulkan compiles GLSL (Vulkan tests).
- Accept UNORM floor-or-round (63/64) in the blit ping-pong test.
- Skip MainWindow construction test on the offscreen QPA (cannot paint
  QOpenGLWidget).

Also: oak_cli_transcode gets a 300s ctest timeout, worker logs GL
context version and LoadGraph/render_frame stages, and
docs/plans/eliminate-event-bridge-issues.md (English translation).
2026-08-04 21:34:31 +08:00
Mike-Solar 248b1873e8 ci: enable Vulkan tests on Linux via Mesa lavapipe
Install libvulkan-dev + mesa-vulkan-drivers (lavapipe = software Vulkan,
no GPU needed) and stop passing CMAKE_DISABLE_FIND_PACKAGE_Vulkan so the
Vulkan backend and its tests are built and exercised.
2026-08-03 14:01:03 +08:00
Mike-Solar a304cc0759 ci: install Mesa DRI drivers for llvmpipe GL in headless Linux tests
libgl1-mesa-dev only ships headers; the software rasterizer that makes
OpenGL work under Xvfb (no GPU required) lives in libgl1-mesa-dri.
2026-08-03 13:56:16 +08:00
Mike-Solar 1af7ab7838 ci: engine tests use dllexport-consistent macros on Windows; run Linux tests under Xvfb
- make_oakengine_gtest embeds oakengine-obj; test code must see
  OAKENGINE_API as dllexport too (OAKENGINE_BUILD), otherwise MinGW
  resolves nothing against __imp_* stubs
- the render worker intentionally drops QT_QPA_PLATFORM=offscreen and
  needs a real display for its GL context; run the Linux ctest and the
  filtered gtest steps under xvfb-run
2026-08-03 13:32:18 +08:00
Mike-Solar 631f9e5bd1 ci: link render backend plugins against oakengine-obj on Windows; switch runners
- liboakengine.dll does not export engine-internal C++ symbols
  (olive::Renderer, FileFunctions, VideoParams, Texture), so oakgl.dll
  failed to link on Windows. Embed oakengine-obj instead (same pattern
  as the engine tests); MinGW's name-based RTTI keeps cross-DLL casts
  working.
- ci.yml: move to warp runners
2026-08-03 13:13:42 +08:00
Mike-Solar d57c812fa6 ci: fix three platform-specific build failures
- Linux: Qt6 metatype static_assert requires complete types; declare
  OakEngineBlock with Q_DECLARE_OPAQUE_POINTER in the public header
  (outside extern "C")
- Windows: gtest discovery runs the freshly linked test exe at build
  time and it cannot find the DLLs (0xc0000135); copy oakcore/oakengine/
  ffmpeg_bridge DLLs next to the test binaries on WIN32
- macOS: Imath header mixing between otio-install's stale bundled Imath
  and Homebrew's Imath broke ImathBox.h (V2h undeclared); bump the OTIO
  cache to v2 and drop bundled Imath headers so the system one is the
  only set in play
2026-08-02 16:24:16 +08:00
Mike-Solar 5f8232a594 ci: fix macOS/Linux configure (oakgl) and Windows MSYS2 git
- OAK_ENABLE_DYNAMIC_RENDER_BACKEND now defaults ON; it was previously
  undefined (OFF) unless passed, so CI configure failed on the
  unconditional oakgl target references in app/worker/tests
- add git to the MSYS2 package list in ci.yml and cd.yml; the OTIO
  build step runs git clone in the msys2 shell, where git is not
  installed by default
2026-08-02 15:32:07 +08:00
Mike-Solar 66d761b4b7 R8: finish app/ pure C ABI migration (P3-P9) and make OTIO required
- app/ no longer includes engine C++ headers nor holds engine C++ types:
  engine access goes through the oakengine C ABI plus C++ wrappers
  (oakutil/oaknode.h, oakutil/oakvideo.h) and app-local mirror types
  (tooltypes, trackreferencehandle, timelinecommonapp, keyframetypes,
  subtitleapp, serializedlayoutinfoapp, nodevaluehandle, sliderdisplaytypeapp)
- engine: new C ABI functions for block/track/clip/transition navigation
  and predicates, links, caches, waveform/playback, disk folder,
  sequence_track_list, node_free, footage_is_valid, block_get_track,
  get_brush; loadotio/saveotio ported to the current engine API
- OTIO is now a required dependency: CI and CD build it on every
  platform, FindOpenTimelineIO fixed for OTIO 0.16/0.19 (the old deps
  include requirement silently disabled OTIO everywhere), runtime
  libraries are bundled into packages and copied next to macOS binaries
  (oak_copy_otio_runtime)
- fix ProjectViewModel drag&drop mime read/write size mismatch (segfault)
- unify color label naming (k_olive -> "Oak") in the app-side mirror
- docs: OTIO required, FFmpeg minimum corrected to 6.0 (en/zh)
- gtest suite: 1925 passed, 0 failed
2026-07-31 22:46:52 +08:00
Mike-Solar ca68005fc2 ci: switch to GitHub-hosted runners and add daily cache-warming build
- Runners: ubuntu-24.04, macos-15, windows-latest (free tier) instead
  of WarpBuild 8x/12x instances
- openfx-misc parallelism adapts to nproc (GitHub runners have fewer
  vCPUs than the WarpBuild instances)
- Schedule a daily 03:17 UTC run so ccache entries never hit GitHub's
  7-day cache expiry and system dependencies stay current
2026-07-18 14:29:14 +08:00
Mike-Solar 4eb0ef6fc6 change: remove dymatic backend. 2026-07-18 14:20:35 +08:00
Mike-Solar 7206ae8c9f ci: switch all caches to actions/cache (drop WarpBuilds/cache)
WarpBuild's cache service is billed; GitHub's cache is free (10 GB
repo limit with LRU eviction, ample for ccache entries). All three
cache sites — ccache for the matrix and dynamic-backend jobs, plus the
macOS OpenTimelineIO build — now use actions/cache@v4, which also
removes the Windows-specific fallback step.
2026-07-18 14:05:33 +08:00
Mike-Solar f6fc12bb9d ci: use actions/cache for ccache on Windows runners
WarpBuilds/cache does not support Windows; keep it for Linux/macOS and
restore the same keys from GitHub's cache service on Windows instead.
2026-07-18 14:03:58 +08:00
Mike-Solar 988e0e5b44 ci: fix ccache dir path — runner.temp is not a valid expression context
Point CCACHE_DIR and the cache action at a fixed workspace directory
instead; checkout cleans untracked files before the restore, so the
ordering is safe.
2026-07-18 14:02:42 +08:00
Mike-Solar bfce4d916a ci: add ccache compile caching via WarpBuilds/cache, shrink runners to 8x
- Restore ccache with WarpBuilds/cache@v1 on all three OS and the
  dynamic-backend job (per-OS keys with branch fallback), and wire it
  up through CMAKE_C/CXX_COMPILER_LAUNCHER; builds print ccache -s so
  hit rates are visible in CI logs
- Cache the macOS OpenTimelineIO build (keyed on v0.16.0) and skip the
  rebuild on cache hit
- Install ccache via apt/brew/MSYS2 as needed; CCACHE_MAXSIZE=1G
- Runner sizes 16x/32x -> 8x (macOS 12x kept); openfx-misc make -j8 to
  match
2026-07-18 13:57:15 +08:00
Mike-Solar 847abbfd5c ci: Update CI/CD to use 32x runner for Windows. 2026-07-13 14:39:30 +08:00
Mike-Solar 83424e3c79 fix Linux outdated package name 2026-07-13 10:19:30 +08:00
Mike-Solar 225f8505c2 feat(render): dynamic OpenGL/Vulkan backend split and backend-neutral viewer
- Extract libolive-rendercore static library to minimize backend link boundary.
- Add DynamicRenderer adapter with C ABI (oakgl/oakvulkan shared libs).
- Make OAK_ENABLE_DYNAMIC_RENDER_BACKEND default ON with OpenGL fallback.
- Implement VulkanRenderer prototype (textures, shaders, UBO blit, readback).
- Add backend-neutral viewer readback path (offscreen -> QImage -> QPainter).
- Refactor PluginRenderer to be renderer-agnostic; OFX plugins fall back to CPU
  path on non-OpenGL backends while preserving OpenGL render path.
- Add Renderer::AttachOutputTexture/DetachOutputTexture and C ABI forwards.
- Update docs/zh/render-backend-dynamic-plan.md for Phase 3/4/5.
2026-07-13 10:19:29 +08:00
Mike-Solar 7a3ac3186a ci: cache MSYS2 packages in Windows builds 2026-06-03 20:06:56 +08:00
Mike-Solar 34ed808d42 change: Change CI OpenFX -j 2026-06-03 19:49:01 +08:00
Mike-Solar 6c9d53d01b fix(cd): fix AppStream validation, update runners to Warp, verify bundled libs 2026-06-03 19:43:34 +08:00
Mike-Solar 2181669825 Add libavfilter-dev to CI/CD dependencies 2026-05-29 00:54:46 +08:00
Mike-Solar a3724d3ec9 Update CI/CD to use Ubuntu 24.04 and distro FFmpeg 6.x 2026-05-29 00:50:02 +08:00
Mike-Solar 4802b897fa fix Ubuntu and Windows CI 2026-05-28 22:29:37 +08:00
Mike-Solar 9cae5d9c5f fix Ubuntu and Windows CI 2026-05-28 21:43:33 +08:00
Mike-Solar 295c5eaa24 fix: Use makefile to compile OpenFX-Misc 2026-05-21 17:46:08 +08:00
Mike-Solar 0984756c19 fix: Compile v8.1.1 instead of latest ffmpeg for Ubuntu, remove override for MainWindow::nativeEvent, and change Windows packages to UCRT. 2026-05-21 17:40:24 +08:00
Mike-Solar 444a8e5287 fix: Compile latest ffmpeg for Ubuntu, install fmt for Windows. 2026-05-21 17:26:37 +08:00
Mike-Solar 393a9eda63 docs: add build guide and CI. 2026-05-21 16:50:17 +08:00
Mike-Solar eb79be87a4 add smoke test 2026-04-12 01:26:41 +08:00
Mike-Solar 843b8762f6 fix audio bug 2026-04-12 01:08:22 +08:00
Mike-Solar e37972b227 Try to fix plugin issue 2026-01-05 21:31:35 +08:00
Mike-Solar eea983b3a2 Fix CI 2026-01-05 13:13:41 +08:00
Mike-Solar 02b58bde8e Fix CI 2026-01-05 12:16:06 +08:00
Mike-Solar 632afa9ce8 Fix CI 2026-01-05 12:14:08 +08:00
Mike-Solar 21d5ed5f59 完善测试 2026-01-05 04:02:05 +08:00
Mike-Solar 4b97a66f17 添加测试 2026-01-05 03:52:02 +08:00
Mike-Solar 79f376b512 修复bug 2026-01-05 03:40:36 +08:00
Mike-Solar 1f679551f2 添加测试 2026-01-05 02:55:21 +08:00
Mike Solar 65ab76edc8 fix: fix exceptions when import video 2025-08-03 02:06:45 +08:00
Simran 8ac191ceb6 CI: Customize action to expose ACTIONS_RUNTIME_URL, try different deploy folders for macOS 2024-12-04 18:13:33 +01:00
Simran 0347606c67 CI: Set ACTIONS_RUNTIME_TOKEN exported from an action 2024-12-04 17:26:15 +01:00
Simran ea47e4d84b CI: Set additional inputs for upload-artifact, remove unrecognized --hdiutil-verbose 2024-12-04 16:53:28 +01:00
Simran bde832d7e1 CI: Ensure workspace folder exists 2024-12-04 16:22:33 +01:00
Simran b0ab91b9d1 CI: Use github.workspace to determine path for node 2024-12-04 16:17:54 +01:00
Simran d1aea9fcb1 CI: Need to use ./ for executables on Linux 2024-12-04 15:43:55 +01:00