- Bug Reports & Feature Requests: GitHub Issues
- Questions: GitHub Discussions or Discord
All communication in these forums abides by our Code of Conduct.
If any part of the project has a bug or documentation mistakes, please let us know by opening an issue. All bugs and mistakes are considered very seriously, regardless of complexity.
Before creating an issue, please check that an issue reporting the same problem does not already exist. To make the issue accurate and easy to understand, please try to create issues that are:
- Unique -- do not duplicate existing bug report. Duplicate bug reports will be closed.
- Specific -- include as much details as possible: which version, what environment, what configuration, etc.
- Reproducible -- include the steps to reproduce the problem. Some issues might be hard to reproduce, so please do your best to include the steps that might lead to the problem.
- Isolated -- try to isolate and reproduce the bug with minimum dependencies. It would significantly slow down the speed to fix a bug if too many dependencies are involved in a bug report. Debugging external systems that rely on this project is out of scope, but guidance or help using the project itself is fine.
- Scoped -- one bug per report. Do not follow up with another bug inside one report.
It may be worthwhile to read Elika Etemad’s article on filing good bug reports before creating a bug report.
Maintainers might ask for further information to resolve an issue.
You can find issues by priority: Urgent, High, Medium, Low, Maybe. There are also good first issues.
This is a rough outline of what a contributor's workflow looks like:
- Create an issue
- Fork the project
- Create a feature branch
- Push changes to your branch
- Submit a pull request
- Respond to feedback from project maintainers
- Rebase to squash related and fixup commits
- Get LGTM from reviewer(s)
- Merge with a merge commit
Creating new issues is one of the best ways to contribute. You have no obligation to offer a solution or code to fix an issue that you open. If you do decide to try and contribute something, please submit an issue first so that a discussion can occur to avoid any wasted efforts.
In order to protect the project, all contributors are required to sign our Contributor License Agreement before their contribution is accepted.
The signing process has been automated by CLA Assistant during the Pull Request review process and only requires responding with a comment acknowledging the agreement.
In order to build and test the project, the latest stable version of Go and knowledge of a working Go environment are required.
Install mage:
# homebrew, see link for other options
brew install mageRun e2e tests:
mage test:e2eRun unit tests:
mage test:unitOnce you have a build, you'll usually want to run the operator against a real Kubernetes cluster to validate your changes end-to-end. The instructions below assume you're working from the root of a clone of this repository.
In a kind cluster
This is the recommended path for local development because it doesn't require pushing images to an external registry.
-
Build the operator image locally:
docker build --tag spicedb-operator:dev . -
Create a kind cluster if you don't already have one, and load the image into it:
kind create cluster --name spicedb-operator-dev kind load docker-image spicedb-operator:dev --name spicedb-operator-dev
-
Deploy the operator manifests, overriding the image tag to your locally built one:
kubectl apply --server-side -k config kubectl -n spicedb-operator set image deployment/spicedb-operator \ spicedb-operator=spicedb-operator:dev -
After rebuilding and reloading the image, restart the operator pod to pick up the new image:
docker build --tag spicedb-operator:dev . kind load docker-image spicedb-operator:dev --name spicedb-operator-dev kubectl -n spicedb-operator delete pod -l app=spicedb-operator
Tail the operator logs while iterating:
kubectl -n spicedb-operator logs -f deployment/spicedb-operatorIf you need to test against a cluster that can't pull from your local Docker daemon, push the image to a registry the cluster can reach.
REGISTRY=ghcr.io/<your-org>
docker build --tag ${REGISTRY}/spicedb-operator:dev .
docker push ${REGISTRY}/spicedb-operator:dev
kubectl -n spicedb-operator set image deployment/spicedb-operator \
spicedb-operator=${REGISTRY}/spicedb-operator:dev
kubectl -n spicedb-operator rollout restart deployment/spicedb-operatorIf the operator isn't already installed on the cluster, install it first as described in the README, then run the commands above to swap in your local image.
This project does not use anything other than the standard Go modules toolchain for managing dependencies.
go get github.com/org/newdependency@versionContinuous integration enforces that go mod tidy has been run.
The update graph can be regenerated whenever there is a new spicedb release.
CI will validate all new edges when there are changes to proposed-update-graph.yaml and will copy them into config/update-graph.yaml if successful.
mage gen:graph