Author SHA1 Message Date
cristhian 7eeb83bf6d scope pytest to this repository's tests
validate / validate (pull_request) Successful in 59m14s
`dora run` vendors a `git:` node's source into git/ inside the checkout, and
pytest collected that node's tests along with these: running the webcam example
and then the test suite reported 67 tests, 26 of them another project's. A
failure there would have gone red here, for a reason no one would find quickly.
2026-09-15 06:51:02 -03:00
cristhian 344a527097 record that the webcam example is verified, and pin v0.1.1
The example carried a caveat saying it validated but could not be run, because
a `git:` node could not be fetched. The organization is public now, so it can:
dora clones dora-webcam at the pinned tag, builds both nodes, and runs them
against a real camera to a clean exit.

The pin moves to v0.1.1, whose documentation shows the https URL. v0.1.0 points
at an ssh:// URL that dora cannot authenticate, so anyone copying the wiring out
of that tag would have hit the failure this example exists to demonstrate the
absence of.

What a `git:` node does require is still recorded, since it is not obvious:
anonymous read, which on Gitea means a public organization and not merely a
public repository.
2026-09-15 06:50:43 -03:00
cristhian c178afd58e add depth and camera intrinsics, and adopt the typed Arrow image (#4)
validate / validate (push) Successful in 59m16s
Adds a depth panel tiled beside the image, the camera_info input holding the
pinhole model, and std/media/v1/Image as the payload for both image and depth.
Builds with uv, lints markdown, keeps the workflow where act looks for it, and
carries a worked example wiring dora-webcam in.
2026-09-15 09:36:16 +00:00
cristhian 7eb00000ea make the node standalone and rename it to dora-image-view (#3)
validate / validate (push) Successful in 59m14s
The node was named opencv-plot everywhere, and the example dataflow could not
run without a webcam and two nodes fetched over the network.

Renames the node to dora-image-view, replaces the external example with a
synthetic source in this checkout, types that source inline rather than
shipping a second manifest, and merges the two CI jobs into one.
2026-09-15 09:33:11 +00:00
3 changed files with 21 additions and 10 deletions
+8 -5
View File
@@ -85,12 +85,15 @@ else, and `dora validate --strict` warns about every *typed* input this node dec
that a dataflow leaves unwired. The strictness belongs to `dataflow.yml`, which drives that a dataflow leaves unwired. The strictness belongs to `dataflow.yml`, which drives
all of them. all of them.
Verified end to end: dora clones dora-webcam at the pinned tag, builds both nodes, and
runs them against a real camera to a clean exit.
**A `git:` node needs anonymous read access.** dora-cli 1.0.1 fetches through libgit2 **A `git:` node needs anonymous read access.** dora-cli 1.0.1 fetches through libgit2
with no credential callback, so a repository that asks for credentials fails with with no credential callback, so `ssh://` cannot authenticate at all and anything asking
`remote authentication required but no callback set`, and `ssh://` cannot authenticate for credentials fails with `remote authentication required but no callback set`. On
at all. Note that marking a repository public is not sufficient on Gitea: a repository Gitea, marking a repository public is not sufficient — a repository inside a private
inside a **private organization** is treated as internal and still answers anonymous organization is internal and answers an anonymous clone with `401`, so the organization
clones with `401`. The organization has to be public too. has to be public too.
### Node manifest ### Node manifest
+6 -5
View File
@@ -5,10 +5,11 @@
# dataflow.yml is the gate, and needs neither. # dataflow.yml is the gate, and needs neither.
# #
# This needs anonymous read access to the camera's repository. dora-cli 1.0.1 # This needs anonymous read access to the camera's repository. dora-cli 1.0.1
# fetches through libgit2 with no credential callback, so anything that asks for # fetches through libgit2 with no credential callback, so ssh:// cannot
# credentials fails with "remote authentication required but no callback set". # authenticate at all and anything asking for credentials fails with "remote
# On Gitea, marking the repository public is not enough: a repository inside a # authentication required but no callback set". On Gitea, marking the repository
# private organization is internal and still answers anonymous clones with 401. # public is not enough: a repository inside a private organization is internal
# and answers an anonymous clone with 401, so the organization must be public.
# #
# `strict_types` is deliberately absent. A camera publishes an image and nothing # `strict_types` is deliberately absent. A camera publishes an image and nothing
# else, and `dora validate --strict` warns about every *typed* input this node # else, and `dora validate --strict` warns about every *typed* input this node
@@ -19,7 +20,7 @@
nodes: nodes:
- id: camera - id: camera
git: https://gitea.liria.cl/liria/dora-webcam.git git: https://gitea.liria.cl/liria/dora-webcam.git
tag: v0.1.0 tag: v0.1.1
build: uv pip install . build: uv pip install .
path: dora-webcam path: dora-webcam
inputs: inputs:
+7
View File
@@ -37,6 +37,13 @@ build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel] [tool.hatch.build.targets.wheel]
packages = ["dora_image_view"] packages = ["dora_image_view"]
[tool.pytest.ini_options]
# Only this repository's tests. `dora run` vendors a `git:` node's source into
# git/ inside the checkout, and pytest would otherwise collect that node's tests
# too -- reporting another project's results as this one's, and going red when
# they fail.
testpaths = ["tests"]
[tool.ruff.lint] [tool.ruff.lint]
extend-select = ["D", "I", "N", "RET", "UP"] extend-select = ["D", "I", "N", "RET", "UP"]