No description
Find a file
2025-07-28 22:46:35 -07:00
.forgejo/workflows Add CI 2025-05-03 20:53:44 -07:00
databuild Implement log/metric serving 2025-07-28 22:46:35 -07:00
design Add plan for implementing vnext of job wrapper 2025-07-26 22:47:13 -07:00
docs Big change 2025-07-13 21:18:15 -07:00
examples/podcast_reviews Implement log collection in graph 2025-07-28 21:40:46 -07:00
plans Add plan for graph-side log consumption 2025-07-28 20:56:07 -07:00
scripts Generate stuff to make intellij happy 2025-07-19 16:02:57 -07:00
tests/end_to_end Pre-typescript mithril commit 2025-07-20 17:54:32 -07:00
tools/build_rules Generate stuff to make intellij happy 2025-07-19 16:02:57 -07:00
.bazelignore Add .bazelignore 2025-04-21 21:40:30 -07:00
.bazelrc Builds passing 2025-07-10 21:39:43 -07:00
.bazelversion Builds passing 2025-07-10 21:39:43 -07:00
.envrc commit 2025-06-29 19:28:46 -07:00
.gitignore Update gitignore 2025-07-28 21:41:32 -07:00
BUILD.bazel Add e2e test 2025-07-07 19:20:45 -07:00
CLAUDE.md Add plan for graph-side log consumption 2025-07-28 20:56:07 -07:00
DESIGN.md Add plan for implementing vnext of job wrapper 2025-07-26 22:47:13 -07:00
GEMINI.md Update agent instructions, add symlinked gemini.md 2025-07-26 22:49:19 -07:00
MODULE.bazel Implement log collection in graph 2025-07-28 21:40:46 -07:00
MODULE.bazel.lock Implement log collection in graph 2025-07-28 21:40:46 -07:00
README.md Add python dsl options 2025-07-21 22:52:20 -07:00
run_e2e_tests.sh Remove basic graph from e2e test 2025-07-27 00:10:59 -07:00

DataBuild

Orchestration logic changes frequently, so just don't write it.

DataBuild is a trivially-deployable, partition-oriented, declarative data build system.

For important context, check out DESIGN.md. Also, check out databuild.proto for key system interfaces.

Usage

See the podcast example BUILD file.

Development

Intellij

Run these to allow intellij to understand the rust source:

# Generate a Cargo.toml file so intellij can link rust src
python3 scripts/generate_cargo_toml.py
# Generate a gitignore'd rust file representing the protobuf interfaces
scripts/generate_proto_for_ide.sh

Compiling

bazel build //...

Bullet-proof compile-time correctness is essential for production reliability. Backend protobuf changes must cause predictable frontend compilation failures, preventing runtime errors. Our three-pronged approach ensures this:

  1. Complete Type Chain: Proto → Rust → OpenAPI → TypeScript → Components

    • Each step uses generated types, maintaining accuracy across the entire pipeline
    • Breaking changes at any layer cause compilation failures in dependent layers
  2. Consistent Data Transformation: Service boundary layer transforms API responses to dashboard types

    • Canonical frontend interfaces isolated from backend implementation details
    • Transformations handle protobuf nullability and normalize data shapes
    • Components never directly access generated API types
  3. Strict TypeScript Configuration: Enforces explicit null handling and prevents implicit any types

    • strictNullChecks catches undefined property access patterns
    • noImplicitAny surfaces type safety gaps
    • Runtime type errors become compile-time failures

This system guarantees that backend interface changes are caught during TypeScript compilation, not in production.

Testing

DataBuild core testing:

bazel test //...

End to end testing:

./run_e2e_tests.sh