Skip to content
69 linesCodeBlameRaw
1# g1t/detect
2
3Says what a [g1t.page](https://docs.g1t.sh/guides/deployments/) build of
4the checkout would find, without building or deploying anything: the
5same rules [g1t/deploy](https://g1t.sh/g1t/deploy) builds with.
6
7```yaml
8steps:
9 - uses: actions/checkout@v5
10 - id: detect
11 uses: g1t/detect@v1
12 - if: steps.detect.outputs.kind == 'none'
13 run: echo "::error::Nothing here would be served."
14 - if: steps.detect.outputs.framework == 'hugo'
15 run: echo "A Hugo site, served from ${{ steps.detect.outputs.output-dir }}"
16 - if: steps.detect.outputs.install != ''
17 run: ${{ steps.detect.outputs.install }}
18```
19
20## Inputs
21
22| Input | Default | |
23| --- | --- | --- |
24| `root-dir` | The checkout | Where the project is in the checkout. |
25| `build-command` | None | A build command of your own, as `g1t/deploy` takes it. |
26| `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. |
29
30## Outputs
31
32| Output | |
33| --- | --- |
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`. |
38| `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. |
39| `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. |
40| `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. |
41
42When `kind` is `none`, the step's log says what to change or add, such as
43a `Dockerfile`. [Docker deployments](https://docs.g1t.sh/guides/deployments/#docker-deployments)
44has the order in which a project's kind is decided.
45
46## Frameworks
47
48| `framework` | Found by | Serves |
49| --- | --- | --- |
50| `vite`, `vite-react`, `vite-vue`, `vite-svelte`, `vite-solid`, `vite-preact` | `vite`, and the framework's Vite plugin | `dist`, or `build.outDir` |
51| `astro` | `astro` | `dist`, or `outDir`; a Worker with `@astrojs/cloudflare` |
52| `nextjs` | `next` | `out` with `output: 'export'`; a Worker with `@opennextjs/cloudflare` and a `wrangler.jsonc` |
53| `sveltekit` | `@sveltejs/kit` | `build` with `adapter-static`; a Worker with `adapter-cloudflare` |
54| `nuxt` | `nuxt` | `.output/public`, from `nuxi generate` |
55| `react-router`, `remix` | `@react-router/dev`, `@remix-run/dev` | `build/client` with `ssr: false` |
56| `gatsby` | `gatsby` | `public` |
57| `docusaurus` | `@docusaurus/core` | `build` |
58| `eleventy` | `@11ty/eleventy` | `_site` |
59| `angular` | `@angular/core` and `angular.json` | `dist/<project>/browser` |
60| `create-react-app` | `react-scripts` | `build` |
61| `hugo` | `hugo.toml`, or Hugo's `config.toml` | `public` |
62| `jekyll` | `_config.yml` and a `Gemfile` | `_site` |
63| `mdbook` | `book.toml` | `book` |
64
65[What deploys](https://docs.g1t.sh/guides/deployments/#frameworks) has
66each one's build command. Your `build-command` and `output-dir` win over
67what is detected.
68
69It runs `g1t-runner detect`, found or downloaded as `g1t/deploy` finds it.