Skip to content

Commit 7e2e74a

Browse files
committed
feat: add toggle for preview/production timelines to "create revision" API
1 parent 90300ea commit 7e2e74a

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/deno_sandbox/revisions.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ async def deploy(
182182
layers: Optional[List[str]] = None,
183183
env_vars: Optional[List[EnvVarInputForDeploy]] = None,
184184
labels: Optional[Dict[str, str]] = None,
185+
production: Optional[bool] = None,
186+
preview: Optional[bool] = None,
185187
) -> Revision:
186188
"""Deploy a revision by uploading source files as assets.
187189
@@ -192,6 +194,10 @@ async def deploy(
192194
layers: Layer IDs or slugs to reference for this revision.
193195
env_vars: Optional environment variables for this revision.
194196
labels: Optional labels (e.g., git metadata).
197+
production: Whether to deploy to the production timeline.
198+
Defaults to true on the server.
199+
preview: Whether to deploy as a preview deployment.
200+
Defaults to false on the server.
195201
196202
Returns:
197203
The created Revision (build is async; poll for status).
@@ -205,6 +211,10 @@ async def deploy(
205211
body["env_vars"] = env_vars
206212
if labels is not None:
207213
body["labels"] = labels
214+
if production is not None:
215+
body["production"] = production
216+
if preview is not None:
217+
body["preview"] = preview
208218
result = await self._client.post(f"/api/v2/apps/{app}/deploy", body)
209219
return cast(Revision, convert_to_snake_case(result))
210220

@@ -267,6 +277,8 @@ def deploy(
267277
layers: Optional[List[str]] = None,
268278
env_vars: Optional[List[EnvVarInputForDeploy]] = None,
269279
labels: Optional[Dict[str, str]] = None,
280+
production: Optional[bool] = None,
281+
preview: Optional[bool] = None,
270282
) -> Revision:
271283
"""Deploy a revision by uploading source files as assets.
272284
@@ -277,6 +289,10 @@ def deploy(
277289
layers: Layer IDs or slugs to reference for this revision.
278290
env_vars: Optional environment variables for this revision.
279291
labels: Optional labels (e.g., git metadata).
292+
production: Whether to deploy to the production timeline.
293+
Defaults to true on the server.
294+
preview: Whether to deploy as a preview deployment.
295+
Defaults to false on the server.
280296
281297
Returns:
282298
The created Revision (build is async; poll for status).
@@ -289,5 +305,7 @@ def deploy(
289305
layers=layers,
290306
env_vars=env_vars,
291307
labels=labels,
308+
production=production,
309+
preview=preview,
292310
)
293311
)

tests/test_revisions.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,31 @@ def test_revisions_deploy_sync():
193193
assert revision["status"] == "succeeded", revision.get("failure_reason")
194194
finally:
195195
sdk.apps.delete(app["id"])
196+
197+
198+
@pytest.mark.timeout(60)
199+
@pytest.mark.asyncio(loop_scope="session")
200+
async def test_revisions_deploy_preview_only_async():
201+
sdk = AsyncDenoDeploy()
202+
app = await sdk.apps.create()
203+
try:
204+
revision = await sdk.revisions.deploy(
205+
app["id"],
206+
assets={
207+
"main.ts": {
208+
"kind": "file",
209+
"encoding": "utf-8",
210+
"content": 'Deno.serve(() => new Response("Hello"))',
211+
}
212+
},
213+
production=False,
214+
preview=True,
215+
)
216+
assert revision["id"] is not None
217+
while revision["status"] in ("queued", "building"):
218+
await asyncio.sleep(1)
219+
revision = await sdk.revisions.get(revision["id"])
220+
assert revision is not None
221+
assert revision["status"] == "succeeded", revision.get("failure_reason")
222+
finally:
223+
await sdk.apps.delete(app["id"])

0 commit comments

Comments
 (0)