Skip to main content
A dataset is a named collection of tasks. Use name@version for a specific version, or a bare name for the active version.
show lists tasks, timeouts, and provider compatibility. Use --search <text> with list to narrow the catalog.

Publish your tasks

You can publish a single task directory, a directory of tasks, or a directory containing tasks/.
1

Check the configuration

This sends configuration files for validation. It does not upload the corpus or build images. Fix rejected declarations before publishing.
2

Publish a version

The dataset is private to your organization. Its owner can publish more versions under the same name.
3

Inspect the result

Check both ready and failed task counts. If you disconnect during publication, use evolve dataset watch my-dataset to resume watching.

What publication does

Tasks build independently. A version can be READY while some tasks failed. Whole-dataset and glob selections run its ready tasks and report build_exclusions; explicitly selecting a failed task rejects the job. A ready version becomes active on your dataset. Publishing a new version label leaves the previous active version in place if the new publication fails. Use a new version label for changed tasks. Publishing an existing label re-imports it in place, so name@version selects a label rather than immutable content.
Configuration validation cannot prove that images build or tests are correct. Run task checks to inspect task quality.

Pin or switch versions

Only ready versions accept jobs. Jobs record the version they resolve when created.

Download your source package

The download includes the original corpus and its solution/ files. It is owner-only; platform datasets are not downloadable through this command.

dataset.toml manifest

An optional dataset.toml selects the tasks in a package and pins their content. Put it beside the task directories. If the package contains tasks/, a manifest in tasks/dataset.toml takes precedence over one at the package root.
Replace the task digest placeholder with the helper’s output below before publishing. A local package with a valid manifest can supply the publication name and version:
The catalog name comes from the short part (my-dataset); the acme/ prefix does not choose the owning Evolve team. Explicit --name and --version values win. Without a manifest version, pass --version. Git and HTTPS archive sources still require explicit publication name and version; public Harbor Hub packages supply defaults.
Unknown root and [dataset] fields are rejected. Each listed dataset file must exist beside the manifest, even without a digest.Task matching first uses an exact string match against [task].name in a local task.toml, then falls back to the reference’s short name matching a task directory. Only listed tasks are imported. Every reference must resolve locally; missing tasks are not fetched from a registry.Duplicate identical name/digest pairs are collapsed. An ambiguous declared task name, or references mapping the same directory to different digests, rejects the manifest. Missing tasks and any task/file digest mismatch fail publication.
Task digests use Harbor’s content-hash algorithm, not the archive hash or a hash of task.toml alone. The helper below requires Python and pathspec:
The hash covers the four listed root files when present and regular files recursively under environment/, tests/, solution/, and steps/. Other root files are outside this digest. Paths are relative, use /, and sort lexicographically. For each file, the outer SHA-256 receives its path, a NUL byte, the lowercase SHA-256 of its bytes, and a newline.A task’s .gitignore supplies the filters when present; otherwise the default patterns shown above apply. This uses PathSpec’s gitignore pattern semantics, which differ from Git’s directory re-inclusion behavior. macOS ._ sidecars are skipped. Use regular files: publication does not support task symlinks.Dataset-level [[files]] digests are simpler: prefix the SHA-256 of that file’s bytes with sha256:. Recompute affected digests whenever you edit content.
Local publication preserves executable permissions and dotfiles. It excludes .git, .DS_Store, .venv, and symlinks.Custom metric.py dataset metrics are not supported. A script beside the manifest or listed in files rejects publication; use the platform’s metrics.Large local uploads are resumable. During receipt, the import can be QUEUED with receiving: true; it starts building after the corpus arrives.
A dataset name belongs to its first publisher. Another owner cannot publish under that name.The SDK supports deleting an owned dataset, but deletion is rejected once a job references it. The CLI has no dataset delete command.Git-backed datasets can report when their source tag moves. Automatic upstream import is opt-in through the SDK’s datasets().update(); a normal publication does not enable it.

Dataset commands

Sources, validation, publication, and downloads.

Dataset SDK

The Python and TypeScript clients.
Last modified on November 9, 2026