michael-christen / toolbox

My very own monorepo
https://michael-christen.github.io/toolbox/
MIT License
3 stars 1 forks source link
bazel embedded monorepo

toolbox

My personal monorepo.

Find docs here

This will include everything from one-off scripts and experiments to libraries and applications. I'll likely mostly use Python, C++, and Rust (fingers crossed) and tie it all into 1 build tool to bring them all together.

This should act as a repository of projects I'm working on and an example of my latest insights into best practices, design principles, dev-ops usage, etc.

Badges

codecov

NOTE: Our coverage setup doesn't find completely uncovered files. We'll need to fix that at some point, for now be aware of it.

Layout

Configuration / Tools Used

This section describes how the various tools are setup and used in the repo.

Installation Instructions

wget -O ~/tools/bazel https://github.com/bazelbuild/bazelisk/releases/download/v1.18.0/bazelisk-linux-amd64
chmod +x ~/tools/bazel
~/tools/bazel
# Add to path

Getting Started

TODO

CI

References

Bazel

Command Quick Reference

# Completely clean
bazel clean --expunge

# Update cargo dependencies
# https://www.tweag.io/blog/2023-07-27-building-rust-workspace-with-bazel/
CARGO_BAZEL_REPIN=1 bazel sync --only=crate_index

NOTE: this doesn't seem to be working ...

Notes

Language FAQs

Generally, each language needs a way to answer these questions:

Rust

Command Quick Reference

Copied from "Bazel"

# Update cargo dependencies
# https://www.tweag.io/blog/2023-07-27-building-rust-workspace-with-bazel/
CARGO_BAZEL_REPIN=1 bazel sync --only=crate_index

Python

Excluding coverage

# pragma: no cover https://coverage.readthedocs.io/en/latest/excluding.html

Adding / Modifying External Dependencies

  1. Update requirements.in
  2. bazel run //:requirements.update to modify requirements_lock.txt
  3. bazel run //:gazelle_python_manifest.update to modify gazelle_python.yaml

NOTE: Once requirements.in is modified, tests will ensure the above commands have been run (or CI will fail)

C++

Testing utilizes catch2

Miscellaneous

bazel run //tools/buildozer -- <args>
bazel run //tools/buildifier -- <args>
bazel run -- @pnpm//:pnpm --dir $PWD install --lockfile-only

Bazel Options

# Avoid networked backends / remote caches, particularly helpful when home
network is slow
--config local

Get tsan to work on Ubuntu 24.04

https://stackoverflow.com/a/77856955

sudo sysctl vm.mmap_rnd_bits=30

Inspiration