Protobuf/gRPC MetaStore

Description

Metastore is a schema registry for Protobuf and gRPC. Metastore main purpose is to be a hub for guarding and distributing your data contracts, be it gRPC service or Protobuf message definitions. It's has a few supported workflows but in general it's meant to be used in conjunction with a git repository and a CI/CD pipeline.

Interaction with the metastore always happens though the API. Updating of the store could happen though CI/CD with metastep, a component meant for running in CI/CD. But the API could also be used in your microservices for usage reporting. But the biggest benefit will come from usage in data pipelines, where they could be build at runtime though getting the contracts over the API.

To have a clear split between configuration (through Options) and contract ownership the metastore has a feature called shadow registry. It makes it possible for other parties, aside the contract owners, too augment the contracts, examples of this could be:

As metastore does'nt have an API it relies on Git repositories to keep track of contract transactions over time. Metastore is able to commit, pull and push to Git repos where all parties can inspect changes via their favorite Git repository manager.

Features

Documentation

References

Metastore presentation at gRPC conf 2019

Known Issues

Roadmap

Quick setup

This quick setup is needed when you want to build Metastore by yourself, begin by creating the file gradle/properties.gradle

ext {
    snapshotRepoUrl = "https ://you.maven.repo.example/repository/maven-snapshots/"
    repoUrl = "https ://you.maven.repo.example/repository/maven-releases/"
    repoUser = "repo_user"
    repoPass = "supersecret"

    containerRepoBase = "eu.gcr.io/my-repo"
    containerRepoTarget = "eu.gcr.io/my-repo"

    testGoogleCloud = true
    testGoogleCloudProject = "my-project"
    testGoogleCloudBucket = "my-bucket"
    testGoogleCloudBucketPath = "metastore-test/"
}

Build the base images that jib uses, see README.md in base directory.