sdods project
Create, import, list and delete projects.
project list
sdods project list [--matrix] [--shards <n>]Prints slug, name, layers, browsers, environments (missing files are marked) and the default environment. --matrix emits a CI matrix of project × browser × shard as JSON.
bun run sdods project list
bun run sdods project list --matrix --shards 2project create
sdods project create <slug> [--name <name>] [--description <text>] [--layers ui,api,hybrid,recorded]
[--browsers chromium,firefox,webkit] [--ui-url <url>] [--api-url <url>]
[--env <name>] [--test-id <attr>] [--force]| Flag | Default |
|---|---|
--layers | ui,api,hybrid |
--browsers | chromium |
--ui-url / --api-url | http://localhost:3000 / http://localhost:3000/api |
--env | local |
--test-id | data-testid |
Writes sdods.project.yaml, envs/<env>.yaml, .env.example, steps/fixtures.ts, steps/auth.ts, a project step file, pages/HomePage.ts, features/health.feature, features/ui/home.feature, data/common/users.csv, data/factories.ts, empty recorded/ and har/ folders and a README. The slug must be lowercase letters, digits and dashes.
project import
sdods project import <source> [--slug <slug>] [--workspace <slug>] [--force] [--dry-run]Registers a project that already exists. The source is a directory, a .zip archive or a git URL (cloned shallowly). The project file is found at the source root or one level below it, so a repository containing projects/<slug>/ works without pointing at the subdirectory.
| Flag | Meaning |
|---|---|
--slug | import under a different slug — use it on a collision |
--workspace | workspace to re-home into (default: the workspace file's defaultWorkspace) |
--force | replace an existing project of the same slug, moving it to trash first |
--dry-run | validate and report what would be imported, writing nothing |
The imported slug, organization and workspace are rewritten to match this workspace. Without that re-homing the registry rejects every project, not just the imported one, because a project may not name a workspace sdods.workspace.yaml does not declare.
.auth/, .env, .env.* (except .env.example), node_modules/ and .git/ are left behind — an import never carries someone else's credentials. The whole registry is re-read before the import is reported as successful, and rolled back if it does not load.
sdods project import ../acme-tests --dry-run
sdods project import https://github.com/you/acme-tests.git --slug acme --workspace qaproject delete
sdods project delete <slug> --yes [--purge]Moves projects/<slug> to .sdods/trash/<slug>-<timestamp>, which is outside projects/ so it is not rediscovered, and prints the path to move it back. --purge deletes the directory outright instead.
--yes is required: there is no interactive prompt, so a script cannot be surprised by one and a typo cannot delete a project.
Run history is unaffected — runs, results and insights are keyed on the project row in the database, which is kept and flagged archived. Deleting through the web UI additionally removes the project's schedules, which the CLI does not touch.
sdods project delete acme-copy --yes