From 8313d1d7790bbb6d1e5c4837a5d11b7bbdd4278f Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 01:01:26 -0500 Subject: [PATCH 01/16] Deno Deploy --- .github/workflows/deploy.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 2c996cb9..5a9f11f2 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -52,8 +52,10 @@ jobs: --base=https://frontside.com - name: Upload to Deno Deploy - uses: denoland/deployctl@v1 - with: - project: frontside - entrypoint: "jsr:@std/http/file-server" - root: built + run: deno deploy create \ + --org frontsidesoftware \ + --app home \ + --source local \ + --runtime-mode static \ + --static-dir built \ + --region global From 0e944e634ec248c9948aa13581b85069e173a290 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 01:05:50 -0500 Subject: [PATCH 02/16] temp turn off proxies --- main.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.tsx b/main.tsx index d18f307c..27818cf3 100644 --- a/main.tsx +++ b/main.tsx @@ -94,10 +94,10 @@ await main(function* (args) { route("/redirects", redirectsRoute()), route("/platformscript", platformscriptRoute()), $route("/platformscript/(.*)", redirect("/platformscript")), - proxyRoute({ ...proxies.effection, pattern: "/effection(.*)" }), - proxyRoute({ ...proxies.graphgen, pattern: "/graphgen(.*)" }), + //proxyRoute({ ...proxies.effection, pattern: "/effection(.*)" }), + //proxyRoute({ ...proxies.graphgen, pattern: "/graphgen(.*)" }), $route("/assets(.*)", assetsRoute("assets")), - proxyRoute({ ...proxies.interactors, pattern: "/interactors(.*)" }), + //proxyRoute({ ...proxies.interactors, pattern: "/interactors(.*)" }), ], plugins: [ From 3768a54ec3d711f4c494c2ab824e38506f86e6ae Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 01:16:47 -0500 Subject: [PATCH 03/16] try a different app name? Their errors are unhelpful and their docs don't mention this issue... every reasonable name seems restricted but is noted as "taken". --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 5a9f11f2..0ab57cd8 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -54,7 +54,7 @@ jobs: - name: Upload to Deno Deploy run: deno deploy create \ --org frontsidesoftware \ - --app home \ + --app foundation \ --source local \ --runtime-mode static \ --static-dir built \ From 9eb32a54a3da4c21cd09d7a3698310b29700dbe3 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 01:51:54 -0500 Subject: [PATCH 04/16] add token --- .github/workflows/deploy.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 0ab57cd8..b7104511 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Setup Deno uses: denoland/setup-deno@v2 @@ -53,6 +53,7 @@ jobs: - name: Upload to Deno Deploy run: deno deploy create \ + --token {{ secrets.DENO_DEPLOY }} --org frontsidesoftware \ --app foundation \ --source local \ From 5800c08b1d1348bc4cb835ca6d53f6a8d6909687 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 01:54:33 -0500 Subject: [PATCH 05/16] Fix token syntax --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index b7104511..d4a10134 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -53,7 +53,7 @@ jobs: - name: Upload to Deno Deploy run: deno deploy create \ - --token {{ secrets.DENO_DEPLOY }} + --token ${{ secrets.DENO_DEPLOY }} --org frontsidesoftware \ --app foundation \ --source local \ From 09f973c36c1a0189e39d92805411e950e5ca9264 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Tue, 7 Jul 2026 02:08:45 -0500 Subject: [PATCH 06/16] slim command config Updated Deno deploy command to use 'update' instead of 'create' and adjusted environment variable. --- .github/workflows/deploy.yaml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index d4a10134..2849e3e4 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -52,11 +52,8 @@ jobs: --base=https://frontside.com - name: Upload to Deno Deploy - run: deno deploy create \ - --token ${{ secrets.DENO_DEPLOY }} + env: + DENO_DEPLOY_TOKEN: ${{ secrets.DENO_DEPLOY }} + run: deno deploy update \ --org frontsidesoftware \ - --app foundation \ - --source local \ - --runtime-mode static \ - --static-dir built \ - --region global + --app foundation From fcb042d562a77f8f4a4da8f8d22bc38e6a5f9ff1 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 15:11:28 -0500 Subject: [PATCH 07/16] try deploy to netlify --- .github/workflows/deploy.yaml | 92 ++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 8 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 2849e3e4..b39b1355 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -1,4 +1,5 @@ name: deploy + on: workflow_dispatch: pull_request: @@ -7,13 +8,87 @@ on: - production jobs: - deploy: + # --- PULL REQUEST PREVIEW DEPLOYMENT --- + deploy-preview: + if: github.event_name == 'pull_request' runs-on: ubuntu-latest timeout-minutes: 15 - + environment: + name: preview + url: ${{ steps.netlify.outputs.preview-url }} permissions: id-token: write contents: read + pull-requests: write # Required if you want to write a comment on the PR + + steps: + - name: Checkout + uses: actions/checkout@v7 + + - name: Setup Deno + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Serve Website + run: | + deno task start & + until curl --output /dev/null --silent --head --fail http://127.0.0.1:8005; do + printf '.' + sleep 1 + done + env: + SIMPLECAST_API: ${{ secrets.SIMPLECAST_API }} + UMAMI_WEBSITE_ID: ${{ secrets.UMAMI_WEBSITE_ID }} + PAGE_SENSE_SCRIPT_SRC: ${{ secrets.PAGE_SENSE_SCRIPT_SRC }} + timeout-minutes: 5 + + - name: Download Staticalize + run: | + wget https://github.com/thefrontside/staticalize/releases/download/v0.2.2/staticalize-linux.tar.gz \ + -O /tmp/staticalize-linux.tar.gz + tar -xzf /tmp/staticalize-linux.tar.gz -C /usr/local/bin + chmod +x /usr/local/bin/staticalize-linux + + - name: Staticalize + run: | + staticalize-linux \ + --site=http://127.0.0.1:8005 \ + --output=built \ + --base=https://frontside.com + + - name: Deploy Preview + id: netlify + run: | + # Run CLI deploy WITHOUT the --prod flag to create a preview instance + OUTPUT=$(npx netlify-cli deploy --dir=built --auth=${{ secrets.NETLIFY_AUTH_TOKEN }} --site=${{ secrets.NETLIFY_SITE_ID }}) + + # Parse out the dynamic website URL from Netlify's terminal response + URL=$(echo "$OUTPUT" | grep -oE "https://[^ ]+\.netlify\.app" | head -n 1) + echo "preview-url=$URL" >> $GITHUB_OUTPUT + + # Automatically post the link as a comment inside the PR thread + - name: Comment PR with Preview Link + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `🚀 **Deploy Preview Ready!** Review changes here: ${{ steps.netlify.outputs.preview-url }}` + }) + + # --- PRODUCTION DEPLOYMENT --- + deploy-production: + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + timeout-minutes: 15 + environment: + name: production + url: https://frontside.com + permissions: + contents: read steps: - name: Checkout @@ -51,9 +126,10 @@ jobs: --output=built \ --base=https://frontside.com - - name: Upload to Deno Deploy - env: - DENO_DEPLOY_TOKEN: ${{ secrets.DENO_DEPLOY }} - run: deno deploy update \ - --org frontsidesoftware \ - --app foundation + - name: Deploy to Production + run: | + npx netlify-cli deploy \ + --dir=built \ + --prod \ + --auth=${{ secrets.NETLIFY_AUTH_TOKEN }} \ + --site=${{ secrets.NETLIFY_SITE_ID }} From d1eb3fdbcecfe2f9b3c95eb76ec30c9250a09bfa Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 15:37:59 -0500 Subject: [PATCH 08/16] more preview context --- .github/workflows/deploy.yaml | 39 ++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index b39b1355..9ab3a8a8 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -7,6 +7,9 @@ on: branches: - production +permissions: + contents: read + jobs: # --- PULL REQUEST PREVIEW DEPLOYMENT --- deploy-preview: @@ -14,12 +17,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 environment: - name: preview - url: ${{ steps.netlify.outputs.preview-url }} - permissions: - id-token: write - contents: read - pull-requests: write # Required if you want to write a comment on the PR + name: Preview + url: ${{ steps.netlify.outputs.unique-url }} steps: - name: Checkout @@ -57,15 +56,23 @@ jobs: --output=built \ --base=https://frontside.com - - name: Deploy Preview + - name: Deploy Preview to Netlify id: netlify run: | - # Run CLI deploy WITHOUT the --prod flag to create a preview instance - OUTPUT=$(npx netlify-cli deploy --dir=built --auth=${{ secrets.NETLIFY_AUTH_TOKEN }} --site=${{ secrets.NETLIFY_SITE_ID }}) - - # Parse out the dynamic website URL from Netlify's terminal response - URL=$(echo "$OUTPUT" | grep -oE "https://[^ ]+\.netlify\.app" | head -n 1) - echo "preview-url=$URL" >> $GITHUB_OUTPUT + PR_NUMBER="${{ github.event.pull_request.number }}" + COMMIT_SHA="${{ github.sha }}" + + OUTPUT=$(npx netlify-cli deploy \ + --dir=built \ + --alias="pr-$PR_NUMBER" \ + --message="Preview for PR #$PR_NUMBER at commit $COMMIT_SHA" \ + --auth=${{ secrets.NETLIFY_AUTH_TOKEN }} \ + --site=${{ secrets.NETLIFY_SITE_ID }}) + + UNIQUE_URL=$(echo "$OUTPUT" | grep -oE "https://[^ ]+\.netlify\.app" | head -n 1) + echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT + + echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT # Automatically post the link as a comment inside the PR thread - name: Comment PR with Preview Link @@ -76,7 +83,7 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: `🚀 **Deploy Preview Ready!** Review changes here: ${{ steps.netlify.outputs.preview-url }}` + body: `🚀 **Deploy Preview Ready!** Review changes here: ${{ steps.netlify.outputs.stable-url }}` }) # --- PRODUCTION DEPLOYMENT --- @@ -85,10 +92,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 environment: - name: production + name: Production url: https://frontside.com - permissions: - contents: read steps: - name: Checkout From e36c4cbd5a88dde8d09797c200e1494fd1556f29 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 15:41:06 -0500 Subject: [PATCH 09/16] add back write permissions --- .github/workflows/deploy.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 9ab3a8a8..544acddd 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -19,6 +19,9 @@ jobs: environment: name: Preview url: ${{ steps.netlify.outputs.unique-url }} + permissions: + contents: read + pull-requests: write steps: - name: Checkout From 4c89989045e20b5a52254ef2a0eb63099611c731 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 15:49:19 -0500 Subject: [PATCH 10/16] stable comment --- .github/workflows/deploy.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 544acddd..c6b242a2 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -77,17 +77,16 @@ jobs: echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT - # Automatically post the link as a comment inside the PR thread - name: Comment PR with Preview Link - uses: actions/github-script@v7 + uses: marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5 with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `🚀 **Deploy Preview Ready!** Review changes here: ${{ steps.netlify.outputs.stable-url }}` - }) + # The header string creates a unique, invisible signature inside the comment HTML + header: netlify-preview-deploy + message: | + 🚀 **Deploy Preview Ready!** + + * **Stable Review Link:** ${{ steps.netlify.outputs.stable-url }} + * **Latest Commit Snapshot:** ${{ steps.netlify.outputs.unique-url }} # --- PRODUCTION DEPLOYMENT --- deploy-production: From 7aa22aa271350a087df7ee7f739095421eeb0928 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 15:57:43 -0500 Subject: [PATCH 11/16] use json to grab deploy url --- .github/workflows/deploy.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index c6b242a2..e689e009 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -65,16 +65,18 @@ jobs: PR_NUMBER="${{ github.event.pull_request.number }}" COMMIT_SHA="${{ github.sha }}" - OUTPUT=$(npx netlify-cli deploy \ + DEPLOY_OUTPUT=$(npx netlify-cli deploy \ --dir=built \ --alias="pr-$PR_NUMBER" \ --message="Preview for PR #$PR_NUMBER at commit $COMMIT_SHA" \ --auth=${{ secrets.NETLIFY_AUTH_TOKEN }} \ - --site=${{ secrets.NETLIFY_SITE_ID }}) + --site=${{ secrets.NETLIFY_SITE_ID }} \ + --json) - UNIQUE_URL=$(echo "$OUTPUT" | grep -oE "https://[^ ]+\.netlify\.app" | head -n 1) - echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT + # Netlify JSON format exposes this as a root property called "deploy_url" + UNIQUE_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_url') + echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT - name: Comment PR with Preview Link From a7e18e4169fab91c6b9d27fc7d0599addf18fb1d Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 16:19:35 -0500 Subject: [PATCH 12/16] use PR shaw --- .github/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index e689e009..1dab5ebf 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -63,7 +63,7 @@ jobs: id: netlify run: | PR_NUMBER="${{ github.event.pull_request.number }}" - COMMIT_SHA="${{ github.sha }}" + COMMIT_SHA="${{ github.event.pull_request.head.sha }}" DEPLOY_OUTPUT=$(npx netlify-cli deploy \ --dir=built \ From 1ca2df6196a1386b1e46df30db5f865a97c00ad5 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 16:48:13 -0500 Subject: [PATCH 13/16] try deploy_ssl_url --- .github/workflows/deploy.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 1dab5ebf..27f66d31 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -73,9 +73,7 @@ jobs: --site=${{ secrets.NETLIFY_SITE_ID }} \ --json) - # Netlify JSON format exposes this as a root property called "deploy_url" - UNIQUE_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_url') - + UNIQUE_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_ssl_url') echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT From 4b47fd124bbda89287dfee9fd3ce43660758bed0 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 16:48:51 -0500 Subject: [PATCH 14/16] echo output for easier inspection --- .github/workflows/deploy.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 27f66d31..77a8812f 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -73,6 +73,7 @@ jobs: --site=${{ secrets.NETLIFY_SITE_ID }} \ --json) + echo "$DEPLOY_OUTPUT" | jq UNIQUE_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_ssl_url') echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT From cb59bef98e8dc30aa91845a8086d0e52cf1264b3 Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 17:18:25 -0500 Subject: [PATCH 15/16] perma url from id --- .github/workflows/deploy.yaml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 77a8812f..35923f13 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -65,6 +65,7 @@ jobs: PR_NUMBER="${{ github.event.pull_request.number }}" COMMIT_SHA="${{ github.event.pull_request.head.sha }}" + # 1. DEPLOY TO NETLIFY: Capture the output in JSON format DEPLOY_OUTPUT=$(npx netlify-cli deploy \ --dir=built \ --alias="pr-$PR_NUMBER" \ @@ -73,10 +74,17 @@ jobs: --site=${{ secrets.NETLIFY_SITE_ID }} \ --json) - echo "$DEPLOY_OUTPUT" | jq - UNIQUE_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_ssl_url') + # 2. DYNAMICALLY PARSE VALUES: Bypasses hardcoding the site subdomain + DEPLOY_ID=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_id') + SITE_NAME=$(echo "$DEPLOY_OUTPUT" | jq -r '.site_name') + + # 3. Manually construct the separate isolated URLs using the parsed site name + UNIQUE_URL="https://${DEPLOY_ID}--${SITE_NAME}.netlify.app" + STABLE_URL="https://pr-${PR_NUMBER}--${SITE_NAME}.netlify.app" + + # 4. Save keys to your step outputs echo "unique-url=$UNIQUE_URL" >> $GITHUB_OUTPUT - echo "stable-url=https://pr-$PR_NUMBER--frontside.netlify.app" >> $GITHUB_OUTPUT + echo "stable-url=$STABLE_URL" >> $GITHUB_OUTPUT - name: Comment PR with Preview Link uses: marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5 From 8487eddeba435e507402f36b747da441f17f685c Mon Sep 17 00:00:00 2001 From: Jacob Bolda Date: Wed, 8 Jul 2026 17:21:58 -0500 Subject: [PATCH 16/16] bring back proxy --- main.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.tsx b/main.tsx index 27818cf3..d18f307c 100644 --- a/main.tsx +++ b/main.tsx @@ -94,10 +94,10 @@ await main(function* (args) { route("/redirects", redirectsRoute()), route("/platformscript", platformscriptRoute()), $route("/platformscript/(.*)", redirect("/platformscript")), - //proxyRoute({ ...proxies.effection, pattern: "/effection(.*)" }), - //proxyRoute({ ...proxies.graphgen, pattern: "/graphgen(.*)" }), + proxyRoute({ ...proxies.effection, pattern: "/effection(.*)" }), + proxyRoute({ ...proxies.graphgen, pattern: "/graphgen(.*)" }), $route("/assets(.*)", assetsRoute("assets")), - //proxyRoute({ ...proxies.interactors, pattern: "/interactors(.*)" }), + proxyRoute({ ...proxies.interactors, pattern: "/interactors(.*)" }), ], plugins: [