cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

ci: prepare goq.sh Cloudflare Pages publishing

Dami committed 92e1737
Add a shared static-site verification command, focused GitHub check, Pages security headers, and the exact dashboard release configuration. Silence the runner-only ShellCheck false positive in the dynamic activation test with a documented scoped annotation.
commit
92e1737503c57b1345eb65c40bc4b921956a9eb4
parent
fba67e5351ebed8971f833dd5fc959496bfaedaf
author
Dami <dami.etoile@gmail.com>
6 files changed, +162 -1
A.github/workflows/website.yml59++++++++++++++++++++++++++++++
MREADME.md4++
Adocs/cloudflare-pages.md58+++++++++++++++++++++++++++++
Mscripts/tests/bazzite-release-activation.sh4++-
Ascripts/verify-website.sh32++++++++++++++++
Awebsite/_headers6+++
A .github/workflows/website.yml +59 -0
M README.md +4 -0
A docs/cloudflare-pages.md +58 -0
@@ -0,0 +1,58 @@
1+# Publish goq.sh with Cloudflare Pages2+3+The `website/` directory is a complete static site. GitHub Actions validates it4+without a package install or framework build, then deploys it to Cloudflare5+Pages with Wrangler. In this release process, a push to `main` that changes the6+site or its workflow is the production release.7+8+## One-time dashboard setup9+10+In the Cloudflare dashboard, open **Workers & Pages**, create a Pages project,11+and choose **Direct Upload**. Name the project `goq-sh`. The project must exist12+before the first production workflow runs; use the current `website/` directory13+for the dashboard's required initial upload. GitHub Actions replaces that14+deployment after the first merge.15+16+Do not also connect the Cloudflare Git integration: the repository workflow is17+the sole publisher, which prevents two independent systems from racing to18+deploy the same commit.19+20+In the GitHub repository, the `main` environment must contain these environment21+secrets:22+23+- `CLOUDFLARE_ACCOUNT_ID`24+- `CLOUDFLARE_API_TOKEN`25+26+The API token needs **Account / Cloudflare Pages / Edit** permission for the27+account that owns the project. These secret names are already present in the28+repository's `main` environment.29+30+The **Website / Static site** job validates JavaScript, required assets,31+internal asset references, and security-header configuration on pull requests.32+On a push to `main`, the **Website / Cloudflare Pages** job waits for that check,33+enters the `main` environment, and deploys `website/` to the production branch34+of the `goq-sh` Pages project.35+36+## Domain and release gate37+38+After the first successful deployment, open the Pages project's **Custom39+domains** screen and add `goq.sh`. Complete the DNS prompts in the account that40+owns the zone. Add `www.goq.sh` separately only if it should also serve or41+redirect to the site.42+43+Protect `main` in GitHub and require these checks before merge:44+45+- **CI / Complete demo gate**46+- **Website / Static site** when it is present47+48+The site release path is then:49+50+1. Open a pull request with website changes.51+2. Merge only after the repository checks pass.52+3. The production job deploys the merged `main` commit through the protected53+ GitHub environment.54+4. Cloudflare publishes the resulting immutable Pages deployment to `goq.sh`.55+56+This workflow does not publish pull-request previews because environment secrets57+are deliberately unavailable to untrusted PR code. Preview deployments can be58+added later with a separate least-privilege project and credential if needed.
M scripts/tests/bazzite-release-activation.sh +3 -1
A scripts/verify-website.sh +32 -0
A website/_headers +6 -0