Mining/site-docs/development/building.md

3.2 KiB

Building from Source

Complete guide to building the Mining Dashboard from source.

Prerequisites

Required

Tool Version Purpose
Go 1.21+ Backend compilation
Node.js 20+ Frontend build
npm 10+ Package management
Make any Build automation

Optional

Tool Purpose
golangci-lint Code linting
swag Swagger doc generation
Docker Containerized builds

Quick Build

# Clone repository
git clone https://github.com/Snider/Mining.git
cd Mining

# Build everything
make build

# Output: ./miner-cli

Backend Build

Standard Build

make build
# or
go build -o miner-cli ./cmd/mining

With Version Info

VERSION=1.0.0
go build -ldflags "-X main.version=$VERSION" -o miner-cli ./cmd/mining

Cross-Platform Builds

# Build for all platforms
make build-all

# Or manually:
GOOS=linux GOARCH=amd64 go build -o dist/miner-cli-linux-amd64 ./cmd/mining
GOOS=darwin GOARCH=amd64 go build -o dist/miner-cli-darwin-amd64 ./cmd/mining
GOOS=windows GOARCH=amd64 go build -o dist/miner-cli-windows-amd64.exe ./cmd/mining

Frontend Build

cd ui

# Install dependencies
npm install

# Development build
ng build

# Production build
ng build --configuration production

# Output: ui/dist/

Generate Documentation

Swagger Docs

# Install swag
go install github.com/swaggo/swag/cmd/swag@latest

# Generate
make docs
# or
swag init -g ./cmd/mining/main.go

MkDocs Site

# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install MkDocs
pip install mkdocs-material mkdocs-glightbox

# Serve locally
mkdocs serve

# Build static site
mkdocs build

Running Tests

Unit Tests

# All tests with coverage
make test

# Specific package
go test -v ./pkg/mining/...

# With race detection
go test -race ./...

E2E Tests

cd ui

# Install Playwright
npx playwright install

# Run all E2E tests
npm run e2e

# API tests only (faster)
npm run e2e:api

# Interactive UI mode
npm run e2e:ui

Development Server

# Start backend + frontend
make dev

# Or separately:
# Terminal 1: Backend
./miner-cli serve

# Terminal 2: Frontend
cd ui && ng serve

Access:

Docker Build

Single Binary

docker build -t mining-cli .
docker run -p 9090:9090 mining-cli serve

Multi-Node Setup

docker-compose -f docker-compose.p2p.yml up

Release Build

# Using GoReleaser
make package

# Creates:
# - dist/miner-cli_linux_amd64.tar.gz
# - dist/miner-cli_darwin_amd64.tar.gz
# - dist/miner-cli_windows_amd64.zip

Troubleshooting

CGO Issues

SQLite requires CGO. If you get errors:

# Enable CGO
CGO_ENABLED=1 go build ./cmd/mining

Node Modules

If frontend build fails:

cd ui
rm -rf node_modules package-lock.json
npm install

Swagger Generation

If swagger fails:

go install github.com/swaggo/swag/cmd/swag@latest
export PATH=$PATH:$(go env GOPATH)/bin
swag init -g ./cmd/mining/main.go