{"id":51784787,"url":"https://github.com/hjosugi/learning-build-systems","last_synced_at":"2026-07-20T16:31:38.571Z","repository":{"id":366229756,"uuid":"1275229691","full_name":"hjosugi/learning-build-systems","owner":"hjosugi","description":"Build systems learning repo for Bazel, Nix, dev shells, and local CI parity","archived":false,"fork":false,"pushed_at":"2026-06-20T21:34:28.000Z","size":8,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T22:12:11.958Z","etag":null,"topics":["bazel","build-systems","developer-experience","learning","nix"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/hjosugi.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,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-20T12:22:31.000Z","updated_at":"2026-06-20T21:34:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hjosugi/learning-build-systems","commit_stats":null,"previous_names":["hjosugi/learning-build-systems"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/hjosugi/learning-build-systems","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjosugi%2Flearning-build-systems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjosugi%2Flearning-build-systems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjosugi%2Flearning-build-systems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjosugi%2Flearning-build-systems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hjosugi","download_url":"https://codeload.github.com/hjosugi/learning-build-systems/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjosugi%2Flearning-build-systems/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35693381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"ssl_error","status_checked_at":"2026-07-20T02:08:09.736Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","build-systems","developer-experience","learning","nix"],"created_at":"2026-07-20T16:31:36.119Z","updated_at":"2026-07-20T16:31:38.566Z","avatar_url":"https://github.com/hjosugi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Learning Build Systems\n\nBuild tools and reproducible development environment experiments with Bazel, Nix, language-native build tools, and CI integration.\n\nLast verified: 2026-06-21\n\n## Development Environment\n\nIf Bazel/Bazelisk, Groovy, or Java are missing locally, enter the Nix shell:\n\n```bash\nnix develop\n```\n\n## Runnable Starter Project\n\nRun the tiny build runner first, then port the same target graph to Make, Bazel, and Nix:\n\n```bash\npython3 projects/native-build-runner/build.py all\npython3 projects/native-build-runner/test_build.py\npython3 projects/groovy-unit-test-lab/check_groovy.py\n```\n\nThen build the real thing: a tiny Bazel/Nix-flavored build engine with a\ndependency DAG, a persisted content-addressed cache, incremental rebuilds,\n`--explain`, and a hermeticity check. See\n[projects/mini-build-graph/README.md](projects/mini-build-graph/README.md):\n\n```bash\npython3 projects/mini-build-graph/demo.py\npython3 -m unittest discover -s projects/mini-build-graph -p 'test_*.py'\n```\n\nGroovy hands-on:\n\n```bash\ngroovy projects/groovy-unit-test-lab/CalculatorTest.groovy\n```\n\n## Target Hands-On Projects\n\nBazel:\n\n```bash\npython3 projects/bazel-python-lab/check_bazel.py\n```\n\nWhen Bazel or Bazelisk is installed:\n\n```bash\ncd projects/bazel-python-lab\nbazel test //...\n```\n\nNix:\n\n```bash\npython3 projects/nix-devshell-lab/check_nix.py\n```\n\nWhen Nix is installed:\n\n```bash\ncd projects/nix-devshell-lab\nnix develop\n```\n\n## Why This Repo Exists\n\nApplication repos should teach application code. Platform repos should teach operations. This repo is for the layer in between:\n\n- how code is built\n- how developer environments are created\n- how dependencies are pinned\n- how multi-language projects stay reproducible\n- how CI runs the same build as local development\n\n## Baseline\n\n- Bazel official docs as the current reference line\n- Bazelisk as the preferred Bazel launcher\n- Nix and nix.dev official docs as the current reference line\n- Nix flakes for pinned development environments where appropriate\n- GitHub Actions for CI experiments\n\n## What This Repo Teaches\n\nThis repo answers one practical question: when does extra build tooling pay for itself?\n\nEach example should compare:\n\n- language-native tool only\n- Bazel or Nix enhancement\n- local developer experience\n- CI parity\n- cache and reproducibility benefits\n- extra complexity introduced\n\nThe goal is not to force Bazel or Nix everywhere. The goal is to learn when they improve a project and when ordinary Maven, Gradle, pnpm, uv, or Go modules are enough.\n\n## Learning Path\n\n1. Build system fundamentals\n2. Bazel basics: workspace, packages, targets, labels, BUILD files\n3. Bazel for Java, Go, TypeScript, and Python samples\n4. Nix basics: shells, flakes, pinning, reproducible environments\n5. Nix dev shells for existing projects\n6. Language-native tools: Maven/Gradle, pnpm, uv, Go modules\n7. CI integration and build cache notes\n8. Tradeoffs: when Bazel/Nix helps and when it is too much\n\n## Repository Profile\n\nSee [docs/repository-profile.md](docs/repository-profile.md) for GitHub description, topics, public safety notes, and first milestones.\n\n## Planned Structure\n\n```text\nexamples/\n  bazel-java/\n  bazel-go/\n  bazel-typescript/\n  bazel-python/\n  nix-devshell-node/\n  nix-devshell-python/\n  nix-devshell-java/\n  polyglot-bazel-nix/\ndocs/\n  2026-learning-items.md\n  build-tool-comparison.md\n  environment-strategy.md\n  troubleshooting.md\ntemplates/\n  github-actions/\n  devshells/\n```\n\n## What Belongs Here\n\n- Bazel experiments\n- Nix and flakes experiments\n- reproducible dev shells\n- build cache notes\n- CI build templates\n- environment setup comparisons\n- multi-language build strategy\n\n## What Does Not Belong Here\n\n- application feature code\n- deployment and runbooks; put those in `learning-platform-engineering`\n- design pattern examples; put those in `learning-design-patterns-polyglot`\n\n## Study Loop\n\n1. build a tiny native project first\n2. add a Bazel or Nix version\n3. write down what became more reproducible\n4. write down what became harder\n5. add CI only after the local command is clear\n\n## First Milestones\n\n1. Add one Java Bazel example and compare it with Maven/Gradle.\n2. Add one Go Bazel example and compare it with Go modules.\n3. Add one Node dev shell and one Python dev shell with Nix.\n4. Add a troubleshooting note for cache misses and dependency pinning.\n\n## References\n\n- Bazel getting started: https://bazel.build/start\n- Bazel build concepts: https://bazel.build/concepts/build-ref\n- Nix learning resources: https://nixos.org/learn/\n- nix.dev: https://nix.dev/\n- Curated primary sources: [docs/learning-resources.md](docs/learning-resources.md)\n\n## License\n\n0BSD. You can use, copy, modify, and distribute this project for almost any purpose.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhjosugi%2Flearning-build-systems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhjosugi%2Flearning-build-systems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhjosugi%2Flearning-build-systems/lists"}