{"id":13450963,"url":"https://github.com/google/startup-os","last_synced_at":"2025-03-23T18:31:37.154Z","repository":{"id":46560562,"uuid":"122602787","full_name":"google/startup-os","owner":"google","description":"Working examples of Google's Open Source stack and deployment to the cloud.","archived":true,"fork":false,"pushed_at":"2021-10-05T20:27:56.000Z","size":4132,"stargazers_count":680,"open_issues_count":46,"forks_count":102,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-03-22T00:42:42.214Z","etag":null,"topics":["bazel","cpp","dagger","firebase","firestore","grpc","grpc-java","java","protocol-buffers"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-23T09:48:29.000Z","updated_at":"2025-03-15T12:57:43.000Z","dependencies_parsed_at":"2022-09-12T01:01:30.732Z","dependency_job_id":null,"html_url":"https://github.com/google/startup-os","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fstartup-os","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fstartup-os/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fstartup-os/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fstartup-os/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/startup-os/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245149323,"owners_count":20568875,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bazel","cpp","dagger","firebase","firestore","grpc","grpc-java","java","protocol-buffers"],"created_at":"2024-07-31T07:00:40.917Z","updated_at":"2025-03-23T18:31:35.262Z","avatar_url":"https://github.com/google.png","language":"Java","readme":"\n\n# StartupOS\n\n[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/google/startup-os)\n[![CircleCI](https://circleci.com/gh/google/startup-os/tree/master.svg?style=svg)](https://circleci.com/gh/google/startup-os/tree/master)\n\n\u003e Examples for Google's Open Source stack and deployment to the cloud.\n\nThe main technologies in the stack are:\n* [Angular](https://angular.io/)\n* [Protocol Buffers](https://developers.google.com/protocol-buffers/)\n* [gRPC](https://grpc.io/)\n* [Bazel](https://bazel.build/)\n\n## Hands-on experience\nTry these Google Cloud Shell tutorials:\n\nMulti-language code formatting tool built with Bazel:\n\n[![Open in Cloud Shell](http://gstatic.com/cloudssh/images/open-btn.svg)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/google/startup-os\u0026page=shell\u0026tutorial=tutorials/formatting-code.md)\n\nField \u0026 enum renaming API backwards compatibility 1: how old data can still be read by new release, even after renaming:\n\n[![Open in Cloud Shell](http://gstatic.com/cloudssh/images/open-btn.svg)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/google/startup-os\u0026page=shell\u0026tutorial=tutorials/proto_rename/renaming-proto.md)\n\nField \u0026 enum renaming API backwards compatibility 2: how old releases can talk to new releases without breaking:\n\nTBD\n## Supported languages\n\nProtos, gRPC and Bazel are polyglot. The examples in this repo are mostly in Java and Typescript, but there's support for many other languages:\n* 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).\n* Bazel is supported by Google in Java (incl. Android builds), Objective-C (incl. iOS builds), C++, Go, Dart, Rust, Sass and Scala.\n* The community has added support for many others languages. See [this list](https://github.com/google/protobuf/blob/master/docs/third_party.md) for Protocol Buffers and gRPC, and [this one](https://github.com/jin/awesome-bazel#rules) for Bazel.\n\n## Top examples\n* Lots of [Protocol Buffer examples](https://github.com/search?utf8=%E2%9C%93\u0026q=repo%3Agoogle%2Fstartup-os+extension%3Aproto\u0026type=Code\u0026ref=advsearch\u0026l=\u0026l=).\n* [gRPC-Web](https://github.com/oferb/startup-os-example/tree/master/app): 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.\n* gRPC [microservices example](https://github.com/google/startup-os/blob/master/tools/reviewer/local_server/LocalServer.java).\n* [Docker example](https://github.com/google/startup-os/tree/master/examples/docker): building containers using Bazel (no dockerfile needed!).\n* [Kubernetes](https://github.com/google/startup-os/tree/master/examples/k8s): a config file showing how to run a container built with Bazel on k8s.\n* [CI example](https://github.com/google/startup-os/tree/master/.circleci): Using CircleCI to run CI (continuous integration) and test all Bazel targets.\n* [Firebase](https://firebase.google.com): Java client for storing Protocol Buffers [here](https://github.com/google/startup-os/blob/master/common/firestore/FirestoreProtoClient.java).\n* [Dagger](https://github.com/google/dagger): Java Dependency Injection framework  (\"Next gen Guice\"), see examples [here](https://github.com/google/startup-os/tree/master/examples/dagger).\n* [Flogger](https://github.com/google/flogger): Java logger with fluent API, see examples [here](https://github.com/google/startup-os/search?q=com.google.common.flogger.FluentLogger\u0026unscoped_q=com.google.common.flogger.FluentLogger).\n* [Android app](https://github.com/google/startup-os/tree/master/examples/android): An Android app built with Bazel and integrated to Firebase.\n\n## Tools\nThere are several useful tools in the [tools section](https://github.com/google/startup-os/tree/master/tools).\n\n## How to use StartupOS\nYou can treat StartupOS as a \"developer image\" with a pre-built setup and associated tools.\n\nYou can either:\n* Clone this repo and evolve it on your own.\n* Treat it as a dependency to your own repo. An example for that is here: https://github.com/oferb/startup-os-example\n\n## Installation\nInstall [Bazel](https://docs.bazel.build/versions/master/install.html). That's it!\n\n## Build \u0026 Test\n* Build everything: `./build.sh`\n* Run all tests: `./test.sh`\n\n## About monorepos\nA monorepo is a software development approach where all code is stored in a single repository. Some things are easier to do in a monorepo, such as sharing a proto file across front-end and backend, some things are harder, such as per-repo control over collaborators, email notifications, commit history etc.\nWe're working on an approach where multiple repos can act as a single monorepo, while still being separate repos, using multi-repo tooling such as [multi-repo code review](tools/reviewer).\n\nSome good reads about the monorepo approach:\n* [trunkbaseddevelopment.com/monorepos](https://trunkbaseddevelopment.com/monorepos/)\n* [Why Google stores billions of lines of code in a single repository](https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext)\n\n## Platforms\nWhile Bazel supports Linux, Mac and Windows, this repo supports Linux and Mac.\nIf you're on Windows 10, you can use [Windows Subsystem for Linux (WSL)](https://docs.microsoft.com/ru-ru/windows/wsl/about).\nIt gives you a Linux environment, without the overhead of a virtual machine.\n\n#### Installing Windows Subsystem for Linux:\nPlease follow the [guide](https://docs.microsoft.com/ru-ru/windows/wsl/install-win10).\nNote: You may have to do a Windows upgrade. If you need it, it will ask for it at the beginning of the installation.\n\n## Contributing\nYou're welcome to contribute and in doing so, learn these technologies.\nYou can have a look at the issues list, or at the project [milestones](docs/milestones.md).\n","funding_links":[],"categories":["著名的公开 monorepos","Java","Java (78)","Monorepo","Resources"],"sub_categories":["Code ownership","Bazel, gRPC, Protocol Buffers","Projects"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fstartup-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fstartup-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fstartup-os/lists"}