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 tasks

Building and Testing

Common make targets:

CommandDescription
make buildBuild the arrow binary into bin/
make testRun all unit tests
make lintRun golangci-lint
make integrationRun integration tests
make cleanClean 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

  1. Fork the repository on GitHub
  2. Create a feature branch: git checkout -b feat/my-feature
  3. Make your changes and commit them
  4. Run tests and linting locally
  5. Push to your fork and open a pull request
  6. 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.