Skip to content

Commit 85885bc

Browse files
committed
Merge branch 'production' into resources-by-selector-error-if-nothing
2 parents 5629ce9 + 415babd commit 85885bc

40 files changed

+625
-291
lines changed

package-lock.json

Lines changed: 393 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
"ts-blank-space": "0.6.1",
130130
"tsx": "4.20.3",
131131
"typescript": "5.8.3",
132-
"typescript-eslint": "8.38.0",
132+
"typescript-eslint": "8.39.1",
133133
"unified": "11.0.5",
134134
"unist-util-visit": "5.0.0",
135135
"vite-tsconfig-paths": "5.1.4",
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
title: Cloudflare Access Logging supports the Customer Metadata Boundary (CMB)
3+
description: Access logs will now respect the CMB.
4+
date: 2025-08-14
5+
products:
6+
- access
7+
---
8+
9+
Cloudflare Access logs now support the [Customer Metadata Boundary (CMB)](/data-localization/metadata-boundary/). If you have configured the CMB for your account, all Access logging will respect that configuration.
10+
11+
:::note
12+
For EU CMB customers, the logs will not be stored by Access and will appear as empty in the dashboard. EU CMB customers should utilize [Logpush](/logs/logpush/) to retain their Access logging, if desired.
13+
:::
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
title: SFTP support for SSH with Cloudflare Access for Infrastructure
3+
description: SSH with Cloudflare Access for Infrastructure now supports SFTP for easy file transfer.
4+
date: 2025-08-15
5+
products:
6+
- access
7+
---
8+
9+
[SSH with Cloudflare Access for Infrastructure](/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/) now supports SFTP. It is compatible with SFTP clients, such as Cyberduck.
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
---
2+
title: Terraform provider improvements — Python Workers support, smaller plan diffs, and API SDK fixes
3+
description: Multiple improvements to the Workers Terraform resources and SDKs including fixes for plan diffs, file uploads, and Python Workers support.
4+
products:
5+
- workers
6+
date: 2025-08-14
7+
---
8+
9+
The recent [Cloudflare Terraform Provider](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script) and SDK releases (such as [cloudflare-typescript](https://github.com/cloudflare/cloudflare-typescript)) bring significant improvements to the Workers developer experience. These updates focus on reliability, performance, and adding [Python Workers](/workers/languages/python/) support.
10+
11+
## Terraform Improvements
12+
13+
### Fixed Unwarranted Plan Diffs
14+
15+
Resolved several issues with the `cloudflare_workers_script` resource that resulted in unwarranted plan diffs, including:
16+
17+
- Using Durable Objects migrations
18+
- Using some bindings such as `secret_text`
19+
- Using smart placement
20+
21+
A resource should never show a plan diff if there isn't an actual change. This fix reduces unnecessary noise in your Terraform plan and is available in Cloudflare Terraform Provider 5.8.0.
22+
23+
### Improved File Management
24+
25+
You can now specify `content_file` and `content_sha256` instead of `content`. This prevents the Workers script content from being stored in the state file which greatly reduces plan diff size and noise. If your workflow synced plans remotely, this should now happen much faster since there is less data to sync. This is available in Cloudflare Terraform Provider 5.7.0.
26+
27+
```tf
28+
resource "cloudflare_workers_script" "my_worker" {
29+
account_id = "123456789"
30+
script_name = "my_worker"
31+
main_module = "worker.mjs"
32+
content_file = "worker.mjs"
33+
content_sha256 = filesha256("worker.mjs")
34+
}
35+
```
36+
37+
### Assets Headers and Redirects Support
38+
39+
Fixed the `cloudflare_workers_script` resource to properly support headers and redirects for Assets:
40+
41+
```tf
42+
resource "cloudflare_workers_script" "my_worker" {
43+
account_id = "123456789"
44+
script_name = "my_worker"
45+
main_module = "worker.mjs"
46+
content_file = "worker.mjs"
47+
content_sha256 = filesha256("worker.mjs")
48+
assets = {
49+
config = {
50+
headers = file("_headers")
51+
redirects = file("_redirects")
52+
}
53+
# Completion jwt from:
54+
# https://developers.cloudflare.com/api/resources/workers/subresources/assets/subresources/upload/
55+
jwt = "jwt"
56+
}
57+
}
58+
```
59+
60+
Available in Cloudflare Terraform Provider 5.8.0.
61+
62+
### Python Workers Support
63+
64+
Added support for uploading [Python Workers](/workers/languages/python/) (beta) in Terraform. You can now deploy Python Workers with:
65+
66+
```tf
67+
resource "cloudflare_workers_script" "my_worker" {
68+
account_id = "123456789"
69+
script_name = "my_worker"
70+
content_file = "worker.py"
71+
content_sha256 = filesha256("worker.py")
72+
content_type = "text/x-python"
73+
}
74+
```
75+
76+
Available in Cloudflare Terraform Provider 5.8.0.
77+
78+
## SDK Enhancements
79+
80+
### Improved File Upload API
81+
82+
Fixed an issue where Workers script versions in the SDK did not allow uploading files. This now works, and also has an improved files upload interface:
83+
84+
```js
85+
const scriptContent = `
86+
export default {
87+
async fetch(request, env, ctx) {
88+
return new Response('Hello World!', { status: 200 });
89+
}
90+
};
91+
`;
92+
93+
client.workers.scripts.versions.create('my-worker', {
94+
account_id: '123456789',
95+
metadata: {
96+
main_module: 'my-worker.mjs',
97+
},
98+
files: [
99+
await toFile(
100+
Buffer.from(scriptContent),
101+
'my-worker.mjs',
102+
{
103+
type: "application/javascript+module",
104+
}
105+
)
106+
]
107+
});
108+
```
109+
110+
Will be available in cloudflare-typescript 4.6.0. A similar change will be available in cloudflare-python 4.4.0.
111+
112+
### Fixed updating KV values
113+
114+
Previously when creating a KV value like this:
115+
116+
```js
117+
await cf.kv.namespaces.values.update("my-kv-namespace", "key1", {
118+
account_id: "123456789",
119+
metadata: "my metadata",
120+
value: JSON.stringify({
121+
hello: "world"
122+
})
123+
});
124+
```
125+
126+
...and recalling it in your Worker like this:
127+
```ts
128+
const value = await c.env.KV.get<{hello: string}>("key1", "json");
129+
```
130+
131+
You'd get back this: `{metadata:'my metadata', value:"{'hello':'world'}"}` instead of the correct value of `{hello: 'world'}`
132+
133+
This is fixed in cloudflare-typescript 4.5.0 and will be fixed in cloudflare-python 4.4.0.

src/content/docs/d1/tutorials/build-a-comments-api/index.mdx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ tags:
1111
- SQL
1212
---
1313

14-
import { Render, PackageManagers, Stream, WranglerConfig } from "~/components";
14+
import { Render, PackageManagers, WranglerConfig, YouTube } from "~/components";
1515

1616
In this tutorial, you will learn how to use D1 to add comments to a static blog site. To do this, you will construct a new D1 database, and build a JSON API that allows the creation and retrieval of comments.
1717

@@ -39,11 +39,7 @@ cd d1-example
3939

4040
## Video Tutorial
4141

42-
<Stream
43-
id="8d20dd6cf5679f3272ca44a9fa01728c"
44-
title="Build a Comments API with D1"
45-
thumbnail="22s"
46-
/>
42+
<YouTube id="egBdW6vBIhM" />
4743

4844
## 1. Install Hono
4945

src/content/docs/learning-paths/durable-objects-course/series/build-the-app-frontend-5.mdx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ sidebar:
66
tableOfContents: false
77
---
88

9-
import { Render, Tabs, TabItem, Stream, Card } from "~/components";
9+
import { Render, Tabs, TabItem, Card, YouTube } from "~/components";
1010

1111
<Tabs>
1212
<TabItem label="Watch this episode">
1313

1414
In this video, we set up the frontend starter code (the starter code is located in the Veet GitHub repository), connect to Durable Objects using a call room ID, and display a local video preview.
1515

1616
<Card>
17-
<Stream
18-
id="efc08fd03da0dfebd2e4402af519acb5"
19-
title="Build the app frontend and UI"
20-
thumbnail="2.5s"
21-
showMoreVideos={false}
22-
/>
17+
<YouTube id="Tfp8h0s3-54" />
2318

2419
<Render file="durable-objects-series-additional-resources" />
2520

src/content/docs/learning-paths/durable-objects-course/series/deploy-your-video-call-app-7.mdx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ sidebar:
66
tableOfContents: false
77
---
88

9-
import { Render, Tabs, TabItem, Stream, Card } from "~/components";
9+
import { Render, Tabs, TabItem, Card, YouTube } from "~/components";
1010

1111
<Tabs>
1212
<TabItem label="Watch this episode">
1313

1414
We are almost done with the project, and in this final episode, we add the finishing touches, such as learning how to handle call disconnections, wiring up essential media controls like muting/unmuting and video toggling, and integrating a TURN server to ensure reliable connections even behind firewalls. By the end of this video, your app will be fully functional and ready for deployment.
1515

1616
<Card>
17-
<Stream
18-
id="aaa652e0e05bc09ac35451d9cbd4b341"
19-
title="Deploy your video call app"
20-
thumbnail="2.5s"
21-
showMoreVideos={false}
22-
/>
17+
<YouTube id="-d7v7g5suqg" />
2318

2419
<Render file="durable-objects-series-additional-resources" />
2520

src/content/docs/learning-paths/durable-objects-course/series/introduction-to-series-1.mdx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,14 @@ sidebar:
66
tableOfContents: false
77
---
88

9-
import { Render, Tabs, TabItem, Stream, Card } from "~/components";
9+
import { Render, Tabs, TabItem, Card, YouTube } from "~/components";
1010

1111
<Tabs>
1212
<TabItem label="Watch this episode">
1313

1414
In this episode, we present an overview of the series, discuss its underlying architecture, and access resources to set up the project locally.
1515

16-
<Card>
17-
<Stream
18-
id="558cdd841276a1aba1426af6293d6d15"
19-
title="Introduction to Durable Objects"
20-
thumbnail="2.5s"
21-
showMoreVideos={false}
22-
/>
23-
24-
<Render file="durable-objects-series-additional-resources" />
25-
26-
</Card>
16+
<YouTube id="ML1vOUeA-JM" />
2717
</TabItem>
2818

2919
<TabItem label="Series overview">

src/content/docs/learning-paths/durable-objects-course/series/make-answer-webrtc-calls-6.mdx

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ sidebar:
66
tableOfContents: false
77
---
88

9-
import { Render, Tabs, TabItem, Stream, Card } from "~/components";
9+
import { Render, Tabs, TabItem, Card, YouTube } from "~/components";
1010

1111
<Tabs>
1212
<TabItem label="Watch this episode">
1313

1414
In this video, we build on the frontend we set up earlier by adding functionality for making and answering WebRTC video calls. You will learn how to create peer-to-peer connections, handle ICE candidates, and seamlessly send and receive video streams between users.
1515

1616
<Card>
17-
<Stream
18-
id="3b3a88940d3b1c635dbb6df0516218ab"
19-
title="Make and answer WebRTC calls"
20-
thumbnail="2.5s"
21-
showMoreVideos={false}
22-
/>
17+
<YouTube id="ojhe-scYVe0" />
2318

2419
<Render file="durable-objects-series-additional-resources" />
2520

0 commit comments

Comments
 (0)