Examples for Google's Open Source stack and deployment to the cloud.
The main technologies in the stack are:
Try cloning the repo in Google Cloud Shell and look at the tutorials:
$ ls tutorials/
$ teachme <tutorial_name.md>
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
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.