1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
{
// One worker, one durable object, one container. The name is fixed at
// "forge" in worker.js, so exactly one container serves the bucket.
"name": "git-forge",
"main": "worker.js",
"compatibility_date": "2026-08-01",
"observability": { "enabled": true },
"containers": [
{
"class_name": "Forge",
"image": "./Containerfile",
// 1/4 vCPU, 1 GiB, 4 GB disk. Disk is the ceiling on the datadir,
// and git gc needs room to repack on top of it.
"instance_type": "basic",
"max_instances": 1
}
],
"durable_objects": {
"bindings": [{ "name": "FORGE", "class_name": "Forge" }]
},
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["Forge"] }],
"r2_buckets": [{ "binding": "BUCKET", "bucket_name": "git-forge" }],
// No vars: an environment value pins what the admin page could otherwise
// change. GIT_FORGE_BASE_URL is the exception, for a custom domain fronting
// a hostname requests do not arrive on.
// Outbound mail: worker.js answers Mailgun's api shape and decides what
// sends. Nothing is sent until forge.json names the intercepted host;
// delete this line to rule mail out.
"send_email": [{ "name": "SEND_EMAIL" }]
}
|