vrcx/CONTRIBUTING.md
Engelgardt23 4e727b669d vrcx 0.2.0-dev: BMC + SDS parallel collector
Initial commit of vrcx (Vegman Remote Collect, extended) — the BMC-only
bmccollect renamed and extended with a parallel SDS-host log branch.

- dev/prod/old repo layout
- per-host bmc/ + os/ subdirs, archives/dump_<ip>.tar.gz, outer session tarball
- SdsSession (paramiko, sudo via -S), OS_COMMAND_TABLE (lsiget, storcli, smartctl, journal, dmidecode, etc.)
- SDS IP discovery via Redfish EthernetInterfaces -> /24 ping-sweep -> arp -a
- UI shows BMC|OS dual progress per host
- CI/pyinstaller paths updated for dev/
2026-05-18 17:38:07 +03:00

2.7 KiB

Contributing

Project layout, build, and release flow. If you only want to use the tool — read README instead.

Repo layout

bmccollect/
├── .github/
│   ├── workflows/release.yml          ← CI: tag-driven build + GitHub Release
│   └── ISSUE_TEMPLATE/                ← bug / feature / security routing
├── src/bmccollect/                    ← package source (≤200 lines per module)
│   ├── __init__.py                    ← single source of truth for __version__
│   ├── __main__.py                    ← entry: python -m bmccollect
│   ├── app.py                         ← orchestration: prompts, threads, packaging
│   ├── platform_win.py                ← VT enable
│   ├── update_check.py                ← GitHub /releases/latest poll
│   ├── commands.py                    ← table of "filename → how to obtain it"
│   ├── bmc.py                         ← BmcSession (SSH + Redfish helper)
│   ├── collector.py                   ← per-host collect loop
│   ├── tarball.py                     ← layout, per-host & session tar.gz
│   └── ui.py                          ← rich-based TUI
├── bmccollect-launcher.py             ← PyInstaller entry (root, absolute import)
├── pyproject.toml                     ← deps, packaging, dynamic version
├── CHANGELOG.md / CONTRIBUTING.md / LICENSE / README.md / SECURITY.md
└── .gitignore

Run from source

python -m pip install rich paramiko
PYTHONPATH=src python -m bmccollect

Editable install

python -m pip install -e .
bmccollect

Build the portable .exe

python -m pip install pyinstaller rich paramiko
python -m PyInstaller --onefile --console --name bmccollect --paths src bmccollect-launcher.py

Cut a release

  1. Update src/bmccollect/__init__.py — bump __version__ to X.Y.Z.
  2. Update CHANGELOG.md — move items from [Unreleased] into a new [X.Y.Z] section with today's date.
  3. Commit: git commit -am "vX.Y.Z: …".
  4. Tag: git tag vX.Y.Z.
  5. Push: git push && git push --tags.

CI builds the exe and creates the GitHub Release with the zip attached.

Where features go

Adding... Touch this module
A new artefact (file in the dump) commands.py → one new CommandSpec row
Support for a new BMC API (e.g. IPMI) bmc.py → add a method on BmcSession; reference it from commands.py with a new kind
New per-host UI column / progress detail ui.pyUi._render_table + set_progress / set_summary
Different output naming or layout tarball.py
Tweaking the startup banner / prompts app.pymain / _prompt_inputs