mirror of
https://github.com/MeshCore-Beacon/beacon-docs.git
synced 2026-10-24 02:12:25 +00:00
164 lines
6.8 KiB
Markdown
164 lines
6.8 KiB
Markdown
# Contributing to Beacon
|
|
|
|
Thank you for your interest in contributing. This page is the shared workflow for all three
|
|
Beacon repositories:
|
|
|
|
- [beacon-docs](https://github.com/MeshCore-Beacon/beacon-docs), this repo: deployment,
|
|
configuration and operator documentation.
|
|
- [beacon-server](https://github.com/MeshCore-Beacon/beacon-server): the API and ingest. Its own
|
|
[CONTRIBUTING.md](https://github.com/MeshCore-Beacon/beacon-server/blob/main/CONTRIBUTING.md)
|
|
covers Go style, tests, database and API changes.
|
|
- [beacon-web](https://github.com/MeshCore-Beacon/beacon-web): the frontend. Its own
|
|
[CONTRIBUTING.md](https://github.com/MeshCore-Beacon/beacon-web/blob/main/CONTRIBUTING.md)
|
|
covers TypeScript style, tests and the feature layout.
|
|
|
|
Please read this before opening a PR anywhere.
|
|
|
|
## Before you start
|
|
|
|
**Talk first for anything bigger than a small fix.** On beacon-server and beacon-web, open or
|
|
comment on an issue before starting work, so maintainers can say if something is already in
|
|
progress or out of scope. Issues are disabled on beacon-docs; for a docs restructure, a new
|
|
deployment type or a correction you are unsure about, reach out on the
|
|
[MeshCore Canada Discord](https://discord.gg/Gz3KvJx2hf). For typos, broken links and small
|
|
clarifications, just open a PR.
|
|
|
|
**One thing per PR.** Each pull request covers one logical change: a bug fix, a new endpoint, a
|
|
corrected variable table. PRs that touch many unrelated things are hard to review and hard to
|
|
revert.
|
|
|
|
**No fully AI-generated contributions.** We welcome contributors who use AI tools to assist
|
|
their work, but a PR should reflect the author's own understanding and judgement. PRs that
|
|
appear to be unreviewed AI output may be closed without further comment.
|
|
|
|
## Branches
|
|
|
|
Every Beacon repo, docs included:
|
|
|
|
- `main` holds stable releases only and is protected. Never target it directly.
|
|
- `dev` is active development. All PRs target `dev`.
|
|
|
|
In beacon-docs, `main` describes the current release and `dev` describes what is coming next.
|
|
|
|
## Workflow
|
|
|
|
1. Fork, or create a branch from `dev`.
|
|
2. Make your change.
|
|
3. Run that repo's checklist (below for docs; in each code repo's CONTRIBUTING for code).
|
|
4. Open a pull request with a clear description of what changed and why, referencing any
|
|
related issue.
|
|
|
|
## Running the full stack locally
|
|
|
|
Most changes to either code repo are easier to check against the other one running next to it.
|
|
|
|
**beacon-server**, with a throwaway PostgreSQL in Docker:
|
|
|
|
```bash
|
|
git clone https://github.com/MeshCore-Beacon/beacon-server.git && cd beacon-server
|
|
cp env.example .env
|
|
cp config.yaml.example config.yaml
|
|
docker run -d --name beacon-postgres -p 5432:5432 \
|
|
-e POSTGRES_USER=beacon -e POSTGRES_PASSWORD=beacon -e POSTGRES_DB=beacon postgres:16-alpine
|
|
go run ./cmd/beacon
|
|
```
|
|
|
|
Set `POSTGRES_DSN` and your broker credentials in `.env` (every variable is described in
|
|
[Configuration](docs/configuration.md)). Migrations run on startup. The API is on
|
|
`http://localhost:8080` and Swagger at `http://localhost:8080/swagger/index.html`.
|
|
|
|
**beacon-web**, in a second terminal:
|
|
|
|
```bash
|
|
git clone https://github.com/MeshCore-Beacon/beacon-web.git && cd beacon-web
|
|
npm install
|
|
cp .env.example .env.local
|
|
npm run dev
|
|
```
|
|
|
|
In `.env.local`, uncomment and set:
|
|
|
|
```
|
|
VITE_DEV_PROXY=http://localhost:8080
|
|
VITE_API_BASE=/api/v1
|
|
VITE_WS_URL=ws://localhost:5173/ws
|
|
```
|
|
|
|
Vite then proxies `/api` and `/ws` to the server and presents the server's own origin on the
|
|
WebSocket, so beacon-server's same-origin rule is satisfied without touching its config. If
|
|
you would rather have the browser talk to `localhost:8080` directly, add
|
|
`websocket: {allowed_origins: [http://localhost:5173]}` to the server's `config.yaml` instead.
|
|
Open `http://localhost:5173`.
|
|
|
|
## Checklist before opening a docs PR
|
|
|
|
- **Docs match reality.** If you change a variable, path, command or image name, check it
|
|
against the actual files in `docker-deployment-*/` and `app_config/`, and against the code
|
|
in beacon-server or beacon-web when the behaviour lives there.
|
|
- **Links resolve.** Relative links point at files that exist; anchors match a heading.
|
|
- **Compose still parses.** If you touched a `docker-compose.yml`:
|
|
```bash
|
|
docker compose -f docker-deployment-type1/docker-compose.yml config
|
|
```
|
|
- **No secrets.** Never commit a real `.env`, real passwords, channel keys or MQTT credentials.
|
|
Use placeholders like `CHANGE_ME` in examples.
|
|
- **No em dashes.** Use a comma, a period or a new sentence.
|
|
|
|
## Documentation style
|
|
|
|
- Write for an operator deploying Beacon for the first time. Assume Docker knowledge, not
|
|
knowledge of this project.
|
|
- Lead with the action. "Set `DOMAIN` to your public hostname", not "the `DOMAIN` variable
|
|
should be configured".
|
|
- Say why only where the why prevents a mistake.
|
|
- Prefer concrete, copy-pasteable commands over prose, in fenced blocks with a language tag.
|
|
- One page, one job. Headings are things a reader searches for, not categories.
|
|
- Keep tables in step with the example config files; when a key changes, update
|
|
`app_config/config.yaml.example` and the page that describes it in the same PR.
|
|
- Relative links between files in this repo, so they work on GitHub and in local clones.
|
|
|
|
## Adding or changing a deployment
|
|
|
|
The deployment folders are meant to be copied to a server and run as-is. When editing one:
|
|
|
|
- Keep the folder self-contained: `docker-compose.yml`, the `data/` tree, and a `.env` the
|
|
user creates from `app_config/.env.example`.
|
|
- Every variable a user must set appears in `app_config/.env.example` (for `.env`) or
|
|
`app_config/config.yaml.example` (for app config), and in [Configuration](docs/configuration.md).
|
|
- Keep service names and Caddyfile upstreams consistent; the proxy must resolve the names it
|
|
proxies to.
|
|
- A new deployment type gets its own `docker-deployment-typeN/` folder with a README, Caddyfile
|
|
templates under `app_config/caddy/`, and a line in the main README.
|
|
|
|
## Commit messages
|
|
|
|
Conventional commits, imperative, one line under 72 characters, with an optional scope:
|
|
|
|
```
|
|
docs(readme): clarify VITE_MAP_CENTER fallback behaviour
|
|
docs(deploy): add type 2 split server and web compose files
|
|
feat(routes): add observation_count to known routes response
|
|
fix(ingest): correct lat/lon divisor for advert payloads
|
|
chore: update logos
|
|
```
|
|
|
|
## Releases
|
|
|
|
Versioning, image tags and the release flow are in
|
|
[Releases and versioning](docs/releases.md).
|
|
|
|
## Repo structure
|
|
|
|
```
|
|
docker-deployment-type1/ all-in-one Docker Compose deployment
|
|
docker-deployment-type2/ split server and web deployment
|
|
app_config/ example .env and config.yaml, proxy configs (Caddy, nginx, Apache), fail2ban
|
|
docs/ operator and design documentation
|
|
logos/ brand assets
|
|
```
|
|
|
|
## Recognition
|
|
|
|
If you would like to be listed as a contributor, add yourself to
|
|
[CONTRIBUTORS.md](CONTRIBUTORS.md) in your PR.
|