2.8 KiB
+++ title = "Define Cloudflare Pages project resource — build config, output dir, git repo connection or artifact upload" priority = 7 status = "done" ticket_type = "task" dependencies = ["2d1371", "fc9bfd"] +++
Infrastructure is managed with OpenTofu using the Cloudflare provider. Configuration lives in `infra/`. Resources include a Cloudflare Worker (API), Cloudflare D1 database (bound to the worker), and a Cloudflare Pages project (UI frontend).Build strategy resolved in triage fc9bfd: pre-built artifact + Gitea Actions + wrangler pages deploy. Pages CI build is not used. The cloudflare_pages_project resource is configured for direct upload (no git connection). The actual artifact deployment is handled by .gitea/workflows/deploy-ui.yml (ticket 3781c9).
Every block must have a comment explaining its purpose.
- Do NOT add a `source` block to the Pages project (no git-connected build — direct upload only). - SPA routing (triage e2bd9b) is resolved: a `_redirects` file (`/* /index.html 200`) is included in the Trunk build output via `` (ticket 9ef703). No changes are needed in the OpenTofu Pages resource — Cloudflare Pages processes `_redirects` automatically from the uploaded `dist/` directory. - The output directory (`dist/`) is a Trunk convention; it is documented here for reference but not configured in OpenTofu (wrangler handles it at deploy time). - The Pages project name `quotesdb-ui` must match the name used in `wrangler pages deploy --project-name quotesdb-ui`. ```hcl # infra/pages.tfCloudflare Pages project for the quotesdb Yew/Wasm frontend.
Uses direct upload — artifacts are deployed via wrangler in Gitea Actions (ticket 3781c9).
resource "cloudflare_pages_project" "ui" { account_id = var.cloudflare_account_id name = "quotesdb-ui" production_branch = "quotesdb"
Deployment configuration for the production environment.
deployment_configs { production { compatibility_date = "2024-01-01" # SPA routing: handled by dist/_redirects (/* /index.html 200) — see ticket 9ef703. } } }
</reference>
<validation>
Run from the `infra/` directory:
```sh
tofu validate
tofu plan
`feat(quotesdb): define Cloudflare Pages project resource in OpenTofu`