# Packaging Guide This directory contains packaging files and installation scripts for RLogg on different platforms. ## Directory Structure ``` packaging/ ├── linux/ │ ├── rlogg.desktop # XDG desktop entry file │ ├── text-x-log.xml # MIME type definition for .log files │ └── install.sh # Linux installation script ├── windows/ │ ├── file-association.reg # Windows registry file for manual setup │ └── install.ps1 # PowerShell installation script └── README.md # This file ``` ## Building for Distribution ### Linux 1. **Build the release binary:** ```bash cargo build --release ``` 2. **Test the installation script:** ```bash cd packaging/linux ./install.sh ``` 3. **Create a distribution package:** ```bash # Create a tarball cd target/release tar -czf rlogg-linux-x64.tar.gz rlogg ../../packaging/linux/* ``` ### Windows 1. **Build the release binary:** ```powershell cargo build --release ``` 2. **Test the installation script:** ```powershell cd packaging\windows powershell -ExecutionPolicy Bypass -File install.ps1 ``` 3. **Create a distribution package:** ```powershell # Create a ZIP file Compress-Archive -Path target\release\rlogg.exe, packaging\windows\* -DestinationPath rlogg-windows-x64.zip ``` ## Distribution Packages ### Linux Packages #### DEB Package (Debian/Ubuntu) Create a `debian/` directory structure for building `.deb` packages: ```bash mkdir -p debian/usr/local/bin mkdir -p debian/usr/share/applications mkdir -p debian/usr/share/mime/packages cp target/release/rlogg debian/usr/local/bin/ cp packaging/linux/rlogg.desktop debian/usr/share/applications/ cp packaging/linux/text-x-log.xml debian/usr/share/mime/packages/ # Create DEBIAN control file mkdir -p debian/DEBIAN cat > debian/DEBIAN/control < Description: Fast log file viewer A fast log file viewer with search, filtering, and highlighting capabilities EOF # Build the package dpkg-deb --build debian rlogg_0.3.1_amd64.deb ``` #### AppImage For universal Linux distribution: ```bash # Install linuxdeploy wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage chmod +x linuxdeploy-x86_64.AppImage # Create AppDir structure mkdir -p AppDir/usr/bin mkdir -p AppDir/usr/share/applications mkdir -p AppDir/usr/share/mime/packages cp target/release/rlogg AppDir/usr/bin/ cp packaging/linux/rlogg.desktop AppDir/usr/share/applications/ cp packaging/linux/text-x-log.xml AppDir/usr/share/mime/packages/ # Build AppImage ./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage ``` ### Windows Packages #### NSIS Installer Install NSIS and create an installer script: ```nsis !define APPNAME "RLogg" !define COMPANYNAME "Your Company" !define DESCRIPTION "Fast log file viewer" !define VERSIONMAJOR 0 !define VERSIONMINOR 3 !define VERSIONBUILD 1 RequestExecutionLevel user Name "${APPNAME}" Icon "path\to\icon.ico" OutFile "rlogg-setup.exe" InstallDir "$LOCALAPPDATA\Programs\${APPNAME}" Section "Install" SetOutPath $INSTDIR File "target\release\rlogg.exe" WriteUninstaller "$INSTDIR\Uninstall.exe" # Create file association WriteRegStr HKCU "Software\Classes\.log" "" "RLogg.LogFile" WriteRegStr HKCU "Software\Classes\RLogg.LogFile\shell\open\command" "" '"$INSTDIR\rlogg.exe" "%1"' SectionEnd Section "Uninstall" Delete "$INSTDIR\rlogg.exe" Delete "$INSTDIR\Uninstall.exe" RMDir "$INSTDIR" DeleteRegKey HKCU "Software\Classes\.log" DeleteRegKey HKCU "Software\Classes\RLogg.LogFile" SectionEnd ``` ## Testing File Associations ### Linux Testing 1. **Create a test log file:** ```bash echo "Test log entry" > /tmp/test.log ``` 2. **Test command-line opening:** ```bash rlogg /tmp/test.log ``` 3. **Test XDG opening:** ```bash xdg-open /tmp/test.log ``` 4. **Test in file manager:** - Navigate to `/tmp/` in your file manager - Double-click `test.log` - Right-click → Open With → RLogg 5. **Test multiple files:** ```bash echo "Log 1" > /tmp/test1.log echo "Log 2" > /tmp/test2.log rlogg /tmp/test1.log /tmp/test2.log ``` ### Windows Testing 1. **Create a test log file:** ```powershell "Test log entry" | Out-File -FilePath "$env:TEMP\test.log" ``` 2. **Test command-line opening:** ```powershell & "$env:LOCALAPPDATA\Programs\RLogg\rlogg.exe" "$env:TEMP\test.log" ``` 3. **Test in File Explorer:** - Open File Explorer - Navigate to `%TEMP%` - Double-click `test.log` - Right-click → Open with → RLogg 4. **Test multiple files:** ```powershell "Log 1" | Out-File -FilePath "$env:TEMP\test1.log" "Log 2" | Out-File -FilePath "$env:TEMP\test2.log" & "$env:LOCALAPPDATA\Programs\RLogg\rlogg.exe" "$env:TEMP\test1.log" "$env:TEMP\test2.log" ``` ## Platform-Specific Notes ### Linux - **Desktop environments tested:** - GNOME 40+ - KDE Plasma 5.20+ - XFCE 4.16+ - i3/sway (via xdg-utils) - **Dependencies:** - `xdg-utils` for `update-desktop-database` and `update-mime-database` - Usually pre-installed on most distributions - **Wayland compatibility:** - Tested and working on Wayland sessions - File associations work the same as X11 ### Windows - **Tested on:** - Windows 10 (version 1909+) - Windows 11 - **Registry location:** - User-local: `HKEY_CURRENT_USER\Software\Classes\` - No admin rights required - **Antivirus:** - Some antivirus software may flag unsigned executables - Consider code signing for production releases ## CI/CD Integration ### GitHub Actions Example ```yaml name: Build and Package on: release: types: [created] jobs: build-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build run: cargo build --release - name: Package run: | cd target/release tar -czf rlogg-linux-x64.tar.gz rlogg ../../packaging/linux/* - name: Upload uses: actions/upload-artifact@v3 with: name: rlogg-linux path: target/release/rlogg-linux-x64.tar.gz build-windows: runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Build run: cargo build --release - name: Package run: | Compress-Archive -Path target\release\rlogg.exe, packaging\windows\* -DestinationPath rlogg-windows-x64.zip - name: Upload uses: actions/upload-artifact@v3 with: name: rlogg-windows path: rlogg-windows-x64.zip ``` ## Troubleshooting See [docs/FILE_ASSOCIATIONS.md](../docs/FILE_ASSOCIATIONS.md) for detailed troubleshooting guides. ## Contributing When adding new packaging formats or improving existing ones: 1. Test on the target platform 2. Update this README with clear instructions 3. Add troubleshooting steps if needed 4. Submit a pull request with test results