Setup buffy
ActionsTags
(2)A cute Protobuf manager (in alpha)
Buffy builds and publishes Protocol Buffer schemas across multiple language ecosystems from a single configuration file. Define your schema once, ship it to crates.io, Maven Central, npm, and Go modules - without juggling five build systems.
| Language | Variants | Destination |
|---|---|---|
| Go | git |
Git remote (Go modules use Git tags) |
| Java | maven_central, git |
Sonatype Central Portal |
| Kotlin | maven_central, git |
Sonatype Central Portal |
| Rust | crate, git |
crates.io or another Cargo registry |
| JavaScript | npm, git |
npmjs.org or any npm-compatible registry |
| TypeScript | npm, git |
npmjs.org or any npm-compatible registry |
| Python | pypi, git |
pypi.org |
curl -sSL https://pkgs.julian-siebert.de/buffy/install.sh | shFor specific versions or other installation methods, see the documentation.
Define what your package is in Buffy.toml:
[package]
name = "tomato"
description = "Tomato protocol buffers"
version = "0.1.0"
license = "MIT"
homepage = "https://github.com/example/tomato"
authors = ["Jane Doe <jane@example.com>"]
[source]
path = "proto"Configure one profile per language target in .buffy/:
# .buffy/rust.toml
[rust.crate]
name = "tomato"
edition = "2021"
repository = "https://github.com/example/tomato"
documentation = "https://docs.rs/tomato"
registry = "crates-io"
grpc = true# .buffy/golang.toml
[golang.git]
module = "github.com/example/tomato-go"
remote = "git@github.com:example/tomato-go.git"
branch = "main"
grpc = trueVerify the toolchain, build, and publish:
buffy check
buffy
buffy --publishEach profile is built and published in parallel.
- uses: julian-siebert/buffy@v0
- run: buffy --publish --publish-version "${GITHUB_REF_NAME#v}"
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}Set only the secrets for the targets you actually publish to.
Full documentation is available at docs.julian-siebert.de/buffy, including:
Buffy is in alpha. The CLI and configuration format may change before 1.0. It is, however, used in projects by the author for personal protocol-buffer libraries.
Bug reports, feature requests, and feedback are very welcome! Please open an issue.
Buffy is licensed under the Apache License, Version 2.0.
Setup buffy is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.