{"id":35668792,"url":"https://github.com/xooooooooox/radp-bash-framework","last_synced_at":"2026-02-12T09:06:52.676Z","repository":{"id":332026458,"uuid":"1126155991","full_name":"xooooooooox/radp-bash-framework","owner":"xooooooooox","description":"A modular Bash framework providing structured bootstrapping, configuration management, logging, and a comprehensive toolkit for shell scripting.","archived":false,"fork":false,"pushed_at":"2026-02-05T19:39:25.000Z","size":1161,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-06T00:44:22.680Z","etag":null,"topics":["bash","bash-framework","commandline","scaffold"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xooooooooox.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-01T08:53:31.000Z","updated_at":"2026-02-05T19:39:18.000Z","dependencies_parsed_at":"2026-01-29T20:01:11.268Z","dependency_job_id":null,"html_url":"https://github.com/xooooooooox/radp-bash-framework","commit_stats":null,"previous_names":["xooooooooox/radp-bash-framework"],"tags_count":96,"template":false,"template_full_name":null,"purl":"pkg:github/xooooooooox/radp-bash-framework","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooooooooox%2Fradp-bash-framework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooooooooox%2Fradp-bash-framework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooooooooox%2Fradp-bash-framework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooooooooox%2Fradp-bash-framework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xooooooooox","download_url":"https://codeload.github.com/xooooooooox/radp-bash-framework/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xooooooooox%2Fradp-bash-framework/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29362208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","bash-framework","commandline","scaffold"],"created_at":"2026-01-05T18:12:53.946Z","updated_at":"2026-02-12T09:06:52.661Z","avatar_url":"https://github.com/xooooooooox.png","language":"Shell","readme":"# radp-bash-framework\n\n```\n    ____  ___    ____  ____     ____  ___   _____ __  __\n   / __ \\/   |  / __ \\/ __ \\   / __ )/   | / ___// / / /\n  / /_/ / /| | / / / / /_/ /  / __  / /| | \\__ \\/ /_/ /\n / _, _/ ___ |/ /_/ / ____/  / /_/ / ___ |___/ / __  /\n/_/ |_/_/  |_/_____/_/      /_____/_/  |_/____/_/ /_/\n\n```\n[![GitHub Release](https://img.shields.io/github/v/release/xooooooooox/radp-bash-framework?label=Release)](https://github.com/xooooooooox/radp-bash-framework/releases)\n[![Copr build status](https://copr.fedorainfracloud.org/coprs/xooooooooox/radp/package/radp-bash-framework/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/xooooooooox/radp/package/radp-bash-framework/)\n[![OBS package build status](https://build.opensuse.org/projects/home:xooooooooox:radp/packages/radp-bash-framework/badge.svg)](https://build.opensuse.org/package/show/home:xooooooooox:radp/radp-bash-framework)\n\n[![CI: COPR](https://img.shields.io/github/actions/workflow/status/xooooooooox/radp-bash-framework/build-copr-package.yml?label=CI%3A%20COPR)](https://github.com/xooooooooox/radp-bash-framework/actions/workflows/build-copr-package.yml)\n[![CI: OBS](https://img.shields.io/github/actions/workflow/status/xooooooooox/radp-bash-framework/build-obs-package.yml?label=CI%3A%20OBS)](https://github.com/xooooooooox/radp-bash-framework/actions/workflows/build-obs-package.yml)\n[![CI: Homebrew](https://img.shields.io/github/actions/workflow/status/xooooooooox/radp-bash-framework/update-homebrew-tap.yml?label=Homebrew%20tap)](https://github.com/xooooooooox/radp-bash-framework/actions/workflows/update-homebrew-tap.yml)\n\n[![COPR packages](https://img.shields.io/badge/COPR-packages-4b8bbe)](https://download.copr.fedorainfracloud.org/results/xooooooooox/radp/)\n[![OBS packages](https://img.shields.io/badge/OBS-packages-4b8bbe)](https://software.opensuse.org//download.html?project=home%3Axooooooooox%3Aradp\u0026package=radp-bash-framework)\n\nA modular Bash framework for building CLI applications with structured bootstrapping, configuration management, and a\ncomprehensive toolkit.\n\n## Features\n\n- **CLI Scaffolding** - Generate complete CLI projects with `radp-bf new myapp`\n- **CLI Scaffolding Upgrade** - Upgrade existing CLI projects to latest scaffold with `radp-bf upgrade`\n- **Annotation-based Commands** - Define commands using comment metadata (`@cmd`, `@arg`, `@option`)\n- **Auto-discovery** - Commands are discovered from directory structure, supports nested subcommands\n- **Shell Completion** - Generate Bash/Zsh completion scripts automatically\n- **YAML Configuration** - Layered config system with environment variable overrides\n- **Built-in Global Options** - `--config`, `--verbose`, `--debug` available for all CLI apps\n- **Logging** - Structured logging with levels (debug/info/warn/error)\n- **OS Detection** - Cross-platform utilities for distro, architecture, package manager detection\n- **Path Utilities** - File system helpers, path resolution\n- **IDE Code Completion** - BashSupport Pro integration for framework function and variable completion\n- **Dev/Install Mode** - Automatic config path detection based on `_ide.sh` marker\n\n## Requirements\n\n- Bash 4.3+\n- GNU getopt (for CLI argument parsing, auto-installed if missing)\n  - Linux: included in `util-linux`\n  - macOS: `brew install gnu-getopt`\n- [yq](https://github.com/mikefarah/yq) (for YAML parsing, auto-installed if missing)\n\n## Installation\n\n### Homebrew (macOS)\n\n```shell\nbrew tap xooooooooox/radp\nbrew install radp-bash-framework\n```\n\n### Script (curl)\n\n```shell\ncurl -fsSL https://raw.githubusercontent.com/xooooooooox/radp-bash-framework/main/install.sh | bash\n```\n\n### Portable Binary (Single File)\n\nDownload and run - no installation required:\n\n```shell\n# Standard version (~100KB) - macOS Apple Silicon\ncurl -fsSL -o radp-bf \\\n  https://github.com/xooooooooox/radp-bash-framework/releases/latest/download/radp-bf-portable-darwin-arm64\nchmod +x radp-bf \u0026\u0026 sudo mv radp-bf /usr/local/bin/\n\n# Full version (~20MB, zero dependencies) - macOS Apple Silicon\ncurl -fsSL -o radp-bf \\\n  https://github.com/xooooooooox/radp-bash-framework/releases/latest/download/radp-bf-portable-full-darwin-arm64\nchmod +x radp-bf \u0026\u0026 sudo mv radp-bf /usr/local/bin/\n```\n\nAvailable platforms: `linux-amd64`, `linux-arm64`, `darwin-amd64`, `darwin-arm64`\n\nSee [Installation Guide](docs/installation.md) for more options (RPM, OBS, portable, manual install, upgrade).\n\n## Quick Start\n\n### Create a CLI Project\n\n```shell\nradp-bf new myapp\ncd myapp\n./bin/myapp --help\n```\n\nThis generates:\n\n```\nmyapp/\n├── bin/myapp                 # Entry point\n├── src/main/shell/\n│   ├── commands/             # Command implementations\n│   │   ├── hello.sh          # myapp hello\n│   │   └── version.sh        # myapp version\n│   └── config/\n│       ├── config.yaml       # Configuration\n│       └── _ide.sh           # IDE support \u0026 dev mode marker\n├── .radp-cli/                # Scaffold metadata (for upgrade)\n└── install.sh                # Installer script\n```\n\n### Upgrade Existing Projects\n\nWhen the framework updates, upgrade your project's scaffold files:\n\n```shell\nradp-bf upgrade                     # Upgrade current directory\nradp-bf upgrade ./myapp --dry-run   # Preview changes\nradp-bf upgrade --force             # Overwrite modified files\nradp-bf -v upgrade .                # Upgrade with verbose output\n```\n\nThe upgrade command tracks changes via `.radp-cli/` metadata directory and detects user modifications.\n\nSee [Upgrade CLI Projects](docs/installation.md#upgrade-cli-projects) for more options.\n\n### Define Commands\n\nCommands use annotation-based metadata:\n\n```bash\n# src/main/shell/commands/greet.sh\n\n# @cmd\n# @desc Greet someone\n# @arg name!              Required argument\n# @option -l, --loud      Shout the greeting\n\ncmd_greet() {\n  local name=\"$1\"\n  local msg=\"Hello, $name!\"\n\n  if [[ \"${opt_loud:-}\" == \"true\" ]]; then\n    echo \"${msg^^}\"\n  else\n    echo \"$msg\"\n  fi\n}\n```\n\n```shell\n$ myapp greet World\nHello, World!\n\n$ myapp greet --loud World\nHELLO, WORLD!\n```\n\n### Subcommands\n\nCreate directories for command groups:\n\n```\ncommands/\n├── db/\n│   ├── migrate.sh    # myapp db migrate\n│   └── seed.sh       # myapp db seed\n└── hello.sh          # myapp hello\n```\n\n### Configuration\n\nYAML configuration with automatic variable mapping:\n\n```yaml\n# config/config.yaml\nradp:\n  extend:\n    myapp:\n      api_url: https://api.example.com\n```\n\nAccess in code:\n\n```bash\necho \"$gr_radp_extend_myapp_api_url\" # https://api.example.com\n```\n\nOverride via environment:\n\n```shell\nGX_RADP_EXTEND_MYAPP_API_URL=http://localhost:8080 myapp hello\n```\n\n### Shell Completion\n\n```shell\n# Bash\nmyapp completion bash \u003e~/.local/share/bash-completion/completions/myapp\n\n# Zsh\nmyapp completion zsh \u003e~/.zfunc/_myapp\n```\n\n## radp-bf CLI\n\nThe `radp-bf` command-line tool manages framework operations:\n\n```shell\nradp-bf new \u003cname\u003e [dir]      # Create new CLI project\nradp-bf upgrade [dir] [opts]  # Upgrade existing project scaffold\nradp-bf path \u003cname\u003e           # Print framework paths (init|launcher|root)\nradp-bf completion \u003cshell\u003e    # Generate shell completion (bash|zsh)\nradp-bf self-update           # Update to latest version (portable only)\nradp-bf version               # Show framework version\n```\n\n**Global options** (for any command):\n\n```shell\nradp-bf -v upgrade .          # Verbose output (info logs)\nradp-bf --debug upgrade .     # Debug output (debug logs)\n```\n\n**Shell completion for radp-bf:**\n\n```shell\n# Bash\nradp-bf completion bash \u003e ~/.local/share/bash-completion/completions/radp-bf\n\n# Zsh\nradp-bf completion zsh \u003e ~/.zfunc/_radp-bf\n```\n\n## Documentation\n\n- [Installation Guide](docs/installation.md) - All installation methods and upgrade instructions\n- [Getting Started](docs/getting-started.md) - Create your first CLI project\n- [CLI Development Guide](docs/user-guide/cli-development.md) - Complete guide to building CLI applications\n- [Command Annotations](docs/user-guide/annotations.md) - `@cmd`, `@arg`, `@option`, `@example` reference\n- [Configuration](docs/configuration.md) - YAML config system and environment variables\n- [API Reference](docs/reference/api.md) - Toolkit functions and IDE integration\n\n## Toolkit API\n\nThe framework provides utility functions organized by domain:\n\n| Domain        | Functions                                            | Description           |\n|---------------|------------------------------------------------------|-----------------------|\n| `radp_log_*`  | `debug`, `info`, `warn`, `error`                     | Structured logging    |\n| `radp_os_*`   | `get_distro_id`, `get_distro_pm`, `is_pkg_installed` | OS detection          |\n| `radp_io_*`   | `get_path_abs`                                       | File system utilities |\n| `radp_exec_*` | `exec`, `exec_sudo`, `set_dry_run`, `is_dry_run`     | Dry-run mode support  |\n| `radp_cli_*`  | `discover`, `dispatch`, `help`                       | CLI infrastructure    |\n\nSee [API Reference](docs/reference/api.md) for complete documentation.\n\n## Related Projects\n\n- [radp-vagrant-framework](https://github.com/xooooooooox/radp-vagrant-framework) - YAML-driven Vagrant framework\n- [homelabctl](https://github.com/xooooooooox/homelabctl) - Homelab infrastructure CLI\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and release process.\n\n## License\n\n[MIT](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxooooooooox%2Fradp-bash-framework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxooooooooox%2Fradp-bash-framework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxooooooooox%2Fradp-bash-framework/lists"}