{"id":13450972,"url":"https://github.com/kriscfoster/multi-language-bazel-monorepo","last_synced_at":"2026-03-05T17:17:46.951Z","repository":{"id":39616063,"uuid":"439648566","full_name":"kriscfoster/multi-language-bazel-monorepo","owner":"kriscfoster","description":"Experimenting with bazel \u0026 multiple languages in a monorepo.","archived":false,"fork":false,"pushed_at":"2023-10-06T14:05:12.000Z","size":261,"stargazers_count":112,"open_issues_count":1,"forks_count":42,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-01-01T03:16:43.498Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Starlark","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kriscfoster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-12-18T15:24:17.000Z","updated_at":"2024-12-31T19:10:08.000Z","dependencies_parsed_at":"2024-04-06T03:43:04.420Z","dependency_job_id":null,"html_url":"https://github.com/kriscfoster/multi-language-bazel-monorepo","commit_stats":{"total_commits":53,"total_committers":3,"mean_commits":"17.666666666666668","dds":0.4716981132075472,"last_synced_commit":"69309e7c094a11ca486cdca0967eb08abcefaaf8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kriscfoster%2Fmulti-language-bazel-monorepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kriscfoster%2Fmulti-language-bazel-monorepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kriscfoster%2Fmulti-language-bazel-monorepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kriscfoster%2Fmulti-language-bazel-monorepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kriscfoster","download_url":"https://codeload.github.com/kriscfoster/multi-language-bazel-monorepo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239952639,"owners_count":19723924,"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":[],"created_at":"2024-07-31T07:00:41.160Z","updated_at":"2026-03-05T17:17:46.912Z","avatar_url":"https://github.com/kriscfoster.png","language":"Starlark","funding_links":[],"categories":["Resources"],"sub_categories":["Demos"],"readme":"# multi-language-bazel-monorepo\n\n![Getting Started with Bazel](https://user-images.githubusercontent.com/17026751/147872728-cba68987-9a5c-4cb6-9777-47c51efc4c75.png)\n\nI wanted to try to set up a multi-language monorepo using [bazel](https://bazel.build/) for experimentation purposes. You can follow the journey on YouTube.\n\n1. [Bazel Tutorial: (Part 1) Getting Started, Bazelisk \u0026 our First Build Targets](https://youtu.be/BZYj6yfA6Bs).\n2. [Bazel Tutorial: How to Build, Run, Test \u0026 Query (deps, rdeps, tags)](https://youtu.be/vZnXXx4Oh7c).\n3. [Bazel Tutorial: Python targets with py_library, py_test, py_binary (internal \u0026 external deps)](https://youtu.be/8P3m1-U7v0k).\n4. [GitHub Actions for Bazel Monorepo - Building \u0026 Testing (CI)](https://youtu.be/qiZXFdd8OPo).\n5. [Bazel \u0026 Go Tutorial: Targets with go_library, go_test \u0026 go_binary (internal \u0026 external deps)](https://youtu.be/DB_kWimE2bw).\n6. [Bazel \u0026 NodeJS Tutorial: library, test \u0026 nodejs_binary (internal \u0026 external deps)](https://youtu.be/lmWjRhFhvSc).\n7. [Bazel \u0026 Docker Tutorial: Building container images with bazel (local \u0026 remote registry)](https://youtu.be/hLD6vKl4Txc).\n8. [Deploying from a Bazel Monorepo to Heroku](https://youtu.be/AHvON-xl_Ds).\n9. [Using Gazelle to Improve Multi-Language Bazel Monorepo](https://youtu.be/MUP35hfK0q4).\n10. [Bazel \u0026 Java Tutorial: java_library \u0026 java_binary (internal \u0026 external dependencies)](https://youtu.be/HPTzVHOcins).\n11. [Bazel \u0026 Docker: Using Custom Base Images](https://youtu.be/thYPUrhA82A).\n\n## Prerequisites\n\n- [bazelisk installed](https://github.com/bazelbuild/bazelisk) (`brew install bazelisk` on mac) - bazel launcher that also manages the bazel installation \u0026 version using the [.bazelversion](./.bazelversion) file.\n\n## Useful Commands\n\n### Updating npm dependencies from package.json\n\n- `bazel run -- @pnpm//:pnpm i --dir $PWD`\n\n### Build all targets\n\n- `bazel build //...`\n\n### Test all test targets\n\n- `bazel test //...`\n\n### Sync Go Dependencies with `go.mod`\n\n- `bazel run //:gazelle-update-repos`\n\n### Format BUILD.bazel files (completely generates BUILd.bazel files for go projects)\n\n- `bazel run //:gazelle`\n\n### Run Python web app\n\n- `bazel run //projects/python_web`\n- http://localhost:5000\n\n### Run Go web app\n\n- `bazel run //projects/go_web`\n- http://localhost:8080\n\n### Run NodeJS web app\n\n- `bazel run //projects/node_web`\n- http://localhost:8080\n\n### Run TypeScript app\n\n- `bazel run //projects/ts_app`\n\n### Build \u0026 Run NodeJS web app docker image\n\n```\n➜ bazel run projects/node_web:oci_tarball\n...\nLoaded image: projects/node_web:oci_tarball\n...\n➜ docker run -p 8080:8080 projects/node_web:oci_tarball\n...\nlistening on port 8080\n```\n\n### Build \u0026 Run Go web app docker image (amd64)\n```\n➜ bazel run projects/go_web:oci_tarball_amd64\n...\nLoaded image: projects/go_web:oci_tarball_amd64\n➜\n➜ docker run projects/go_web:oci_tarball_amd64\n2023/08/27 13:40:22 running program's operating system target: linux\n2023/08/27 13:40:22 running program's architecture target: amd64\n2023/08/27 13:40:22 Going to listen on port: 8080\n```\n\n### Build \u0026 Run Go web app docker image (arm64)\n```\n➜ bazel run projects/go_web:oci_tarball_arm64\n...\nLoaded image: projects/go_web:oci_tarball_arm64\n➜\n➜ docker run projects/go_web:oci_tarball_arm64\n2023/08/27 13:40:58 running program's operating system target: linux\n2023/08/27 13:40:58 running program's architecture target: arm64\n2023/08/27 13:40:58 Going to listen on port: 8080\n```\n\n### Deploying Go web app to Heroku\n\n```\n➜ bazel run projects/go_web:bazoku-deployment --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64\n...\n```\n\n### Publishing Multi-arch Docker image to DockerHub\n\n```\n➜ bazel run examples/multi_arch_go:publish\n...\n2023/08/18 16:41:38 registry.hub.docker.com/krisfoster96/monorepo-go-web:6: digest: sha256:c50ffe127f340301993cbc323e510211d6dab9a547aa1b1a81035426e4e9d1b1 size: 648\n```\n\n```\n➜ docker buildx imagetools inspect registry.hub.docker.com/krisfoster96/monorepo-go-web:6\nName:      registry.hub.docker.com/krisfoster96/monorepo-go-web:6\nMediaType: application/vnd.oci.image.index.v1+json\nDigest:    sha256:c50ffe127f340301993cbc323e510211d6dab9a547aa1b1a81035426e4e9d1b1\n           \nManifests: \n  Name:      registry.hub.docker.com/krisfoster96/monorepo-go-web:6@sha256:18b8c8a2606c3daf70a86db275c850080353bf5bd79a7045cca6732736b693c3\n  MediaType: application/vnd.oci.image.manifest.v1+json\n  Platform:  linux/arm64\n             \n  Name:      registry.hub.docker.com/krisfoster96/monorepo-go-web:6@sha256:fbc6e9ca088bbb683c0743b16aa98b51583e7af8564febd26154e638b12b484a\n  MediaType: application/vnd.oci.image.manifest.v1+json\n  Platform:  linux/amd64\n```\n\n```\n➜ docker run --platform linux/arm64 registry.hub.docker.com/krisfoster96/monorepo-go-web:6\n...\n2023/08/18 15:56:08 running program's operating system target: linux\n2023/08/18 15:56:08 running program's architecture target: arm64\n2023/08/18 15:56:08 Going to listen on port: 8080\n```\n\n```\n➜ docker run --platform linux/amd64 registry.hub.docker.com/krisfoster96/monorepo-go-web:6\n...\n2023/08/18 15:56:08 running program's operating system target: linux\n2023/08/18 15:56:08 running program's architecture target: amd64\n2023/08/18 15:56:08 Going to listen on port: 8080\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkriscfoster%2Fmulti-language-bazel-monorepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkriscfoster%2Fmulti-language-bazel-monorepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkriscfoster%2Fmulti-language-bazel-monorepo/lists"}