Contributing
Thank you for your interest in arrow! We welcome contributions of all kinds - bug fixes, features, documentation, and ideas.
Getting Started
Clone the repository and set up your local environment:
bash
git clone https://github.com/arrow-cli/arrow.git cd arrow make build ./bin/arrow --version
You need Go 1.22 or later and GNU Make.
Project Structure
text
arrow/
cmd/ CLI entry points
arrow/ Main binary
internal/ Internal packages
pipeline/ Pipeline engine
config/ Configuration parsing
cache/ Build cache
runner/ Step execution
graph/ Dependency graph
pkg/ Public API packages
pipelines/ Example pipelines
docs/ Documentation source
Makefile Build and test tasksBuilding and Testing
Common make targets:
| Command | Description |
|---|---|
make build | Build the arrow binary into bin/ |
make test | Run all unit tests |
make lint | Run golangci-lint |
make integration | Run integration tests |
make clean | Clean build artifacts |
Pull Request Guidelines
- Keep changes focused - one feature or fix per PR
- Write tests for new functionality
- Ensure all existing tests pass:
make test - Run the linter:
make lint - Update documentation if you change behavior
- Write clear commit messages following conventional commits
- Add a changelog entry if the change is user-facing
Development Workflow
- Fork the repository on GitHub
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes and commit them
- Run tests and linting locally
- Push to your fork and open a pull request
- Respond to review feedback
Code Style
We follow standard Go conventions with gofmt. The CI pipeline runs golangci-lint to enforce style. When in doubt, match the style of surrounding code.
go
// Good - clear naming, comments for public symbols
package pipeline
// Run executes a pipeline and returns the results.
func Run(ctx context.Context, p *Pipeline, opts *RunOptions) (*Result, error) {
if err := p.Validate(); err != nil {
return nil, fmt.Errorf("validate: %w", err)
}
return executeGraph(ctx, p, opts)
}Code of Conduct
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to maintain a respectful, inclusive environment for everyone.
If you experience or witness unacceptable behavior, please report it to conduct@arrow.sh. All reports are confidential.