The following is a set of guidelines for contributing to NGINX Gateway Fabric. We really appreciate that you are considering contributing!
To ask a question, use Github Discussions.
NGINX Community Slack has a dedicated channel for this
project -- #nginx-gateway-fabric
.
Reserve GitHub issues for feature requests and bugs rather than general questions.
Follow our Installation Instructions to get the NGINX Gateway Fabric up and running.
- NGINX Gateway Fabric is written in Go and uses the open source NGINX software as the data plane.
- The project follows a standard Go project layout
- The main code is found at
cmd/gateway/
- The internal code is found at
internal/
- Build files for Docker are found under
build/
- Deployment yaml files are found at
deploy/
- External APIs, clients, and SDKs can be found under
pkg/
- The main code is found at
- We use Go Modules for managing dependencies.
- We use Ginkgo and Gomega for our BDD style unit tests.
- The documentation website is found under
site/
.
If you have any questions, ideas, or simply want to engage in a conversation with the community and maintainers, we encourage you to open a discussion on GitHub.
To report a bug, open an issue on GitHub with the label bug
using the available bug report issue template. Before
reporting a bug, make sure the issue has not already been reported.
To suggest an enhancement, open an idea on GitHub discussions. We highly recommend that you open a discussion about a potential enhancement before opening an issue. This enables the maintainers to gather valuable insights regarding the idea and its use cases, while also giving the community an opportunity to provide valuable feedback.
In some cases, the maintainers may ask you to write an Enhancement Proposal. For details on this process, see the Enhancement Proposal README.
When an issue or PR is created, it will be triaged by the maintainers and assigned a label to indicate the type of issue it is (bug, proposal, etc) and to determine the milestone. See the Issue Lifecycle document for more information.
Before beginning development, familiarize yourself with the following documents:
- Developer Quickstart: This guide provides a quick and easy walkthrough of setting up your development environment and executing tasks required when submitting a pull request.
- Branching and Workflow: This document outlines the project's specific branching and workflow practices, including instructions on how to name a branch.
- Implement a Feature: A step-by-step guide on how to implement a feature or bug.
- Testing: The project's testing guidelines, includes both unit testing and manual testing procedures. This document explains how to write and run unit tests, and how to manually verify changes.
- Pull Request Guidelines: A guide for both pull request submitters and reviewers, outlining guidelines and best practices to ensure smooth and efficient pull request processes.
- Go Style Guide: A coding style guide for Go. Contains best practices and conventions to follow when writing Go code for the project.
- Architecture: A high-level overview of the project's architecture.
- Design Principles: An overview of the project's design principles.
- NGINX Gateway Fabric Documentation: An explanation of the documentation tooling and conventions.
F5 requires all external contributors to agree to the terms of the F5 CLA (available here) before any of their changes can be incorporated into an F5 Open Source repository.
If you have not yet agreed to the F5 CLA terms and submit a PR to this repository, a bot will prompt you to view and agree to the F5 CLA. You will have to agree to the F5 CLA terms through a comment in the PR before any of your changes can be merged. Your agreement signature will be safely stored by F5 and no longer be required in future PRs.