name: Build libfuse on: push: branches: [ main, master ] pull_request: branches: [ main, master ] workflow_dispatch: jobs: # Main build and test job build-and-test: name: Build and Test runs-on: ubuntu-latest steps: - name: Checkout code run: | echo "Cloning repository..." # Create workspace directory mkdir -p /workspace/particle-os/libfuse # Clone repository git clone https://git.raines.xyz/particle-os/libfuse.git /tmp/libfuse cd /tmp/libfuse git fetch --all git checkout ${{ github.sha || gitea.sha || 'main' }} # Copy files to workspace cp -r /tmp/libfuse/* /workspace/particle-os/libfuse/ 2>/dev/null || true cp -r /tmp/libfuse/.* /workspace/particle-os/libfuse/ 2>/dev/null || true # Verify files are copied ls -la /workspace/particle-os/libfuse/ - name: Setup apt-cacher-ng run: | echo "Setting up apt-cacher-ng for faster builds..." # Start apt-cacher-ng in background docker run -d --name apt-cacher-ng -p 3143:3142 sameersbn/apt-cacher-ng:latest || echo "Apt-cacher-ng already running or failed to start" # Wait for it to be ready timeout 30 bash -c 'until curl -s http://localhost:3143/acng-report.html > /dev/null 2>&1; do sleep 2; done' || echo "Apt-cacher-ng not ready, continuing without cache" - name: Build libfuse in Debian container run: | # Run the build directly in Debian container docker run --rm \ --add-host=host.docker.internal:host-gateway \ -v /workspace/particle-os/libfuse:/workspace \ -w /workspace \ debian:trixie \ bash -c ' set -e # Configure apt to use cacher if available if curl -s http://host.docker.internal:3143/acng-report.html > /dev/null 2>&1; then echo "Configuring apt to use cacher" echo "Acquire::http::Proxy \"http://host.docker.internal:3143\";" > /etc/apt/apt.conf.d/01proxy echo "Acquire::https::Proxy \"http://host.docker.internal:3143\";" >> /etc/apt/apt.conf.d/01proxy echo "Acquire::http::Proxy::security.debian.org \"DIRECT\";" >> /etc/apt/apt.conf.d/01proxy echo "Acquire::http::Proxy::deb.debian.org \"DIRECT\";" >> /etc/apt/apt.conf.d/01proxy else echo "Apt-cacher-ng not available, using direct connection" fi # Update and install dependencies apt-get update apt-get install -y \ build-essential \ cmake \ pkg-config \ libssl-dev \ libfuse-dev \ fuse3 \ meson \ ninja-build \ git \ wget \ curl \ dpkg-dev \ signify-openbsd \ python3-pytest \ libudev-dev # Download libfuse source wget https://github.com/libfuse/libfuse/releases/download/fuse-3.10.0/fuse-3.10.0.tar.xz wget https://github.com/libfuse/libfuse/releases/download/fuse-3.10.0/fuse-3.10.0.tar.xz.asc # Try to verify signature if possible, but continue if it fails echo "Attempting signature verification..." if wget -q https://github.com/libfuse/libfuse/releases/download/fuse-3.10.0/fuse-3.10.0.pub 2>/dev/null; then signify -V -m fuse-3.10.0.tar.xz -p fuse-3.10.0.pub && echo "Signature verification successful" else echo "Signature file not available, skipping verification" fi tar -xf fuse-3.10.0.tar.xz cd fuse-3.10.0 # Build libfuse cd fuse-3.10.0 mkdir build && cd build meson setup --prefix=/usr --libdir=lib/x86_64-linux-gnu .. ninja # Run tests python3 -m pytest test/ || echo "Some tests may require root privileges" # Install ninja install ldconfig # Create Debian package cd /workspace/fuse-3.10.0 mkdir -p libfuse3-3_3.10.0-1_amd64/DEBIAN mkdir -p libfuse3-3_3.10.0-1_amd64/usr/lib/x86_64-linux-gnu mkdir -p libfuse3-3_3.10.0-1_amd64/usr/include/fuse3 mkdir -p libfuse3-3_3.10.0-1_amd64/usr/lib/pkgconfig # Copy libraries cp /usr/lib/x86_64-linux-gnu/libfuse3.so.3.10.0 libfuse3-3_3.10.0-1_amd64/usr/lib/x86_64-linux-gnu/ ln -s libfuse3.so.3.10.0 libfuse3-3_3.10.0-1_amd64/usr/lib/x86_64-linux-gnu/libfuse3.so.3 ln -s libfuse3.so.3 libfuse3-3_3.10.0-1_amd64/usr/lib/x86_64-linux-gnu/libfuse3.so # Copy headers cp -r /usr/include/fuse3/* libfuse3-3_3.10.0-1_amd64/usr/include/fuse3/ # Copy pkg-config files cp /usr/lib/pkgconfig/fuse3.pc libfuse3-3_3.10.0-1_amd64/usr/lib/pkgconfig/ # Create control file cat > libfuse3-3_3.10.0-1_amd64/DEBIAN/control << "CONTROL_EOF" Package: libfuse3-3 Version: 3.10.0-1 Section: libs Priority: optional Architecture: amd64 Depends: libc6 (>= 2.17) Description: Filesystem in Userspace (FUSE) v3 library FUSE (Filesystem in Userspace) is a simple interface for userspace programs to export a virtual filesystem to the Linux kernel. FUSE also aims to provide a secure method for non privileged users to create and mount their own filesystem implementations. . This package contains the FUSE v3 shared library. CONTROL_EOF # Build the package dpkg-deb --build libfuse3-3_3.10.0-1_amd64 # Test package installation dpkg -i libfuse3-3_3.10.0-1_amd64.deb || true apt-get install -f -y # Verify the library is available ldconfig -p | grep libfuse3 pkg-config --exists fuse3 && echo "fuse3.pc found" || echo "fuse3.pc not found" ' - name: Prepare artifacts run: | echo "Preparing artifacts for download..." mkdir -p artifacts # Copy the built package if [ -f libfuse3-3_3.10.0-1_amd64.deb ]; then cp libfuse3-3_3.10.0-1_amd64.deb artifacts/ echo "✅ Package copied to artifacts directory" ls -la artifacts/ # Create a summary echo "# libfuse3-3 Package Build" > artifacts/BUILD_INFO.md echo "" >> artifacts/BUILD_INFO.md echo "## Package Information" >> artifacts/BUILD_INFO.md echo "- **Package**: libfuse3-3" >> artifacts/BUILD_INFO.md echo "- **Version**: 3.10.0-1" >> artifacts/BUILD_INFO.md echo "- **Architecture**: amd64" >> artifacts/BUILD_INFO.md echo "- **Build Date**: $(date '+%Y-%m-%d %H:%M:%S UTC')" >> artifacts/BUILD_INFO.md echo "- **Commit**: $(git rev-parse --short HEAD 2>/dev/null || echo 'Unknown')" >> artifacts/BUILD_INFO.md echo "" >> artifacts/BUILD_INFO.md echo "## Package Details" >> artifacts/BUILD_INFO.md dpkg -I libfuse3-3_3.10.0-1_amd64.deb >> artifacts/BUILD_INFO.md # Create archive for easy download tar -czf libfuse3-3-build-$(date +%Y%m%d-%H%M%S).tar.gz artifacts/ echo "✅ Archive created: libfuse3-3-build-*.tar.gz" else echo "❌ Package not found!" exit 1 fi - name: Show apt-cacher statistics run: | echo "=== Apt-Cacher-NG Statistics ===" if curl -s http://localhost:3143/acng-report.html 2>/dev/null | grep -E "(Hits|Misses|Bytes|Files)"; then echo "Cache statistics retrieved successfully" else echo "Apt-cacher-ng not available or no statistics found" fi - name: Final summary run: | echo "" echo "🎉 BUILD COMPLETE! 🎉" echo "================================" echo "" echo "📦 Your libfuse3-3 package is ready!" echo "" echo "Available files:" ls -la *.deb *.tar.gz 2>/dev/null || echo "No packages found" echo "" echo "📁 Artifacts directory contents:" ls -la artifacts/ 2>/dev/null || echo "No artifacts directory" echo "" echo "✅ Build completed successfully!" echo " - Package: libfuse3-3_3.10.0-1_amd64.deb" echo " - Archive: libfuse3-3-build-*.tar.gz" echo " - Info: artifacts/BUILD_INFO.md" echo "" - name: Cleanup if: always() run: | # Clean up apt-cacher-ng container docker stop apt-cacher-ng 2>/dev/null || true docker rm apt-cacher-ng 2>/dev/null || true