Skip to content

feat!: add support for new Netlify Database primitive#8212

Merged
pieh merged 17 commits intomainfrom
feat/unflag-database
Apr 28, 2026
Merged

feat!: add support for new Netlify Database primitive#8212
pieh merged 17 commits intomainfrom
feat/unflag-database

Conversation

@pieh
Copy link
Copy Markdown
Contributor

@pieh pieh commented Apr 27, 2026

🎉 Thanks for submitting a pull request! 🎉

Summary

Fixes #<replace_with_issue_number>


For us to review and ship your PR efficiently, please perform the following steps:

  • Open a bug/issue before writing your code 🧑‍💻. This ensures we can discuss the changes and get feedback from everyone that should be involved. If you`re fixing a typo or something that`s on fire 🔥 (e.g. incident related), you can skip this step.
  • Read the contribution guidelines 📖. This ensures your code follows our style guide and
    passes our tests.
  • Update or add tests (if any source code was changed or added) 🧪
  • Update or add documentation (if features were changed or added) 📝
  • Make sure the status checks below are successful ✅

A picture of a cute animal (not mandatory, but encouraged)

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 27, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Replaces the legacy db command surface with a unified database command (alias db) and subcommands (status, init, connect, reset, migrations). Removes multiple legacy modules and types, extracts a new spawnAsync util, simplifies command registration to dynamic imports of new implementations, removes environment gating for experimental DB, updates docs (adds docs/commands/database.md, removes docs/commands/db.md and adds redirect), bumps @netlify/dev, and updates tests and scripts to match the refactor.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • kathmbeck
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The description is a template with no meaningful content about the changeset, using only placeholder text and checklist items without any actual implementation details. Replace the template with a clear summary of what was changed, why the breaking change was necessary, and any migration guidance for users affected by the feat! marker.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The PR title 'feat!: add support for new Netlify Database primitive' clearly summarizes the main change across the changeset, which systematizes the database command under a unified 'database' command with new subcommands while removing legacy 'db' command support.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/unflag-database

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 27, 2026

📊 Benchmark results

Comparing with 3ececcd

  • Dependency count: 1,061 (no change)
  • Package size: 355 MB ⬆️ 0.00% increase vs. 3ececcd
  • Number of ts-expect-error directives: 355 ⬇️ 0.28% decrease vs. 3ececcd

Comment thread package.json Outdated
@pieh pieh force-pushed the feat/unflag-database branch from c815f63 to 32092b7 Compare April 27, 2026 09:15
@pieh pieh changed the title feat!: remove db extension commands and unflag database primitive commands [do-not-merge] feat!: remove db extension commands and unflag database primitive commands Apr 27, 2026
@pieh pieh marked this pull request as ready for review April 27, 2026 09:27
@pieh pieh requested review from a team as code owners April 27, 2026 09:27
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (5)
src/commands/database/util/spawn-async.ts (1)

3-3: Prefer SpawnOptions over Parameters<typeof spawn>[2].

spawn has overloads, so Parameters<typeof spawn>[2] resolves to whichever overload TS picks last and can change with type updates. Importing SpawnOptions (or SpawnOptionsWithoutStdio) from child_process is more explicit and stable.

♻️ Proposed refactor
-import { spawn } from 'child_process'
+import { spawn, type SpawnOptions } from 'child_process'

-export const spawnAsync = (command: string, args: string[], options: Parameters<typeof spawn>[2]): Promise<number> => {
+export const spawnAsync = (command: string, args: string[], options?: SpawnOptions): Promise<number> => {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/database/util/spawn-async.ts` at line 3, The spawnAsync
signature currently types its options parameter as Parameters<typeof spawn>[2],
which is unstable across overloads; change it to use the explicit child_process
type (import SpawnOptions or SpawnOptionsWithoutStdio from 'child_process') and
update the function signature (spawnAsync) to accept options: SpawnOptions (or
SpawnOptionsWithoutStdio) so the type is stable and explicit; update the import
list at the top to include the chosen SpawnOptions type and adjust any call
sites if needed.
src/commands/database/db-init.ts (2)

55-73: Minor: prefer fs/promises over existsSync for consistency.

The rest of the file uses async fs APIs (mkdir, readdir, writeFile). Using existsSync here is a small inconsistency; an async stat/access keeps the helper fully async without mixing sync I/O.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/database/db-init.ts` around lines 55 - 73, The helper
carefullyWriteFile currently uses the sync existsSync; replace that with an
async fs/promises check (e.g., using access or stat from 'fs/promises') so the
function remains fully asynchronous. Modify carefullyWriteFile to await
fs.promises.access(filePath) (or await stat(filePath)) in a try/catch to
determine existence, then proceed to prompt and writeFile as before; keep the
same prompt/overwrite logic and return behavior unchanged. Ensure imports at the
top reference the async fs APIs rather than existsSync.

64-64: Use path.relative instead of string replace.

filePath.replace(projectRoot, '') is fragile: it only replaces the first occurrence, silently no-ops if projectRoot isn't a literal prefix (e.g., differing OS casing or a normalized vs. resolved path), and the leading . concatenation produces oddities like .foo/bar if the prefix isn't found. path.relative handles all of this correctly and yields the same ./... form when joined.

♻️ Proposed refactor
-import { join } from 'path'
+import { join, relative } from 'path'
@@
-        message: `Overwrite existing file .${filePath.replace(projectRoot, '')}?`,
+        message: `Overwrite existing file ${relative(projectRoot, filePath)}?`,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/database/db-init.ts` at line 64, Replace the fragile string
replace when building the confirmation message: instead of using
filePath.replace(projectRoot, '') to show the path, compute the relative path
with path.relative(projectRoot, filePath) (or join './' with that result when
needed) and use that in the message template inside the db-init command so the
prompt reliably shows a correct ./... path across platforms; update references
to filePath/projectRoot in the message construction accordingly.
e2e/install.e2e.ts (1)

158-181: Guard against the same file:*.tgz dep appearing in both dependencies and devDependencies.

The current loop publishes each tarball it encounters; if a package is listed in both buckets (uncommon but legal during ad-hoc testing setups), npm publish will fail on the second attempt with 409 Conflict and abort the entire beforeAll. A small Set<string> of already-published name@version pairs (or skipping when the inner name was seen earlier) keeps this resilient.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@e2e/install.e2e.ts` around lines 158 - 181, The loop publishing tarballs
should skip duplicates to avoid a second `npm publish` causing a 409; add a Set
(e.g. published = new Set<string>()) keyed by
`${innerManifest.name}@${innerManifest.version}` and, after extracting
innerManifest (in the block handling match/tgzPath and before calling
execa('npm','publish'...)), check if the key is already present and if so set
`bucket[name] = innerManifest.version` and continue; only call `npm publish` and
add the key to `published` when it hasn’t been seen, and keep existing checks
around publishResult and the existing `bucket[name] = innerManifest.version`
assignment.
src/commands/database/database.ts (1)

13-13: Nit: hyphenate "production-ready".

This description string is surfaced by --help and is auto-copied into docs/commands/database.md (line 12) and docs/index.md (line 76), where LanguageTool already flags it. Fixing it here corrects all three locations.

Proposed copy edit
-    .description(`Provision a production ready Postgres database with a single command`)
+    .description(`Provision a production-ready Postgres database with a single command`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/database/database.ts` at line 13, The description string passed
to the .description(...) call currently reads "Provision a production ready
Postgres database with a single command" and should be hyphenated; update that
string to "Provision a production-ready Postgres database with a single command"
(the change will propagate to generated docs). Locate the .description call for
the database command and replace the unhyphenated phrase with the hyphenated
"production-ready" (no other code changes required).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/commands/database.md`:
- Around line 50-54: The usage strings are built without the parent command,
causing "netlify <sub>" instead of "netlify database <sub>"; update the docs
generator so formatUsage in site/scripts/docs.js receives or derives the parent
command context and constructs the full command path (e.g., join parent
"database" + subcommand name) before returning the usage string; modify
formatUsage (or its caller) to accept a parent parameter or use the command
object’s full name (e.g., command.fullName/parent.name) when present so all
Usage blocks render as "netlify database <subcommand>".

In `@e2e/install.e2e.ts`:
- Around line 162-169: The current setup unconditionally calls execa('tar',
['-xzOf', tgzPath, 'package/package.json']) in the beforeAll hook and also
copies the .tgz into publishWorkspace because shouldCopyCLIFile only filters
node_modules/**; replace the external tar dependency by reading the package.json
from the tarball with a pure-Node implementation (e.g., use the "tar" or
"node:stream"/zlib APIs) inside the beforeAll logic so you don't require the
system tar binary, and also update shouldCopyCLIFile to explicitly exclude *.tgz
files so the tarball isn't copied into publishWorkspace in the first place
(adjust references to tgzPath, publishWorkspace, the execa('tar'...) call,
beforeAll, and shouldCopyCLIFile accordingly).

In `@src/commands/database/util/spawn-async.ts`:
- Around line 7-13: The exit handler currently calls resolve(code) then
continues to construct and call reject, causing erroneous error creation; update
the child.on('exit', ...) handler (the resolve and reject calls) so that after a
successful exit (code === 0) the function returns immediately (or use an else
branch) and does not execute the reject path; ensure the errorMessage only gets
constructed and reject(new Error(errorMessage)) is invoked when code !== 0 to
prevent constructing an error on success.

In `@tests/integration/commands/dev/dev.programmatic-netlify-dev.test.ts`:
- Line 41: Remove the leftover debug print by deleting the console.log(body)
call in the test (inside the test case where variable body is logged); ensure no
other debug console.* statements remain in the same test file
(tests/integration/commands/dev/dev.programmatic-netlify-dev.test.ts) so test
output is not polluted and assertions remain unchanged.

---

Nitpick comments:
In `@e2e/install.e2e.ts`:
- Around line 158-181: The loop publishing tarballs should skip duplicates to
avoid a second `npm publish` causing a 409; add a Set (e.g. published = new
Set<string>()) keyed by `${innerManifest.name}@${innerManifest.version}` and,
after extracting innerManifest (in the block handling match/tgzPath and before
calling execa('npm','publish'...)), check if the key is already present and if
so set `bucket[name] = innerManifest.version` and continue; only call `npm
publish` and add the key to `published` when it hasn’t been seen, and keep
existing checks around publishResult and the existing `bucket[name] =
innerManifest.version` assignment.

In `@src/commands/database/database.ts`:
- Line 13: The description string passed to the .description(...) call currently
reads "Provision a production ready Postgres database with a single command" and
should be hyphenated; update that string to "Provision a production-ready
Postgres database with a single command" (the change will propagate to generated
docs). Locate the .description call for the database command and replace the
unhyphenated phrase with the hyphenated "production-ready" (no other code
changes required).

In `@src/commands/database/db-init.ts`:
- Around line 55-73: The helper carefullyWriteFile currently uses the sync
existsSync; replace that with an async fs/promises check (e.g., using access or
stat from 'fs/promises') so the function remains fully asynchronous. Modify
carefullyWriteFile to await fs.promises.access(filePath) (or await
stat(filePath)) in a try/catch to determine existence, then proceed to prompt
and writeFile as before; keep the same prompt/overwrite logic and return
behavior unchanged. Ensure imports at the top reference the async fs APIs rather
than existsSync.
- Line 64: Replace the fragile string replace when building the confirmation
message: instead of using filePath.replace(projectRoot, '') to show the path,
compute the relative path with path.relative(projectRoot, filePath) (or join
'./' with that result when needed) and use that in the message template inside
the db-init command so the prompt reliably shows a correct ./... path across
platforms; update references to filePath/projectRoot in the message construction
accordingly.

In `@src/commands/database/util/spawn-async.ts`:
- Line 3: The spawnAsync signature currently types its options parameter as
Parameters<typeof spawn>[2], which is unstable across overloads; change it to
use the explicit child_process type (import SpawnOptions or
SpawnOptionsWithoutStdio from 'child_process') and update the function signature
(spawnAsync) to accept options: SpawnOptions (or SpawnOptionsWithoutStdio) so
the type is stable and explicit; update the import list at the top to include
the chosen SpawnOptions type and adjust any call sites if needed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0c3a75c8-cea4-47e2-91e2-08da043d185c

📥 Commits

Reviewing files that changed from the base of the PR and between 0415e87 and 32092b7.

⛔ Files ignored due to path filters (2)
  • package-lock.json is excluded by !**/package-lock.json
  • tests/integration/commands/help/__snapshots__/help.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (22)
  • docs/commands/database.md
  • docs/commands/db.md
  • docs/index.md
  • e2e/install.e2e.ts
  • netlify-dev-4.17.4-unflag-database.1.tgz
  • package.json
  • site/netlify.toml
  • src/commands/database/database.ts
  • src/commands/database/db-init.ts
  • src/commands/database/legacy/constants.ts
  • src/commands/database/legacy/db-init.ts
  • src/commands/database/legacy/db-status.ts
  • src/commands/database/legacy/drizzle.ts
  • src/commands/database/legacy/types.ts
  • src/commands/database/legacy/utils.ts
  • src/commands/database/util/db-connection.ts
  • src/commands/database/util/packages.ts
  • src/commands/database/util/spawn-async.ts
  • src/commands/dev/dev.ts
  • src/commands/dev/programmatic-netlify-dev.ts
  • tests/integration/commands/dev/dev.programmatic-netlify-dev.test.ts
  • tests/unit/commands/database/db-init.test.ts
💤 Files with no reviewable changes (7)
  • docs/commands/db.md
  • src/commands/database/legacy/types.ts
  • src/commands/database/legacy/constants.ts
  • src/commands/database/legacy/db-status.ts
  • src/commands/database/legacy/drizzle.ts
  • src/commands/database/legacy/db-init.ts
  • src/commands/database/legacy/utils.ts

Comment thread docs/commands/database.md
Comment thread e2e/install.e2e.ts Outdated
Comment thread src/commands/database/util/spawn-async.ts
Comment thread tests/integration/commands/dev/dev.programmatic-netlify-dev.test.ts Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/commands/database/util/spawn-async.ts (1)

7-14: Optional: surface termination signal in the rejection message.

When the child is killed by a signal, code is null and the second 'exit' argument (signal) carries the actual cause (e.g. SIGTERM). Including it would make failures easier to diagnose without changing the happy path.

♻️ Proposed refinement
-    child.on('exit', (code) => {
+    child.on('exit', (code, signal) => {
       if (code === 0) {
         resolve(code)
         return
       }
-      const errorMessage = code ? `Process exited with code ${code.toString()}` : 'Process exited with no code'
+      const errorMessage =
+        code != null
+          ? `Process exited with code ${code.toString()}`
+          : signal != null
+            ? `Process terminated by signal ${signal}`
+            : 'Process exited with no code'
       reject(new Error(errorMessage))
     })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/database/util/spawn-async.ts` around lines 7 - 14, The exit
handler for the spawned child only uses the exit code and omits the termination
signal; update the child.on('exit') callback in spawnAsync to accept both (code,
signal) and when code !== 0 include the signal in the rejection message (e.g. if
code is null or non-zero append `signal` when present) so the reject(new
Error(...)) contains either the exit code or the terminating signal (reference
the child.on('exit', (code, signal) => ...) callback inside spawnAsync).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/commands/database.md`:
- Around line 64-93: The docs generator is incorrectly including top-level
colon-prefixed siblings (like status:hooks) when parsing nested commands because
parseCommand currently spreads commands.filter(...) unconditionally; update
generate-command-data.js so that when building the commands array inside
parseCommand you only include the colon-prefixed siblings if the command being
parsed is a top-level command (check command.parent?.name() === 'netlify' or
equivalent), i.e., change the second spread to run only when
command.parent?.name() === 'netlify' so parseCommand and the commands array no
longer pull in unrelated top-level subcommands like status:hooks.

---

Nitpick comments:
In `@src/commands/database/util/spawn-async.ts`:
- Around line 7-14: The exit handler for the spawned child only uses the exit
code and omits the termination signal; update the child.on('exit') callback in
spawnAsync to accept both (code, signal) and when code !== 0 include the signal
in the rejection message (e.g. if code is null or non-zero append `signal` when
present) so the reject(new Error(...)) contains either the exit code or the
terminating signal (reference the child.on('exit', (code, signal) => ...)
callback inside spawnAsync).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 66d6ac8d-2fed-4379-b23b-cada1781f0bb

📥 Commits

Reviewing files that changed from the base of the PR and between 32092b7 and 1d2313a.

📒 Files selected for processing (5)
  • docs/commands/database.md
  • docs/index.md
  • site/scripts/docs.js
  • src/commands/database/util/spawn-async.ts
  • tests/integration/commands/dev/dev.programmatic-netlify-dev.test.ts

Comment thread docs/commands/database.md Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/commands/database.md`:
- Line 3: Update the frontmatter and any generated command description text to
hyphenate the compound adjective: change the value for the frontmatter key
"description" from "production ready" to "production-ready" and replace any
other occurrences of the exact phrase "production ready" in the generated
command description output (search for "production ready" in the file and
related generation/template code) so the command description consistently reads
"production-ready".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 43d92ef8-5d10-4cba-b9fc-72f9a09c5f0d

📥 Commits

Reviewing files that changed from the base of the PR and between 1d2313a and d2f3f3f.

📒 Files selected for processing (2)
  • docs/commands/database.md
  • site/scripts/util/generate-command-data.js

Comment thread docs/commands/database.md
@@ -0,0 +1,272 @@
---
title: Netlify CLI database command
description: Provision a production ready Postgres database with a single command
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate “production-ready” in command description text.

Use production-ready (compound adjective) instead of production ready in both the frontmatter description and generated command description text.

✏️ Proposed wording tweak
-description: Provision a production ready Postgres database with a single command
+description: Provision a production-ready Postgres database with a single command
-Provision a production ready Postgres database with a single command
+Provision a production-ready Postgres database with a single command

Also applies to: 12-12

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/commands/database.md` at line 3, Update the frontmatter and any
generated command description text to hyphenate the compound adjective: change
the value for the frontmatter key "description" from "production ready" to
"production-ready" and replace any other occurrences of the exact phrase
"production ready" in the generated command description output (search for
"production ready" in the file and related generation/template code) so the
command description consistently reads "production-ready".

Comment thread docs/index.md
| [`database init`](/commands/database#database-init) | Interactive setup: install the package, scaffold a starter migration, and verify the database |
| [`database connect`](/commands/database#database-connect) | Connect to the database |
| [`database reset`](/commands/database#database-reset) | Reset the local development database, removing all data and tables |
| [`database migrations`](/commands/database#database-migrations) | Manage database migrations |
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not the best place to mention this because this is index - but we generally had docs generating problem that subcommands where not prefixing commands with db/database before, so in particular usage examples where not generated correctly (for example instead of netlify database status it was printing netlify status on database page which was wrong.

Similarly database migrations subcommands (reset, apply, etc) were just not generated at all

So all the docs generating changes are for those cases.

The main "proof" of docs generating fixes working (at least with our current commands) is the shape of generated docs and fact that commands other than database were NOT touched.

Comment on lines +3 to +16
export const spawnAsync = (command: string, args: string[], options: Parameters<typeof spawn>[2]): Promise<number> => {
return new Promise((resolve, reject) => {
const child = spawn(command, args, options)
child.on('error', reject)
child.on('exit', (code) => {
if (code === 0) {
resolve(code)
return
}
const errorMessage = code ? `Process exited with code ${code.toString()}` : 'Process exited with no code'
reject(new Error(errorMessage))
})
})
}
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracted from now removed src/commands/database/legacy/utils.ts

Comment on lines +55 to +74
const carefullyWriteFile = async (filePath: string, data: string, projectRoot: string) => {
if (existsSync(filePath)) {
type Answers = {
overwrite: boolean
}
const answers = await inquirer.prompt<Answers>([
{
type: 'confirm',
name: 'overwrite',
message: `Overwrite existing file .${filePath.replace(projectRoot, '')}?`,
},
])
if (answers.overwrite) {
await writeFile(filePath, data)
}
} else {
await writeFile(filePath, data)
}
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracted from now removed Extracted from now removed src/commands/database/legacy/utils.ts

@pieh pieh changed the title [do-not-merge] feat!: remove db extension commands and unflag database primitive commands feat!: remove db extension commands and unflag database primitive commands Apr 27, 2026
@pieh pieh changed the title feat!: remove db extension commands and unflag database primitive commands [do-not-merge] feat!: remove db extension commands and unflag database primitive commands Apr 27, 2026
@pieh pieh marked this pull request as draft April 27, 2026 10:39
@pieh pieh changed the title [do-not-merge] feat!: remove db extension commands and unflag database primitive commands feat!: remove db extension commands and unflag database primitive commands Apr 28, 2026
@pieh pieh changed the title feat!: remove db extension commands and unflag database primitive commands feat!: add new database commands Apr 28, 2026
@pieh pieh marked this pull request as ready for review April 28, 2026 14:12
Copy link
Copy Markdown
Member

@eduardoboucas eduardoboucas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@serhalp
Copy link
Copy Markdown
Member

serhalp commented Apr 28, 2026

@pieh how about "feat!: add support for new Netlify Database primitive"?

@pieh pieh changed the title feat!: add new database commands feat!: add support for new Netlify Database primitive Apr 28, 2026
@pieh pieh merged commit a153489 into main Apr 28, 2026
54 of 57 checks passed
@pieh pieh deleted the feat/unflag-database branch April 28, 2026 14:15
pieh pushed a commit that referenced this pull request Apr 28, 2026
🤖 I have created a release *beep* *boop*
---


## [26.0.0](v25.6.2...v26.0.0)
(2026-04-28)


### ⚠ BREAKING CHANGES

* add support for new Netlify Database primitive
([#8212](#8212))

### Features

* add support for new Netlify Database primitive
([#8212](#8212))
([a153489](a153489))


### Bug Fixes

* set NETLIFY_DB_DRIVER when running netlify dev
([#8219](#8219))
([3ececcd](3ececcd))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: token-generator-app[bot] <82042599+token-generator-app[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants