UNPKG

@netlify/build

Version:
60 lines (59 loc) 2.52 kB
import { join } from 'node:path'; import { logDbProvisioning, logDbMigrations } from '../../log/messages/core_steps.js'; import { getPackageJson } from '../../utils/package.js'; import { readMigrationEntries, getMigrationNames, getMigrationsSrc } from './utils.js'; const NPM_PACKAGE_NAME = '@netlify/database'; // TODO: Remove once we stop supporting the legacy `@netlify/db` package name. const NPM_PACKAGE_NAME_LEGACY = '@netlify/db'; const condition = async ({ buildDir, packagePath, featureFlags }) => { if (!featureFlags?.netlify_build_db_setup) { return false; } const { packageJson } = await getPackageJson(buildDir); if (hasDBPackage(packageJson)) { return true; } if (packagePath) { const { packageJson: workspacePackageJson } = await getPackageJson(join(buildDir, packagePath)); if (hasDBPackage(workspacePackageJson)) { return true; } } return false; }; const coreStep = async ({ api, branch, buildDir, constants, context, logs }) => { const siteId = constants.SITE_ID; logDbProvisioning({ logs, branch, context }); const migrationsSrc = await getMigrationsSrc(buildDir, constants.DB_MIGRATIONS_SRC); const entries = await readMigrationEntries(buildDir, migrationsSrc); const migrationNames = getMigrationNames(entries); if (migrationNames.length > 0 && migrationsSrc) { logDbMigrations({ logs, migrations: migrationNames, srcDir: migrationsSrc }); } const database = (await api.createSiteDatabase({ site_id: siteId })); let connectionString = database.connection_string; if (context !== 'production') { const databaseBranch = (await api.createSiteDatabaseBranch({ site_id: siteId, body: { branch_id: branch }, })); connectionString = databaseBranch.connection_string; } process.env.NETLIFY_DB_URL = connectionString; return { newEnvChanges: { NETLIFY_DB_URL: connectionString } }; }; const hasDBPackage = (packageJSON) => { const { dependencies = {}, devDependencies = {} } = packageJSON; return (NPM_PACKAGE_NAME in dependencies || NPM_PACKAGE_NAME in devDependencies || NPM_PACKAGE_NAME_LEGACY in dependencies || NPM_PACKAGE_NAME_LEGACY in devDependencies); }; export const dbSetup = { event: 'onPreBuild', coreStep, coreStepId: 'db_provision', coreStepName: 'Netlify Database setup', coreStepDescription: () => 'Netlify Database setup', condition, };