For questions, check out the discussions.
For documentation, check out this document and the official documentation.
If you think Reviewpad is or could be useful for you, come say hi on Discord.
To start using Reviewpad, check out the Reviewpad GitHub Action.
Reviewpad is an open-source project to automate pull request and issues workflows.
The workflows are specified in a YML-based configuration language described in the official documentation.
In Reviewpad, you can automate actions over the pull requests and issues such as:
- Automated comments;
- Add or remove labels;
- Specify reviewer assignments;
- Automate close/merge actions.
As an example, the following workflow:
api-version: reviewpad.com/v3.x
labels:
ship:
description: Ship mode
color: '#76dbbe'
workflows:
- name: ship
description: Ship process - bypass the review and merge with rebase
if:
- rule: '$hasFileExtensions([".md"])'
then:
- $addLabel("ship")
- $merge()
Automatically adds a label ship
and merges pull requests that only change .md
files.
You can execute Reviewpad through the CLI or through the Reviewpad GitHub action.
Note: We are currently using the experimental Reviewpad service through a GitHub app.
This repository generates two artifacts:
- CLI cli that runs reviewpad open source edition.
- Reviewpad library packages:
- github.com/reviewpad/reviewpad/collector
- github.com/reviewpad/reviewpad/engine
- github.com/reviewpad/reviewpad/lang/aladino
- github.com/reviewpad/reviewpad/plugins/aladino
- github.com/reviewpad/reviewpad/utils/fmtio
Conceptually, the packages are divided into four categories:
- Engine: The engine is the package responsible of processing the YML file. This process is divided into two stages:
- Process the YML file to determine which workflows are enabled. The outcome of this phase is a program with the actions that will be executed over the pull request.
- Execution of the synthesised program.
- Aladino Language: This is the language that is used in the
spec
property of the rules and also the actions of the workflows. The engine of Reviewpad is not specific to Aladino - this means that it is possible to add the support for a new language such asJavascript
orGolang
in these specifications. - Plugins: The plugin package contains the built-in functions and actions that act as an abstraction to the 3rd party services such as GitHub, Jira, etc. This package is specific to each supported specification language. In the case of
plugins/aladino
, it contains the implementations of the built-ins of the team edition. - Utilities: packages such as the collector and the fmtio that provide utilities that are used in multiple places.
Before you begin, ensure you have met the following requirements:
- Go with the minimum version of 1.16.
- goyacc used to generate Reviewpad Aladino parser (
go install golang.org/x/tools/cmd/goyacc@master
). - libgit2 with version v1.2.
We use Taskfile. To compile the packages simply run:
task build
To generate the CLI of the team edition run:
task build-cli
This command generate the binary reviewpad-cli
which you can run to try Reviewpad directly.
The CLI has the following argument list:
./reviewpad-cli
reviewpad-cli is command line interface to run reviewpad commands.
Usage:
reviewpad-cli [command]
Available Commands:
check Check if input reviewpad file is valid
completion Generate the autocompletion script for the specified shell
help Help about any command
run Runs reviewpad
Flags:
-f, --file string input reviewpad file
-h, --help help for reviewpad-cli
Use "reviewpad-cli [command] --help" for more information about a command.
Run the tests with:
task test
If you get the error:
panic: httptest: failed to listen on a port: listen tcp6 [::1]:0: socket: too many open files [recovered]
panic: httptest: failed to listen on a port: listen tcp6 [::1]:0: socket: too many open files
You can solve with:
ulimit -Sn 500
To generate the coverage report run:
task test
To display the code coverage for every package run:
go tool cover -func coverage.out
To display the total code coverage percentage run:
go tool cover -func coverage.out | grep total:
We strongly recommend using VSCode with the following extensions:
- Go for Go language support.
- EditorConfig to helps maintaining consistent coding styles.
- licenser for adding license headers.
- YAML for enabling
reviewpad.yml
JSON schema.
Open the project in VSCode, open the command palette (Ctrl+Shift+P) and search for Preferences: Open Workspace Settings (JSON)
.
Paste the following configuration:
{
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "golang.go",
"files.autoSave": "onFocusChange",
"licenser.license": "Custom",
"licenser.author": "Explore.dev, Unipessoal Lda",
"licenser.customHeader": "Copyright (C) @YEAR@ @AUTHOR@ - All Rights Reserved\nUse of this source code is governed by a license that can be\nfound in the LICENSE file.",
"yaml.schemas": {
"https://raw.githubusercontent.com/reviewpad/schemas/main/latest/schema.json": [
"reviewpad.yml"
]
}
}
Add the following to your .vscode/launch.json
.
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch CLI",
"type": "go",
"request": "launch",
"mode": "debug",
"args": [
"run",
// Flag to run on dry run
"--dry-run",
// Absolute path to reviewpad.yml file to run
"--reviewpad=_PATH_TO_REVIEWPAD_FILE_",
// GitHub url to run the reviewpad.yml against to
// e.g. https://github.com/reviewpad/action-demo/pull/1
// e.g. https://github.com/reviewpad/action-demo/issue/1
"--github-url=_GITHUB_URL_",
// GiHub personal access token
// https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
"--github-token=_GIT_HUB_TOKEN_",
// Absolute path to JSON file with GitHub event payload
"--event-payload=_PATH_TO_EVENT_JSON"
],
"program": "${workspaceFolder}/cli/main.go"
}
]
}
You can then run the debugger by pressing F5.
We welcome contributions to Reviewpad from the community!
See the Contributing Guide.
If you need any assistance, please join discord to reach the core contributors.
Take a look at the X-Ray for Reviewpad to see how we are doing!
Reviewpad is available under the GNU Lesser General Public License v3.0 license.
See LICENSE for the full license text.