# Contributing Guide Language: [δΈ­ζ–‡](CONTRIBUTING.md) | [English](CONTRIBUTING.en.md) Thanks for your interest in contributing to DS2API! ## Development Setup ### Prerequisites - Go 1.26+ - Node.js `20.19+` or `22.12+` (for WebUI development) - npm (bundled with Node.js) ### Backend Development ```bash # 1. Clone git clone https://github.com/CJackHwang/ds2api.git cd ds2api # 2. Configure cp config.example.json config.json # Edit config.json with test accounts # 3. Run backend go run ./cmd/ds2api # Local access: http://127.0.0.1:5001 # Actual bind: 0.0.0.0:5001, so LAN access is available via your private IP ``` ### Frontend Development (WebUI) ```bash # 1. Navigate to WebUI directory cd webui # 2. Install dependencies npm ci # 3. Start dev server (hot reload) npm run dev # Default: http://localhost:5173, auto-proxies API to backend # host: 0.0.0.0 is not configured, so LAN access is not enabled by default ``` WebUI tech stack: - React + Vite - Tailwind CSS - Bilingual language packs: `webui/src/locales/zh.json` / `en.json` ### Docker Development ```bash docker-compose -f docker-compose.dev.yml up ``` ## Code Standards | Language | Standards | | --- | --- | | **Go** | Run `gofmt -w` after editing Go files; before committing, run `./scripts/lint.sh` (format check + golangci-lint) | | **JavaScript/React** | Follow existing project style (functional components) | | **Commit messages** | Use semantic prefixes: `feat:`, `fix:`, `docs:`, `refactor:`, `style:`, `perf:`, `chore:` | Do not silently ignore cleanup errors from I/O-style calls such as `Close`, `Flush`, or `Sync`; return them when possible, otherwise log them explicitly. ## Submitting a PR 1. Fork the repo 2. Create a branch (e.g. `feature/xxx` or `fix/xxx`) 3. Commit changes 4. Push your branch 5. Open a Pull Request > πŸ’‘ If you modify files under `webui/`, no manual build is needed β€” CI handles it automatically. > If you want to verify the generated `static/admin/` assets locally, you can still run `./scripts/build-webui.sh`. ## Build WebUI Manually build WebUI to `static/admin/`: ```bash ./scripts/build-webui.sh ``` ## Running Tests ```bash # Local PR gates (kept aligned with the quality-gates workflow) ./scripts/lint.sh ./tests/scripts/check-refactor-line-gate.sh ./tests/scripts/run-unit-all.sh npm run build --prefix webui # End-to-end live tests (real accounts; recommended for releases or high-risk changes) ./tests/scripts/run-live.sh ``` ## Project Structure To avoid documentation drift, directory layout and module responsibilities were moved to: - [docs/ARCHITECTURE.en.md](./ARCHITECTURE.en.md) - [docs/README.md](./README.md) Before contributing, review the architecture doc sections for request flow and `internal/` module boundaries. ## Reporting Issues Please use [GitHub Issues](https://github.com/CJackHwang/ds2api/issues) and include: - Steps to reproduce - Relevant log output - Environment info (OS, Go version, deployment method)