2.2 KiB
2.2 KiB
tags
| tags | ||
|---|---|---|
|
📚 Scripts Directory Best Practices Index
Purpose: This document serves as the mandatory quality gate index for all shell scripts, configuration guides, and setup manuals (*.md/*.sh) residing in this directory. Every script must adhere to these updated standards.
Mandates of Modern Scripting (Version v2.0)
All standalone scripts should follow a template emphasizing security, idempotency, and clear execution logic.
1. Structure and Readability
- Headers: Must start with a
#title and include an executive summary stating WHO, WHAT the script does, and WHY it is necessary (the problem it solves). - Dependencies: The first section must clearly list all required external tools (
# Requires: sudo, curl, docker-compose).
2. Execution Practices
- Idempotency Check: Scripts should aim for idempotent operations. If step N fails, running the exact same script on a machine that subsequently fixed step N should not fail again due to intermediate artifacts.
- Error Handling: Use
set -euo pipefailat the top of every shell script. This ensures that:-e: The script will exit immediately if any command fails.-u: Unset variables are treated as an error.-o pipefail: Pipelines fail if any command in the pipeline fails, not just the last one.
3. Deployment & Automation Best Practices (The 'Modern' Way)
For production environments or CI/CD:
- DO NOT rely solely on simple shell scripts. For complex workflows involving multi-step deployments, utilize Ansible Playbooks or Docker Compose. These tools manage state and dependencies far more reliably than manual scripting.
- If a script must be used (e.g., for one-off cleanup), it should minimally rely on
sudoand include instructions to run the subsequent necessary user permission changes (sudo usermod...).
[!NOTE] Modernized Workflow Moving forward, any new scripting requirement that involves setup or deployment logic must first be modeled as a declarative configuration (Ansible Playbook) before being written as an imperative script. Shell scripts should be relegated to simple file execution wrappers only.