mirror of
https://github.com/tale/headplane.git
synced 2026-07-26 07:48:14 +00:00
f0df663c90
Add a development container for contributors and document how to use it. - Add .devcontainer/devcontainer.json - Add .devcontainer/Dockerfile - Update docs/CONTRIBUTING.md with Dev Container section - devcontainer.json parses successfully and opens in vscode without issues - all build.sh variants, recommended tools & lint/typecheck run without issues Closes #499
75 lines
3.3 KiB
Markdown
75 lines
3.3 KiB
Markdown
# Contributing to Headplane
|
|
|
|
Thank you for your interest in contributing to Headplane. I maintain this
|
|
project entirely on my own so any help is greatly appreciated. Since I am the
|
|
sole maintainer, I have a few guidelines which help make it significantly easier
|
|
for me to review and merge your contributions.
|
|
|
|
## Contribution Types
|
|
|
|
- **Bug Reports/Feature Requests**: If you find a bug, please open an
|
|
[issue](https://github.com/tale/headplane/issues) using one of the predefined
|
|
templates. Issues are only for bug reports and feature requests, not problems
|
|
that you encounter from misconfiguration or usage. Those belong in the
|
|
[discussions](https://github.com/tale/headplane/discussions) section.
|
|
|
|
- **Documentation/Examples**: If you find any issues in the documentation or
|
|
would like to contribute examples for setting up Headplane, please open a PR
|
|
and I will review it and possibly make changes.
|
|
|
|
- **Code Contributions**: Code contributions are done via PRs but _must_ be
|
|
linked to an issue or a feature request (you can make one if it doesn't exist).
|
|
Please tag them with the appropriate labels when opening an issue or PR.
|
|
|
|
### Code Contribution Restrictions
|
|
|
|
- **No Large Refactors**: I am not interested in large refactors of the codebase
|
|
because I've already had do to this a lot and it becomes a headache to review,
|
|
maintain, and merge. This also means you should split up multiple contributions
|
|
into multiple PRs if they are unrelated to each other.
|
|
|
|
- **No Project/Tooling Changes**: Unless there is a very good reason to do so,
|
|
I will not accept changes to the project structure, build system, or tooling
|
|
used to develop Headplane. This includes things like changing the package
|
|
manager, docker environment, or CI/CD.
|
|
|
|
- **Minimal Breaking Changes**: I will not accept any changes that break any
|
|
existing functionality or change the API unless there is a very good reason
|
|
to do so. If you want to make a breaking change, please open an issue first
|
|
and discuss it with me.
|
|
|
|
### Code Style
|
|
|
|
This is very easy and self-explanatory. [oxlint/oxfmt](https://oxc.rs) is used
|
|
as a linter and formatter for the TypeScript, while Go's default formatting and
|
|
lint tooling are used within `agent/` code. I've setup a git hook to run
|
|
before commit to make these changes automatically.
|
|
|
|
> All of these guidelines are fairly simple to follow and are flexible if needed.
|
|
> I won't automatically close PRs or issues if they don't follow these rules,
|
|
> but instead we can discuss them and see if we can come to a compromise.
|
|
|
|
### Contribution Tooling
|
|
|
|
If you plan to work with the WASM SSH agent, you will need to install
|
|
`mkcert` or an equivalent to create certificates in `./test/caddy/certs`.
|
|
It expects a `localhost.pem` and `localhost-key.pem` file to be present in that
|
|
directory. PNPM has a script to do it with `pnpm mkcert` already already.
|
|
|
|
### Development Container
|
|
|
|
This repository includes a Dev Container setup in `./.devcontainer` with:
|
|
|
|
- Node.js
|
|
- PNPM
|
|
- Go
|
|
- Nix
|
|
- `mkcert` and related local certificate tooling
|
|
|
|
Open the repository in VS Code (or any Dev Container compatible editor) and
|
|
start the container. On first creation, dependencies are installed automatically
|
|
with `pnpm install`.
|
|
|
|
The base image is Debian (instead of Alpine) to keep compatibility with common
|
|
official Dev Container features used by this project (Node, Go, and Docker).
|