Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/deploy_all_examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ jobs:
path: examples/react
- name: burn
path: examples/burn
- name: tanstack-db-web-starter
path: examples/tanstack-db-web-starter

env:
DEPLOY_ENV: 'production'
Expand All @@ -53,7 +55,13 @@ jobs:
ELECTRIC_API: ${{ secrets.ELECTRIC_API }}
ELECTRIC_ADMIN_API: ${{ secrets.ELECTRIC_ADMIN_API }}
ELECTRIC_TEAM_ID: ${{ secrets.ELECTRIC_TEAM_ID }}
ELECTRIC_ADMIN_API_AUTH_TOKEN: ${{ secrets.ELECTRIC_ADMIN_API_AUTH_TOKEN }}
ANTHROPIC_KEY: ${{ secrets.ANTHROPIC_KEY }}
QUICKSTART_DATABASE_URI: ${{ secrets.QUICKSTART_DATABASE_URI }}
QUICKSTART_POOLED_DATABASE_URI: ${{ secrets.QUICKSTART_POOLED_DATABASE_URI }}
QUICKSTART_SOURCE_ID: ${{ vars.QUICKSTART_SOURCE_ID }}
QUICKSTART_SOURCE_SECRET: ${{ secrets.QUICKSTART_SOURCE_SECRET }}
BETTER_AUTH_SECRET: ${{ secrets.BETTER_AUTH_SECRET }}
# HONEYCOMB_API_KEY: ${{ secrets.HONEYCOMB_API_KEY }} TODO

steps:
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/deploy_examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ jobs:
remix/**
react/**
burn/**
tanstack-db-web-starter/**

- name: Create example matrix
id: create-example-matrix
Expand Down Expand Up @@ -85,6 +86,7 @@ jobs:
remix: ${{ steps.deploy.outputs.remix }}
react: ${{ steps.deploy.outputs.react }}
burn: ${{ steps.deploy.outputs.burn }}
tanstack-db-web-starter: ${{ steps.deploy.outputs.tanstack-db-web-starter }}

env:
DEPLOY_ENV: ${{ github.event_name == 'push' && 'production' || format('pr-{0}', github.event.number) }}
Expand All @@ -108,6 +110,11 @@ jobs:
ELECTRIC_ADMIN_API_AUTH_TOKEN: ${{ secrets.ELECTRIC_ADMIN_API_AUTH_TOKEN }}
SECRET_KEY_BASE: ${{ secrets.LIVEVIEW_EXAMPLE_SECRET_KEY_BASE }}
ANTHROPIC_KEY: ${{ secrets.ANTHROPIC_KEY }}
QUICKSTART_DATABASE_URI: ${{ secrets.QUICKSTART_DATABASE_URI }}
QUICKSTART_POOLED_DATABASE_URI: ${{ secrets.QUICKSTART_POOLED_DATABASE_URI }}
QUICKSTART_SOURCE_ID: ${{ vars.QUICKSTART_SOURCE_ID }}
QUICKSTART_SOURCE_SECRET: ${{ secrets.QUICKSTART_SOURCE_SECRET }}
BETTER_AUTH_SECRET: ${{ secrets.BETTER_AUTH_SECRET }}

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -295,7 +302,8 @@ jobs:
"phoenix-liveview": "${{ needs.deploy.outputs.phoenix-liveview }}",
"tanstack": "${{ needs.deploy.outputs.tanstack }}",
"remix": "${{ needs.deploy.outputs.remix }}",
"react": "${{ needs.deploy.outputs.react }}"
"react": "${{ needs.deploy.outputs.react }}",
"tanstack-db-web-starter": "${{ needs.deploy.outputs.tanstack-db-web-starter }}"
}

// Create deployments array only for examples that were deployed
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/teardown_examples_pr_stack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
'remix',
'react',
'burn',
'tanstack-db-web-starter',
]

env:
Expand All @@ -41,6 +42,9 @@ jobs:
NEON_PROJECT_ID: ${{ secrets.NEON_PROJECT_ID }}
ELECTRIC_API: ${{ secrets.ELECTRIC_API }}
ELECTRIC_ADMIN_API: ${{ secrets.ELECTRIC_ADMIN_API }}
ELECTRIC_TEAM_ID: ${{ secrets.ELECTRIC_TEAM_ID }}
ELECTRIC_ADMIN_API_AUTH_TOKEN: ${{ secrets.ELECTRIC_ADMIN_API_AUTH_TOKEN }}
BETTER_AUTH_SECRET: ${{ secrets.BETTER_AUTH_SECRET }}
# HONEYCOMB_API_KEY: ${{ secrets.HONEYCOMB_API_KEY }} TODO

steps:
Expand Down
82 changes: 82 additions & 0 deletions examples/tanstack-db-web-starter/sst.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/// <reference path="./.sst/platform/config.d.ts" />

import { execSync } from "node:child_process"

export default $config({
app(input) {
return {
name: `quickstart-example`,
removal: input?.stage === `production` ? `retain` : `remove`,
protect: [`production`].includes(input?.stage),
home: `aws`,
providers: {
cloudflare: `5.42.0`,
aws: {
version: `6.66.2`,
profile: process.env.CI ? undefined : `marketing`,
},
},
}
},
async run() {
// Validate required environment variables
if (!process.env.ELECTRIC_API) {
throw new Error(`ELECTRIC_API environment variable is required`)
}
if (!process.env.BETTER_AUTH_SECRET) {
throw new Error(`BETTER_AUTH_SECRET environment variable is required`)
}
if (
!process.env.QUICKSTART_DATABASE_URI ||
!process.env.QUICKSTART_POOLED_DATABASE_URI ||
!process.env.QUICKSTART_SOURCE_ID ||
!process.env.QUICKSTART_SOURCE_SECRET
) {
throw new Error(
`QUICKSTART_DATABASE_URI, QUICKSTART_POOLED_DATABASE_URI, ` +
`QUICKSTART_SOURCE_ID, and QUICKSTART_SOURCE_SECRET are required`
)
}

// Apply migrations (idempotent)
applyDrizzleMigrations(process.env.QUICKSTART_DATABASE_URI)

const website = new sst.aws.TanStackStart(`quickstart-website`, {
environment: {
// Database
DATABASE_URL: process.env.QUICKSTART_POOLED_DATABASE_URI,

// Electric
ELECTRIC_URL: process.env.ELECTRIC_API,
ELECTRIC_SOURCE_ID: process.env.QUICKSTART_SOURCE_ID,
ELECTRIC_SOURCE_SECRET: process.env.QUICKSTART_SOURCE_SECRET,

// Better Auth
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET,
BETTER_AUTH_URL: `https://quickstart.examples.electric-sql.com`,
},
domain: {
name: `quickstart.examples.electric-sql.com`,
dns: sst.cloudflare.dns(),
},
})

return {
website: website.url,
}
},
})

/**
* Apply migrations using Drizzle Kit.
* Migrations are in src/db/out/ (generated by drizzle-kit generate).
*/
function applyDrizzleMigrations(dbUri: string) {
console.log(`[quickstart] Applying Drizzle migrations`)
execSync(`pnpm drizzle-kit migrate`, {
env: {
...process.env,
DATABASE_URL: dbUri,
},
})
}
10 changes: 9 additions & 1 deletion examples/tanstack-db-web-starter/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,18 @@ import tailwindcss from "@tailwindcss/vite"
import { nitro } from "nitro/vite"
import { caddyPlugin } from "./src/vite-plugin-caddy"

// Use aws-lambda preset for SST deployments (CI), otherwise use default for local dev
const nitroPreset = process.env.CI ? `aws-lambda` : undefined

const config = defineConfig({
plugins: [
devtools(),
nitro(),
nitro({
preset: nitroPreset,
awsLambda: {
streaming: true,
},
}),
viteTsConfigPaths({
projects: [`./tsconfig.json`],
}),
Expand Down
Loading
Loading