From d355cb18d0cc6b2ea344a3cf7542d9e5a1a06476 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 8 Nov 2023 18:44:15 +0100 Subject: [PATCH 1/2] fix: validate publish dir in buildbot --- src/helpers/fixOutputDir.js | 28 ++++++++++++++++++++++++++++ src/helpers/setUpEdgeFunction.js | 17 +++++++++++------ src/index.js | 15 ++++++++++----- 3 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 src/helpers/fixOutputDir.js diff --git a/src/helpers/fixOutputDir.js b/src/helpers/fixOutputDir.js new file mode 100644 index 00000000..ce257ec9 --- /dev/null +++ b/src/helpers/fixOutputDir.js @@ -0,0 +1,28 @@ +const { join } = require('path') +const process = require('process') + +const getAngularJson = require('./getAngularJson') +const { getProject } = require('./setUpEdgeFunction') + +const fixOutputDir = async function ({ failBuild, siteRoot, PUBLISH_DIR, netlifyConfig }) { + const isBuildbot = process.env.CI + + const angularJson = getAngularJson({ failBuild, siteRoot }) + const project = getProject(angularJson) + + const { outputPath } = project.architect.build.options + + const correctPublishDir = join(outputPath, 'browser') + if (correctPublishDir === PUBLISH_DIR) { + return + } + + if (isBuildbot) { + failBuild(`Publish directory is configured incorrectly. Please set it to "${correctPublishDir}".`) + } else { + console.warn(`Publish directory is configured incorrectly. Updating to "${correctPublishDir}".`) + netlifyConfig.build.publish = correctPublishDir + } +} + +module.exports = fixOutputDir diff --git a/src/helpers/setUpEdgeFunction.js b/src/helpers/setUpEdgeFunction.js index 7f9137db..33cf8fc5 100644 --- a/src/helpers/setUpEdgeFunction.js +++ b/src/helpers/setUpEdgeFunction.js @@ -20,8 +20,15 @@ const getAllFilesIn = (dir) => const toPosix = (path) => path.split(sep).join(posix.sep) -const setUpEdgeFunction = async ({ angularJson, projectName, netlifyConfig, constants, failBuild }) => { - const project = angularJson.projects[projectName] +const getProject = (angularJson) => { + const projectName = angularJson.defaultProject ?? Object.keys(angularJson.projects)[0] + return angularJson.projects[projectName] +} + +module.exports.getProject = getProject + +const setUpEdgeFunction = async ({ angularJson, constants, failBuild }) => { + const project = getProject(angularJson) const { architect: { build }, } = project @@ -30,15 +37,13 @@ const setUpEdgeFunction = async ({ angularJson, projectName, netlifyConfig, cons return failBuild('Could not find build output directory') } - netlifyConfig.build.publish = join(outputDir, 'browser') - const serverDistRoot = join(outputDir, 'server') if (!existsSync(serverDistRoot)) { console.log('No server output generated, skipping SSR setup.') return } - console.log(`Writing Angular SSR Edge Function for project "${projectName}" ...`) + console.log(`Writing Angular SSR Edge Function ...`) const edgeFunctionDir = join(constants.INTERNAL_EDGE_FUNCTIONS_SRC, 'angular-ssr') await mkdir(edgeFunctionDir, { recursive: true }) @@ -101,4 +106,4 @@ const setUpEdgeFunction = async ({ angularJson, projectName, netlifyConfig, cons await writeFile(join(edgeFunctionDir, 'angular-ssr.mjs'), ssrFunction) } -module.exports = setUpEdgeFunction +module.exports.setUpEdgeFunction = setUpEdgeFunction diff --git a/src/index.js b/src/index.js index 3db0b60e..b46be10b 100644 --- a/src/index.js +++ b/src/index.js @@ -2,9 +2,10 @@ const { rm } = require('fs/promises') const { join } = require('path') const ensureNoCompetingPlugin = require('./helpers/ensureNoCompetingPlugin') +const fixOutputDir = require('./helpers/fixOutputDir') const getAngularJson = require('./helpers/getAngularJson') const getAngularRoot = require('./helpers/getAngularRoot') -const setUpEdgeFunction = require('./helpers/setUpEdgeFunction') +const { setUpEdgeFunction } = require('./helpers/setUpEdgeFunction') const validateAngularVersion = require('./helpers/validateAngularVersion') let isValidAngularProject = true @@ -17,7 +18,7 @@ module.exports = { const edgeFunctionDir = join(constants.INTERNAL_EDGE_FUNCTIONS_SRC, 'angular-ssr') await rm(edgeFunctionDir, { recursive: true }) }, - async onPreBuild({ netlifyConfig, utils }) { + async onPreBuild({ netlifyConfig, utils, constants }) { const siteRoot = getAngularRoot({ netlifyConfig }) isValidAngularProject = await validateAngularVersion(siteRoot) if (!isValidAngularProject) { @@ -28,6 +29,13 @@ module.exports = { ensureNoCompetingPlugin(siteRoot, utils.build.failBuild) netlifyConfig.build.command ??= 'npm run build' + + await fixOutputDir({ + siteRoot, + failBuild: utils.build.failBuild, + PUBLISH_DIR: constants.PUBLISH_DIR, + netlifyConfig, + }) }, async onBuild({ utils, netlifyConfig, constants }) { if (!isValidAngularProject) { @@ -39,11 +47,8 @@ module.exports = { const siteRoot = getAngularRoot({ netlifyConfig }) const angularJson = getAngularJson({ failBuild, siteRoot }) - const projectName = angularJson.defaultProject ?? Object.keys(angularJson.projects)[0] - await setUpEdgeFunction({ angularJson, - projectName, constants, netlifyConfig, failBuild, From 90d2cd1e8ec7ca0eddea792b00f9629add5dfb2e Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 8 Nov 2023 19:10:53 +0100 Subject: [PATCH 2/2] refactor: use IS_LOCAL --- src/helpers/fixOutputDir.js | 11 ++++------- src/index.js | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/helpers/fixOutputDir.js b/src/helpers/fixOutputDir.js index ce257ec9..fced9195 100644 --- a/src/helpers/fixOutputDir.js +++ b/src/helpers/fixOutputDir.js @@ -1,12 +1,9 @@ const { join } = require('path') -const process = require('process') const getAngularJson = require('./getAngularJson') const { getProject } = require('./setUpEdgeFunction') -const fixOutputDir = async function ({ failBuild, siteRoot, PUBLISH_DIR, netlifyConfig }) { - const isBuildbot = process.env.CI - +const fixOutputDir = async function ({ failBuild, siteRoot, PUBLISH_DIR, IS_LOCAL, netlifyConfig }) { const angularJson = getAngularJson({ failBuild, siteRoot }) const project = getProject(angularJson) @@ -17,11 +14,11 @@ const fixOutputDir = async function ({ failBuild, siteRoot, PUBLISH_DIR, netlify return } - if (isBuildbot) { - failBuild(`Publish directory is configured incorrectly. Please set it to "${correctPublishDir}".`) - } else { + if (IS_LOCAL) { console.warn(`Publish directory is configured incorrectly. Updating to "${correctPublishDir}".`) netlifyConfig.build.publish = correctPublishDir + } else { + failBuild(`Publish directory is configured incorrectly. Please set it to "${correctPublishDir}".`) } } diff --git a/src/index.js b/src/index.js index b46be10b..7b4e8c35 100644 --- a/src/index.js +++ b/src/index.js @@ -34,6 +34,7 @@ module.exports = { siteRoot, failBuild: utils.build.failBuild, PUBLISH_DIR: constants.PUBLISH_DIR, + IS_LOCAL: constants.IS_LOCAL, netlifyConfig, }) },