| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Local stable builds picked up host CPU flags (AVX-512) and shipped
binaries that crashed on user CPUs without those instructions. CI runs
on generic GitHub-hosted x86-64 runners, so all release builds need to
go through it now.
- Trigger workflow on push of any v* tag in addition to main.
- Resolve channel from the ref: tags/v* -> stable, otherwise beta.
- Tarball name follows channel: fluorine-manager-<version>.tar.gz on
stable, fluorine-manager-beta.tar.gz on beta.
- Beta publish step gated on channel==beta to avoid double-publishing
when a tag also lives on main.
- New "Publish stable release" step creates/updates a release at the
tag, marks it --latest, and attaches the versioned tarball.
To cut v0.2.0: `git tag v0.2.0 && git push origin v0.2.0`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- settingsdialogupdates.cpp missed an include of settings.h (it was only
getting the forward-declared version from settingsdialog.h), which
broke every settings().setX() call. Now included directly.
- UpdatesSettingsTab is not a QObject so it has no tr() member; add
Q_DECLARE_TR_FUNCTIONS to get a static tr() via QCoreApplication.
- CI: the docker run chained commands with `;` so a ninja failure got
masked by the trailing `ccache -s`. Capture the build-inner.sh exit
status and `exit $status` at the end so real build failures fail the
step instead of bleeding into the tar packaging step and producing a
confusing "Cannot stat: No such file" error.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
| |
The docker build runs as root inside the container and the bind-mounted
build/ tree ends up root-owned on the runner. The runner-user tar step
then can't create the archive. Fix up ownership before packaging.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
| |
Stable releases are cut manually against a tag (see CHANGELOG.md).
CI only publishes the rolling `beta` release now, so the always-skipped
Publish stable release step and the `v*` tag trigger were just noise in
the job graph.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- VFS: add mo2_rmdir + OverwriteManager::removeDirectory so Wrye Bash
shutil.rmtree stops failing with WinError 267 (issue #47).
- FileRenamer: case-insensitive fallback via new resolvePathCaseInsensitive
walks each path component; bulk hide in Conflict tab no longer dies with
a misleading "Input/output error" when DirectoryEntry normalised parent
dir case (issue #54). formatSystemMessage stops aliasing Windows error
code 5 to errno 5 (EIO).
- Versioning: FLUORINE_VERSION_* + fluorine_build_info.h generated from
CMake; Linux createVersionInfo returns Fluorine's version. About dialog
shows Fluorine version + MO2 engine + commit. Beta builds stamp
"<semver>B<yyyymmddhhmm>" (issue #51).
- CI: ci.yml determines channel from ref (v* tags = stable, main = beta),
publishes a rolling `beta` GitHub release whose body carries a
machine-parseable fluorine-meta block (timestamp, commit) for the
in-app updater.
- Updater: new FluorineUpdater polls GitHub API on startup, compares
against embedded metadata, notifies on new release without auto-install.
Channel toggle piggybacks on the existing "beta versions" checkbox.
- Bethesda plugins: determineMyGamesPath no longer creates
Documents/My Games/<GameName> for every possible title at plugin load;
only games with a detected install path get their dirs created
(issue #55).
- Starfield: dataDirectory() on Linux now points at <game>/Data instead
of My Games/Starfield/Data so the single FUSE mount lands where SFSE
loads plugins; My Games Data becomes a secondary symlinked mapping
(issue #56).
- Prefix resolution: prefer Fluorine config, then explicit
fluorine/prefix_path, then legacy Settings/* keys (with a warning) so
auto-detected Heroic/Bottles prefixes can't silently override a user-
configured Fluorine prefix (issue #52). compatDataPathFromPrefix no
longer hands Proton the wrong parent dir for plain wine prefixes.
- xrandr: ensureXrandrInstalled back-fills the helper for existing SLR
installs, prefix init runs it before wineboot, SLR wrap exposes
xrandr-bin via --filesystem= and prepends PATH inside the container
(issue #49).
- Process tracking: drop the wineserver-as-last-resort fallback that made
MO2 hang on Proton's session manager after game exit. Rescan the prefix
for matching game executables instead (covers reparented launcher
children like f4se_loader → Fallout4.exe). Unlock button now kills
wineserver for the prefix (SIGTERM then SIGKILL on timeout).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
| |
Sets CCACHE_BASEDIR=/src and CCACHE_COMPILERCHECK=content so hashes
are stable across runs (absolute-path and compiler-mtime drift were
causing full rebuilds). Adds sloppiness flags, 5G max size, and
prints `ccache -s` before/after the build so cache effectiveness
is visible in the job log.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
| |
|
|
|
|
|
| |
FindPython needs the real nix Python (with dev headers), not the venv
wrapper. Save NIX_PYTHON3 before venv overrides PATH. Tested locally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
| |
NixOS users can't load our Ubuntu-compiled mobase.so due to ABI
differences. Add a parallel CI job that builds mobase.so in a Nix
environment so NixOS users can download and drop it into plugins/libs/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
| |
ci.yml was rebuilding the Docker image from scratch on every push because
it used a different cache backend (registry) than docker.yml (gha). Now
CI pulls the pre-built image from GHCR directly, and docker.yml uses
consistent registry caching.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Use fuse_passthrough_open/close API instead of raw fd assignment to
fi->backing_id, which caused EIO on every file open through the VFS
- Remove LD_LIBRARY_PATH from launcher script — DT_RPATH handles lib
resolution, and LD_LIBRARY_PATH triggers AT_SECURE which drops file
capabilities (cap_sys_admin) needed for passthrough
- Auto-detect missing cap_sys_admin at mount time and prompt via pkexec
to re-apply it (handles binary copy/update/extract losing the cap)
- Disable passthrough for session if fuse_passthrough_open fails, avoiding
"Operation not permitted" spam in terminal
- Fix Nix flake: tinyxml2 → tinyxml-2, xorg.lib* → top-level names
- CI: eliminate artifact zip round-trip for GitHub releases
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
| |
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix "Copy all" log truncation: the code unconditionally stripped 2
chars (\r\n) from formatted log messages, but on Linux spdlog only
appends \n. Every log message lost its last real character. Now
strips trailing \r and \n dynamically.
Enable ccache: it was installed in the Docker image but never
activated. build-inner.sh now auto-detects ccache and sets
CMAKE_*_COMPILER_LAUNCHER. build.sh mounts a persistent ccache
volume (~/.cache/fluorine-ccache) into the container. CI workflow
uses actions/cache to persist ccache across runs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
| |
|
|
|
|
|
|
|
|
| |
The CI was failing because ghcr.io/SulfurNitride/fluorine-builder had
uppercase letters (GHCR requires lowercase). Instead of depending on a
pre-built GHCR image, CI now builds the Docker image from the Dockerfile
each run (matching build.sh), with registry-based layer caching for speed.
Also removes the duplicated inline AppImage logic in favor of build-inner.sh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
Complete native Linux port with FUSE-based virtual filesystem,
Proton/umu-run integration, and Flatpak packaging.
Key features:
- FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak)
- Proton/GE-Proton/umu-run launcher with env var forwarding
- Flatpak support (sandbox-aware VFS, NXM handler, umu-run)
- Wine prefix management UI
- Case-insensitive path resolution for Linux filesystems
- QSettings-safe INI handling (avoids Bethesda INI corruption)
- Portable instance support with auto-generated launcher scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|