Thanks for taking the time to contribute! PulseDeploy is a modular sysadmin automation toolkit and contributions that improve reliability, add distro support, or expand service coverage are very welcome.
Before opening an issue, please:
- Check the existing issues to avoid duplicates
- Confirm the issue is reproducible on a clean server
When reporting, include:
- Your OS and version (
cat /etc/os-release) - Stack/services you selected
- The full error output from
/var/log/server-bootstrap.log - Steps to reproduce
Use the Bug Report issue template.
Open a Feature Request issue with:
- A clear description of the problem it solves
- Which distros/stacks it would affect
- Any implementation ideas you have
git clone https://github.com/Xbot-me/PulseDeploy.git
cd PulseDeploy
chmod +x bootstrap.sh scripts/**/*.shfeat/your-feature-name
fix/what-you-are-fixing
docs/what-you-are-documenting
-
Run ShellCheck on any
.shfiles you modified:shellcheck -x bootstrap.sh revert.sh find scripts/ tests/ -name "*.sh" | xargs shellcheck -x
-
Follow the module pattern β every service or OS module should:
- Be independently sourceable (no hard dependencies on bootstrap.sh state beyond
$PKG_MANAGERand$OS_ID) - Use the
os_pkg_install,os_svc_enable,os_firewall_cmdabstractions - Use the
log(),warn(),error(),info(),section()helpers fromscripts/lib/common.sh(source it at the top of every module) - Read settings from plain variables with defaults (
${PHP_VER:-8.2}), and never prompt β prompting belongs inbootstrap.sh's wizard so--non-interactivenever hangs - Verify that what you installed really works before logging success
- Be idempotent: a second run must not duplicate config, overwrite user files, or rotate credentials
- Edit config with
conf_set/ drop-in files andbackup_file, never by overwriting package-owned files
- Be independently sourceable (no hard dependencies on bootstrap.sh state beyond
-
Run the unit tests:
bash tests/run.sh -
Test on a real VM if possible β at minimum Ubuntu 22.04 or Debian 12. Run your change twice to prove it is idempotent, then
revert.shto prove it undoes cleanly.
- ShellCheck passes with no errors (
shellcheck -x) - New scripts follow the existing module pattern
- README updated if new stack/service/distro added
- Commit messages follow
type: descriptionformat (feat:,fix:,docs:,chore:)
scripts/lib/ # Shared helpers: logging, validation, packages, services, config editing
scripts/os/ # One file per distro β handles pkg manager, repos, firewall abstraction
scripts/stacks/ # Stack installers (lemp, lamp, node)
scripts/services/ # Individual service installers (redis, docker, certbot, etc.)
config/ # Config file templates (nginx, apache)
tests/run.sh # Unit tests (no root/network needed)
By contributing, you agree that your contributions will be licensed under the MIT License.