Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/chenrui333/rules_avro

🍃 bazel rules for generating code from avro schemas
https://github.com/chenrui333/rules_avro

avro bazel bazel-rules

Last synced: about 2 months ago
JSON representation

🍃 bazel rules for generating code from avro schemas

Awesome Lists containing this project

README

        

# bazel avro rules

[![Build Status](https://travis-ci.org/chenrui333/rules_avro.svg?branch=master)](https://travis-ci.org/chenrui333/rules_avro)

> [Bazel](https://bazel.build/) rules for generating java sources and libraries from [avro](https://avro.apache.org/) schemas

## Rules

- [Rules](#rules)
- [Getting started](#getting-started)
- [avro_gen](#avro_gen)
- [avro_java_library](#avro_java_library)

## Getting started

To use the Avro rules, add the following to your projects `WORKSPACE` file

```python
# rules_avro depends on rules_jvm_external: https://github.com/bazelbuild/rules_jvm_external
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

RULES_JVM_EXTERNAL_TAG = "4.1"
RULES_JVM_EXTERNAL_SHA = "f36441aa876c4f6427bfb2d1f2d723b48e9d930b62662bf723ddfb8fc80f0140"

http_archive(
name = "rules_jvm_external",
sha256 = RULES_JVM_EXTERNAL_SHA,
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)

RULES_AVRO_VERSION = "96670d5c4a0a3e0f25f4177336e1fa94eba8be5a"
RULES_AVRO_SHA256 = "3bd69872ec72904e843762f7b3532fd1125215503a635a24f6c8037c75b299bc"

http_archive(
name = "io_bazel_rules_avro",
strip_prefix = "rules_avro-%s" % RULES_AVRO_VERSION,
url = "https://github.com/chenrui333/rules_avro/archive/%s.tar.gz" % RULES_AVRO_VERSION,
sha256 = RULES_AVRO_SHA256
)

load("@io_bazel_rules_avro//avro:avro.bzl", "avro_repositories")
avro_repositories()
# or specify a version
avro_repositories(version = "1.9.1")
```

Then in your `BUILD` file, just add the following so the rules will be available:

```python
load("@io_bazel_rules_avro//avro:avro.bzl", "avro_gen", "avro_java_library")
```

## avro_gen

```python
avro_gen(name, srcs, strings, encoding)
```

Generates `.srcjar` containing generated `.java` source files from a collection of `.avsc` schemas







Attributes




name

Name, required

A unique name for this rule.





srcs

List of labels, required


List of .avsc files used as inputs for code generation





strings

Boolean, optional

use java.lang.String instead of Utf8.





encoding

String, optional

set the encoding of output files.





avro_tools

Label, optional

Label to the runnable Avro tools jar. Default, uses the tools jar associated with the downloaded avro
version via `avro_repository`




## avro_java_library

```python
avro_java_library(name, srcs, strings, encoding)
```

Same as above except
* instead of `avro_tools`, provide `avro_libs` as a dict(core, tools) of Labels for the avro libraries.
* See tests for an example the re-uses the downloaded library explicitly
* the outputs include those provided by `java_library` rules.