How it works
- A teammate opens a pull request against your tracked branch.
- Nubo builds the PR’s branch and runs it alongside your production Frame.
- The preview gets its own Nubo-assigned subdomain, distinct from the production Frame’s URL.
- Push a new commit to the PR? Nubo rebuilds the preview.
- Merge or close the PR? Nubo tears the preview down.
Enable or disable previews
Previews are enabled per Frame. Open the Frame’s CI/CD tab and turn on “Preview deployments” for any Frame where you want a preview per pull request. Turn it back off to stop building previews for that Frame. If you do script it, fetch the Frame first, take itsspec.ci object, change preview_deploys, and PATCH the complete object back:
Finding the preview URL
Check the Deployments tab on the Frame; previews show up there labeled with the PR number. Nubo also writes back to the pull request itself: it posts a comment containing the Preview URL, plus a commit status and a GitHub deployment. These update on every build and are removed when the PR closes.What’s different from a production deploy
A preview is a separate runtime with its own URL, but otherwise behaves like any other Frame:- Build steps, language detection, and runtime behavior are identical.
- Both Project-scoped and Frame-scoped environment variables are available in the preview, with the Frame-scoped value winning if a name is set at both levels.
- Build logs are captured the same way.
- Custom domains are not attached to previews - previews use their Nubo-assigned URL only.
Cleanup
Previews are torn down automatically when the PR is closed (merged or not). Two other things clean them up even while the PR is still open:- Inactivity TTL. A preview that goes untouched for
preview_ttl_hours(default 7 days) is reaped. Configure it on the CI spec. - Retention cap. Only the newest
preview_retention_countpreviews per Frame are kept (default 2); older ones are reaped first. Configure it on the CI spec too.
Related
CI/CD
Tune how Nubo builds on every push
Deployments
See builds and their status per Frame
