This repository uses three primary validation commands.
Run from repository root:
make selfWhat it does:
- Cleans build outputs.
- Builds the UI.
- Builds/packs Terrabuild.
- Runs Terrabuild against itself.
- Executes project-level validation chain.
Use when:
- You changed core logic, build orchestration, scripting/runtime integration, or release-critical behavior.
Success criteria:
- Command exits with code
0.
Run from repository root:
make smoke-testsWhat it does:
- Runs integration scenarios under
tests/. - Validates end-to-end behavior of targets/extensions in representative projects.
Use when:
- You changed extension scripts, scripting protocol, graph behavior, or command dispatch.
Success criteria:
- All smoke test suites complete successfully.
- Command exits with code
0.
Run from repository root:
make try-docsWhat it does:
- Executes DocGen in dry-run style for Terrabuild extension documentation generation.
- Validates script metadata/doc parsing.
Use when:
- You changed extension script signatures, export syntax, doc comments, DocGen logic, or extension protocol docs.
Success criteria:
- Doc generation completes without exceptions.
- Command exits with code
0.
Run from repository root:
make testWhat it does:
- Runs Terrabuild unit/integration test projects in the .NET solution.
- Validates language, configuration, expressions, scripting, and core behavior at test-project level.
Use when:
- You changed F# source code in
src/(runtime, parser, config, graph, scripting, helpers).
Success criteria:
- All test projects pass.
- Command exits with code
0.
For extension and scripting changes:
make try-docsmake testmake smoke-testsmake self
For broad/core changes:
make testmake selfmake smoke-testsmake try-docs
- Run commands from the repository root (the directory containing
Makefile). - Some flows rely on Docker and local tooling (
dotnet,pnpm,node), so transient environment issues can occur. - If
make selffails due environment/toolchain issues, still runmake smoke-testsandmake try-docsto isolate regressions from infrastructure noise. - If
make smoke-testsproduces diffs, they MUST be investigated before accepting changes. The diff analysis should explain the root cause clearly (for example: file/content change, configuration change, or variable/input change).
Terrabuild uses a draft-based release flow:
- Run
make release-prepare version=X.Y.Z(stable) ormake release-prepare version=X.Y.Z-next(preview).- Optional preview mode:
make release-prepare version=X.Y.Z[-next] dryrun=true
- Optional preview mode:
- The command updates
CHANGELOG.md, commits changelog changes, and creates a local annotated tag. - Push commit and tag:
git push origin main --follow-tags
- Wait for CI (
on-push-tag.yml) to create the GitHub release as draft and upload artifacts. - Publish that existing draft release (do not create/publish manually before CI draft creation).
Rules:
- Tag workflow sources draft release notes from
CHANGELOG.mdsection## [X.Y.Z]. - Tag workflow fails if version section is missing/empty, has no bullet, or has no compare link.
on-release-published.ymlconsumes release artifacts from the published release, signs macOS binaries, and publishes NuGet/Homebrew.make release-preparesupportsX.Y.ZandX.Y.Z-nextonly.- Compare link policy:
- stable release compares against previous stable tag.
- preview release compares against previous
-nexttag.