My cloudflare d1 and drizzle-orm example (or starter) repository.
- Node.js
- cloudflare workers
- cloudflare d1
- drizzle-orm
- GitHub Deploy Workflow (WIP)
Create your d1 database.
$ pnpm wrangler d1 create <your-db-name>
## Replace dzltest to your db name
## TODO(mizchi): refactor to skip this phase
$ git grep dzltest
.github/workflows/release.yml: - run: pnpm wrangler d1 migrations apply dzltest
wrangler.toml:database_name = "dzltest"$ pnpm installEdit wrangler.toml for you.
name = "<your-app-name>"
main = "src/index.ts"
compatibility_date = "2023-04-29" # edit your date
[[ d1_databases ]]
binding = "DB"
database_name = "<your-db-name>"
database_id = "<your-db-id>"## remove test migration script
# rm -r migrations/*
$ pnpm gen:migrate # pnpm drizzle-kit generate:sqlite --out migrations --schema src/schema.ts
$ pnpm wrangler d1 migrations apply <your-db-name> --local
$ pnpm dev # or pnpm wrangler dev --local --persistEdit drizzle schema.
// src/schema.ts
/*
DO NOT RENAME THIS FILE FOR DRIZZLE-ORM TO WORK
*/
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
id: integer('id').primaryKey().notNull(),
name: text('name').notNull(),
// add column
age: integer('age').notNull()
});and apply it
$ pnpm gen:migrate # pnpm drizzle-kit generate:sqlite --out migrations --schema src/schema.ts
# git add migrations && git commit -m "..."
$ pnpm wrangler d1 migrations apply <your-db-name> --localPut Cloudflare's API_TOKEN on GitHub Repository Secrets. (Keep Secret!)
# push by your way. PR or direct push
$ git push origin main:release/$(date +%s).github/workflows/release.yml will run by push trigger.
# edit here to release
- run: pnpm wrangler d1 migrations apply <your-db-name>
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- run: pnpm wrangler publish
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}For escape hatch.
$ pnpm pnpm wrangler d1 migrations apply <your-db-name>
$ pnpm wrangler publish- Support preview
- Auto your-db-name replace
- Pass test
- Seed
MIT