blob: 24065b9632cede193c787aabfd6304e3895f4134 [file] [log] [blame] [view] [edit]
# GERRITFMT
This is a style verifier intended to be used with the Gerrit checks
plugin.
## HOW TO USE
1. Install formatters:
```sh
go install github.com/bazelbuild/buildtools/buildifier
curl -o google-java-format.jar https://github.com/google/google-java-format/releases/download/google-java-format-1.7/google-java-format-1.7-all-deps.jar
```
1. Obtain an HTTP password, and put it in `testsite-auth`. The format is
`username:secret`.
2. Register a checker
```sh
go run ./cmd/checker -auth_file=testsite-auth --gerrit http://localhost:8080 \
--language go --repo gerrit --register
```
3. Make sure the checker is there
```sh
go run ./cmd/checker -auth_file=testsite-auth --gerrit http://localhost:8080 \
--list
```
4. Start the server
```sh
go run ./cmd/checker -auth_file=testsite-auth --gerrit http://localhost:8080
```
## DESIGN
For simplicity of deployment, the gerrit-linter checker is stateless. All the
necessary data is encoded in the checker UUID.
## TODO
* handle file types (symlink) and deletions
* more formatters: clang-format, typescript, jsformat, ... ?
* isolate each formatter to run with a separate gvisor/docker
container.
* tests: the only way to test this reliably is to spin up a gerrit server,
and create changes against the server.
* Update the list of checkers periodically.
## SECURITY
This currently runs the formatters without sandboxing. Critical bugs (heap
overflow, buffer overflow) in formatters can be escalated to obtain the OAuth2
token used for authentication.
The currently supported formatters are written in Java and Go, so this should
not be an issue.
## DOCKER ON GCP
The following example shows how to build a Docker image hosted on GCP, in the
project `api-project-164060093628`.
```
VERSION=$(date --iso-8601=minutes | tr -d ':' | tr '[A-Z]' '[a-z]'| sed \
's|\+.*$||')-$(git rev-parse --short HEAD)
NAME=gcr.io/api-project-164060093628/gerrit-linter:${VERSION}
docker build -t ${NAME} -f Dockerfile .
docker push ${NAME}
```
To deploy onto a GCP VM, configure the VM to have scope
`https://www.googleapis.com/auth/gerritcodereview`:
```sh
cloud beta compute instances set-scopes VM-NAME --scopes=https://www.googleapis.com/auth/gerritcodereview
```
## DISCLAIMER
This is not an official Google product