From 82a155d494e709106e6f360755b6791e0fd9f9d6 Mon Sep 17 00:00:00 2001 From: Engelgardt23 Date: Mon, 18 May 2026 22:15:48 +0300 Subject: [PATCH] docs: update CHANGELOG, CONTRIBUTING, issue templates for vrcx - CHANGELOG: new [Unreleased] section describing the vrcx feature set on top of the inherited 0.1.0 (bmccollect) baseline - CONTRIBUTING: dev/prod/old layout, full src/vrcx/ module tour, updated build/install commands, expanded 'where features go' table - ISSUE_TEMPLATE/config.yml: security advisories link points at vrcx --- .github/ISSUE_TEMPLATE/config.yml | 2 +- CHANGELOG.md | 24 ++++++++++-- CONTRIBUTING.md | 63 ++++++++++++++++++++----------- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 247e52b..1ed2f59 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Security vulnerability - url: https://github.com/Engelgardt23/bmccollect/security/advisories/new + url: https://github.com/Engelgardt23/vrcx/security/advisories/new about: Please report security issues privately via GitHub Security Advisories — not as a public issue. diff --git a/CHANGELOG.md b/CHANGELOG.md index 698cda5..f15763c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,30 @@ # Changelog -All notable changes to **bmccollect** are documented in this file. +All notable changes to **vrcx** are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Renamed from `bmccollect` to **vrcx** (Vegman Remote Collect, extended). +- **Parallel BMC + SDS collection.** Per host, the BMC and the SDS service OS are queried in parallel via two independent SSH sessions; per-host output layout now has `bmc/` and `os/` subfolders. +- **SDS host SSH client** (`sds.py`) with a `sudo(cmd)` helper that funnels the password through `sudo -S` — no NOPASSWD changes required on the host. +- **OS command table** (`os_commands.py`): `lsigetlinux.sh`, `storcli64`, `nvme list`, `smartctl -x` per drive, `dmidecode`, `dmesg -T`, `journalctl -b`, `/var/log/messages`, `lspci`, `lsblk`. +- **SDS IP discovery** (`discover.py`) — Redfish `EthernetInterfaces` → `/24` ping-sweep → `arp -a` lookup, with a manual-prompt fallback per host. +- **i18n** (`i18n.py`) — bilingual UI; first run prompts EN/RU and persists the choice. +- **`config.ini`** next to the exe with inline EN+RU descriptions; knobs for default user, OS-by-default toggle, ping-sweep, parallel host count. +- **Clickable update check** in the header (link points to the releases page). +- Project repo layout split into `dev/` (current work), `prod/` (stable), `old/` (archived releases). +- New output layout: `out///{bmc,os}/`, shared `archives/dump_.tar.gz`, outer `.tar.gz`. +- Embedded application icon (`assets/icon.ico`, generated via `tools/make_icon.ps1`). + +### Changed +- `commands.py` (BMC table) carried over from the previous release without changes — BMC-only flow is 1:1 compatible with VRC v1.1b. +- Per-host folder name is now the BMC IP, not `_bmcdump_
`. ## [0.1.0] - 2026-05-16 ### Added -- Initial public release. +- Initial public release (as `bmccollect`). - Re-implementation of the original YADRO VRC tool as a properly structured Python project. - Multi-BMC parallel collection over SSH, with the YADRO BMC CLI command set + raw shell + `cat` + `journalctl` + Redfish. - Output structure 1:1 with VRC v1.1b — same per-host `_bmcdump_` layout inside a single session `tar.gz`. @@ -16,5 +32,5 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and - Auto-update check on startup against GitHub `/releases/latest`. - MIT licensed. -[Unreleased]: https://github.com/Engelgardt23/bmccollect/compare/v0.1.0...HEAD -[0.1.0]: https://github.com/Engelgardt23/bmccollect/releases/tag/v0.1.0 +[Unreleased]: https://github.com/Engelgardt23/vrcx/compare/v0.1.0...HEAD +[0.1.0]: https://github.com/Engelgardt23/vrcx/releases/tag/v0.1.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 82624a6..3f74e86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,51 +5,68 @@ ## Repo layout ``` -bmccollect/ +vrcx/ ├── .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 +├── dev/ ← current work (everything code-related lives here) +│ ├── src/vrcx/ +│ │ ├── __init__.py ← single source of truth for __version__ +│ │ ├── __main__.py ← entry: python -m vrcx +│ │ ├── app.py ← orchestration: config, prompts, threads, packaging +│ │ ├── config.py ← config.ini next to the exe (first-run prompt) +│ │ ├── i18n.py ← EN/RU translation table + t() helper +│ │ ├── platform_win.py ← VT enable +│ │ ├── update_check.py ← GitHub /releases/latest poll (returns tag) +│ │ ├── commands.py ← BMC artefacts table +│ │ ├── bmc.py ← BmcSession (SSH + Redfish helper) +│ │ ├── collector.py ← per-host BMC collect loop +│ │ ├── os_commands.py ← SDS-host artefacts table +│ │ ├── sds.py ← SdsSession (SSH + sudo -S + SFTP) +│ │ ├── os_collector.py ← per-host OS collect loop +│ │ ├── discover.py ← Redfish-MAC → ARP → SDS IP +│ │ ├── tarball.py ← layout, per-host & session tar.gz +│ │ └── ui.py ← rich-based TUI +│ ├── assets/icon.ico ← embedded app icon +│ ├── tools/make_icon.ps1 ← regenerate the icon +│ ├── vrcx-launcher.py ← PyInstaller entry (absolute import) +│ ├── vrcx.spec ← PyInstaller spec (gitignored) +│ └── pyproject.toml +├── prod/ ← last stable portable build (gitignored) +├── old/ ← previous portable builds, kept for rollback +├── CHANGELOG.md / CONTRIBUTING.md / LICENSE / README.md / README.ru.md / SECURITY.md └── .gitignore ``` +`dev/` / `prod/` / `old/` is a workflow convention: new changes land in `dev/`, the validated build is copied into `prod/`, the previous `prod/` is archived under `old/`. + ## Run from source ``` python -m pip install rich paramiko -PYTHONPATH=src python -m bmccollect +PYTHONPATH=dev/src python -m vrcx ``` ## Editable install ``` +cd dev python -m pip install -e . -bmccollect +vrcx ``` ## Build the portable .exe ``` python -m pip install pyinstaller rich paramiko -python -m PyInstaller --onefile --console --name bmccollect --paths src bmccollect-launcher.py +python -m PyInstaller --onefile --console --name vrcx \ + --icon dev/assets/icon.ico \ + --paths dev/src dev/vrcx-launcher.py ``` ## Cut a release -1. Update `src/bmccollect/__init__.py` — bump `__version__` to `X.Y.Z`. +1. Bump `dev/src/vrcx/__init__.py` → `__version__ = "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`. @@ -61,8 +78,12 @@ CI builds the exe and creates the GitHub Release with the zip attached. | Adding... | Touch this module | |---|---| -| A new artefact (file in the dump) | `commands.py` → one new `CommandSpec` row | +| New BMC artefact | `commands.py` → one new `CommandSpec` row | +| New SDS-host artefact | `os_commands.py` → one new `OsCommandSpec` 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.py` → `Ui._render_table` + `set_progress` / `set_summary` | +| Different discovery strategy | `discover.py` | +| New per-host UI column / progress detail | `ui.py` → `Ui._render_table` + `set_progress` | | Different output naming or layout | `tarball.py` | +| New configuration knob | `config.py` (add field + parser line) and use it from `app.py` | +| New translated string | `i18n.py` — add the key to both `en` and `ru` | | Tweaking the startup banner / prompts | `app.py` → `main` / `_prompt_inputs` |