You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thank you for your interest in contributing to SubmitQueue!
3
+
Thank you for your interest in contributing to SubmitQueue! Whether you are reporting a bug, suggesting a feature, improving documentation, or writing code, your contribution is welcome.
4
4
5
5
## Getting Started
6
6
7
-
See [doc/howto/DEVELOPMENT.md](doc/howto/DEVELOPMENT.md) for prerequisites, setup, and troubleshooting.
7
+
1. Read the [Development Setup](doc/howto/DEVELOPMENT.md) guide for prerequisites, building, and running tests.
8
+
2. Review the [Architecture Guide](CLAUDE.md) to understand project layout, conventions, and code style.
9
+
3. Check the [Testing Guide](doc/howto/TESTING.md) for testing patterns and requirements.
8
10
9
11
## Development Workflow
10
12
11
-
1. Fork the repository and create a feature branch from `main`.
12
-
2. Make your changes, following the project conventions.
13
-
3. Add or update tests as appropriate.
14
-
4. Run `make gazelle` if you added or removed Go files.
15
-
5. Run `make test` to ensure unit tests pass.
16
-
6. Commit with a clear, descriptive message.
17
-
7. Open a pull request against `main`.
18
-
19
-
## Code Style
20
-
21
-
See [CLAUDE.md](CLAUDE.md) for code style conventions.
22
-
23
-
## Testing
24
-
25
-
See [doc/howto/TESTING.md](doc/howto/TESTING.md) for the full testing guide.
26
-
27
-
Key commands:
28
-
29
-
```bash
30
-
make test# Unit tests
31
-
make integration-test # Integration tests (Docker-based, auto-builds binaries)
32
-
make e2e-test # End-to-end tests
33
-
```
13
+
1. Fork the repository and clone your fork.
14
+
2. Create a feature branch from `main`:
15
+
```bash
16
+
git checkout -b yourname/short-description
17
+
```
18
+
Use branch naming like `yourname/short-description` or `fix/issue-123`.
19
+
3. Make your changes, following the project conventions.
20
+
4. Add or update tests as appropriate.
21
+
5. Run `make gazelle` if you added or removed Go files.
22
+
6. Run `make test` to ensure unit tests pass.
23
+
7. Commit with a clear, descriptive message.
24
+
8. Push to your fork:
25
+
```bash
26
+
git push origin yourname/short-description
27
+
```
28
+
9. Open a pull request against `main`.
34
29
35
30
## Pull Request Guidelines
36
31
37
32
- Keep PRs focused on a single change.
33
+
- Reference related issues: use `Closes #123` for fixes or `Part of #123` for incremental work.
38
34
- Include tests for new functionality.
39
-
- Ensure all existing tests pass (`bazel test //...`).
40
-
- Follow the existing code style and patterns (see [CLAUDE.md](CLAUDE.md) for detailed conventions).
35
+
- Ensure all existing tests pass (`make test`).
36
+
- Ensure CI passes before requesting review.
37
+
- Follow the existing code style and patterns described in the [Architecture Guide](CLAUDE.md).
41
38
- Fill out the PR template with a description, motivation, and test plan.
42
39
43
40
## Code Review
@@ -48,10 +45,22 @@ All submissions require review before merging. We use GitHub pull requests for t
48
45
49
46
Use [GitHub Issues](https://github.com/uber/submitqueue/issues) to report bugs or request features. Please use the provided [issue templates](.github/ISSUE_TEMPLATE/) and check existing issues before creating a new one.
50
47
48
+
## Communication
49
+
50
+
-**Bug reports and feature requests** — [GitHub Issues](https://github.com/uber/submitqueue/issues)
51
+
-**Questions and discussions** — open an issue with the `question` label
52
+
-**Security vulnerabilities** — see [SECURITY.md](SECURITY.md) (do not open public issues)
53
+
51
54
## Code of Conduct
52
55
53
56
This project adheres to the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
54
57
58
+
## Contributor License Agreement
59
+
60
+
Contributions to SubmitQueue require signing Uber's Contributor License Agreement (CLA). When you open your first pull request, a CLA bot will comment with instructions. The CLA must be signed before your PR can be reviewed or merged.
61
+
62
+
The CLA ensures that Uber has the necessary rights to distribute your contributions under the [Apache License 2.0](LICENSE). It does not change your rights to use your own contributions for any other purpose.
63
+
55
64
## License
56
65
57
-
By contributing to SubmitQueue, you agree that your contributions will be licensed under the [Apache License 2.0](LICENSE).
66
+
By contributing to SubmitQueue, you agree that your contributions will be licensed under the [Apache License 2.0](LICENSE). All contributions are also subject to the [Contributor License Agreement](#contributor-license-agreement).
Copy file name to clipboardExpand all lines: README.md
+27-4Lines changed: 27 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,17 @@
1
1
# SubmitQueue
2
2
3
-
SubmitQueue is a speculative merge queue that keeps the main branch green at scale. In large monorepo environments, concurrent changes can introduce conflicts and broken builds. SubmitQueue solves this by serializing and validating changes before they land on main, ensuring that every commit point passes defined validations.
SubmitQueue is a high-performance speculative merge queue that keeps your trunk consistently green at scale. Rather than validating changes one at a time, SubmitQueue speculatively rebases and validates multiple changes in parallel against predicted future states of HEAD. When validations pass, changes land automatically. When they fail, SubmitQueue isolates the offending change and retries the rest — all without human intervention.
8
+
9
+
Designed for large monorepos and fast-moving teams where concurrent changes can introduce subtle conflicts and destabilize builds.
4
10
5
11
## Quick Start
6
12
13
+
Requires Docker and Docker Compose. See [Development Setup](doc/howto/DEVELOPMENT.md) for full prerequisites.
14
+
7
15
```bash
8
16
# Build everything
9
17
make build
@@ -23,10 +31,25 @@ make local-stop
23
31
24
32
See [example/README.md](example/README.md) for more examples including running individual services and clients.
25
33
26
-
## Developer Guide
34
+
## Documentation
35
+
36
+
| Document | Description |
37
+
|----------|-------------|
38
+
|[Development Setup](doc/howto/DEVELOPMENT.md)| Prerequisites, build, environment, IDE setup |
39
+
|[Contributing](CONTRIBUTING.md)| How to contribute, workflow, guidelines |
40
+
|[Testing Guide](doc/howto/TESTING.md)| Unit, integration, and E2E testing patterns |
|[Examples](example/README.md)| Running services, clients, API reference |
43
+
|[RFCs](doc/rfc/index.md)| Design documents and proposals |
27
44
28
-
See [CLAUDE.md](CLAUDE.md) for the full developer guide, including project layout, controller patterns, entity conventions, extension system, and development workflows.
45
+
## Project Status
46
+
47
+
SubmitQueue is under active development. The core architecture is stable, but APIs may evolve before v1.0. We welcome contributions and feedback.
29
48
30
49
## Contributing
31
50
32
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started, development workflow, code style, and testing.
51
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started.
If you discover a security vulnerability, **do not open a public GitHub issue.** Instead, please email **oss-security@uber.com** with a description of the vulnerability and steps to reproduce it.
6
+
7
+
We will acknowledge your report within **48 hours** and work with you to resolve the issue promptly.
8
+
9
+
## Supported Versions
10
+
11
+
Security patches are applied to the latest release on the `main` branch. We recommend always running the most recent version.
Copy file name to clipboardExpand all lines: doc/howto/DEVELOPMENT.md
+157-8Lines changed: 157 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,10 +2,36 @@
2
2
3
3
## Prerequisites
4
4
5
-
-**Docker** and **Docker Compose** (for integration and e2e tests)
6
-
-**direnv** (recommended — automatically loads `.envrc` so you can use `bazel` directly)
5
+
-**Go 1.24+** — needed for `gopls`, `go mod`, and installing protoc plugins. Download from [go.dev/dl](https://go.dev/dl/). Note: Bazel manages its own Go toolchain for builds, but a local Go installation is required for editor tooling and dependency management.
6
+
-**Docker** and **Docker Compose** — for integration and e2e tests, and for running services locally.
7
+
-**direnv** (recommended) — automatically loads `.envrc` so you can use `bazel` directly instead of `./tool/bazel`.
7
8
8
-
The project includes `./tool/bazel` (Bazelisk wrapper) and `.bazelversion`, so you don't need to install Bazel or Go separately.
9
+
The project includes `./tool/bazel` (Bazelisk wrapper) and `.bazelversion`, so you don't need to install Bazel separately. Bazel manages its own Go toolchain for building and testing.
10
+
11
+
### Setting up direnv
12
+
13
+
```bash
14
+
brew install direnv
15
+
```
16
+
17
+
Add the hook for your shell:
18
+
19
+
```bash
20
+
# zsh — add to ~/.zshrc
21
+
eval"$(direnv hook zsh)"
22
+
23
+
# bash — add to ~/.bashrc
24
+
eval"$(direnv hook bash)"
25
+
26
+
# fish — add to ~/.config/fish/config.fish
27
+
direnv hook fish |source
28
+
```
29
+
30
+
Then allow it in the project directory:
31
+
32
+
```bash
33
+
direnv allow
34
+
```
9
35
10
36
## Clone and Build
11
37
@@ -23,18 +49,98 @@ make build
23
49
make test
24
50
```
25
51
52
+
## Verify Your Setup
53
+
54
+
After cloning and building, run through this checklist to confirm everything works:
55
+
56
+
```bash
57
+
# 1. Build all services
58
+
make build
59
+
60
+
# 2. Run unit tests
61
+
make test
62
+
63
+
# 3. Confirm Docker is running
64
+
docker ps
65
+
66
+
# 4. Start the full stack
67
+
make local-start
68
+
69
+
# 5. Verify services are up (Gateway on :8081, Orchestrator on :8082)
If any step fails, see [Troubleshooting](#troubleshooting) below.
80
+
81
+
## IDE Setup
82
+
83
+
### VS Code
84
+
85
+
Install the [Go extension](https://marketplace.visualstudio.com/items?itemName=golang.Go), which uses `gopls` for code intelligence. It works with the project's `go.mod` out of the box.
86
+
87
+
### GoLand / IntelliJ
88
+
89
+
GoLand works with Go modules automatically. Open the project root and GoLand will detect `go.mod`.
90
+
26
91
## Optional Tools
27
92
28
93
```bash
29
94
# macOS
30
-
brew install protobuf grpcurl direnv
95
+
brew install protobuf grpcurl
31
96
32
97
# Go protoc plugins (only if modifying .proto files)
33
98
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
34
99
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
35
100
go install go.uber.org/yarpc/encoding/protobuf/protoc-gen-yarpc-go@latest
36
101
```
37
102
103
+
## Common Make Targets
104
+
105
+
| Target | Description |
106
+
|--------|-------------|
107
+
|`make build`| Build all services |
108
+
|`make test`| Run unit tests |
109
+
|`make integration-test`| Run all integration tests (Docker-based) |
0 commit comments