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.
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.
- docs: various writings and documentation of the repo and tools used
- tools: directory of various tools
- experiments: miscellaneous experiments I'm trying out
This section describes how the various tools are setup and used in the repo.
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
- decide on rough rules for directory structure, likely don't separate by language
- handle security issues & re-enable dependabot: https://github.com/michael-christen/toolbox/security/dependabot
- Add linter
- Look into new tools: fd, fzf, zoxide
- github actions, see .github/workflows/
- bazel
- disk caching uses github's cache action
- remote caching handled externally with
nativelink
- see dashboard for more detailed metrics.
- buildbuddy
# 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 ...
- bzlmod is where things will be moving to better share dependency information and use a central regirstry: https://bazel.build/external/migration
Generally, each language needs a way to answer these questions:
- How to check & enforce style and typing? (linter & formatter)
- How to bulid?
- How to test?
- How to run?
- How to add dependencies?
- How to package?
- How to release / distribute?
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
# pragma: no cover
https://coverage.readthedocs.io/en/latest/excluding.html
- Update
requirements.in
bazel run //:requirements.update
to modifyrequirements_lock.txt
bazel run //:gazelle_python_manifest.update
to modifygazelle_python.yaml
NOTE: Once requirements.in
is modified, tests will ensure the above commands
have been run (or CI will fail)
Testing utilizes catch2
bazel run //tools/buildozer -- <args>
bazel run //tools/buildifier -- <args>
bazel run -- @pnpm//:pnpm --dir $PWD install --lockfile-only
# Avoid networked backends / remote caches, particularly helpful when home
network is slow
--config local
https://stackoverflow.com/a/77856955
sudo sysctl vm.mmap_rnd_bits=30