mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 23:41:48 +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.
Integration Tests
The scripts in this directory exercise the Pulse installer scripts inside isolated environments (typically Linux containers). They are intended to catch regressions that unit-style smoke tests cannot detect (e.g., filesystem layout, systemd unit generation, binary placement).
Prerequisites
- Docker or another container runtime supported by the test script. When Docker is unavailable the test will skip gracefully.
- Internet access is not required; HTTP interactions are stubbed.
Running the Docker Agent Installer Test
scripts/tests/integration/test-docker-agent-install.sh
The script will:
- Launch an Ubuntu 22.04 container (when Docker is available).
- Inject lightweight stubs for
systemctl,docker,curl, andwget. - Execute the refactored installer through several scenarios (dry run, full install, missing Docker handling, multi-target configuration, uninstall).
The container is discarded automatically, and no files are written to the host outside of the repository.
Adding New Integration Tests
- Place new test scripts in this directory. They should follow the pattern of detecting required tooling, skipping when prerequisites are missing, and producing clear PASS/FAIL output.
- Prefer running inside an ephemeral container to avoid modifying the host system.
- Use repository-relative paths (
/workspaceinside the container) and avoid relying on network resources. - Clean up all temporary files even when the test fails (use traps).
Reporting
Each integration script is self-contained and prints a concise summary at the end. CI jobs or developers can invoke them individually without modifying the top-level smoke test harness.