feat: implement package manager support for Windows and macOS, including Chocolatey and Homebrew configurations
Some checks are pending
Tests & Quality Checks / Test on Python 3.11 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.10 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-2 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-2 (push) Waiting to run
Tests & Quality Checks / Build Artifacts (push) Blocked by required conditions
Tests & Quality Checks / Build Artifacts-1 (push) Blocked by required conditions
Some checks are pending
Tests & Quality Checks / Test on Python 3.11 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.10 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-2 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-2 (push) Waiting to run
Tests & Quality Checks / Build Artifacts (push) Blocked by required conditions
Tests & Quality Checks / Build Artifacts-1 (push) Blocked by required conditions
This commit is contained in:
parent
1dcce081f1
commit
87884935c9
9 changed files with 758 additions and 10 deletions
|
|
@ -1197,6 +1197,27 @@ February 2026
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Decision: Package Manager Support (Phase 5)
|
||||||
|
|
||||||
|
**Options:**
|
||||||
|
1. Only direct downloads
|
||||||
|
2. Single package manager (Chocolatey OR Homebrew)
|
||||||
|
3. Multiple package managers (Chocolatey AND Homebrew) with custom taps
|
||||||
|
|
||||||
|
**Decision**: **Multi-channel distribution via package managers**
|
||||||
|
- **Windows**: Chocolatey community repository or internal NuGet
|
||||||
|
- **macOS**: Custom Homebrew tap on Forgejo (HIM-public/homebrew-webdrop-bridge)
|
||||||
|
- **Fallback**: Direct wget downloads + built-in auto-update system
|
||||||
|
- **Implementation**: Supports both official repos and internal/private hosting
|
||||||
|
|
||||||
|
**Implementation Details:**
|
||||||
|
- Chocolatey: `build/chocolatey/` with .nuspec manifest
|
||||||
|
- Homebrew: `build/homebrew/` with Ruby formula
|
||||||
|
- Auto-download checksums from Forgejo releases
|
||||||
|
- Documentation in `docs/PACKAGE_MANAGER_SUPPORT.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Decision: Telemetry
|
### Decision: Telemetry
|
||||||
|
|
||||||
**Options:**
|
**Options:**
|
||||||
|
|
@ -1255,23 +1276,24 @@ Phase 4 Complete - Professional Features & Auto-Update system fully implemented.
|
||||||
- Cross-platform testing on Windows 10/11, macOS 12-14
|
- Cross-platform testing on Windows 10/11, macOS 12-14
|
||||||
- Security hardening and final audit
|
- Security hardening and final audit
|
||||||
- Performance optimization (drag latency < 50ms)
|
- Performance optimization (drag latency < 50ms)
|
||||||
|
- **Package Manager Setup** (NEW):
|
||||||
|
- Chocolatey packaging and publishing workflow
|
||||||
|
- Homebrew tap creation for custom distribution
|
||||||
|
- Documentation for package manager support
|
||||||
|
|
||||||
2. **Testing & Validation**:
|
2. **Testing & Validation**:
|
||||||
- Run full test suite on both platforms
|
- Run full test suite on both platforms
|
||||||
- User acceptance testing with real-world scenarios
|
- User acceptance testing with real-world scenarios
|
||||||
|
- Package manager installation testing
|
||||||
- Documentation review and finalization
|
- Documentation review and finalization
|
||||||
|
|
||||||
3. **Finalization**:
|
3. **Finalization**:
|
||||||
- Announce stable release v1.0.0
|
- Announce stable release v1.0.0
|
||||||
- Publish installers to Forgejo Packages
|
- Publish installers to Forgejo Packages
|
||||||
|
- Publish to Chocolatey (community or internal)
|
||||||
|
- Create and publish Homebrew tap
|
||||||
- Enable auto-update system for users
|
- Enable auto-update system for users
|
||||||
|
|
||||||
3. **Finalization**:
|
|
||||||
- Code signing for Windows MSI (optional)
|
|
||||||
- Apple notarization for macOS DMG (future)
|
|
||||||
- Create stable v1.0.0 release
|
|
||||||
- Publish to Forgejo Packages
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Document Control
|
## Document Control
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,40 @@ tox
|
||||||
|
|
||||||
### Installing from Release (wget)
|
### Installing from Release (wget)
|
||||||
|
|
||||||
Download pre-built installers from Forgejo releases using **wget** (useful for enterprise deployments, automated scripts, or initial setup before the built-in update mechanism):
|
Download pre-built installers from Forgejo releases using **wget**, **package managers**, or **automated scripts** (useful for enterprise deployments, automated scripts, or initial setup before the built-in update mechanism):
|
||||||
|
|
||||||
|
#### Package Manager (Easiest)
|
||||||
|
|
||||||
|
**Windows (Chocolatey)**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Install
|
||||||
|
choco install webdrop-bridge
|
||||||
|
|
||||||
|
# Upgrade to latest
|
||||||
|
choco upgrade webdrop-bridge
|
||||||
|
|
||||||
|
# Uninstall
|
||||||
|
choco uninstall webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
**macOS (Homebrew with custom tap)**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add tap (one-time setup)
|
||||||
|
brew tap HIM-public/webdrop-bridge https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
|
||||||
|
|
||||||
|
# Install
|
||||||
|
brew install webdrop-bridge
|
||||||
|
|
||||||
|
# Upgrade
|
||||||
|
brew upgrade webdrop-bridge
|
||||||
|
|
||||||
|
# Uninstall
|
||||||
|
brew uninstall webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
For more package manager details and internal hosting options, see [docs/PACKAGE_MANAGER_SUPPORT.md](../docs/PACKAGE_MANAGER_SUPPORT.md)
|
||||||
|
|
||||||
#### Simplest: Direct wget (if you know the version)
|
#### Simplest: Direct wget (if you know the version)
|
||||||
|
|
||||||
|
|
|
||||||
21
README.md
21
README.md
|
|
@ -40,7 +40,22 @@ WebDrop Bridge embeds a web application in a Qt container with full filesystem a
|
||||||
|
|
||||||
### Installation from Pre-Built Release (Recommended)
|
### Installation from Pre-Built Release (Recommended)
|
||||||
|
|
||||||
**Simplest Method: Direct wget (if you know the version)**
|
**Option 1: Package Manager (Recommended for most users)**
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Windows - Chocolatey
|
||||||
|
choco install webdrop-bridge
|
||||||
|
choco upgrade webdrop-bridge # Update when new version available
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# macOS - Homebrew (with custom tap)
|
||||||
|
brew tap HIM-public/webdrop-bridge https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
|
||||||
|
brew install webdrop-bridge
|
||||||
|
brew upgrade webdrop-bridge # Update to latest version
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 2: Direct wget (if you know the version)**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Replace VERSION with release tag (e.g., v0.8.0)
|
# Replace VERSION with release tag (e.g., v0.8.0)
|
||||||
|
|
@ -50,7 +65,7 @@ wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/VERSIO
|
||||||
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0/WebDropBridge_Setup.msi
|
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0/WebDropBridge_Setup.msi
|
||||||
```
|
```
|
||||||
|
|
||||||
**Alternative: Automated script (auto-detects platform)**
|
**Option 3: Automated script (auto-detects platform)**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Windows (PowerShell)
|
# Windows (PowerShell)
|
||||||
|
|
@ -60,7 +75,7 @@ wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0
|
||||||
./build/scripts/download_release.sh
|
./build/scripts/download_release.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
For more installation options and details, see [QUICKSTART.md](QUICKSTART.md#installing-from-release-wget)
|
For more installation options and details, see [QUICKSTART.md](QUICKSTART.md#installing-from-release-wget) and [PACKAGE_MANAGER_SUPPORT.md](docs/PACKAGE_MANAGER_SUPPORT.md)
|
||||||
|
|
||||||
### Installation from Source
|
### Installation from Source
|
||||||
|
|
||||||
|
|
|
||||||
47
build/chocolatey/tools/chocolateyInstall.ps1
Normal file
47
build/chocolatey/tools/chocolateyInstall.ps1
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
$PackageName = 'webdrop-bridge'
|
||||||
|
$Version = '0.8.0'
|
||||||
|
$Url = "https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v$Version/WebDropBridge_Setup.msi"
|
||||||
|
$Checksum = '' # Update with actual SHA256 checksum from release
|
||||||
|
$ChecksumType = 'sha256'
|
||||||
|
|
||||||
|
# Create temporary directory for download
|
||||||
|
$TempDir = Join-Path $env:TEMP "webdrop-bridge-$Version"
|
||||||
|
New-Item -ItemType Directory -Path $TempDir -Force | Out-Null
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Download MSI installer
|
||||||
|
Write-Host "Downloading WebDropBridge $Version MSI installer..."
|
||||||
|
$InstallerPath = Join-Path $TempDir "WebDropBridge_Setup.msi"
|
||||||
|
|
||||||
|
Get-ChocolateyWebFile -PackageName $PackageName `
|
||||||
|
-FileFullPath $InstallerPath `
|
||||||
|
-Url $Url `
|
||||||
|
-Checksum $Checksum `
|
||||||
|
-ChecksumType $ChecksumType
|
||||||
|
|
||||||
|
# Install MSI
|
||||||
|
Write-Host "Installing WebDropBridge..."
|
||||||
|
$InstallArgs = @(
|
||||||
|
'/i'
|
||||||
|
"`"$InstallerPath`""
|
||||||
|
'/quiet' # Silent installation
|
||||||
|
'/norestart' # Don't restart immediately
|
||||||
|
)
|
||||||
|
|
||||||
|
Invoke-ChocolateyInstall -PackageName $PackageName `
|
||||||
|
-File 'msiexec.exe' `
|
||||||
|
-FileArgs $InstallArgs `
|
||||||
|
-ValidExitCodes @(0, 3010) # 0=success, 3010=restart needed
|
||||||
|
|
||||||
|
Write-Host "WebDropBridge installed successfully"
|
||||||
|
} catch {
|
||||||
|
Write-Error "Installation failed: $_"
|
||||||
|
exit 1
|
||||||
|
} finally {
|
||||||
|
# Cleanup
|
||||||
|
if (Test-Path $TempDir) {
|
||||||
|
Remove-Item $TempDir -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
38
build/chocolatey/tools/chocolateyUninstall.ps1
Normal file
38
build/chocolatey/tools/chocolateyUninstall.ps1
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
$PackageName = 'webdrop-bridge'
|
||||||
|
|
||||||
|
try {
|
||||||
|
# Find installed version
|
||||||
|
$UninstallPath = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |
|
||||||
|
Where-Object { $_.GetValue('DisplayName') -like '*WebDropBridge*' } |
|
||||||
|
Select-Object -First 1
|
||||||
|
|
||||||
|
if ($UninstallPath) {
|
||||||
|
$UninstallString = $UninstallPath.GetValue('UninstallString')
|
||||||
|
|
||||||
|
# Extract MSI Product ID from uninstall string
|
||||||
|
if ($UninstallString -match '{[A-F0-9-]+}') {
|
||||||
|
$ProductId = $matches[0]
|
||||||
|
|
||||||
|
Write-Host "Uninstalling WebDropBridge (Product ID: $ProductId)..."
|
||||||
|
|
||||||
|
$UninstallArgs = @(
|
||||||
|
'/x'
|
||||||
|
$ProductId
|
||||||
|
'/quiet'
|
||||||
|
'/norestart'
|
||||||
|
)
|
||||||
|
|
||||||
|
& 'msiexec.exe' @UninstallArgs
|
||||||
|
|
||||||
|
Write-Host "WebDropBridge uninstalled successfully"
|
||||||
|
} else {
|
||||||
|
Write-Warning "Could not extract Product ID from uninstall string"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-Warning "WebDropBridge is not installed"
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-Error "Uninstall failed: $_"
|
||||||
|
}
|
||||||
28
build/chocolatey/webdrop-bridge.nuspec
Normal file
28
build/chocolatey/webdrop-bridge.nuspec
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
|
||||||
|
<metadata>
|
||||||
|
<id>webdrop-bridge</id>
|
||||||
|
<version>0.8.0</version>
|
||||||
|
<packageSourceUrl>https://git.him-tools.de/HIM-public/webdrop-bridge</packageSourceUrl>
|
||||||
|
<owners>HIM-public</owners>
|
||||||
|
<title>WebDrop Bridge</title>
|
||||||
|
<authors>HIM-public</authors>
|
||||||
|
<licenseUrl>https://git.him-tools.de/HIM-public/webdrop-bridge/blob/main/LICENSE</licenseUrl>
|
||||||
|
<projectUrl>https://git.him-tools.de/HIM-public/webdrop-bridge</projectUrl>
|
||||||
|
<bugTrackerUrl>https://git.him-tools.de/HIM-public/webdrop-bridge/issues</bugTrackerUrl>
|
||||||
|
<description>
|
||||||
|
Professional Qt-based desktop application for intelligent drag-and-drop file handling between web applications and desktop clients (InDesign, Word, Notepad++, etc.)
|
||||||
|
|
||||||
|
Converts text-based drag-and-drop operations from embedded web applications into native file operations recognized by professional desktop applications.
|
||||||
|
</description>
|
||||||
|
<summary>Intelligent drag-and-drop file bridge for web to desktop applications</summary>
|
||||||
|
<releaseNotes>https://git.him-tools.de/HIM-public/webdrop-bridge/releases/tag/v0.8.0</releaseNotes>
|
||||||
|
<tags>drag-drop file-transfer qt pyside6 desktop automation</tags>
|
||||||
|
<dependencies>
|
||||||
|
<dependency id="chocolatey" version="0.10.8" />
|
||||||
|
</dependencies>
|
||||||
|
</metadata>
|
||||||
|
<files>
|
||||||
|
<file src="tools\**" target="tools" />
|
||||||
|
</files>
|
||||||
|
</package>
|
||||||
48
build/homebrew/webdrop-bridge.rb
Normal file
48
build/homebrew/webdrop-bridge.rb
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
class WebdropBridge < Formula
|
||||||
|
desc "Intelligent drag-and-drop file bridge for web to desktop applications"
|
||||||
|
homepage "https://git.him-tools.de/HIM-public/webdrop-bridge"
|
||||||
|
version "0.8.0"
|
||||||
|
|
||||||
|
# ARM64 (Apple Silicon)
|
||||||
|
on_arm do
|
||||||
|
url "https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0/WebDropBridge_Setup.dmg"
|
||||||
|
sha256 "" # Update with actual checksum
|
||||||
|
end
|
||||||
|
|
||||||
|
# Intel x86_64
|
||||||
|
on_intel do
|
||||||
|
url "https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.8.0/WebDropBridge_Setup.dmg"
|
||||||
|
sha256 "" # Update with actual checksum (may be same as ARM64 if universal binary)
|
||||||
|
end
|
||||||
|
|
||||||
|
license "MIT"
|
||||||
|
|
||||||
|
livecheck do
|
||||||
|
url "https://git.him-tools.de/api/v1/repos/HIM-public/webdrop-bridge/releases/latest"
|
||||||
|
strategy :json do |json|
|
||||||
|
json["tag_name"]&.strip&.sub(/^v/, "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
app "WebDropBridge.app"
|
||||||
|
|
||||||
|
post_install do
|
||||||
|
# Create user defaults directory if needed
|
||||||
|
system "mkdir", "-p", "#{Dir.home}/.webdrop-bridge"
|
||||||
|
end
|
||||||
|
|
||||||
|
def caveats
|
||||||
|
<<~EOS
|
||||||
|
WebDropBridge has been installed.
|
||||||
|
|
||||||
|
Configuration files are stored in: ~/.webdrop-bridge/
|
||||||
|
Logs are written to: ~/.webdrop-bridge/logs/
|
||||||
|
|
||||||
|
To start the application:
|
||||||
|
- Open Applications > WebDropBridge
|
||||||
|
- Or run: open /Applications/WebDropBridge.app
|
||||||
|
|
||||||
|
For documentation: https://git.him-tools.de/HIM-public/webdrop-bridge
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
126
build/package-managers/README.md
Normal file
126
build/package-managers/README.md
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
# Package Manager Distributions
|
||||||
|
|
||||||
|
This directory contains package manager configurations for distributing WebDropBridge across different platforms.
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
build/
|
||||||
|
├── chocolatey/ # Windows - Chocolatey/NuGet package
|
||||||
|
│ ├── webdrop-bridge.nuspec # Package manifest
|
||||||
|
│ └── tools/
|
||||||
|
│ ├── chocolateyInstall.ps1 # Installation script
|
||||||
|
│ └── chocolateyUninstall.ps1 # Uninstallation script
|
||||||
|
│
|
||||||
|
└── homebrew/ # macOS - Homebrew formula
|
||||||
|
└── webdrop-bridge.rb # Homebrew formula
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Chocolatey Package (Windows)
|
||||||
|
|
||||||
|
1. **Build MSI installer**:
|
||||||
|
```bash
|
||||||
|
python build/scripts/build_windows.py --msi
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Get SHA256 checksum**:
|
||||||
|
```powershell
|
||||||
|
certutil -hashfile build/dist/windows/WebDropBridge_Setup.msi SHA256
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Update package files**:
|
||||||
|
- `build/chocolatey/webdrop-bridge.nuspec` - update `<version>`
|
||||||
|
- `build/chocolatey/tools/chocolateyInstall.ps1` - update `$Version` and `$Checksum`
|
||||||
|
|
||||||
|
4. **Package it** (requires Chocolatey CLI):
|
||||||
|
```powershell
|
||||||
|
cd build/chocolatey
|
||||||
|
choco pack webdrop-bridge.nuspec
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Publish** (requires Chocolatey API key):
|
||||||
|
```powershell
|
||||||
|
choco push webdrop-bridge.0.8.0.nupkg --api-key YOUR_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
### Homebrew Formula (macOS)
|
||||||
|
|
||||||
|
1. **Build DMG installer**:
|
||||||
|
```bash
|
||||||
|
bash build/scripts/build_macos.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Get SHA256 checksum**:
|
||||||
|
```bash
|
||||||
|
shasum -a 256 build/dist/macos/WebDropBridge_Setup.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Update formula**:
|
||||||
|
- `build/homebrew/webdrop-bridge.rb` - update `version` and `sha256`
|
||||||
|
|
||||||
|
4. **Test locally**:
|
||||||
|
```bash
|
||||||
|
brew audit --formula build/homebrew/webdrop-bridge.rb
|
||||||
|
brew install build/homebrew/webdrop-bridge.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Publish** (create Forgejo tap or submit to official Homebrew):
|
||||||
|
- Option A: Create `homebrew-webdrop-bridge` tap on Forgejo
|
||||||
|
- Option B: Submit to `homebrew/casks` on GitHub
|
||||||
|
|
||||||
|
## Publishing Strategy
|
||||||
|
|
||||||
|
### Recommended Approach for HIM
|
||||||
|
|
||||||
|
1. **Chocolatey**:
|
||||||
|
- Host in internal Artifactory/Azure Artifacts NuGet repository
|
||||||
|
- OR submit to Chocolatey community (chocolatey.org)
|
||||||
|
- Users: `choco install webdrop-bridge`
|
||||||
|
|
||||||
|
2. **Homebrew**:
|
||||||
|
- Create custom tap: `HIM-public/homebrew-webdrop-bridge` on Forgejo
|
||||||
|
- Users add tap: `brew tap HIM-public/webdrop-bridge https://git.him-tools.de/...`
|
||||||
|
- Users: `brew install webdrop-bridge`
|
||||||
|
|
||||||
|
3. **Fallback**:
|
||||||
|
- Direct wget/downloads from Forgejo releases
|
||||||
|
- Built-in auto-update system in app
|
||||||
|
|
||||||
|
## Release Checklist
|
||||||
|
|
||||||
|
When releasing version X.Y.Z:
|
||||||
|
|
||||||
|
- [ ] Build Windows MSI: `python build/scripts/build_windows.py --msi`
|
||||||
|
- [ ] Build macOS DMG: `bash build/scripts/build_macos.sh`
|
||||||
|
- [ ] Calculate checksums (certutil / shasum)
|
||||||
|
- [ ] Create Forgejo release with installers
|
||||||
|
- [ ] Update `build/chocolatey/webdrop-bridge.nuspec` version
|
||||||
|
- [ ] Update `build/chocolatey/tools/chocolateyInstall.ps1` version & checksum
|
||||||
|
- [ ] Update `build/homebrew/webdrop-bridge.rb` version & checksum
|
||||||
|
- [ ] Test Chocolatey package locally
|
||||||
|
- [ ] Test Homebrew formula locally
|
||||||
|
- [ ] Publish to package managers
|
||||||
|
|
||||||
|
## User Installation Commands
|
||||||
|
|
||||||
|
After publishing:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Windows
|
||||||
|
choco install webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# macOS
|
||||||
|
brew tap HIM-public/webdrop-bridge https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
|
||||||
|
brew install webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Full Documentation](../../docs/PACKAGE_MANAGER_SUPPORT.md)
|
||||||
|
- [Chocolatey Docs](https://docs.chocolatey.org/)
|
||||||
|
- [Homebrew Docs](https://docs.brew.sh/)
|
||||||
|
- [Forgejo API](https://docs.gitea.com/api/1.22/)
|
||||||
391
docs/PACKAGE_MANAGER_SUPPORT.md
Normal file
391
docs/PACKAGE_MANAGER_SUPPORT.md
Normal file
|
|
@ -0,0 +1,391 @@
|
||||||
|
# Package Manager Support for WebDropBridge
|
||||||
|
|
||||||
|
This document explains how to build and publish WebDropBridge to package managers like Chocolatey (Windows) and Homebrew (macOS).
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
WebDropBridge supports installation via package managers, making it easier for users to install, update, and manage the application.
|
||||||
|
|
||||||
|
| Package Manager | OS | Status | Directory |
|
||||||
|
|-----------------|-----|--------|-----------|
|
||||||
|
| **Chocolatey** | Windows | Supported | `build/chocolatey/` |
|
||||||
|
| **Homebrew** | macOS | Supported | `build/homebrew/` |
|
||||||
|
| **Winget** | Windows | Optional | Future |
|
||||||
|
|
||||||
|
## Quick Start: Simplest Approach (Direct Distribution)
|
||||||
|
|
||||||
|
**No infrastructure or accounts needed** - just build once and share:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 1. Build the Chocolatey package
|
||||||
|
cd build/chocolatey
|
||||||
|
python ../../build/scripts/build_windows.py --msi
|
||||||
|
certutil -hashfile "../../build/dist/windows/WebDropBridge_Setup.msi" SHA256
|
||||||
|
# Update checksum in tools/chocolateyInstall.ps1
|
||||||
|
choco pack webdrop-bridge.nuspec
|
||||||
|
|
||||||
|
# 2. Share webdrop-bridge.0.8.0.nupkg
|
||||||
|
# File share: \\server\packages\
|
||||||
|
# USB drive, email, Forgejo releases, etc.
|
||||||
|
|
||||||
|
# 3. Users install it
|
||||||
|
# choco install webdrop-bridge.0.8.0.nupkg -s "\\server\packages"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Advantages:**
|
||||||
|
- ✅ No accounts or external infrastructure
|
||||||
|
- ✅ Works in air-gapped/offline environments
|
||||||
|
- ✅ Simple one-time setup
|
||||||
|
- ✅ Version management through file shares
|
||||||
|
|
||||||
|
**For centralized distribution**, see Options 1-3 below.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Chocolatey (Windows)
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Chocolatey installed: https://chocolatey.org/install
|
||||||
|
- (Only for public community repo) Chocolatey maintainer account at chocolatey.org
|
||||||
|
|
||||||
|
### Building the Chocolatey Package
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Build MSI installer first
|
||||||
|
python build/scripts/build_windows.py --msi
|
||||||
|
|
||||||
|
# 2. Calculate SHA256 checksum of the MSI
|
||||||
|
certutil -hashfile "build/dist/windows/WebDropBridge_Setup.msi" SHA256
|
||||||
|
|
||||||
|
# 3. Update the checksum in build/chocolatey/tools/chocolateyInstall.ps1
|
||||||
|
# Replace: $Checksum = ''
|
||||||
|
# With: $Checksum = 'YOUR_SHA256_HASH'
|
||||||
|
|
||||||
|
# 4. Update version in chocolatey/webdrop-bridge.nuspec
|
||||||
|
# <version>0.8.0</version>
|
||||||
|
|
||||||
|
# 5. Create the package
|
||||||
|
cd build/chocolatey
|
||||||
|
choco pack webdrop-bridge.nuspec
|
||||||
|
```
|
||||||
|
|
||||||
|
This creates `webdrop-bridge.0.8.0.nupkg`
|
||||||
|
|
||||||
|
### Publishing to Chocolatey
|
||||||
|
|
||||||
|
**Option 1: Internal NuGet Repository (Recommended for HIM)**
|
||||||
|
|
||||||
|
Host on your own NuGet server (Azure Artifacts, Artifactory, ProGet, etc.):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Configure Chocolatey to use internal repository
|
||||||
|
choco source add -n=internal-repo -s "https://your-artifactory.internal/nuget/chocolatey/"
|
||||||
|
|
||||||
|
# Push package to internal repo
|
||||||
|
nuget push webdrop-bridge.0.8.0.nupkg -Source https://your-artifactory.internal/nuget/chocolatey/ -ApiKey YOUR_API_KEY
|
||||||
|
|
||||||
|
# Users install from internal repo (already configured)
|
||||||
|
choco install webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 2: Community Repository (chocolatey.org)**
|
||||||
|
|
||||||
|
If you want public distribution (requires community maintainer account):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Push to community repo
|
||||||
|
choco push webdrop-bridge.0.8.0.nupkg --api-key YOUR_CHOCOLATEY_API_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 3: No Repository (Direct Distribution)**
|
||||||
|
|
||||||
|
Share the `.nupkg` file directly, users install locally:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# User downloads webdrop-bridge.0.8.0.nupkg and runs:
|
||||||
|
choco install webdrop-bridge.0.8.0.nupkg -s C:\path\to\package\folder
|
||||||
|
```
|
||||||
|
|
||||||
|
### User Installation
|
||||||
|
|
||||||
|
Depending on your chosen distribution:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# If using internal repository
|
||||||
|
choco install webdrop-bridge
|
||||||
|
|
||||||
|
# If using community repo (chocolatey.org)
|
||||||
|
choco install webdrop-bridge
|
||||||
|
|
||||||
|
# If distributing directly
|
||||||
|
choco install webdrop-bridge.0.8.0.nupkg -s "\\network\share\packages"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Homebrew (macOS)
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Homebrew installed: https://brew.sh
|
||||||
|
- GitHub or Gitea account for hosting tap repository
|
||||||
|
|
||||||
|
### Two Approaches
|
||||||
|
|
||||||
|
#### Option A: Local Tap (Recommended for HIM)
|
||||||
|
|
||||||
|
Create a custom tap repository to distribute your formula without submitting to official Homebrew.
|
||||||
|
|
||||||
|
**Setup:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create tap repository
|
||||||
|
mkdir homebrew-webdrop-bridge
|
||||||
|
cd homebrew-webdrop-bridge
|
||||||
|
|
||||||
|
# Create structure
|
||||||
|
mkdir -p Formula
|
||||||
|
cp ../build/homebrew/webdrop-bridge.rb Formula/
|
||||||
|
|
||||||
|
# Initialize git repo and push to Forgejo
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Add webdrop-bridge formula"
|
||||||
|
git remote add origin https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
|
||||||
|
git push -u origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
**User Installation:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add tap
|
||||||
|
brew tap HIM-public/webdrop-bridge https://git.him-tools.de/HIM-public/homebrew-webdrop-bridge.git
|
||||||
|
|
||||||
|
# Install
|
||||||
|
brew install webdrop-bridge
|
||||||
|
|
||||||
|
# Upgrade
|
||||||
|
brew upgrade webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option B: Official Homebrew Repository
|
||||||
|
|
||||||
|
Submit to `homebrew/casks` (requires more maintenance but no separate tap):
|
||||||
|
|
||||||
|
1. Fork https://github.com/Homebrew/homebrew-casks
|
||||||
|
2. Create pull request with Cask file
|
||||||
|
3. Homebrew maintainers review and merge
|
||||||
|
4. Users install via `brew install --cask webdrop-bridge`
|
||||||
|
|
||||||
|
### Building the Homebrew Package (Locally)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Build DMG installer
|
||||||
|
bash build/scripts/build_macos.sh
|
||||||
|
|
||||||
|
# 2. Calculate SHA256 checksum
|
||||||
|
shasum -a 256 "build/dist/macos/WebDropBridge_Setup.dmg"
|
||||||
|
|
||||||
|
# 3. Update formula with checksum and URL
|
||||||
|
# build/homebrew/webdrop-bridge.rb
|
||||||
|
# - url: https://git.him-tools.de/...releases/download/vX.X.X/WebDropBridge_Setup.dmg
|
||||||
|
# - sha256: YOUR_SHA256_HASH
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing Homebrew Formula Locally
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Validate formula syntax
|
||||||
|
brew audit --formula build/homebrew/webdrop-bridge.rb
|
||||||
|
|
||||||
|
# Install from local formula
|
||||||
|
brew install build/homebrew/webdrop-bridge.rb
|
||||||
|
|
||||||
|
# Verify installation
|
||||||
|
brew list webdrop-bridge
|
||||||
|
webdrop-bridge --version # If CLI exists, or check Applications folder
|
||||||
|
```
|
||||||
|
|
||||||
|
## Publishing Workflow
|
||||||
|
|
||||||
|
### Step 1: Build Release
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Release v0.8.0
|
||||||
|
|
||||||
|
# Windows MSI
|
||||||
|
python build/scripts/build_windows.py --msi
|
||||||
|
|
||||||
|
# macOS DMG
|
||||||
|
bash build/scripts/build_macos.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Create Forgejo Release
|
||||||
|
|
||||||
|
Tag and upload installers to Forgejo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v0.8.0 -m "Release 0.8.0"
|
||||||
|
git push upstream v0.8.0
|
||||||
|
|
||||||
|
# Upload MSI and DMG to Forgejo release page
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: Calculate Checksums
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Windows
|
||||||
|
certutil -hashfile WebDropBridge_Setup.msi SHA256
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
shasum -a 256 WebDropBridge_Setup.dmg
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Update Package Manager Files
|
||||||
|
|
||||||
|
**Chocolatey** (`build/chocolatey/tools/chocolateyInstall.ps1`):
|
||||||
|
```powershell
|
||||||
|
$Checksum = 'WINDOWS_SHA256_HASH'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Homebrew** (`build/homebrew/webdrop-bridge.rb`):
|
||||||
|
```ruby
|
||||||
|
sha256 "MACOS_SHA256_HASH"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5: Test Package Installation
|
||||||
|
|
||||||
|
**Chocolatey:**
|
||||||
|
```powershell
|
||||||
|
cd build/chocolatey
|
||||||
|
choco pack
|
||||||
|
choco install webdrop-bridge.0.8.0.nupkg -s .
|
||||||
|
```
|
||||||
|
|
||||||
|
**Homebrew (with tap):**
|
||||||
|
```bash
|
||||||
|
brew install ./build/homebrew/webdrop-bridge.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 6: Publish
|
||||||
|
|
||||||
|
**Chocolatey:**
|
||||||
|
```powershell
|
||||||
|
choco push webdrop-bridge.0.8.0.nupkg --api-key YOUR_KEY
|
||||||
|
```
|
||||||
|
|
||||||
|
**Homebrew:**
|
||||||
|
- If using local tap: Push to Forgejo repository
|
||||||
|
- If using official: Submit pull request to homebrew-casks
|
||||||
|
|
||||||
|
## Update Workflow
|
||||||
|
|
||||||
|
### For Subsequent Releases (e.g., v0.9.0)
|
||||||
|
|
||||||
|
1. Build new installers (MSI/DMG)
|
||||||
|
2. Create Forgejo release with new version
|
||||||
|
3. Calculate new checksums
|
||||||
|
4. Update version and checksums in:
|
||||||
|
- `build/chocolatey/webdrop-bridge.nuspec`
|
||||||
|
- `build/chocolatey/tools/chocolateyInstall.ps1`
|
||||||
|
- `build/homebrew/webdrop-bridge.rb`
|
||||||
|
5. Test locally
|
||||||
|
6. Publish to package managers
|
||||||
|
|
||||||
|
## Configuration in Package Managers
|
||||||
|
|
||||||
|
### Chocolatey
|
||||||
|
|
||||||
|
Located in: `build/chocolatey/tools/chocolateyInstall.ps1`
|
||||||
|
|
||||||
|
Key variables to update per release:
|
||||||
|
- `$Version` - Application version
|
||||||
|
- `$Url` - Download URL (Forgejo release)
|
||||||
|
- `$Checksum` - SHA256 hash of MSI
|
||||||
|
- `$ChecksumType` - Type of hash (sha256)
|
||||||
|
|
||||||
|
### Homebrew
|
||||||
|
|
||||||
|
Located in: `build/homebrew/webdrop-bridge.rb`
|
||||||
|
|
||||||
|
Key variables to update per release:
|
||||||
|
- `version` - Application version
|
||||||
|
- `url` - Download URL (Forgejo release)
|
||||||
|
- `sha256` - SHA256 hash of DMG
|
||||||
|
|
||||||
|
## Automatic Updates
|
||||||
|
|
||||||
|
### Via Package Managers
|
||||||
|
|
||||||
|
When users install via Chocolatey/Homebrew, they receive updates through:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Chocolatey
|
||||||
|
choco upgrade webdrop-bridge
|
||||||
|
|
||||||
|
# Homebrew
|
||||||
|
brew upgrade webdrop-bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
### Built-in Auto-Update (Fallback)
|
||||||
|
|
||||||
|
WebDropBridge also includes built-in auto-update mechanism that:
|
||||||
|
1. Checks Forgejo releases API on startup
|
||||||
|
2. Notifies user of available updates
|
||||||
|
3. Downloads and installs directly (bypasses package manager)
|
||||||
|
|
||||||
|
This works for:
|
||||||
|
- Direct downloads via wget
|
||||||
|
- Standalone installer use
|
||||||
|
- Users who skip package manager route
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Chocolatey Issues
|
||||||
|
|
||||||
|
**Package won't install:**
|
||||||
|
- Verify checksum: `certutil -hashfile WebDropBridge_Setup.msi SHA256`
|
||||||
|
- Check MSI exists at URL: `wget URL`
|
||||||
|
- Verify SHA256 matches in `chocolateyInstall.ps1`
|
||||||
|
|
||||||
|
**Uninstall fails:**
|
||||||
|
- Try manual uninstall first
|
||||||
|
- Then recreate the Chocolatey package
|
||||||
|
|
||||||
|
### Homebrew Issues
|
||||||
|
|
||||||
|
**Formula won't install:**
|
||||||
|
- Validate syntax: `brew audit --formula webdrop-bridge.rb`
|
||||||
|
- Check URL is accessible: `curl -I URL`
|
||||||
|
- Verify SHA256: `shasum -a 256 WebDropBridge_Setup.dmg`
|
||||||
|
|
||||||
|
**Upgrade fails:**
|
||||||
|
- Remove old version: `brew uninstall webdrop-bridge`
|
||||||
|
- Reinstall: `brew install webdrop-bridge`
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- **Chocolatey Documentation**: https://docs.chocolatey.org/
|
||||||
|
- **Homebrew Formula Reference**: https://docs.brew.sh/Formula-Cookbook
|
||||||
|
- **Homebrew Cask**: https://docs.brew.sh/Cask-Cookbook
|
||||||
|
- **Forgejo Releases**: https://git.him-tools.de/HIM-public/webdrop-bridge/releases
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Distribution Strategy Options for HIM:**
|
||||||
|
|
||||||
|
1. **Easiest: Direct Distribution** ✅
|
||||||
|
- Share `.nupkg` file via file share or email
|
||||||
|
- Users: `choco install webdrop-bridge.0.8.0.nupkg -s "\\share\packages"`
|
||||||
|
- No infrastructure needed
|
||||||
|
- No maintainer account required
|
||||||
|
|
||||||
|
2. **Better: Internal NuGet Repository** ✅ (Recommended)
|
||||||
|
- Host on Azure Artifacts or Artifactory
|
||||||
|
- Professional package management
|
||||||
|
- Automatic updates with `choco upgrade`
|
||||||
|
- Users: `choco install webdrop-bridge` (pre-configured)
|
||||||
|
|
||||||
|
3. **Public: Chocolatey Community** (Optional)
|
||||||
|
- Publish to chocolatey.org (requires maintainer account + vetting)
|
||||||
|
- Widest distribution
|
||||||
|
- Public users: `choco install webdrop-bridge`
|
||||||
Loading…
Add table
Add a link
Reference in a new issue