Thank you for your interest in contributing to DevChest. This document explains how to propose changes, add new scripts, and open issues or pull requests.
- Use the issue templates when opening an issue (bug report, feature request, update/improvement, or question).
- Search existing issues first to avoid duplicates.
- Include your OS and version, and steps to reproduce when reporting bugs.
-
Fork the repository and clone your fork locally.
-
Create a branch from
mainusing the naming convention:git checkout -b feat/flavour/package-name
Examples:
feat/ubuntu/docker— new Docker install script for Ubuntufix/install-curl-fallback— fix in main install scriptdocs/readme-quickstart— documentation only
-
Make your changes and keep commits focused and clear.
-
Push to your fork:
git push origin feat/flavour/package-name
-
Open a pull request against
main. Use the PR template and describe what you changed and why.
- Create a new file under
tools/named<tool-id>.sh(e.g.my-tool.sh). - Define metadata at the top:
TOOL_ID(lowercase,a-z0-9-),TOOL_DISPLAY_NAME,TOOL_DESCRIPTION.- Optional:
TOOL_SUPPORTED_OS_IDS,TOOL_CATEGORIES,TOOL_CORE_COMMANDS,TOOL_DEBIAN_PACKAGES,TOOL_REDHAT_PACKAGES.
- Implement
install_<tool_id>anduninstall_<tool_id>(replace-with_in the function name). - Optionally implement
is_<tool_id>_installedso the tool appears in the uninstall menu when installed. - Use only
OS_FAMILY,OS_ID,OS_VERSIONand helpers fromlib/(e.g.dc_log_info,dc_apt_install,dc_tool_check_deps). Do not detect OS inside the tool script.
See REQUIREMENTS.md for the full tool contract, metadata, and the canonical tool skeleton.
- All shell scripts must pass shellcheck (no errors; address high-severity warnings) and shfmt (consistent formatting).
- Follow the conventions in REQUIREMENTS.md:
dc_*/DC_*namespacing,set -euo pipefail, noevalon untrusted input, no unsaferm -rfon user input, no embedded secrets.
Run these checks to match what CI runs (see .github/workflows/lint.yml):
-
ShellCheck — lint all shell scripts:
shellcheck lib/*.sh install.sh uninstall.sh tools/*.sh
Install:
apt install shellcheck(Debian/Ubuntu) or shellcheck.net. -
shfmt — check or apply formatting:
shfmt -d -i 2 -ci -bn -sr lib/*.sh install.sh uninstall.sh tools/*.sh
To fix formatting:
shfmt -i 2 -ci -bn -sr -w lib/*.sh install.sh uninstall.sh tools/*.sh
Install:
apt install shfmt(Debian/Ubuntu) or mvdan.cc/sh. -
Standards verification — forbidden patterns (eval, curl|bash, unsafe rm -rf):
bash scripts/verify-standards.sh
Exits non-zero if any forbidden pattern is found.
- New scripts: Automation for installing or configuring tools on supported Linux distros.
- Improvements: Fixes, better error handling, idempotency, or clearer output in existing scripts.
- Documentation: Clear README updates, comments in scripts, or CONTRIBUTING improvements.
feat/<scope>/<short-description>— new feature or scriptfix/<scope>/<short-description>— bug fixdocs/<short-description>— documentation onlychore/<short-description>— maintenance (deps, CI, etc.)
Open a question/support issue or start a discussion. We’re happy to help.
Thanks for contributing!