Skip to content

Commit

g1t.page runs Docker deployments, behind a switch that is off until Cloudflare's container APIs are checked against g1t's account (`CONTAINERS` in the deployments service). Each container app is a Worker of g1t's own in the same Workers for Platforms namespace, so the dispatcher, custom domains, previews and take-downs reach it by name as any app: its `G1tApp` Durable Object holds a Container application (default scheduling policy, one instance, the project's **Container size**, `lite` unless chosen), starts it on the first request with the project's secrets and variables and `PORT` as its environment, waits up to 90 seconds for it to answer on its port, proxies to it, and stops it five minutes after the last request; it charges each minute awake ahead and the bytes it sends, and reports them with a token of its own to `POST /deployments/apps/<app>/meter`, which the API forwards. A build's new `registry` step gets a registry login g1t mints push-only for 15 minutes, with its app's own repository named; g1t runs only an image by digest in that repository, checked with the registry, and never hands a build a login that can pull. Container time is metered at Cloudflare's Containers price plus the margin through new price book meters (vCPU charged as busy while awake, and egress at the most a GB costs anywhere, so g1t never sells below cost), noted for the spend limit as it runs and charged with the month's Deployments line; a paused workspace's container apps stop and start no more. Settings, Deployments gets Build as (Auto, Static site, Workers, Docker), Dockerfile and Container size with each size's price an hour, and says what the last build found with what it was built with ("Static site · Astro", "Container · Dockerfile"), now that the finish report's `framework` is stored. Deploy sandboxes get Docker, `BUILD_AS` and `DOCKERFILE`, and reach `registry.cloudflare.com`; `start_deployment_build` answers `build_as` and `dockerfile` for `g1t/deploy`, which takes them as inputs, as `g1t/detect` does. The Deployments guide has Docker deployments, their prices and how they work with the evidence for it, the limitations page says what is left, and Deploy g1t to Cloudflare lists each live check to make before switching it on.

Claude-Session:
https://claude.ai/code/session_01PnwTRSNaC7vEHTAuBzjhrn
Claudeagent and Claudeagentcommitted Parenta8686a3Browse files
2 files+27−70/2 viewed
+9−5
2424 | `root-dir` | The checkout | Where the project is in the checkout. |
2525 | `build-command` | None | A build command of your own, as `g1t/deploy` takes it. |
2626 | `output-dir` | None | An output folder of your own, as `g1t/deploy` takes it. |
27+| `build-as` | `auto` | What it is built as: `auto`, `static`, `workers` or `docker`, as `g1t/deploy` takes it. |
28+| `dockerfile` | None | A Dockerfile's path of your own, as `g1t/deploy` takes it. |
2729
2830 ## Outputs
2931
3032 | Output | |
3133 | --- | --- |
32−| `kind` | `workers` (a `wrangler.jsonc`, `wrangler.json` or `wrangler.toml`, or a framework's Cloudflare adapter), `static` (a site a build writes), `html` (the files as they are) or `none` (nothing to serve, or a framework set up to need a server). |
33−| `framework` | The framework it is built with, from the table below. Empty when there is none. |
34+| `kind` | `workers` (a `wrangler.jsonc`, `wrangler.json` or `wrangler.toml`, or a framework's Cloudflare adapter), `static` (a site a build writes), `html` (the files as they are), `container` (a `Dockerfile`, a framework set up to need a server, or a server g1t writes a Dockerfile for) or `none` (nothing to serve). |
35+| `framework` | The framework it is built with, from the table below; for a container without one, `dockerfile`, or the server g1t writes a Dockerfile for (`node`, `django`, `flask`, `fastapi`, `python`, `go`, `rails`, `rack`, `laravel`, `php`). Empty when there is none. |
36+| `dockerfile` | A container's own Dockerfile, relative to the project. Empty when g1t writes one, and for anything that is not a container. |
37+| `port` | The port a container listens on: its Dockerfile's `EXPOSE`, else `8080`. |
3438 | `install` | How dependencies are installed, from the lockfile: `npm ci`, `pnpm install --frozen-lockfile`, and so on, and `bundle install` for Jekyll. Empty when there is nothing to install. |
3539 | `build` | What builds it: your command, the package's `build` script (`npm run build`), the framework's own command, or `wrangler deploy --dry-run` for Workers. Empty when nothing does. |
3640 | `output-dir` | The folder served, relative to the project (`.` for the project itself): yours, a Workers project's assets directory, the folder the framework writes, or the first of `dist`, `build`, `out`, `public`, `_site`, `.output/public` that exists. Empty when a build has yet to write it, as for a Cloudflare adapter's Worker. |
3741
38−When `kind` is `none` because of how a framework is set up, such as a
39−Next.js app without `output: 'export'`, the step's log says what to
40−change.
42+When `kind` is `none`, the step's log says what to change or add, such as
43+a `Dockerfile`. [Docker deployments](https://docs.g1t.sh/guides/deployments/#docker-deployments)
44+has the order in which a project's kind is decided.
4145
4246 ## Frameworks
4347
+18−2
1515 description: An output folder of your own, as g1t/deploy takes it.
1616 required: false
1717 default: ""
18+ build-as:
19+ description: What it is built as, auto, static, workers or docker, as g1t/deploy takes it.
20+ required: false
21+ default: ""
22+ dockerfile:
23+ description: A Dockerfile's path of your own, as g1t/deploy takes it.
24+ required: false
25+ default: ""
1826
1927 outputs:
2028 kind:
21− description: workers (a Wrangler config, or a framework's Cloudflare adapter), static (a site a build writes), html (the files as they are) or none (nothing to serve, or a framework set up to need a server).
29+ description: workers (a Wrangler config, or a framework's Cloudflare adapter), static (a site a build writes), html (the files as they are), container (a Dockerfile, a framework set up to need a server, or a server g1t writes a Dockerfile for) or none (nothing to serve).
2230 value: ${{ steps.detect.outputs.kind }}
2331 install:
2432 description: How its dependencies are installed, such as npm ci. Empty without a package.json.
3038 description: The folder that is served, relative to the project (. for the project itself). Empty when a build has yet to write it.
3139 value: ${{ steps.detect.outputs.output-dir }}
3240 framework:
33− description: The framework it is built with, such as vite, astro, nextjs, sveltekit or hugo. Empty when there is none.
41+ description: The framework it is built with, such as vite, astro, nextjs, sveltekit or hugo; for a container without one, dockerfile or the server g1t writes a Dockerfile for (node, flask, rails…). Empty when there is none.
3442 value: ${{ steps.detect.outputs.framework }}
43+ dockerfile:
44+ description: A container's own Dockerfile, relative to the project. Empty when g1t writes one, or for anything else.
45+ value: ${{ steps.detect.outputs.dockerfile }}
46+ port:
47+ description: The port a container listens on, its Dockerfile's EXPOSE or 8080. Empty for anything else.
48+ value: ${{ steps.detect.outputs.port }}
3549
3650 runs:
3751 using: composite
4256 ROOT_DIR: ${{ inputs.root-dir }}
4357 BUILD_COMMAND: ${{ inputs.build-command }}
4458 OUTPUT_DIR: ${{ inputs.output-dir }}
59+ BUILD_AS: ${{ inputs.build-as }}
60+ DOCKERFILE: ${{ inputs.dockerfile }}
4561 run: |
4662 set -euo pipefail
4763 runner="$(bash "$GITHUB_ACTION_PATH/runner.sh")"