8.3 KiB
Customer-Specific Build Examples
This document shows practical examples of how to build WebDrop Bridge for different customers or deployment scenarios.
Scenario 1: Single Build with Default Configuration
Situation: You have one main configuration for your primary customer or general use.
Setup:
webdrop_bridge/
├── .env # Your main configuration
└── build/
└── scripts/
└── build_windows.py
Build Command:
python build/scripts/build_windows.py --msi
Result: WebDropBridge-x.x.x-Setup.msi with your .env configuration bundled.
Scenario 2: Multi-Customer Builds
Situation: You support multiple customers, each with different URLs, allowed paths, etc.
Setup:
webdrop_bridge/
├── .env # Default project config
├── build/
│ └── scripts/
│ └── build_windows.py
└── deploy/ # Create this directory
└── customer_configs/
├── README.md
├── acme_corp.env
├── globex_corporation.env
├── initech.env
└── wayne_enterprises.env
Customer Config Example: deploy/customer_configs/acme_corp.env
APP_NAME=WebDrop Bridge - ACME Corp Edition
APP_VERSION=1.0.0
WEBAPP_URL=https://acme-drop.example.com/drop
ALLOWED_ROOTS=Z:/acme_files/,C:/Users/Public/ACME
LOG_LEVEL=INFO
LOG_FILE=logs/webdrop_bridge.log
ENABLE_LOGGING=true
WINDOW_WIDTH=1024
WINDOW_HEIGHT=768
Build Commands:
# Build for ACME Corp
python build/scripts/build_windows.py --msi --env-file deploy/customer_configs/acme_corp.env
# Build for Globex
python build/scripts/build_windows.py --msi --env-file deploy/customer_configs/globex_corporation.env
# Build for Initech
python build/scripts/build_windows.py --msi --env-file deploy/customer_configs/initech.env
# Build for Wayne Enterprises
python build/scripts/build_windows.py --msi --env-file deploy/customer_configs/wayne_enterprises.env
Result: Four separate MSI files:
WebDropBridge-1.0.0-Setup.msi(ACME - says "ACME Corp Edition")WebDropBridge-1.0.0-Setup.msi(Globex - say "Globex Edition")- etc.
Scenario 3: Development vs. Production Builds
Situation: You want different settings for internal testing vs. customer releases.
Setup:
webdrop_bridge/
├── .env # Production config (primary)
├── build/
│ └── scripts/
│ └── build_windows.py
└── build_configs/
├── development.env # For internal testing
├── staging.env # Pre-production testing
└── production.env # For customers (same as project .env)
Development Config: build_configs/development.env
APP_NAME=WebDrop Bridge DEV
WEBAPP_URL=http://localhost:3000
LOG_LEVEL=DEBUG
LOG_FILE=logs/webdrop_bridge.log
ENABLE_LOGGING=true
WINDOW_WIDTH=1024
WINDOW_HEIGHT=768
Build Commands:
# Development build (for testing)
python build/scripts/build_windows.py --env-file build_configs/development.env
# Staging build (pre-release testing)
python build/scripts/build_windows.py --env-file build_configs/staging.env
# Production build (for customers)
python build/scripts/build_windows.py --msi
# OR explicitly:
python build/scripts/build_windows.py --msi --env-file build_configs/production.env
Scenario 4: Building with Code Signing
Situation: You have a code signing certificate and want to sign releases.
Prerequisites:
- Set environment variable:
CODE_SIGN_CERT=path/to/certificate.pfx - Set environment variable:
CODE_SIGN_PASSWORD=your_password
Build Command:
python build/scripts/build_windows.py --msi --code-sign --env-file deploy/customer_configs/acme_corp.env
Result: Signed MSI installer ready for enterprise deployment.
Scenario 5: Automated Build Pipeline
Situation: You have multiple customers and want to automate builds.
Script: build_all_customers.ps1
# Build WebDrop Bridge for all customers
$PROJECT_ROOT = "C:\Development\VS Code Projects\webdrop_bridge"
$CONFIG_DIR = "$PROJECT_ROOT\deploy\customer_configs"
$BUILD_SCRIPT = "$PROJECT_ROOT\build\scripts\build_windows.py"
# Get all .env files for customers
$customerConfigs = @(
"acme_corp.env",
"globex_corporation.env",
"initech.env",
"wayne_enterprises.env"
)
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$output_dir = "$PROJECT_ROOT\build\releases\$timestamp"
New-Item -ItemType Directory -Path $output_dir -Force | Out-Null
Write-Host "🚀 Building WebDrop Bridge for all customers..." -ForegroundColor Cyan
Write-Host ""
foreach ($config in $customerConfigs) {
$customer_name = $config -replace '\.env$', ''
$config_path = "$CONFIG_DIR\$config"
Write-Host "Building for $customer_name..." -ForegroundColor Yellow
# Build
python $BUILD_SCRIPT --msi --env-file "$config_path"
# Copy to output directory
$msi_file = Get-ChildItem "$PROJECT_ROOT\build\dist\windows\*.msi" | Sort-Object LastWriteTime | Select-Object -Last 1
if ($msi_file) {
Copy-Item $msi_file.FullName "$output_dir\WebDropBridge-${customer_name}.msi"
Write-Host "✅ Built: WebDropBridge-${customer_name}.msi" -ForegroundColor Green
}
Write-Host ""
}
Write-Host "✅ All builds complete!" -ForegroundColor Green
Write-Host "📦 Outputs in: $output_dir"
Run:
.\build_all_customers.ps1
Result: All customer builds in a timestamped directory:
build/releases/2024-01-30_14-30-00/
├── WebDropBridge-acme_corp.msi
├── WebDropBridge-globex_corporation.msi
├── WebDropBridge-initech.msi
└── WebDropBridge-wayne_enterprises.msi
Configuration Best Practices
1. Version Numbers
Keep APP_VERSION in sync across all builds. Options:
- Use project
.envwith single source of truth - Or explicitly set in each customer config
2. Naming Convention
Customer configs:
deploy/customer_configs/
├── {customer_name_lowercase}.env
├── {customer_name_lowercase}-staging.env
└── {customer_name_lowercase}-dev.env
3. Security
- Don't commit customer configs to git (if they contain sensitive URLs)
- Use
.gitignore:deploy/customer_configs/*.env(but keep template) - Store customer configs in secure location (separate backup/version control)
4. Documentation
In each customer config, add comments:
# WebDropBridge Configuration - ACME Corp
# Last updated: 2024-01-30
# Contact: support@acmecorp.com
# The web application they'll connect to
WEBAPP_URL=https://acme-drop.example.com/drop
# Directories they can access
ALLOWED_ROOTS=Z:/acme_files/,C:/Users/Public/ACME
5. Testing
Before building for a customer:
- Copy their config to
.envin project root - Run the app:
python src/webdrop_bridge/main.py - Test the configuration loads correctly
- Then build:
python build/scripts/build_windows.py --msi
Troubleshooting
"Configuration file not found"
Problem: .env file specified with --env-file doesn't exist.
Solution:
# Check the file exists
ls deploy/customer_configs/acme_corp.env
# Use full path if relative path doesn't work
python build/scripts/build_windows.py --msi --env-file C:\full\path\to\acme_corp.env
Build fails with no --env-file specified
Problem: Project root .env doesn't exist, but no --env-file provided.
Solution:
# Option 1: Create .env in project root
copy .env.example .env
# Edit .env as needed
# Option 2: Specify custom location
python build/scripts/build_windows.py --msi --env-file deploy/customer_configs/your_config.env
App shows wrong configuration
Problem: Built app has old configuration.
Solution:
- Delete previous build:
rmdir /s build\dist - Verify you're using correct
.env:- Check with
python build/scripts/build_windows.py --help - Look at the console output during build: "📋 Using configuration: ..."
- Check with
- Rebuild
Summary
With the new configuration bundling system, you can:
- ✅ Build once, configure for different customers
- ✅ Maintain centralized customer configurations
- ✅ Automate multi-customer builds
- ✅ Deploy to different environments (dev/staging/prod)
- ✅ No manual customer setup required after installation