Mining/docs/DEVELOPMENT.md

107 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

# Mining Development Guide
This guide is for developers contributing to the Mining project.
## Prerequisites
- **Go**: Version 1.24 or higher.
- **Make**: For running build scripts.
- **Node.js/npm**: For building the frontend (optional).
## Common Tasks
The project uses a `Makefile` to automate common tasks.
feat: Add WebSocket events, simulation mode, and redesigned Miners page WebSocket Real-Time Events: - Add EventHub for broadcasting miner events to connected clients - New event types: miner.starting/started/stopping/stopped/stats/error - WebSocket endpoint at /ws/events with auto-reconnect support - Angular WebSocketService with RxJS event streams and fallback to polling Simulation Mode (miner-ctrl simulate): - SimulatedMiner generates realistic hashrate data for UI development - Supports presets: cpu-low, cpu-medium, cpu-high, gpu-ethash, gpu-kawpow - Features: variance, sine-wave fluctuation, 30s ramp-up, 98% share rate - XMRig-compatible stats format for full UI compatibility - NewManagerForSimulation() skips autostart of real miners Miners Page Redesign: - Featured cards for installed/recommended miners with gradient styling - "Installed" (green) and "Recommended" (gold) ribbon badges - Placeholder cards for 8 planned miners with "Coming Soon" badges - Algorithm badges, GitHub links, and license info for each miner - Planned miners: T-Rex, lolMiner, Rigel, BzMiner, SRBMiner, TeamRedMiner, GMiner, NBMiner Chart Improvements: - Hybrid data approach: live in-memory data while active, database historical when inactive - Smoother transitions between data sources Documentation: - Updated DEVELOPMENT.md with simulation mode usage - Updated ARCHITECTURE.md with WebSocket, simulation, and supported miners table 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 07:11:41 +00:00
### Simulation Mode
For UI development without real mining hardware, use the simulation mode:
```bash
# Start with 3 simulated CPU miners
miner-ctrl simulate --count 3 --preset cpu-high
# Custom hashrate and algorithm
miner-ctrl simulate --count 2 --hashrate 8000 --algorithm rx/0
# Available presets: cpu-low, cpu-medium, cpu-high, gpu-ethash, gpu-kawpow
```
This generates realistic hashrate data with variance, share events, and pool connections for testing the UI.
### Building
Build the CLI binary for the current platform:
```bash
make build
```
Build for all supported platforms (cross-compile):
```bash
make build-all
```
The binaries will be placed in the `dist/` directory.
### Testing
Run all Go tests:
```bash
make test
```
Run tests with race detection and coverage:
```bash
make test-release
```
Generate and view HTML coverage report:
```bash
make coverage
```
### Linting & Formatting
Format code:
```bash
make fmt
```
Run linters (requires `golangci-lint`):
```bash
make lint
```
### Documentation
Generate Swagger documentation from code annotations:
```bash
make docs
```
(Requires `swag` tool: `make install-swag`)
### Release
The project uses GoReleaser for releases.
To create a local snapshot release:
```bash
make package
```
## Project Structure
- **`pkg/mining`**: This is where the core logic resides. If you are adding a new feature, you will likely work here.
- **`cmd/mining`**: If you are adding a new CLI command, look here.
- **`ui`**: Frontend code.
## Contribution Workflow
1. Fork the repository.
2. Create a feature branch.
3. Make your changes.
4. Ensure tests pass (`make test`).
5. Submit a Pull Request.
## CodeRabbit
This project uses CodeRabbit for automated code reviews. Please address any feedback provided by the bot on your PR.