name: CI on: push: branches: [main] tags: ['v*'] pull_request: workflow_dispatch: env: REGISTRY: ghcr.io IMAGE_NAME: ghcr.io/sulfurnitride/fluorine-builder jobs: build: runs-on: ubuntu-latest permissions: contents: write packages: write steps: - name: Checkout uses: actions/checkout@v4 - name: Log in to GHCR uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Pull or build Docker image run: | if docker pull ${{ env.IMAGE_NAME }}:latest; then docker tag ${{ env.IMAGE_NAME }}:latest fluorine-builder:latest else echo "Pull failed, building from scratch..." docker build -t fluorine-builder:latest docker/ fi - name: Restore ccache uses: actions/cache@v4 with: path: ~/.cache/fluorine-ccache key: ccache-${{ runner.os }}-${{ github.sha }} restore-keys: | ccache-${{ runner.os }}- - name: Build inside container run: | mkdir -p ~/.cache/fluorine-ccache docker run --rm \ -v "${{ github.workspace }}:/src:rw" \ -v "$HOME/.cache/fluorine-ccache:/ccache:rw" \ -e CCACHE_DIR=/ccache \ -e BUILD_MODE=tarball \ -w /src \ fluorine-builder:latest \ bash /src/docker/build-inner.sh - name: Upload build uses: actions/upload-artifact@v4 with: name: Fluorine-Manager path: build/fluorine-manager/ compression-level: 6 if-no-files-found: warn build-nixos-mobase: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v30 with: nix_path: nixpkgs=channel:nixos-unstable - name: Cache Nix store uses: actions/cache@v4 with: path: /tmp/nix-cache key: nix-mobase-${{ hashFiles('nix/mobase-shell.nix') }} restore-keys: nix-mobase- - name: Build mobase.so for NixOS run: | nix-shell nix/mobase-shell.nix --run " set -euo pipefail # Build libloot from source (not in nixpkgs) git clone --depth 1 https://github.com/loot/libloot.git /tmp/libloot cmake -S /tmp/libloot/cpp -B /tmp/libloot/build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=ON \ -DLIBLOOT_INSTALL_DOCS=OFF \ -DBUILD_TESTING=OFF \ -DCMAKE_INSTALL_PREFIX=/tmp/libloot-install cmake --build /tmp/libloot/build --parallel cmake --install /tmp/libloot/build # Configure full project (only mobase target will be built) # Use NIX_PYTHON3 (real nix python) for cmake, not the venv wrapper PYBIND11_DIR=\$(python3 -c 'import pybind11; print(pybind11.get_cmake_dir())') cmake -S . -B build-nix -G Ninja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DPython_EXECUTABLE=\"\${NIX_PYTHON3}\" \ -Dpybind11_DIR=\"\${PYBIND11_DIR}\" \ -DBUILD_PLUGIN_PYTHON=ON \ -DCMAKE_PREFIX_PATH=/tmp/libloot-install \ -Dlibloot_DIR=/tmp/libloot-install # Build only mobase target cmake --build build-nix --target mobase --parallel # Package it mkdir -p nixos-mobase cp build-nix/libs/plugin_python/src/mobase/mobase.cpython-*-linux-gnu.so nixos-mobase/ echo 'NixOS-compatible mobase pybind11 module for Fluorine Manager.' > nixos-mobase/README.txt echo 'Drop this .so into your plugins/libs/ directory, replacing the existing one.' >> nixos-mobase/README.txt " - name: Upload NixOS mobase uses: actions/upload-artifact@v4 with: name: mobase-nixos path: nixos-mobase/ compression-level: 6 if-no-files-found: warn