aboutsummaryrefslogtreecommitdiff
path: root/.github
Commit message (Collapse)AuthorAgeFilesLines
* Prepare 0.3.0 releaseSulfurNitride2026-06-171-2/+1
|
* release: preserve draft stable releasesSulfurNitride2026-05-241-7/+17
|
* release: prepare 0.2.2 stableSulfurNitride2026-05-241-0/+2
|
* Update MO2 beta 12 integrationSulfurNitride2026-05-241-1/+1
|
* build: migrate Dockerfile + plugin_python from pip/poetry to uvSulfurNitride2026-05-161-1/+1
| | | | | | | | | | | | | | | | Dockerfile: drop apt python3/python3-pip, copy the uv static binary from ghcr.io/astral-sh/uv:latest, install python-build-standalone via `uv python install` (replacing the manual curl), run aqtinstall via `uv tool run`, install build-time packages via `uv pip install --system --break-system-packages --python ...`. Same swap applied to the CI workflow's inline package-install step. plugin_python: convert pyproject.toml from [tool.poetry] to PEP 621 [project] + [dependency-groups], drop poetry.lock, replace abatilo/actions-poetry + `poetry install/run` with astral-sh/setup-uv + `uv sync/run` in libs/plugin_python/.github/workflows/linting.yml. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ci: install runtime python deps inside build containerSulfurNitride2026-05-141-1/+1
| | | | | | | | | The builder image is pulled from GHCR and reused across CI runs, so Dockerfile changes to its pip install line don't take effect until docker.yml is manually triggered. Move the install into the CI build step so PRs that add new python deps work without an image rebuild. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* 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>