mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 00:17:39 +01:00
Implements a comprehensive script improvement infrastructure to reduce code duplication, improve maintainability, and enable easier testing of installer scripts. ## New Infrastructure ### Shared Library System (scripts/lib/) - common.sh: Core utilities (logging, sudo, dry-run, cleanup management) - systemd.sh: Service management helpers with container-safe systemctl - http.sh: HTTP/download helpers with curl/wget fallback and retry logic - README.md: Complete API documentation for all library functions ### Bundler System - scripts/bundle.sh: Concatenates library modules into single-file installers - scripts/bundle.manifest: Defines bundling configuration for distributables - Enables both modular development and curl|bash distribution ### Test Infrastructure - scripts/tests/run.sh: Test harness for running all smoke tests - scripts/tests/test-common-lib.sh: Common library validation (5 tests) - scripts/tests/test-docker-agent-v2.sh: Installer smoke tests (4 tests) - scripts/tests/integration/: Container-based integration tests (5 scenarios) - All tests passing ✓ ## Refactored Installer ### install-docker-agent-v2.sh - Reduced from 1098 to 563 lines (48% code reduction) - Uses shared libraries for all common operations - NEW: --dry-run flag support - Maintains 100% backward compatibility with original - Fully tested with smoke and integration tests ### Key Improvements - Sudo escalation: 100+ lines → 1 function call - Download logic: 51 lines → 1 function call - Service creation: 33 lines → 2 function calls - Logging: Standardized across all operations - Error handling: Improved with common library ## Documentation ### Rollout Strategy (docs/installer-v2-rollout.md) - 3-phase rollout plan (Alpha → Beta → GA) - Feature flag mechanism for gradual deployment - Testing checklist and success metrics - Rollback procedures and communication plan ### Developer Guides - docs/script-library-guide.md: Complete library usage guide - docs/CONTRIBUTING-SCRIPTS.md: Contribution workflow - docs/installer-v2-quickref.md: Quick reference for operators ## Metrics - Code reduction: 48% (1098 → 563 lines) - Reusable functions: 0 → 30+ - Test coverage: 0 → 8 test scenarios - Documentation: 0 → 5 comprehensive guides ## Testing All tests passing: - Smoke tests: 2/2 passed (8 test cases) - Integration tests: 5/5 scenarios passed - Bundled output: Syntax validated, dry-run tested ## Next Steps This lays the foundation for migrating other installers (install.sh, install-sensor-proxy.sh) to use the same pattern, reducing overall maintenance burden and improving code quality across the project.
4.9 KiB
4.9 KiB
Installer v2 Rollout Plan
1. Overview
The Docker agent installer (install-docker-agent.sh) has been refactored into a
modular, testable v2. Key improvements include:
- Shared library usage (
scripts/lib/*.sh) for logging, HTTP, and systemd helpers, reducing duplication and easing maintenance. - Support for
--dry-run, enabling administrators to preview actions safely. - Bundled single-file distribution generated by
scripts/bundle.shfor curl based installs, while keeping modular sources in the repository. - New smoke and integration tests to catch regressions.
Benefits:
- Users: Clearer logging, dry-run validation, safer rollbacks, and improved error handling.
- Developers: Consistent helper functions, faster iteration on fixes, and reusable testing infrastructure.
2. Rollout Strategy
Phase 1: Alpha Testing (Internal)
- Enable v2 via feature flag for internal environments only.
- Exercise on development clusters, CI agents, and dogfood installations.
- Validate dry-run, full install, multi-target, and uninstall scenarios.
- Duration: ~1 week.
Phase 2: Beta Testing (Early Adopters)
- Announce availability in release notes and internal channels.
- Provide explicit opt-in instructions (
PULSE_INSTALLER_V2=1). - Monitor install success metrics, support channels, and gather structured feedback from operators.
- Duration: ~2 weeks.
Phase 3: General Availability
- Flip feature flag default to v2 while retaining v1 as fallback for one full release cycle.
- Publish deprecation notice for the legacy installer.
- After the grace period, remove v1 from distribution.
- Duration: 1 release cadence (approx. 4–6 weeks).
3. Feature Flag Mechanism
Users can select installer versions via environment variable:
# Enable v2 (early adopter)
export PULSE_INSTALLER_V2=1
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...
# Force legacy v1
export PULSE_INSTALLER_V2=0
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...
# Server-side pseudo-code
if [[ "${PULSE_INSTALLER_V2:-0}" == "1" ]]; then
serve dist/install-docker-agent.sh
else
serve scripts/install-docker-agent-legacy.sh
fi
The download endpoint should inspect the flag (query parameter, header, or environment variable) and serve the appropriate script.
4. Testing Checklist
Before Rollout
- Smoke tests (
scripts/tests/run.sh) passing - Integration tests (
scripts/tests/integration/...) passing - Ubuntu 20.04 & 22.04 validated
- Debian 11 & 12 validated
- With and without Docker binary
- Multi-target configuration verified
- Uninstall path verified
- Documentation updated (INSTALL, FAQ, etc.)
- Release notes drafted
During Rollout
- Monitor error rates (CI dashboards, telemetry)
- Watch support channels/tickets for installer issues
- Sample successful installations daily
- Collect structured feedback from early adopters
5. Success Metrics
- Installation success rate ≥ 99%
- Median installation duration (baseline ±10%)
- Top error categories and frequency trending downward
- Positive/neutral user feedback (no significant negative trend)
- Rollback requests < 1%
6. Rollback Plan
If blocking issues surface:
Quick Rollback (< 5 minutes)
- Replace served script with v1 variant:
cp scripts/install-docker-agent-legacy.sh /var/www/html/install-docker-agent.sh # or update symlink pointing to dist/install-docker-agent.sh - Update documentation to reflect temporary rollback.
- Broadcast notice in release channels/support chat.
File references
- Legacy:
scripts/install-docker-agent-legacy.sh - Bundled v2:
dist/install-docker-agent.sh - Served location:
/download/install-docker-agent.sh(symlink/HTTP root)
7. Communication Plan
Announcements
- Release notes covering v2 highlights and rollout phases.
- Update product docs (
INSTALL.md, quick reference). - Post in GitHub Discussions / community forums.
- Optional blog post for broader awareness.
User Guidance
- Explain how to opt-in/out using
PULSE_INSTALLER_V2. - Highlight new capabilities (
--dry-run, improved messaging). - Provide support contact and bug-reporting instructions.
- Link to troubleshooting resources.
8. Known Limitations
- Limited testing on non-
systemdinit systems (manual startup handled but not optimized). - ARM architectures covered via dry-run and download stubs; on-device testing pending.
- Requires Bash 4.0+ (same as v1) — document for older environments.
9. Post-Rollout Tasks
- Remove feature flag after one successful release cycle.
- Retire legacy installer artifacts and adjust CI pipelines.
- Update all docs to reference v2 only.
- Apply modular pattern to remaining installers (install.sh, install-sensor-proxy.sh, pulse-auto-update.sh).
- Expand integration tests to cover additional distributions and scenarios.