@netlify/build 35.10.1 → 35.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,16 @@ export function logFunctionsToBundle({ logs, userFunctions, userFunctionsSrc, us
14
14
  generatedFunctions: any;
15
15
  type?: string | undefined;
16
16
  }): void;
17
+ export function logDbProvisioning({ logs, branch, context }: {
18
+ logs: any;
19
+ branch: any;
20
+ context: any;
21
+ }): void;
22
+ export function logDbMigrations({ logs, migrations, srcDir }: {
23
+ logs: any;
24
+ migrations: any;
25
+ srcDir: any;
26
+ }): void;
17
27
  export function logSecretsScanSkipMessage(logs: any, msg: any): void;
18
28
  export function logSecretsScanSuccessMessage(logs: any, msg: any): void;
19
29
  export function logSecretsScanFailBuildMessage({ logs, scanResults, groupedResults, enhancedScanShouldRunInActiveMode, }: {
@@ -90,6 +90,22 @@ export const logFunctionsToBundle = function ({ logs, userFunctions, userFunctio
90
90
  log(logs, `Packaging ${type} from ${THEME.highlightWords(userFunctionsSrc)} directory:`);
91
91
  logArray(logs, userFunctions, { indent: false });
92
92
  };
93
+ // Print the database provisioning message
94
+ export const logDbProvisioning = function ({ logs, branch, context }) {
95
+ log(logs, `Provisioning database`);
96
+ if (context !== 'production') {
97
+ log(logs, `Creating database branch for ${THEME.highlightWords(branch)}`);
98
+ }
99
+ };
100
+ // Print the list of database migrations about to be copied
101
+ export const logDbMigrations = function ({ logs, migrations, srcDir }) {
102
+ if (migrations.length === 0) {
103
+ log(logs, `No migrations found in ${THEME.highlightWords(srcDir)} directory`);
104
+ return;
105
+ }
106
+ log(logs, `Loading migrations from ${THEME.highlightWords(srcDir)} directory:`);
107
+ logArray(logs, migrations, { indent: false });
108
+ };
93
109
  const logModulesWithDynamicImports = ({ logs, modulesWithDynamicImports }) => {
94
110
  const externalNodeModules = modulesWithDynamicImports.map((moduleName) => `"${moduleName}"`).join(', ');
95
111
  logWarningSubHeader(logs, `The following Node.js modules use dynamic expressions to include files:`);
@@ -1,5 +1,7 @@
1
1
  import { join } from 'node:path';
2
+ import { logDbProvisioning, logDbMigrations } from '../../log/messages/core_steps.js';
2
3
  import { getPackageJson } from '../../utils/package.js';
4
+ import { readMigrationEntries, getMigrationNames } from './utils.js';
3
5
  const NPM_PACKAGE_NAME = '@netlify/db';
4
6
  const condition = async ({ buildDir, packagePath, featureFlags }) => {
5
7
  if (!featureFlags?.netlify_build_db_setup) {
@@ -17,8 +19,14 @@ const condition = async ({ buildDir, packagePath, featureFlags }) => {
17
19
  }
18
20
  return false;
19
21
  };
20
- const coreStep = async ({ api, branch, constants, context }) => {
22
+ const coreStep = async ({ api, branch, buildDir, constants, context, logs }) => {
21
23
  const siteId = constants.SITE_ID;
24
+ logDbProvisioning({ logs, branch, context });
25
+ const entries = await readMigrationEntries(buildDir, constants.DB_MIGRATIONS_SRC);
26
+ const migrationNames = getMigrationNames(entries);
27
+ if (migrationNames.length > 0) {
28
+ logDbMigrations({ logs, migrations: migrationNames, srcDir: constants.DB_MIGRATIONS_SRC });
29
+ }
22
30
  // @ts-expect-error This is an internal method for now so it isn't typed yet.
23
31
  // eslint-disable-next-line @typescript-eslint/no-unsafe-call
24
32
  const database = (await api.createSiteDatabase({ site_id: siteId }));
@@ -44,6 +52,6 @@ export const dbSetup = {
44
52
  coreStep,
45
53
  coreStepId: 'db_provision',
46
54
  coreStepName: 'Netlify DB setup',
47
- coreStepDescription: () => 'Setup Netlify DB database',
55
+ coreStepDescription: () => 'Netlify DB setup',
48
56
  condition,
49
57
  };
@@ -1,6 +1,7 @@
1
- import { copyFile, mkdir, readdir, stat } from 'node:fs/promises';
1
+ import { copyFile, mkdir } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
3
  import { pathExists } from 'path-exists';
4
+ import { readMigrationEntries } from './utils.js';
4
5
  import { validateMigrations, formatValidationErrors } from './validation.js';
5
6
  const condition = async ({ featureFlags, constants, buildDir }) => {
6
7
  if (!featureFlags?.netlify_build_db_setup) {
@@ -15,18 +16,7 @@ const condition = async ({ featureFlags, constants, buildDir }) => {
15
16
  const coreStep = async ({ constants, buildDir, systemLog }) => {
16
17
  const srcDir = resolve(buildDir, constants.DB_MIGRATIONS_SRC);
17
18
  const destDir = resolve(buildDir, constants.DB_MIGRATIONS_DIST);
18
- const entries = await readdir(srcDir);
19
- const dirNames = [];
20
- const fileNames = [];
21
- for (const entry of entries) {
22
- const entryStat = await stat(join(srcDir, entry));
23
- if (entryStat.isDirectory()) {
24
- dirNames.push(entry);
25
- }
26
- else if (entry.endsWith('.sql')) {
27
- fileNames.push(entry);
28
- }
29
- }
19
+ const { dirNames, fileNames } = await readMigrationEntries(buildDir, constants.DB_MIGRATIONS_SRC);
30
20
  if (dirNames.length === 0 && fileNames.length === 0) {
31
21
  systemLog('No migration directories found, skipping copy.');
32
22
  return {};
@@ -65,4 +55,5 @@ export const copyDbMigrations = {
65
55
  coreStepName: 'Netlify DB migrations',
66
56
  coreStepDescription: () => 'Copy database migrations to internal directory',
67
57
  condition,
58
+ quiet: true,
68
59
  };
@@ -0,0 +1,6 @@
1
+ export interface MigrationEntries {
2
+ dirNames: string[];
3
+ fileNames: string[];
4
+ }
5
+ export declare const readMigrationEntries: (buildDir: string, migrationsSrc?: string) => Promise<MigrationEntries>;
6
+ export declare const getMigrationNames: ({ dirNames, fileNames }: MigrationEntries) => string[];
@@ -0,0 +1,30 @@
1
+ import { readdir, stat } from 'node:fs/promises';
2
+ import { join, resolve } from 'node:path';
3
+ import { pathExists } from 'path-exists';
4
+ export const readMigrationEntries = async (buildDir, migrationsSrc) => {
5
+ const empty = { dirNames: [], fileNames: [] };
6
+ if (!migrationsSrc) {
7
+ return empty;
8
+ }
9
+ const srcDir = resolve(buildDir, migrationsSrc);
10
+ if (!(await pathExists(srcDir))) {
11
+ return empty;
12
+ }
13
+ const entries = await readdir(srcDir);
14
+ const dirNames = [];
15
+ const fileNames = [];
16
+ for (const entry of entries) {
17
+ const entryStat = await stat(join(srcDir, entry));
18
+ if (entryStat.isDirectory()) {
19
+ dirNames.push(entry);
20
+ }
21
+ else if (entry.endsWith('.sql')) {
22
+ fileNames.push(entry);
23
+ }
24
+ }
25
+ return { dirNames, fileNames };
26
+ };
27
+ export const getMigrationNames = ({ dirNames, fileNames }) => [
28
+ ...dirNames,
29
+ ...fileNames.map((f) => f.replace(/\.sql$/, '')),
30
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netlify/build",
3
- "version": "35.10.1",
3
+ "version": "35.11.0",
4
4
  "description": "Netlify build module",
5
5
  "type": "module",
6
6
  "exports": "./lib/index.js",
@@ -70,7 +70,7 @@
70
70
  "@netlify/blobs": "^10.4.4",
71
71
  "@netlify/cache-utils": "^6.0.5",
72
72
  "@netlify/config": "^24.4.4",
73
- "@netlify/edge-bundler": "14.9.18",
73
+ "@netlify/edge-bundler": "14.9.19",
74
74
  "@netlify/functions-utils": "^6.2.27",
75
75
  "@netlify/git-utils": "^6.0.4",
76
76
  "@netlify/opentelemetry-utils": "^2.0.2",
@@ -152,5 +152,5 @@
152
152
  "engines": {
153
153
  "node": ">=18.14.0"
154
154
  },
155
- "gitHead": "d215694819e87e39ff42e863ed05124f5fd3da98"
155
+ "gitHead": "3694352be4959c56e96a6c15dd04ed4d7aa31344"
156
156
  }