Repository navigation
feat(build)!: move the build CLI and build() onto the coordinator - #654
Merged
Merged
Conversation
This was referenced Nov 3, 2026
karhu
force-pushed
the
tnet-157/7-build-cli
branch
2 times, most recently
from
November 4, 2026 12:01
754f745 to
113a4ff
Compare
This was referenced Nov 4, 2026
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 4, 2026 12:42
113a4ff to
f0e1b90
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 4, 2026 13:08
f0e1b90 to
28d3ae1
Compare
This was referenced Nov 4, 2026
karhu
force-pushed
the
tnet-157/7-build-cli
branch
2 times, most recently
from
November 4, 2026 13:34
5af49f0 to
aa7b22c
Compare
This was referenced Nov 4, 2026
karhu
commented
Nov 4, 2026
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 4, 2026 20:02
338d006 to
3b15b2a
Compare
This was referenced Nov 4, 2026
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 6, 2026 07:54
2a4813f to
ab1ed3c
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 6, 2026 13:54
ab1ed3c to
53b679c
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
3 times, most recently
from
November 7, 2026 15:20
bba4d01 to
ccb9474
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 10, 2026 14:39
ccb9474 to
a313cb5
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 10, 2026 15:50
a313cb5 to
9230e79
Compare
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 10, 2026 16:24
9230e79 to
9d83fe4
Compare
The build command of timenet-build and timenet_connectors.build() now build through build_release(). They no longer plan and build the parents through build_one(). A local --out gets the release in place. A remote --out gets the release in two steps. First, the release builds into the default local registry with open_access_only set. So a release that does not declare access open fails before any download. Then copy_release() publishes the release and its payload sources. If the remote registry already holds the version, nothing builds. --force is then a usage error, before anything runs, because a published version never changes. The parents now land in the local registry, so --fetch-from works with a remote --out too. If nothing runs, the command prints one status line on stderr that says so, unless --quiet is set. The progress renderer of the CLI shows the copy steps as well as the build steps. It is now the only place that chooses between no output, text lines and live bars. With isolation on, the parent shows only the copy steps, because the child shows its own build lines. --isolation and --no-isolation set the new BuildOptions.isolation, which the backend reads before TIMENET_ISOLATION. The environment of the process stays as it is. timenet_connectors.build() accepts only the dataset ID that a card declares. It and the build command take the release that the card declares from builders.declared(). build_release() checks the requested version against the card. A copy step of build_release() takes a parent with each payload source at every depth, through copy_release(). build_one() copied only the direct payload sources. So a copy now fails if the registry to copy from holds a payload source without its own payload sources. ConnectorBuilder.build() still calls build_one(), because the client still uses it. So build_one() and the hidden --pinned-by option of build stay. build_one() loses its narrate option, because nothing sets it now. BREAKING CHANGE: timenet_connectors.build() raises TimeNetDatasetNotFoundError, not LookupError, for a dataset ID that no card declares, such as the module spelling timenet/hello_world. It raises TimeNetVersionUnavailableError, a TimeFValidationError, for another version. --force with a remote --out of timenet-build build that already holds the version is a usage error. Part of TNET-157.
…--out The build command now sets BuildOptions.quiet from its --quiet option. Since the built-in backend reads only that option, --quiet silences the isolated child again. timenet_connectors.build() keeps the default, so its child prints its build lines and downloads. A remote --out without --fetch-from now copies a missing parent from the remote registry into the local one. Before this stack, a build into the remote registry found the parents there, so timenet-build build child --out <remote> worked when the remote held the parent. Now it works again, and only the child builds. --fetch-from still wins when it is given. The help text names the default. Part of TNET-157.
Say only what a caller of the build command and of build() needs to know. Part of TNET-157.
Shorter docstrings for the code that this change adds or changes. Part of TNET-157.
Drop tests that cannot fail or repeat other tests, and sharpen the rest. Part of TNET-157.
karhu
force-pushed
the
tnet-157/7-build-cli
branch
from
November 10, 2026 17:41
9d83fe4 to
e84e86f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Stack
This stack covers refactoring the internal logic of how releases are resolved during read, download & build, in particular also in the context of parent releases / parent datasets. On top of that it refactors the public TimeNet APIs and CLI interfaces around these actions, to streamline the behavior across them.
This PR
Moves the
timenet-build buildcommand andtimenet_connectors.build()onto the coordinator.Details
The
timenet-build buildcommand andtimenet_connectors.build()still plan and build throughbuild_one(), next to the coordinator of #652 (TNET-157). A remote--outbuilds and publishes in one step, and there--forcecan overwrite a published version.buildcommand andtimenet_connectors.build()build throughbuild_release().--outgets the release in place.--outgets the release in two steps. First, the release builds into the default local registry withopen_access_onlyset. So a release that does not declare accessopenfails before any download. Thencopy_release()publishes the release and its payload sources.--fetch-from, a remote--outcopies the missing parents from the remote, as before.--fetch-fromworks with a remote--outtoo.progress_renderer()of feat(build)!: build one prepared release in the built-in backend #653, which shows the copy steps and the build steps. It is the only place that chooses between no output, text lines and live bars.--isolationand--no-isolationset the newBuildOptions.isolation, which overridesTIMENET_ISOLATIONfor the build. The process environment does not change.--quietalso silences the isolated child.timenet_connectors.build()accepts only the dataset ID that a card declares. It and the build command take the release that the card declares frombuilders.declared().Design decisions
--outis a local build plus a copy, and the copy never changes a published version. So--forcewith a remote--outthat already holds the version is a usage error, before any download.copy_release()in feat(registry)!: copy a release between registries #649 does. The old path copied only the direct payload sources. The registry to copy from can hold a payload source without its own payload sources. Then the copy now fails withTimeNetMissingParentError. Every registry must hold the payload sources of every release that it holds.Breaking changes
timenet_connectors.build()raisesTimeNetDatasetNotFoundError, notLookupError, for a dataset ID that no card declares, such astimenet/hello_world. For another version, it raisesTimeNetVersionUnavailableError, which is aTimeFValidationError.--forcewith a remote--outthat already holds the version is now a usage error. Before, it published the version again.Stack
Changes later in the stack:
build_one()and the hidden--pinned-byoption ofbuildstay, because the client still uses them throughConnectorBuilder.build(). feat(build)!: run every build through the coordinator #655 moves the client onto the coordinator and removes them.Merge message