Examples for Google's Open Source stack and deployment to the cloud.
The main technologies in the stack are:
Try the Google Cloud Shell tutorial on formatting code using a Bazel-built tool:
Protos, gRPC and Bazel are polyglot. The examples in this repo are mostly in Java and Typescript, but there's support for many other languages:
- gRPC and Protocol Buffers are supported by Google in C++, Java (and Android Java), Python, Go, C#, Objective-C, PHP, Dart, Ruby and JavaScript (incl. Node.js).
- Bazel is supported by Google in Java (incl. Android builds), Objective-C (incl. iOS builds), C++, Go, Dart, Rust, Sass and Scala.
- The community has added support for many others languages. See this list for Protocol Buffers and gRPC, and this one for Bazel.
- Lots of Protocol Buffer examples.
- gRPC-Web: a js client library running in the browser, connected to a gRPC server through an HTTP proxy. Both server and client use gRPC auto-generated stubs to handle communication.
- gRPC microservices example.
- Docker example: building containers using Bazel (no dockerfile needed!).
- Kubernetes: a config file showing how to run a container built with Bazel on k8s.
- CI example: Using CircleCI to run CI (continuous integration) and test all Bazel targets.
- Firebase: Java client for storing Protocol Buffers here.
- Dagger: Java Dependency Injection framework ("Next gen Guice"), see examples here.
- Flogger: Java logger with fluent API, see examples here.
- Android app: An Android app built with Bazel and integrated to Firebase.
There are several useful tools in the tools section.
You can treat StartupOS as a "developer image" with a pre-built setup and associated tools.
You can either:
- Clone this repo and evolve it on your own.
- Treat it as a dependency to your own repo. An example for that is here: https://github.com/oferb/startup-os-example
Install Bazel. That's it!
- Build everything:
./build.sh
- Run all tests:
./test.sh
A monorepo is a software development approach where all code is stored in a single repository. StartupOS doesn't require you to work with a monorepo, but some things, such as sharing a proto file across front-end and backend, are easier to do in a monorepo.
Some good reads about the monorepo approach:
- trunkbaseddevelopment.com/monorepos
- Why Google stores billions of lines of code in a single repository
While Bazel supports Linux, Mac and Windows, this repo has only been developed on Linux and Mac, so on Windows, YMMV.
You're welcome to contribute and in doing so, learn these technologies. You can have a look at the issues list, or at the project milestones.