Commit Graph
11 Commits
Author SHA1 Message Date
Mike-Solar 8747eafe78 ci/cd: package for Debian 13 instead of Debian 12
The Debian container moves from bookworm to trixie. Two packages were
renamed in trixie and their old names are now transitional dummies:
pkg-config is provided by pkgconf, and libgl1-mesa-dev split into
libgl-dev + libglvnd-dev. The CI and CD Debian dependency lists stay
byte-for-byte identical.

trixie ships libva 2.22, which has the vaMapBuffer2 FFmpeg 8 expects,
so only openKylin still needs the bundled vcpkg libva copies.
2026-09-25 21:37:58 +08:00
Mike-Solar fac63e24d4 tooling/package: list /usr/share/oak/icons in the rpm %files
The icon trees were staged into the buildroot but not declared in
%files, so rpmbuild aborted with 'Installed (but unpackaged) file(s)
found' (deb and pkg install them through explicit paths and are
unaffected). Verified in fedora:43: the rpm builds and carries all 35
icon files.
2026-09-24 19:52:51 +08:00
Mike-Solar aba7298ab3 app: package the UI icons and resolve assets at runtime
- the packager resources only carried assets/i18n, so installed builds
  showed blank toolbar glyphs: add assets/icons to the Windows/macOS
  packages and install it to /usr/share/oak/icons in the deb/rpm/pkg
  scripts;
- icon_path resolved through the compile-time CARGO_MANIFEST_DIR (the CI
  checkout path), which never exists on a user machine: search the
  runtime layouts instead — dev checkout, next to the executable,
  Contents/Resources, usr/lib/oak-editor (cargo-packager's deb/AppImage
  layout) and /usr/share/oak — mirroring the i18n pack search, which
  gains the same usr/lib/oak-editor candidate so the AppImage finds its
  language packs too.

Verified: oak-app 556 tests pass; the deb and rpm now carry
/usr/share/oak/icons/{dark,light}/*.png.
2026-09-24 19:44:21 +08:00
Mike-Solar 6de991de33 tooling/package: fix deb/rpm packaging against the real distro layouts
Verified locally in debian:12 and fedora:43 containers before pushing:

- deb: dpkg-deb rejected the control file because `paste -sd', '` uses
  the delimiter list cyclically (comma, space, comma, ...) — join with a
  plain comma instead;
- rpm: rpm 4.20+ (Fedora 43) computes %{buildroot} itself and ignores a
  caller-supplied buildroot define, so stage the payload and let the
  spec's %install copy it via %{_oak_stage}; add a changelog entry (the
  %source_date_epoch_from_changelog warning) and drop it from the
  changelog-less build.
2026-09-24 18:19:01 +08:00
Mike-Solar 88a5bee50e ci/cd: unify both workflows on one seven-platform matrix
CI and CD now run the same seven environments in a single matrix:
Debian 12, Fedora 41, Arch and openKylin x64+arm64 in their distro
containers plus the macOS (12x) and Windows (32x) hosts, with identical
dependency lists and runner sizes, so a package a CD build needs cannot
be missing in CI. CD keeps building every package from scratch (no
vcpkg/cargo caches).

Fixes every failure the last CD run exposed:
- deb packaging: dpkg-shlibdeps needs a Debian source tree (give it a
  synthetic debian/control) and Debian 12/openKylin carry an older libva
  than FFmpeg 8 needs (vaMapBuffer2), so vcpkg's libva/libdrm ship next
  to the app with an $ORIGIN RUNPATH;
- AppImage: register the vcpkg libs with ldconfig so linuxdeploy finds
  libva-drm.so.2;
- Fedora: install perl-IPC-Cmd (vcpkg's openssl port requires it);
- macOS: cargo-packager produces "Oak Video Editor.app"; resolve the
  bundle instead of assuming "Oak.app";
- Windows: the vendored OCIO is compiled /MD, so drop +crt-static (the
  LNK2038 RuntimeLibrary mismatch) and bundle the MSVC runtime DLLs
  app-locally;
- containers: pin HOME for rustup and give WarpCache its token on the
  cache steps only (job-level env cannot reference the env context).
2026-09-24 17:32:53 +08:00
Mike-Solar 7f544a65e6 ci(cd): add openKylin x64/arm64 debs and label the Debian build
The Linux package matrix now carries arch/triplet/runner per entry and
gains two openKylin entries (x64 on a 16x runner, arm64 on a 32x runner),
each building inside the openkylin container so dpkg-shlibdeps resolves
against openKylin's own repo names. Deb packages are labeled by build
distro: the general debian:12 package becomes
oak-editor_<version>+debian_<arch>.deb, openKylin's
oak-editor_<version>+openkylin_<arch>.deb; build-deb.sh takes the variant
and stamps dpkg --print-architecture (the file name hardcoded amd64
before).

Also: pin HOME for rustup in the openKylin container, create the icon
directory before rendering (and degrade to the scalable icon when
rsvg-convert is missing), add the Windows Defender step to the Windows
packaging job, and take the bumped runner sizes (AppImage/Linux 16x,
macOS 12x, Windows 32x).
2026-09-24 17:10:54 +08:00
Mike-Solar 71e41d2d82 app: ship the Oak icon on every platform surface
- Runtime window icon: X11 takes the embedded 512px PNG up front
  (_NET_WM_ICON), Wayland resolves it from oak.desktop via the app id,
  Windows reads it from the exe's icon resource.
- assets/appicon: 512px PNG + 7-size ICO rasterized from Oak_Icon.svg.
- Windows: oak.rc (ICON resource ID 1, also the Explorer icon) compiled
  by build.rs through embed-resource.
- Linux packaging (deb/rpm/PKGBUILD/oak.spec): install Oak_Icon.svg
  into the hicolor scalable theme alongside the existing 512px PNG.
- macOS: no change needed - cargo packager already builds the .icns
  from the CD-generated icons/icon.png (same source art).
2026-09-10 16:54:51 +08:00
Mike-Solar 5b38d07299 ci/cd: NVDEC-capable FFmpeg, GCC16-proof OCIO, system-first OCIO env
- Install ffnvcodec headers everywhere the project FFmpeg is built
  (distro packages on Debian/Ubuntu/Arch/MSYS2, nv-codec-headers from
  source on Fedora) so the FFmpeg build picks up NVDEC/NVENC.
- ocio-sys 0.2.1's vendored yaml-cpp misses <cstdint> and fails on
  GCC >= 16 (measured on GCC 16.2.1); patch the dependency to the
  fixed upstream tree (shaloong/ocio-rs, 933c65dc) until a fixed
  release lands on crates.io.
- New tooling/ocio-env.sh decides the OCIO build env per job: system
  OCIO >= 2.5 when present (static when the package ships
  libOpenColorIO.a, dynamic otherwise), vendored static build as the
  fallback. The Arch package gains an 'opencolorio' dependency only
  when the binaries link the system OCIO (build-pkg.sh probes ldd).
- CI 'Build' steps switch from cargo build to cargo check: the Test
  step links the test binaries anyway, and a full build would codegen
  every workspace crate twice.
2026-08-30 00:31:48 +08:00
Mike-Solar d9dc16ec26 cd: bundle all runtime dylibs on Windows/macOS; version from workspace
Windows: tooling/package/bundle-dylibs-windows.sh collects the MSYS2
runtime DLLs (libstdc++, libgcc, OpenColorIO, ...) with ntldd -R,
iterated to a fixpoint over freshly copied DLLs; a packager resources
glob places them next to the executables in the NSIS installer.

macOS: tooling/package/bundle-dylibs-macos.sh copies every non-system
dylib otool reports into Contents/Frameworks, rewrites the install
names to @executable_path/../Frameworks to a fixpoint, and ad-hoc
re-signs every modified Mach-O (rewriting invalidates the seal).

The CD package version no longer comes from the git tag: the root
Cargo.toml gains [workspace.package] version = "0.5.0", the oak
package inherits it (version.workspace = true — which cargo-packager
also picks up), and the Linux container packaging parses that field.
2026-08-21 12:53:24 +08:00
Mike-Solar f6e7bf20a4 cd: the package builder scripts (ignored by the *build-* glob)
Force-added: .gitignore's *build-* pattern matches the filenames.
2026-08-21 05:59:41 +08:00
Mike-Solar 32cd8f46f0 cd: container-native Linux packaging (deb/rpm/pacman) + AppImage
Each distro package builds inside that distro's container so declared
dependencies always resolve to native names: hand-rolled deb via
dpkg-shlibdeps + dpkg-deb, rpm via rpmbuild's auto-requires, Arch via
makepkg (non-root builder user). git/curl install before checkout
(container jobs). AppImage keeps cargo-packager on the Ubuntu runner.
The release gates on all four package jobs plus macOS/Windows.
2026-08-21 05:58:43 +08:00