Files
HackBrowserData/CONTRIBUTING.md
T
Roger d8032ac824 docs: rewrite readme, rfcs, and contributing (#555)
* docs: rewrite README, RFCs, and CONTRIBUTING
* docs: fix Linux storage labels in RFC-006 (Opera/Vivaldi swapped)
2026-04-06 00:16:47 +08:00

74 lines
2.3 KiB
Markdown

# Contributing to HackBrowserData
We appreciate your interest in contributing to HackBrowserData! This document provides guidelines for contributors.
## Getting Started
- Always base your work from the `main` branch.
- Before creating a Pull Request (PR), make sure there is a corresponding issue for your contribution. If there isn't one already, please create one.
## Go Version Constraint
This project **must build with Go 1.20** to maintain Windows 7 support. This is enforced by CI.
- Do **not** use features from Go 1.21+ (e.g., `log/slog`, `slices`, `maps`, `cmp` packages)
- Do **not** bump the `go` directive in `go.mod` beyond `go 1.20`
- `modernc.org/sqlite` is pinned at v1.31.1 (v1.32+ requires Go 1.21)
## Development Commands
```bash
# Build
go build ./cmd/hack-browser-data/
# Test
go test ./...
# Lint (requires golangci-lint v2)
golangci-lint run
# Format
gofumpt -l -w .
goimports -w -local github.com/moond4rk/hackbrowserdata .
# Spelling check
typos
```
## Pull Requests
When creating a PR, please follow these guidelines:
- Link your PR to the corresponding issue.
- Provide context in the PR description to help reviewers understand the changes.
- Include 'before' and 'after' examples if applicable.
- Include steps for functional testing or replication.
- If you're adding a new feature, make sure to include unit tests.
### Commit Message Convention
Use [Conventional Commits](https://www.conventionalcommits.org/) format:
```
feat: add support for new browser
fix: resolve cookie decryption on Windows
chore: update dependencies
docs: improve RFC documentation
refactor: simplify profile discovery logic
test: add extraction tests for Firefox
```
## Code Style
- **Platform code**: use build tags (`_darwin.go`, `_windows.go`, `_linux.go`)
- **Error handling**: use `fmt.Errorf("context: %w", err)` for wrapping; do not ignore errors unless it is deliberate best-effort cleanup (e.g. `Close`/`Remove`)
- **Naming**: follow Go conventions
- **Tests**: use `t.TempDir()` for filesystem tests
- **Architecture**: see `rfcs/` for design documents
## Questions
If you have any questions or need further guidance, please feel free to ask in the issue or PR, or [reach out to the maintainers](mailto:me@moond4rk.com). We will reply to you as soon as possible.
Thank you for your contribution!