pushing-taubyte-projects
Pushing Taubyte Projects
When to use
- "Push my project / website / library to the cloud"
- After editing config (resources) or code (function source)
- Before a
dream injectcycle on Dream local tau pushfails withCommit Message: is required ... required value missing
Mental model
tau push wraps git add -A && git commit -m <msg> && git push for the relevant repo, then optionally signals the cloud. GitHub remains the source of truth; tau push is a convenience over raw git, plus it knows about the --config-only / --code-only split for the project's two repos.
The --message rule
When invoked with --defaults, tau push will not prompt for a commit message. You must pass --message <msg> (or -m <msg>) explicitly, or you'll see:
Commit Message: is required ... required value missing
Always include -m. Example template:
tau --defaults --yes push <subcommand> -m "<commit message>"
Project pushes
Both config + code
tau --defaults --yes push project -m "<message>"
Config only (recommended after resource changes)
tau --defaults --yes push project --config-only -m "<message>"
Code only (recommended after function source changes)
tau --defaults --yes push project --code-only -m "<message>"
Website / library pushes
Each website and library lives in its own repo, so each gets its own push:
tau --defaults --yes push website <site_name> -m "<message>"
tau --defaults --yes push library <lib_name> -m "<message>"
Remote-cloud note (registration + hooks)
On remote clouds, a website/library repo may need to be imported/registered on that cloud before pushes reliably trigger builds:
tau --defaults --yes import website <site_name>
tau --defaults --yes import library <lib_name>
If builds are "silent" after pushes, check GitHub webhooks. Repeated imports can create duplicate webhooks; if needed, delete all hooks on the repo and re-import once to recreate a single clean hook.
Push ordering rule
When you've added or edited resources, push config first and wait for the cloud's config build to succeed before pushing website/library code that depends on those resources. Otherwise the website/library build can fail with "resource not found" or build into a stale config.
Ordered push progress:
- [ ] tau push project --config-only -m "add <resources>"
- [ ] Wait for the config build to complete (success or fail)
- [ ] If failed, fix config and re-push before continuing
- [ ] tau push project --code-only -m "..." (if code changed)
- [ ] tau push website <site> -m "..." (if site changed)
- [ ] tau push library <lib> -m "..." (if lib changed)
For Dream local, follow each push with the appropriate dream inject — see triggering-dream-builds.
Pulling (sibling command)
tau --defaults --yes pull project
tau --defaults --yes pull project --config-only
tau --defaults --yes pull project --code-only
tau --defaults --yes pull website <site_name>
tau --defaults --yes pull library <lib_name>
Quirk: tau pull project (and friends) can print already up-to-date and exit non-zero. In git terms this is success; treat it as a CLI-output quirk, not an error. Don't gate retries on the exit code alone — read the message and confirm with git fetch + git status in config/ / code/ (or the website repo) that you really are aligned with origin.
Remote: “site down” but APIs work
If GET https://<fqdn>/ fails with no HTTP match for GET / 500 but GET https://<fqdn>/api/... returns 200, the HTTPS functions deployed from the code repo — the website repo did not publish a static AssetCid. Fix with tau push website <site_resource_name> and verify tau query builds includes a job for the tb_code_…_<site> repository with AssetCid populated (see deploying-to-remote-clouds).
Common failure → recovery
| Symptom | Recovery |
|---|---|
GET / fails on remote but /api/... works |
tau push website <site>; confirm website-repo job + AssetCid in tau query builds --json (functions can work while static / has no artifact yet) |
Commit Message: is required ... |
Add -m "<msg>" |
unknown cloud on push |
Re-select cloud, retry: tau --defaults --yes select cloud --universe <u> (or --fqdn <fqdn>) → push again |
| Push reports success but cloud doesn't see changes (Dream) | Run the appropriate dream inject push-all (bootstrap) or push-specific |
project ids not equal <patrick> != <yaml> |
Update config/config.yaml id: to the cloud canonical project id, then re-push |
tau push website not available / errors out |
Fall back to plain git push from the website repo (only for website/library, never for project config/code) |
Don't bypass with raw git
For the project config and code repos, never bypass a failing tau push project with raw git push — tau may need to write metadata or sync with the cloud. Fix the underlying error.
For website and library repos, raw git push is an acceptable fallback when tau push website|library is unavailable in your CLI version.
Gotchas
--defaultsremoves prompts but adds the-mrequirement — they go together.- Don't trust
tau pull's exit code alone for the "already up-to-date" case. - Push order matters for resource-dependent code; otherwise a website build can fail because the new domain/database isn't yet in cloud config.
- For non-interactive automation every
tau pushinvocation must include both--defaults --yesand-m. - Dream inject requires a real
HEAD. If the projectcode/repo branch exists but has no commits, Dream inject can fail withgetting HEAD ... reference not found. Create a minimal initial commit andtau push project --code-only -m "init"before bootstrapping Dream.
Related skills
bootstrapping-taubyte-projectsselecting-taubyte-contextcreating-taubyte-resourcestriggering-dream-buildsdiagnosing-dream-builds
More from taubyte/skills
verifying-taubyte-functions
Verifies a Taubyte Go function locally via the `taubyte/go-wasi` Docker recipe (preferred over `tau build`, with tmpfs+bind-mount-ro to avoid root-owned artifacts in the source tree), and verifies a function actually serves on Dream by curling the gateway with the right `Host:` header (plus `/etc/hosts` mapping for `*.localtau`). Use when locally compiling a Go function to WASM, when smoke-testing a function before pushing, or when probing a Dream-hosted HTTP function from the laptop.
12creating-taubyte-resources
Creates Taubyte resources non-interactively via `tau new` for domain, website, library, function, application, database, storage, messaging, and service. Encodes the project-vs-application scope rule, the database `min < max` constraint, the website/library `--generate-repository` + import sequence, and the forbidden `--generated-fqdn-prefix` flag. Use when adding any resource to a Taubyte project's config repo.
12diagnosing-dream-builds
Diagnoses Dream local-cloud builds when `tau list/query builds` is empty or unreliable, by hitting the jobs HTTP endpoint directly (`GET /jobs/<project_id>`, `GET /job/<job_id>`) using the GitHub token from `~/tau.yaml`, then downloading logs with `tau query logs --jid`. Use when Dream builds appear silent, the build table is empty after `dream inject`, or you need raw job ids and logs for a failing build.
11taubyte-resource-creation
Scope-aware resource creation workflow. Uses non-interactive mode by default and references the shared flags catalog.
11taubyte-push-build-verify
Pushes config/code and verifies builds/logs. Includes website/library push handling with tau command first, git fallback.
11taubyte-scope-routing
Routes project-level vs application-scoped work; defaults to a website when a browser UI is logically appropriate; avoids unnecessary applications for simple website/function-only tasks unless needed.
11