diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 7ceed1ec1f68bff20607ef2cd9344c0ea775a0ea..693fc4803d2da9768b0f564c1f27020a94988d55 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -122,7 +122,12 @@ export default async function build(dir: string, conf = null): Promise { let backgroundWork: (Promise | undefined)[] = [] backgroundWork.push( - telemetry.record(eventVersion({ cliCommand: 'build' })), + telemetry.record( + eventVersion({ + cliCommand: 'build', + isSrcDir: path.relative(dir, pagesDir!).startsWith('src'), + }) + ), eventNextPlugins(path.resolve(dir)).then(events => telemetry.record(events)) ) diff --git a/packages/next/export/index.ts b/packages/next/export/index.ts index 6205d11d071c2349bc6a5ded915076fc6b5375e0..dba1116a3f3d1c7091c1ea8f86e81d852d94be99 100644 --- a/packages/next/export/index.ts +++ b/packages/next/export/index.ts @@ -95,7 +95,7 @@ export default async function( const distDir = join(dir, nextConfig.distDir) if (!options.buildExport) { const telemetry = new Telemetry({ distDir }) - telemetry.record(eventVersion({ cliCommand: 'export' })) + telemetry.record(eventVersion({ cliCommand: 'export', isSrcDir: null })) } const subFolders = nextConfig.exportTrailingSlash diff --git a/packages/next/server/next-dev-server.ts b/packages/next/server/next-dev-server.ts index fd0c142b2545d17914d5916ba7b2773a4ef1f76c..5e715d19c25d7c296878cb5e0e993090ea2353ee 100644 --- a/packages/next/server/next-dev-server.ts +++ b/packages/next/server/next-dev-server.ts @@ -207,7 +207,12 @@ export default class DevServer extends Server { this.setDevReady!() const telemetry = new Telemetry({ distDir: this.distDir }) - telemetry.record(eventVersion({ cliCommand: 'dev' })) + telemetry.record( + eventVersion({ + cliCommand: 'dev', + isSrcDir: relative(this.dir, this.pagesDir!).startsWith('src'), + }) + ) } protected async close() { diff --git a/packages/next/telemetry/events/version.ts b/packages/next/telemetry/events/version.ts index e8490af39180af73c772825d65e6638939cd518c..843de93c04e70fae37335f2e26eed96326e8d3ca 100644 --- a/packages/next/telemetry/events/version.ts +++ b/packages/next/telemetry/events/version.ts @@ -4,6 +4,7 @@ type EventCliSessionStarted = { nextVersion: string nodeVersion: string cliCommand: string + isSrcDir: boolean | null } export function eventVersion( @@ -21,6 +22,7 @@ export function eventVersion( nextVersion: process.env.__NEXT_VERSION, nodeVersion: process.version, cliCommand: event.cliCommand, + isSrcDir: event.isSrcDir, } as EventCliSessionStarted, }, ] diff --git a/test/integration/telemetry/test/index.test.js b/test/integration/telemetry/test/index.test.js index 55f5fb97bbe991a289253066bd0695084d22a35c..97aef449a36d33eaf3ec55881f07cee9a2695c6a 100644 --- a/test/integration/telemetry/test/index.test.js +++ b/test/integration/telemetry/test/index.test.js @@ -1,9 +1,19 @@ /* eslint-env jest */ /* global jasmine */ -import { runNextCommand } from 'next-test-utils' +import path from 'path' +import fs from 'fs-extra' +import { + runNextCommand, + launchApp, + findPort, + killApp, + waitFor +} from 'next-test-utils' jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 +const appDir = path.join(__dirname, '..') + describe('Telemetry CLI', () => { it('can print telemetry status', async () => { const { stdout } = await runNextCommand(['telemetry'], { @@ -59,4 +69,60 @@ describe('Telemetry CLI', () => { expect(stdout).toMatch(/already disabled/) expect(stdout).toMatch(/Status: Disabled/) }) + + it('detects isSrcDir dir correctly for `next build`', async () => { + const { stderr } = await runNextCommand(['build', appDir], { + stderr: true, + env: { + NEXT_TELEMETRY_DEBUG: 1 + } + }) + + expect(stderr).toMatch(/isSrcDir.*?false/) + + await fs.move(path.join(appDir, 'pages'), path.join(appDir, 'src/pages')) + const { stderr: stderr2 } = await runNextCommand(['build', appDir], { + stderr: true, + env: { + NEXT_TELEMETRY_DEBUG: 1 + } + }) + await fs.move(path.join(appDir, 'src/pages'), path.join(appDir, 'pages')) + + expect(stderr2).toMatch(/isSrcDir.*?true/) + }) + + it('detects isSrcDir dir correctly for `next dev`', async () => { + let port = await findPort() + let stderr = '' + + const handleStderr = msg => { + stderr += msg + } + let app = await launchApp(appDir, port, { + onStderr: handleStderr, + env: { + NEXT_TELEMETRY_DEBUG: 1 + } + }) + await waitFor(1000) + await killApp(app) + expect(stderr).toMatch(/isSrcDir.*?false/) + + await fs.move(path.join(appDir, 'pages'), path.join(appDir, 'src/pages')) + stderr = '' + + port = await findPort() + app = await launchApp(appDir, port, { + onStderr: handleStderr, + env: { + NEXT_TELEMETRY_DEBUG: 1 + } + }) + await waitFor(1000) + await killApp(app) + await fs.move(path.join(appDir, 'src/pages'), path.join(appDir, 'pages')) + + expect(stderr).toMatch(/isSrcDir.*?true/) + }) })