I think if we are able to do migrations / cleanup on the database outside of the unstable_dev() then
I think if we are able to do migrations / cleanup on the database outside of the unstable_dev() then most of the use-cases should be covered
runMigration and it mirrors wrangler d1 migrations apply <name> -> that gives you the tools you need to run a series of migrations from within CIwrangler d1 migrations apply run in CI's without like logging into cloudflare? because i might just run it as a shell command as of now to make my test setup less brittle and later swithc to the programatic runMigration API once its outmigrations apply defaults to remote.preview_database_idpersistTo to a different temporary path works. In the docs above if an user would run tests with preview_database_id set but not a custom persistTo they would mess up their development databasepreview_database_id to interact w/ programmatic testing here./tmp/<some random ID> file that gets thrown away by your OS. That way, if you have a larger DB, we don't eat all of your CI containers' memory D1 sqlite? I was using bun sqlite where I create a local db.sqlite file and interact with it using the imported client. In the case of Cloudflare & wrangler, I'm a little confused as to how I can create and seed a local sqlitedev commandwrangler.json--persist-to=/path/to/file to persist data to a specific location but no luck and on seeding I couldn't find any relevant info.prestart script that runs a ts file to init local sqlite and seed itwrangler d1 migrations, you can use a migration to seed the database or if you want a more programatic approach scroll up a bit, we had a discussion about possibilites just a few hours ago--persist-to=/path/to/filepreview_database_id (per https://developers.cloudflare.com/d1/platform/migrations/#wrangler-customizations) and use wrangler d1 migrations apply <db-name> --local -> you can apply migrations locally to seed the DB. As above, you can also do that programatically via your test harness
name.sqlite file?wrangler d1 migrations inside your tests: the example shows that.db. Is there a way to change that by just changing binding in wrangler config?wrangler d1 execute --local --comand="SELECT NOTHING"runMigrationrunMigrationwrangler d1 migrations apply <name>wrangler d1 migrations applymigrations applyOptions:
--local Execute commands/files against a local DB for use with wrangler dev --local [boolean]
--preview Execute commands/files against a preview D1 DB [boolean] [default: false]
--persist-to Specify directory to use for local persistence (you must use --local with this flag) [string]
--experimental-backend Use new experimental DB backend [boolean] [default: false]
--batch-size Number of queries to send in a single batch [number] [default: 10000]describe("backend json rest api", () => {
const testId = randomUUID();
let worker;
before(async () => {
// running migrations on db
execSync(
`export NO_D1_WARNING=true && wrangler d1 migrations apply db --local --persist-to=temp/${testId}`
);
// setting up worker
worker = await unstable_dev("src/index.ts", {
experimental: {
disableExperimentalWarning: true,
},
persistTo: `temp/${testId}`,
});
});
after(async () => {
await worker.stop();
execSync("rm -rf temp");
});
// ... tests here
});preview_database_idpreview_database_idpreview_database_idpreview_database_idpersistTopersistTo/tmp/<some random ID>D1bundb.sqlitedevwrangler.json--persist-to=/path/to/file--persist-to=/path/to/fileprestartwrangler d1 migrationswrangler d1 migrationswrangler d1 migrations apply <db-name> --localname.sqlitedbbindingwrangler d1 execute --local --comand="SELECT NOTHING"{
"$schema": "https://gist.githubusercontent.com/o-az/d298a1776165407ba63ee763d32f7a89/raw/7f87871dd9a5efb9d3cc147fac0174ebdc9858fa/wrangler.json",
"name": "tokens",
"workers_dev": true,
"main": "./src/index.ts",
"compatibility_date": "2023-05-18",
"compatibility_flags": [ "nodejs_compat" ],
"placement": { "mode": "smart" },
"d1_databases": [
{
"binding": "database",
"database_name": "tokens",
"preview_database_id": "local-tokens-sqlite"
}
]
}NO_D1_WARNING=true ./node_modules/.bin/wrangler dev --persist-to=./tokens.sqlite --experimental-json-config⛅️ wrangler 3.1.0 (update available 3.1.1)