# Cloudflare Pages Direct Upload This project uses Astro static output, so Cloudflare Pages only needs the generated `dist/` directory. Because the source repository is hosted in Gitea, use Cloudflare Pages Direct Upload rather than Cloudflare's GitHub/GitLab integration. The build happens in your local machine, Docker container, or Gitea CI runner, then Wrangler uploads the finished files to Cloudflare. ## URL Sets Keep three sets of URLs separate: - Local development: `.env`, used by Docker Compose and `astro dev`. - Test/preview deployment: `.env.pages.test`, used by `npm run build:pages:test` and `npm run deploy:pages:test`. - Production deployment: `.env.pages.prod`, used by `npm run build:pages:prod` and `npm run deploy:pages:prod`. The important distinction is that Astro fetches Directus content during the build. The URLs in the env file selected for the build are baked into the generated static files. ## First-Time Setup Copy the example files and fill in the real values: ```bash cp .env.pages.test.example .env.pages.test cp .env.pages.prod.example .env.pages.prod ``` Do not commit `.env.pages.test` or `.env.pages.prod`; they contain API tokens. Create a Cloudflare API token with permission to deploy Pages projects, then set these values in both env files: ```env CF_PAGES_PROJECT_NAME=swansea-airfield CLOUDFLARE_ACCOUNT_ID=... CLOUDFLARE_API_TOKEN=... ``` For Directus, use public HTTPS URLs in Pages env files. Do not use Docker-only hostnames such as `http://directus:8055` outside Docker Compose. ## Build Locally For Test ```bash npm run build:pages:test ``` This loads `.env.pages.test`, fetches content from the test Directus URL, and writes static files to `dist/`. ## Deploy To Cloudflare Test Branch ```bash npm run deploy:pages:test ``` This builds with `.env.pages.test`, then uploads `dist/` to the `test` Pages branch. Cloudflare will serve it on the matching branch preview URL. ## Deploy To Production ```bash npm run deploy:pages:prod ``` This builds with `.env.pages.prod`, then uploads `dist/` to the `main` Pages branch. ## Gitea CI Shape In Gitea Actions, store the same values as CI secrets and run: ```bash npm ci npm run deploy:pages:prod ``` The deploy script reads from the env file first, but existing CI environment variables win. That means secrets injected by Gitea can override placeholder values from a committed example or generated env file. ## Content Updates Static deploys are snapshots. If Directus content changes after deployment, Cloudflare Pages will not update until another build and deploy runs. For production, trigger `npm run deploy:pages:prod` from either: - a code push to Gitea, - a manual Gitea Actions workflow, - a Directus webhook that calls your CI runner, - or a scheduled CI job.