aboutsummaryrefslogtreecommitdiff
path: root/.github
Commit message (Collapse)AuthorAgeFilesLines
* ci: bring back stable releases on v* tag pushSulfurNitride2026-05-021-5/+59
| | | | | | | | | | | | | | | | | | | | 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>
* Fix Updates tab compile + CI failure propagationSulfurNitride2026-04-231-1/+1
| | | | | | | | | | | | | | | - 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>
* ci: chown build dir before packaging tarballSulfurNitride2026-04-231-0/+5
| | | | | | | | 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>
* Drop stable release step from CISulfurNitride2026-04-231-33/+6
| | | | | | | | | 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>
* Fix VFS rmdir, prefix/launch issues, add version + beta channelSulfurNitride2026-04-231-0/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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>
* CI: fix ccache misses, surface hit rateSulfurNitride2026-04-131-1/+5
| | | | | | | | | | 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>
* Fix NixOS CI: use nix python for cmake, venv only for pybind11 pinSulfurNitride2026-03-121-1/+2
| | | | | | | 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>
* Fix NixOS CI: add Rust toolchain, cmake configure needs nak_ffi targetSulfurNitride2026-03-121-3/+1
| | | | Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add NixOS mobase build to CI for Python plugin compatibilitySulfurNitride2026-03-121-0/+64
| | | | | | | | 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>
* Fix CI: pull pre-built Docker image instead of rebuilding every runSulfurNitride2026-03-122-14/+10
| | | | | | | | | 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>
* Fix CI: upload build directory instead of removed tar.gzSulfurNitride2026-03-111-18/+3
| | | | Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix FUSE passthrough: use proper API, drop LD_LIBRARY_PATH, auto-apply capSulfurNitride2026-03-111-15/+3
| | | | | | | | | | | | | | | | - 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>
* CI: build tarball instead of AppImage, publish .tar.gz in releasesSulfurNitride2026-03-111-17/+8
| | | | Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix log copy truncation, enable ccache for build cacheSulfurNitride2026-02-251-0/+11
| | | | | | | | | | | | | | | 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>
* Fix CI: use Docker build like build.sh, fix GHCR uppercase tagSulfurNitride2026-02-232-148/+51
| | | | | | | | | | 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>
* Fluorine Manager: full Linux port of Mod Organizer 2SulfurNitride2026-02-112-0/+238
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>