Render.com Provider
Deploy preview environments to Render.com web services.
How it works
- Build: Previewops creates a synthetic image tag pointing at the source commit. Render pulls the code and builds from the Dockerfile in its own infrastructure.
- Deploy: creates a new Render web service (or re-deploys an existing one for the same PR). Polls until the service URL becomes healthy.
- Delete: deletes the Render web service.
- List: lists all web services in your Render account that match the
prev-{owner}-{repo}name prefix.
Prerequisites
- A Render.com account.
- An API key and your owner ID (both available in the Render dashboard).
Step 1 — Get your Render API key
- Go to Account Settings → API Keys → Create API Key.
- Copy the key and store it as
RENDER_API_KEYin the Previewops dashboard under Credentials.
Step 2 — Get your owner ID
- Go to Account Settings or Team Settings.
- The owner ID is shown in the URL:
https://dashboard.render.com/...or listed in the settings page. It begins withusr_(personal) ortea_(team). - You can store it in one of two ways (both are equivalent):
Option A — store as a credential (recommended): Save it as RENDER_OWNER_ID in the Previewops dashboard under Credentials. No .previewops.yaml change required.
Option B — set it in .previewops.yaml: Set providerConfig.ownerId directly in your repo config (see Step 3). This takes priority over the credential if both are set.
Step 3 — Configure the repo
When both RENDER_API_KEY and RENDER_OWNER_ID are stored as credentials, a minimal config is all you need:
# .previewops.yaml
provider: render
To override credential values per-repo or set optional options, add a providerConfig block:
provider: render
providerConfig:
ownerId: usr_xxxxxxxxxxxx # optional if RENDER_OWNER_ID stored as credential
region: oregon # optional (default: oregon)
# options: oregon, ohio, virginia, frankfurt, singapore
plan: starter # optional (default: starter)
# options: starter, standard, pro, pro_plus
Complete example with all options:
# .previewops.yaml
provider: render
providerConfig:
ownerId: usr_xxxxxxxxxxxx # your Render owner ID — usr_ (personal) or tea_ (team); from Account/Team Settings
region: oregon # deploy region (default: oregon)
# options: oregon, ohio, virginia, frankfurt, singapore
plan: starter # Render service plan (default: starter)
# options: starter, standard, pro, pro_plus
# Common options — all optional
concurrency: 3 # max simultaneous active previews per repo
ttlHours: 24 # auto-delete after N hours (default: 24)
port: 3000 # optional — auto-detected from your Dockerfile EXPOSE; falls back to 8080
memory: 512Mi # container memory (default: 512Mi)
cpu: 1 # container vCPU (default: 1)
dockerfile: Dockerfile # Dockerfile path relative to repo root (default: Dockerfile)
buildContext: . # Docker build context (default: .)
env:
NODE_ENV: preview # inject env vars into the preview container
Step 4 — Verify
Comment /validate-previewops on any open PR. The bot will post whether the API key and owner ID are valid.
Private repositories
Render cannot clone private GitHub repos via the API — it requires its own GitHub App to be installed on the org, which is a manual setup step.
Previewops handles this automatically for all paid BYOC plans using a managed build pipeline:
- Previewops builds the Docker image using its own Cloud Build and Artifact Registry.
- The pre-built image is pushed to a private
managed-buildsrepository. - Previewops creates a Render registry credential pointing at that repository.
- Render pulls and deploys the pre-built image — no GitHub access required.
No extra configuration is needed. When Previewops detects that a repo is private and the plan supports it, the managed build path is used automatically.
Requirement: This feature requires a paid BYOC plan. Free BYOC plans are limited to public repos on Render. Upgrade →
Troubleshooting
| Error | Fix |
|---|---|
RENDER_API_KEY environment variable is required |
Set RENDER_API_KEY in the Previewops dashboard credentials |
render providerConfig.ownerId (or RENDER_OWNER_ID credential) is required |
Store RENDER_OWNER_ID as a credential or add ownerId to providerConfig |
401 Unauthorized |
RENDER_API_KEY is wrong or expired — regenerate it |
404 Not Found for ownerId |
Double-check RENDER_OWNER_ID or the ownerId value in providerConfig |
| Deploy hangs | Render's free-tier web services have cold starts; use plan: starter (or higher) to ensure services stay warm |
passed in repository URL is invalid or unfetchable |
Your repo is private. Upgrade to a paid BYOC plan — Previewops will use the managed build pipeline automatically |
Managed build pipeline is not configured |
Contact support — MANAGED_BUILD_READER_KEY is not set on this installation |