From 793273e5d12788780402593f0e4438082597d6c8 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 28 Jan 2021 01:19:49 +0100 Subject: [PATCH 01/44] add size check --- apps/test-bundles/package.json | 1 + apps/test-bundles/webpack.config.js | 7 +++++-- apps/test-bundles/webpackUtils.js | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index d011681ba466d..b4b9cf713c9e1 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -16,6 +16,7 @@ "@fluentui/react": "^8.0.0-beta.43", "@fluentui/react-button": "^1.0.0-beta.23", "@fluentui/react-compose": "^1.0.0-beta.10", + "@fluentui/react-northstar": "^0.51.0", "@fluentui/scripts": "^1.0.0", "parallel-webpack": "^2.6.0", "webpack-bundle-analyzer": "^4.4.0", diff --git a/apps/test-bundles/webpack.config.js b/apps/test-bundles/webpack.config.js index 63b886d7f8712..06c4d2dee35f0 100644 --- a/apps/test-bundles/webpack.config.js +++ b/apps/test-bundles/webpack.config.js @@ -1,8 +1,11 @@ // @ts-check -const { createWebpackConfig, buildEntries, buildEntry } = require('./webpackUtils'); +const { createWebpackConfig, buildEntries, buildNorthstarEntries, buildEntry } = require('./webpackUtils'); // Create entries for all top level imports. -const entries = buildEntries('@fluentui/react'); +const entries = { + ...buildEntries('@fluentui/react'), + ...buildNorthstarEntries(), +}; // If/when we start working in react-next again, the bundle size tests should be set up like this // so that only the components directly within react-next are tested. // buildEntries( diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index a1a34527c38fe..10127c390f846 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -121,6 +121,23 @@ function buildEntries(packageName, entries = {}, includeStats = true, onlyOwnCom return entries; } +function buildNorthstarEntries(includeStats = true) { + const entries = {}; + const distPath = path.dirname(require.resolve('@fluentui/react-northstar').replace('commonjs', 'es')); + const componentsPath = path.resolve(distPath, 'components'); + fs.readdirSync(componentsPath).forEach(componentName => { + const isFolder = true; + if (isFolder) { + const entryPath = path.join(componentsPath, componentName, `${componentName}.js`); + entries[`fluentui-Northstar-${componentName}`] = { + entryPath, + includeStats, + }; + } + }); + return entries; +} + /** * Create entries for single top level import. */ @@ -135,4 +152,5 @@ module.exports = { createWebpackConfig, buildEntries, buildEntry, + buildNorthstarEntries, }; From aa6ff504abf3c5f9bba0c3906a97f1eeec870254 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 28 Jan 2021 15:20:57 +0100 Subject: [PATCH 02/44] Update apps/test-bundles/package.json Co-authored-by: Oleksandr Fediashov --- apps/test-bundles/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index b4b9cf713c9e1..215fcdf353b8d 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -16,7 +16,7 @@ "@fluentui/react": "^8.0.0-beta.43", "@fluentui/react-button": "^1.0.0-beta.23", "@fluentui/react-compose": "^1.0.0-beta.10", - "@fluentui/react-northstar": "^0.51.0", + "@fluentui/react-northstar": "^0.52.0", "@fluentui/scripts": "^1.0.0", "parallel-webpack": "^2.6.0", "webpack-bundle-analyzer": "^4.4.0", From ec0add76dc26a939026201de5d82b9fb8808b8f1 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 28 Jan 2021 15:21:03 +0100 Subject: [PATCH 03/44] Update apps/test-bundles/webpackUtils.js Co-authored-by: Oleksandr Fediashov --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 10127c390f846..facd35e1ad5f6 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -126,7 +126,7 @@ function buildNorthstarEntries(includeStats = true) { const distPath = path.dirname(require.resolve('@fluentui/react-northstar').replace('commonjs', 'es')); const componentsPath = path.resolve(distPath, 'components'); fs.readdirSync(componentsPath).forEach(componentName => { - const isFolder = true; + const isFolder = fs.statSync(path.join(componentsPath, componentName)).isDirectory(); if (isFolder) { const entryPath = path.join(componentsPath, componentName, `${componentName}.js`); entries[`fluentui-Northstar-${componentName}`] = { From 85fb92273fc0f90414b55722450022cad6fdde61 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Wed, 3 Feb 2021 09:11:45 +0100 Subject: [PATCH 04/44] Change the way how we bundle size --- apps/test-bundles/.gitignore | 1 + apps/test-bundles/package.json | 1 + apps/test-bundles/webpack.config.js | 14 ++-- apps/test-bundles/webpackUtils.js | 106 ++++++++++++++++------------ 4 files changed, 71 insertions(+), 51 deletions(-) create mode 100644 apps/test-bundles/.gitignore diff --git a/apps/test-bundles/.gitignore b/apps/test-bundles/.gitignore new file mode 100644 index 0000000000000..a2ded98bb7024 --- /dev/null +++ b/apps/test-bundles/.gitignore @@ -0,0 +1 @@ +fixtures/* diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index 5f051af05ccbe..e0fbf0abe7bfe 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -18,6 +18,7 @@ "@fluentui/react-compose": "^1.0.0-beta.11", "@fluentui/react-northstar": "^0.52.0", "@fluentui/scripts": "^1.0.0", + "mkdirp": "^0.5.1", "parallel-webpack": "^2.6.0", "webpack-bundle-analyzer": "^4.4.0", "terser-webpack-plugin": "^5.1.1" diff --git a/apps/test-bundles/webpack.config.js b/apps/test-bundles/webpack.config.js index 06c4d2dee35f0..9e925b2d85690 100644 --- a/apps/test-bundles/webpack.config.js +++ b/apps/test-bundles/webpack.config.js @@ -1,10 +1,17 @@ // @ts-check -const { createWebpackConfig, buildEntries, buildNorthstarEntries, buildEntry } = require('./webpackUtils'); +const { createWebpackConfig, createEntries, createEntry, buildEntries, buildEntry } = require('./webpackUtils'); + +// Create entries for all top level imports +createEntries('@fluentui/react-northstar', true); +createEntries('@fluentui/react', false); + +// Create entries for single top level import. +createEntry('@fluentui/react-compose'); +createEntry('@fluentui/keyboard-key'); -// Create entries for all top level imports. const entries = { ...buildEntries('@fluentui/react'), - ...buildNorthstarEntries(), + ...buildEntries('@fluentui/react-northstar'), }; // If/when we start working in react-next again, the bundle size tests should be set up like this // so that only the components directly within react-next are tested. @@ -15,7 +22,6 @@ const entries = { // true /* onlyOwnComponents */, // ); -// Create entries for single top level import. entries['react-compose'] = buildEntry('@fluentui/react-compose'); entries['keyboard-key'] = buildEntry('@fluentui/keyboard-key'); diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index facd35e1ad5f6..9566193685609 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -1,6 +1,7 @@ // @ts-check const path = require('path'); const fs = require('fs'); +const mkdirp = require('mkdirp'); const resources = require('@fluentui/scripts/webpack/webpack-resources'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const TerserPlugin = require('terser-webpack-plugin'); @@ -73,6 +74,47 @@ function createWebpackConfig(entries) { // Files which should not be considered top-level entries. const TopLevelEntryFileExclusions = ['index.js', 'version.js', 'index.bundle.js']; +function createEntries(packageName, isNorthstar) { + const replacePath = isNorthstar ? ['commonjs', 'es'] : ['lib-commonjs', 'lib']; + const distPath = path.dirname(require.resolve(packageName).replace(replacePath[0], replacePath[1])); + const packagePath = path.resolve(distPath, isNorthstar ? 'components' : ''); + fs.readdirSync(packagePath).forEach(itemName => { + const isFolder = fs.statSync(path.join(packagePath, itemName)).isDirectory(); + const isAllowedFile = itemName.match(/.js$/) && !TopLevelEntryFileExclusions.includes(itemName); + + if ((!isAllowedFile && !(isNorthstar && isFolder)) || !itemName) { + return; + } + + const item = isFolder ? itemName : itemName.replace(/.js$/, ''); + const importStatement = `import { ${item} } from '${packageName}'; console.log(${item})`; + try { + const folderName = getFolderName(packageName); + if (!fs.existsSync(`fixtures/${folderName}`)) { + mkdirp.sync(`fixtures/${folderName}`); + } + const entryPath = path.join('fixtures/', folderName, `${item}.js`); + fs.writeFileSync(entryPath, importStatement, 'utf-8'); + } catch (err) { + console.log(err); + } + }); +} + +function createEntry(packageName) { + try { + const importStatement = `import p from '${packageName}'; console.log(p)`; + const folderName = getFolderName(packageName); + if (!fs.existsSync(`fixtures/${folderName}`)) { + mkdirp.sync(`fixtures/${folderName}`); + } + const entryPath = path.join('fixtures/', folderName, 'index.js'); + fs.writeFileSync(entryPath, importStatement, 'utf-8'); + } catch (err) { + console.log(err); + } +} + /** * Build webpack entries based on top level imports available in a package. * @@ -86,71 +128,41 @@ const TopLevelEntryFileExclusions = ['index.js', 'version.js', 'index.bundle.js' * for components which are just re-exported. */ function buildEntries(packageName, entries = {}, includeStats = true, onlyOwnComponents = false) { - let packagePath = ''; - - try { - packagePath = path.dirname(require.resolve(packageName)).replace('lib-commonjs', 'lib'); - } catch (e) { - console.log(`The package "${packageName}" could not be resolved. Add it as a dependency to this project.`); - console.log(e); - return; - } + const folderName = getFolderName(packageName); + const packagePath = path.join('fixtures/', folderName); fs.readdirSync(packagePath).forEach(itemName => { - const isAllowedFile = - // is JS - itemName.match(/.js$/) && - // not excluded - !TopLevelEntryFileExclusions.includes(itemName) && - // if requested, has component implementation within this package (not re-export) - (!onlyOwnComponents || fs.existsSync(path.join(packagePath, 'components', itemName.replace('.js', '')))); - - if (isAllowedFile) { - const entryName = itemName.replace(/.js$/, ''); - - // Replace commonjs paths with lib paths. - const entryPath = path.join(packagePath, itemName); - - entries[`${packageName.replace('@', '').replace('/', '-')}-${entryName}`] = { - entryPath, - includeStats, - }; - } + const entryName = itemName.replace(/.js$/, ''); + const entryPath = path.resolve(path.join(packagePath, itemName)); + entries[`${packageName.replace('@', '').replace('/', '-')}-${entryName}`] = { + entryPath: entryPath, + includeStats, + }; }); return entries; } -function buildNorthstarEntries(includeStats = true) { - const entries = {}; - const distPath = path.dirname(require.resolve('@fluentui/react-northstar').replace('commonjs', 'es')); - const componentsPath = path.resolve(distPath, 'components'); - fs.readdirSync(componentsPath).forEach(componentName => { - const isFolder = fs.statSync(path.join(componentsPath, componentName)).isDirectory(); - if (isFolder) { - const entryPath = path.join(componentsPath, componentName, `${componentName}.js`); - entries[`fluentui-Northstar-${componentName}`] = { - entryPath, - includeStats, - }; - } - }); - return entries; -} - /** * Create entries for single top level import. */ function buildEntry(packageName, includeStats = true) { + const folderName = getFolderName(packageName); + const entryPath = path.resolve(path.join('fixtures/', folderName)); return { - entryPath: path.join(path.dirname(require.resolve(packageName)).replace('lib-commonjs', 'lib'), 'index.js'), + entryPath: `${entryPath}/index.js`, includeStats, }; } +function getFolderName(packageName) { + return packageName.replace('@fluentui/', ''); +} + module.exports = { createWebpackConfig, buildEntries, buildEntry, - buildNorthstarEntries, + createEntries, + createEntry, }; From 3c6269cc2f7c1b0760e24c6744daf96f27997fdb Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Wed, 3 Feb 2021 13:30:11 +0100 Subject: [PATCH 05/44] Add fs-extra + refactor --- apps/test-bundles/package.json | 2 +- apps/test-bundles/webpack.config.js | 14 +++++-- apps/test-bundles/webpackUtils.js | 64 +++++++++++++++++------------ 3 files changed, 50 insertions(+), 30 deletions(-) diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index e0fbf0abe7bfe..d5893a964ea18 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -18,7 +18,7 @@ "@fluentui/react-compose": "^1.0.0-beta.11", "@fluentui/react-northstar": "^0.52.0", "@fluentui/scripts": "^1.0.0", - "mkdirp": "^0.5.1", + "fs-extra": "^8.1.0", "parallel-webpack": "^2.6.0", "webpack-bundle-analyzer": "^4.4.0", "terser-webpack-plugin": "^5.1.1" diff --git a/apps/test-bundles/webpack.config.js b/apps/test-bundles/webpack.config.js index 9e925b2d85690..175f2e214d8f0 100644 --- a/apps/test-bundles/webpack.config.js +++ b/apps/test-bundles/webpack.config.js @@ -1,9 +1,16 @@ // @ts-check -const { createWebpackConfig, createEntries, createEntry, buildEntries, buildEntry } = require('./webpackUtils'); +const { + buildEntries, + buildEntry, + createWebpackConfig, + createFluentFixtures, + createFluentNorthstarFixtures, + createEntry, +} = require('./webpackUtils'); // Create entries for all top level imports -createEntries('@fluentui/react-northstar', true); -createEntries('@fluentui/react', false); +createFluentFixtures(); +createFluentNorthstarFixtures(); // Create entries for single top level import. createEntry('@fluentui/react-compose'); @@ -13,6 +20,7 @@ const entries = { ...buildEntries('@fluentui/react'), ...buildEntries('@fluentui/react-northstar'), }; + // If/when we start working in react-next again, the bundle size tests should be set up like this // so that only the components directly within react-next are tested. // buildEntries( diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 9566193685609..0ba1f1c6902eb 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -1,7 +1,6 @@ // @ts-check const path = require('path'); -const fs = require('fs'); -const mkdirp = require('mkdirp'); +const fs = require('fs-extra'); const resources = require('@fluentui/scripts/webpack/webpack-resources'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const TerserPlugin = require('terser-webpack-plugin'); @@ -74,29 +73,44 @@ function createWebpackConfig(entries) { // Files which should not be considered top-level entries. const TopLevelEntryFileExclusions = ['index.js', 'version.js', 'index.bundle.js']; -function createEntries(packageName, isNorthstar) { - const replacePath = isNorthstar ? ['commonjs', 'es'] : ['lib-commonjs', 'lib']; - const distPath = path.dirname(require.resolve(packageName).replace(replacePath[0], replacePath[1])); - const packagePath = path.resolve(distPath, isNorthstar ? 'components' : ''); +function createFluentNorthstarFixtures() { + const packageName = '@fluentui/react-northstar'; + const distPath = path.dirname(require.resolve(packageName).replace('commonjs', 'es')); + const packagePath = path.resolve(distPath, 'components'); fs.readdirSync(packagePath).forEach(itemName => { const isFolder = fs.statSync(path.join(packagePath, itemName)).isDirectory(); - const isAllowedFile = itemName.match(/.js$/) && !TopLevelEntryFileExclusions.includes(itemName); - if ((!isAllowedFile && !(isNorthstar && isFolder)) || !itemName) { - return; + if (isFolder && itemName) { + const importStatement = `import { ${itemName} } from '${packageName}'; console.log(${itemName})`; + try { + const folderName = getFolderName(packageName); + const entryPath = path.join('fixtures/', folderName, `${itemName}.js`); + fs.outputFileSync(entryPath, importStatement, 'utf-8'); + } catch (err) { + console.log(err); + } } + }); +} - const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import { ${item} } from '${packageName}'; console.log(${item})`; - try { - const folderName = getFolderName(packageName); - if (!fs.existsSync(`fixtures/${folderName}`)) { - mkdirp.sync(`fixtures/${folderName}`); +function createFluentFixtures() { + const packageName = '@fluentui/react'; + const distPath = path.dirname(require.resolve(packageName).replace('lib-commonjs', 'lib')); + const packagePath = path.resolve(distPath); + fs.readdirSync(packagePath).forEach(itemName => { + const isFolder = fs.statSync(path.join(packagePath, itemName)).isDirectory(); + const isAllowedFile = itemName && itemName.match(/.js$/) && !TopLevelEntryFileExclusions.includes(itemName); + + if (isAllowedFile && !isFolder) { + const item = isFolder ? itemName : itemName.replace(/.js$/, ''); + const importStatement = `import { ${item} } from '${packageName}'; console.log(${item})`; + try { + const folderName = getFolderName(packageName); + const entryPath = path.join('fixtures/', folderName, `${item}.js`); + fs.outputFileSync(entryPath, importStatement, 'utf-8'); + } catch (err) { + console.log(err); } - const entryPath = path.join('fixtures/', folderName, `${item}.js`); - fs.writeFileSync(entryPath, importStatement, 'utf-8'); - } catch (err) { - console.log(err); } }); } @@ -105,11 +119,8 @@ function createEntry(packageName) { try { const importStatement = `import p from '${packageName}'; console.log(p)`; const folderName = getFolderName(packageName); - if (!fs.existsSync(`fixtures/${folderName}`)) { - mkdirp.sync(`fixtures/${folderName}`); - } const entryPath = path.join('fixtures/', folderName, 'index.js'); - fs.writeFileSync(entryPath, importStatement, 'utf-8'); + fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); } @@ -144,7 +155,7 @@ function buildEntries(packageName, entries = {}, includeStats = true, onlyOwnCom } /** - * Create entries for single top level import. + * Build entries for single top level import. */ function buildEntry(packageName, includeStats = true) { const folderName = getFolderName(packageName); @@ -160,9 +171,10 @@ function getFolderName(packageName) { } module.exports = { - createWebpackConfig, buildEntries, buildEntry, - createEntries, + createFluentFixtures, + createFluentNorthstarFixtures, createEntry, + createWebpackConfig, }; From 169de6ac7adabf7a96b80ca4fc6256d6c4ffcd4f Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 4 Feb 2021 13:28:38 +0100 Subject: [PATCH 06/44] Add new job in pipeline --- apps/test-bundles/package.json | 2 -- apps/test-bundles/webpack.config.js | 28 +++++++++--------- azure-pipelines.bundlesize.yml | 45 +++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index d5893a964ea18..dba357a3f6962 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -13,10 +13,8 @@ "dependencies": { "@fluentui/eslint-plugin": "^1.0.0-beta.1", "@fluentui/keyboard-key": "^0.2.13-0", - "@fluentui/react": "^8.0.0-beta.45", "@fluentui/react-button": "^1.0.0-beta.24", "@fluentui/react-compose": "^1.0.0-beta.11", - "@fluentui/react-northstar": "^0.52.0", "@fluentui/scripts": "^1.0.0", "fs-extra": "^8.1.0", "parallel-webpack": "^2.6.0", diff --git a/apps/test-bundles/webpack.config.js b/apps/test-bundles/webpack.config.js index 175f2e214d8f0..39feed5f00ba1 100644 --- a/apps/test-bundles/webpack.config.js +++ b/apps/test-bundles/webpack.config.js @@ -8,18 +8,23 @@ const { createEntry, } = require('./webpackUtils'); -// Create entries for all top level imports -createFluentFixtures(); -createFluentNorthstarFixtures(); +const package = process.env.PACKAGE; -// Create entries for single top level import. -createEntry('@fluentui/react-compose'); -createEntry('@fluentui/keyboard-key'); +let entries; +if (package === '@fluentui/react-northstar') { + createFluentNorthstarFixtures(); + entries = buildEntries('@fluentui/react-northstar'); +} else { + createFluentFixtures(); -const entries = { - ...buildEntries('@fluentui/react'), - ...buildEntries('@fluentui/react-northstar'), -}; + // Create entries for single top level import. + createEntry('@fluentui/react-compose'); + createEntry('@fluentui/keyboard-key'); + + entries = buildEntries('@fluentui/react'); + entries['react-compose'] = buildEntry('@fluentui/react-compose'); + entries['keyboard-key'] = buildEntry('@fluentui/keyboard-key'); +} // If/when we start working in react-next again, the bundle size tests should be set up like this // so that only the components directly within react-next are tested. @@ -30,7 +35,4 @@ const entries = { // true /* onlyOwnComponents */, // ); -entries['react-compose'] = buildEntry('@fluentui/react-compose'); -entries['keyboard-key'] = buildEntry('@fluentui/keyboard-key'); - module.exports = createWebpackConfig(entries); diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 23cd417f97aff..0bf0eaf1db101 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -5,7 +5,7 @@ trigger: - master jobs: - - job: build + - job: build-react timeoutInMinutes: 75 pool: vmImage: 'windows-2019' @@ -18,10 +18,10 @@ jobs: - script: npx midgard-yarn install displayName: yarn - - script: yarn build --to test-bundles --no-cache - displayName: yarn build to test-bundles + - script: yarn build --to @fluentui/react @fluentui/react-button @fluentui/react-compose --no-cache + displayName: yarn build to @fluentui/react - - script: yarn workspace test-bundles bundle:size + - script: PACKAGE=@fluentui/react yarn workspace test-bundles bundle:size displayName: yarn bundle test-bundles - script: yarn bundlesizecollect @@ -31,12 +31,47 @@ jobs: displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' + ArtifactName: bundlesizes-react - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact dist folder upon build for debug' inputs: PathtoPublish: 'apps/test-bundles/dist' - ArtifactName: distdrop + ArtifactName: distdrop-react + + - job: build-northstar + timeoutInMinutes: 75 + pool: + vmImage: 'windows-2019' + steps: + - task: NodeTool@0 + inputs: + versionSpec: '12.x' + displayName: 'Install Node.js' + + - script: npx midgard-yarn install + displayName: yarn + + - script: yarn build --to @fluentui/react-northstar --no-cache + displayName: yarn build to @fluentui/react-northstar + + - script: PACKAGE=@fluentui/react-northstar yarn workspace test-bundles bundle:size + displayName: yarn bundle test-bundles + + - script: yarn bundlesizecollect + displayName: 'Collate Bundle Size Information' + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' + inputs: + PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' + ArtifactName: bundlesizes-northstar + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact dist folder upon build for debug' + inputs: + PathtoPublish: 'apps/test-bundles/dist' + ArtifactName: distdrop-northstar - job: lightrail pool: server From ad3b020414bd835a9a8b1fbf622dd72064b0de08 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 8 Feb 2021 16:52:12 +0100 Subject: [PATCH 07/44] Merge json to single file --- azure-pipelines.bundlesize.yml | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 0bf0eaf1db101..4edc96586ae4b 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -21,8 +21,10 @@ jobs: - script: yarn build --to @fluentui/react @fluentui/react-button @fluentui/react-compose --no-cache displayName: yarn build to @fluentui/react - - script: PACKAGE=@fluentui/react yarn workspace test-bundles bundle:size + - script: yarn workspace test-bundles bundle:size displayName: yarn bundle test-bundles + env: + PACKAGE: @fluentui/react - script: yarn bundlesizecollect displayName: 'Collate Bundle Size Information' @@ -55,8 +57,10 @@ jobs: - script: yarn build --to @fluentui/react-northstar --no-cache displayName: yarn build to @fluentui/react-northstar - - script: PACKAGE=@fluentui/react-northstar yarn workspace test-bundles bundle:size + - script: yarn workspace test-bundles bundle:size displayName: yarn bundle test-bundles + env: + PACKAGE: @fluentui/react-northstar - script: yarn bundlesizecollect displayName: 'Collate Bundle Size Information' @@ -75,8 +79,28 @@ jobs: - job: lightrail pool: server - dependsOn: build + dependsOn: + - build-react + - build-northstar steps: + - task: DownloadPipelineArtifact@2 + displayName: 'Download Pipeline Artifact Fabric' + inputs: + artifactName: 'bundlesizes-react' + targetPath: '$(Build.ArtifactStagingDirectory)/react' + + - task: DownloadPipelineArtifact@2 + displayName: 'Download Pipeline Artifact N*' + inputs: + artifactName: 'bundlesizes-northstar' + targetPath: '$(Build.ArtifactStagingDirectory)/react-northstar' + + - script: 'chocolatey install jq' + displayName: 'Install jq' + + - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json $(Build.ArtifactStagingDirectory)/bundlesize.json" + displayName: 'Merge fabric and react-northstar to bundlesize.json' + - task: odefun.odsp-lightrail-tasks-partner.odsp-lightrail-tasks-SizeAuditorWorker.SizeAuditorWorker@0 displayName: 'Size Auditor Check on LightRail' inputs: From efc9b572a15f0a86e6e45cb2165989981e4f7908 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 8 Feb 2021 17:25:14 +0100 Subject: [PATCH 08/44] Separate the merge job --- azure-pipelines.bundlesize.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 4edc96586ae4b..27ded41efdfc0 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -77,12 +77,14 @@ jobs: PathtoPublish: 'apps/test-bundles/dist' ArtifactName: distdrop-northstar - - job: lightrail - pool: server + - job: merge + pool: + vmImage: 'windows-2019' dependsOn: - build-react - build-northstar steps: + - task: - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact Fabric' inputs: @@ -101,6 +103,17 @@ jobs: - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json $(Build.ArtifactStagingDirectory)/bundlesize.json" displayName: 'Merge fabric and react-northstar to bundlesize.json' + - task: PublishBuildArtifacts@1 + displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesize.json' + ArtifactName: bundlesize + + - job: lightrail + pool: server + dependsOn: + - merge + steps: - task: odefun.odsp-lightrail-tasks-partner.odsp-lightrail-tasks-SizeAuditorWorker.SizeAuditorWorker@0 displayName: 'Size Auditor Check on LightRail' inputs: From ecbb0097063f385ad2c887d8dfa52ce6de2fc4b4 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 8 Feb 2021 17:37:03 +0100 Subject: [PATCH 09/44] add file path --- azure-pipelines.bundlesize.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 27ded41efdfc0..6e9de0354bf4b 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -84,7 +84,6 @@ jobs: - build-react - build-northstar steps: - - task: - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact Fabric' inputs: @@ -104,10 +103,12 @@ jobs: displayName: 'Merge fabric and react-northstar to bundlesize.json' - task: PublishBuildArtifacts@1 - displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' + displayName: 'Publish Merged Bundle Size information' inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesize.json' + PathtoPublish: '$(Build.ArtifactStagingDirectory)/merge/bundlesize.json' ArtifactName: bundlesize + publishLocation: FilePath + TargetPath: '$(Build.ArtifactStagingDirectory)/bundlesize.json' - job: lightrail pool: server From 86f7b959a2f1de17d28e47984b57a15917cf8525 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 8 Feb 2021 17:42:17 +0100 Subject: [PATCH 10/44] Fix script merge --- azure-pipelines.bundlesize.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 6e9de0354bf4b..7234e48836519 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -99,7 +99,7 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json $(Build.ArtifactStagingDirectory)/bundlesize.json" + - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesize.json" displayName: 'Merge fabric and react-northstar to bundlesize.json' - task: PublishBuildArtifacts@1 From aebcdb1275c0235f259bdb452bccfcd4f67bd916 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 10:18:46 +0100 Subject: [PATCH 11/44] Refactor code --- apps/test-bundles/.gitignore | 1 - apps/test-bundles/webpack.config.js | 19 +++++-------------- apps/test-bundles/webpackUtils.js | 19 ++++++++----------- azure-pipelines.bundlesize.yml | 4 ++-- 4 files changed, 15 insertions(+), 28 deletions(-) delete mode 100644 apps/test-bundles/.gitignore diff --git a/apps/test-bundles/.gitignore b/apps/test-bundles/.gitignore deleted file mode 100644 index a2ded98bb7024..0000000000000 --- a/apps/test-bundles/.gitignore +++ /dev/null @@ -1 +0,0 @@ -fixtures/* diff --git a/apps/test-bundles/webpack.config.js b/apps/test-bundles/webpack.config.js index 39feed5f00ba1..8c6803023c984 100644 --- a/apps/test-bundles/webpack.config.js +++ b/apps/test-bundles/webpack.config.js @@ -3,8 +3,8 @@ const { buildEntries, buildEntry, createWebpackConfig, - createFluentFixtures, createFluentNorthstarFixtures, + createFluentReactFixtures, createEntry, } = require('./webpackUtils'); @@ -14,25 +14,16 @@ let entries; if (package === '@fluentui/react-northstar') { createFluentNorthstarFixtures(); entries = buildEntries('@fluentui/react-northstar'); -} else { - createFluentFixtures(); - - // Create entries for single top level import. +} else if (package === '@fluentui/react') { + createFluentReactFixtures(); createEntry('@fluentui/react-compose'); createEntry('@fluentui/keyboard-key'); entries = buildEntries('@fluentui/react'); entries['react-compose'] = buildEntry('@fluentui/react-compose'); entries['keyboard-key'] = buildEntry('@fluentui/keyboard-key'); +} else { + process.exit(1); } -// If/when we start working in react-next again, the bundle size tests should be set up like this -// so that only the components directly within react-next are tested. -// buildEntries( -// '@fluentui/react-next', -// entries, -// false /* do not include stats for better performance. */, -// true /* onlyOwnComponents */, -// ); - module.exports = createWebpackConfig(entries); diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 0ba1f1c6902eb..a6f4479157d83 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -84,7 +84,7 @@ function createFluentNorthstarFixtures() { const importStatement = `import { ${itemName} } from '${packageName}'; console.log(${itemName})`; try { const folderName = getFolderName(packageName); - const entryPath = path.join('fixtures/', folderName, `${itemName}.js`); + const entryPath = path.join('temp/fixtures/', folderName, `${itemName}.js`); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -93,7 +93,7 @@ function createFluentNorthstarFixtures() { }); } -function createFluentFixtures() { +function createFluentReactFixtures() { const packageName = '@fluentui/react'; const distPath = path.dirname(require.resolve(packageName).replace('lib-commonjs', 'lib')); const packagePath = path.resolve(distPath); @@ -106,7 +106,7 @@ function createFluentFixtures() { const importStatement = `import { ${item} } from '${packageName}'; console.log(${item})`; try { const folderName = getFolderName(packageName); - const entryPath = path.join('fixtures/', folderName, `${item}.js`); + const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -119,7 +119,7 @@ function createEntry(packageName) { try { const importStatement = `import p from '${packageName}'; console.log(p)`; const folderName = getFolderName(packageName); - const entryPath = path.join('fixtures/', folderName, 'index.js'); + const entryPath = path.join('temp/fixtures/', folderName, 'index.js'); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -134,13 +134,10 @@ function createEntry(packageName) { * and therefore slowing down CI significantly, setting this to true to avoid stats generation. * If bundle size is changed unexpectedly, developers can drill down deeper on the problem by * locally running bundle tests. - * @param {boolean} [onlyOwnComponents] - If true, only run the tests for an entry point file if it - * has a corresponding folder under `lib/components`. This eliminates duplicate bundle size tests - * for components which are just re-exported. */ -function buildEntries(packageName, entries = {}, includeStats = true, onlyOwnComponents = false) { +function buildEntries(packageName, entries = {}, includeStats = true) { const folderName = getFolderName(packageName); - const packagePath = path.join('fixtures/', folderName); + const packagePath = path.join('temp/fixtures/', folderName); fs.readdirSync(packagePath).forEach(itemName => { const entryName = itemName.replace(/.js$/, ''); @@ -159,7 +156,7 @@ function buildEntries(packageName, entries = {}, includeStats = true, onlyOwnCom */ function buildEntry(packageName, includeStats = true) { const folderName = getFolderName(packageName); - const entryPath = path.resolve(path.join('fixtures/', folderName)); + const entryPath = path.resolve(path.join('temp/fixtures/', folderName)); return { entryPath: `${entryPath}/index.js`, includeStats, @@ -173,7 +170,7 @@ function getFolderName(packageName) { module.exports = { buildEntries, buildEntry, - createFluentFixtures, + createFluentReactFixtures, createFluentNorthstarFixtures, createEntry, createWebpackConfig, diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 7234e48836519..aa3aa8446e956 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -85,7 +85,7 @@ jobs: - build-northstar steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download Pipeline Artifact Fabric' + displayName: 'Download Pipeline Artifact React' inputs: artifactName: 'bundlesizes-react' targetPath: '$(Build.ArtifactStagingDirectory)/react' @@ -100,7 +100,7 @@ jobs: displayName: 'Install jq' - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesize.json" - displayName: 'Merge fabric and react-northstar to bundlesize.json' + displayName: 'Merge React and React-Northstar to bundlesize.json' - task: PublishBuildArtifacts@1 displayName: 'Publish Merged Bundle Size information' From 2a551b3a9f667dba7a92d5fd17576aabf219a25c Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 12:22:59 +0100 Subject: [PATCH 12/44] Remove packages and build them in pipeline --- apps/test-bundles/package.json | 3 --- azure-pipelines.bundlesize.yml | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/test-bundles/package.json b/apps/test-bundles/package.json index dba357a3f6962..ee31dbb3e3266 100644 --- a/apps/test-bundles/package.json +++ b/apps/test-bundles/package.json @@ -12,9 +12,6 @@ }, "dependencies": { "@fluentui/eslint-plugin": "^1.0.0-beta.1", - "@fluentui/keyboard-key": "^0.2.13-0", - "@fluentui/react-button": "^1.0.0-beta.24", - "@fluentui/react-compose": "^1.0.0-beta.11", "@fluentui/scripts": "^1.0.0", "fs-extra": "^8.1.0", "parallel-webpack": "^2.6.0", diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index aa3aa8446e956..334d4ab777d41 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -18,7 +18,7 @@ jobs: - script: npx midgard-yarn install displayName: yarn - - script: yarn build --to @fluentui/react @fluentui/react-button @fluentui/react-compose --no-cache + - script: yarn build --to @fluentui/react @fluentui/react-button @fluentui/react-compose @fluentui/keyboard-key --no-cache displayName: yarn build to @fluentui/react - script: yarn workspace test-bundles bundle:size From aaca8d173dd50c6584995969aa72884d5f8bc701 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 13:50:14 +0100 Subject: [PATCH 13/44] fix environment in pipeline --- azure-pipelines.bundlesize.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index a941322144e4b..95c2ef9f26998 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -21,7 +21,7 @@ jobs: - script: yarn workspace test-bundles bundle:size displayName: yarn bundle test-bundles env: - PACKAGE: @fluentui/react + PACKAGE: '@fluentui/react' - script: yarn bundlesizecollect displayName: 'Collate Bundle Size Information' @@ -57,7 +57,7 @@ jobs: - script: yarn workspace test-bundles bundle:size displayName: yarn bundle test-bundles env: - PACKAGE: @fluentui/react-northstar + PACKAGE: '@fluentui/react-northstar' - script: yarn bundlesizecollect displayName: 'Collate Bundle Size Information' From 5537d5a26073d1d0c0360faaaa8f2d8fd5df6d82 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 14:42:36 +0100 Subject: [PATCH 14/44] add comment to create fixtures --- apps/test-bundles/webpackUtils.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index a6f4479157d83..8302a99c01b69 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -70,9 +70,12 @@ function createWebpackConfig(entries) { }); } -// Files which should not be considered top-level entries. -const TopLevelEntryFileExclusions = ['index.js', 'version.js', 'index.bundle.js']; - +/** + * Webpack will remove any unused import as a dead code (tree shaking). + * Thus we are creating temporary JS files with top-level component imports + * and console logging them. This will ensure that the code is active + * and that webpack bundles it correctly. + */ function createFluentNorthstarFixtures() { const packageName = '@fluentui/react-northstar'; const distPath = path.dirname(require.resolve(packageName).replace('commonjs', 'es')); @@ -93,6 +96,9 @@ function createFluentNorthstarFixtures() { }); } +// Files which should not be considered top-level entries. +const TopLevelEntryFileExclusions = ['index.js', 'version.js', 'index.bundle.js']; + function createFluentReactFixtures() { const packageName = '@fluentui/react'; const distPath = path.dirname(require.resolve(packageName).replace('lib-commonjs', 'lib')); @@ -127,7 +133,7 @@ function createEntry(packageName) { } /** - * Build webpack entries based on top level imports available in a package. + * Build webpack entries from created fixtures. * * @param {boolean} [includeStats] - Stats are generated and used by the size auditor report * to check more details on what caused the bundle size change. Due to stats generation being slow, @@ -152,7 +158,7 @@ function buildEntries(packageName, entries = {}, includeStats = true) { } /** - * Build entries for single top level import. + * Build entries for single fixture with top level import. */ function buildEntry(packageName, includeStats = true) { const folderName = getFolderName(packageName); From 7d9d39e55020ce878b5065afd78437e9ef6402bc Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 17:12:18 +0100 Subject: [PATCH 15/44] fix unsupported characters in pipeline names --- azure-pipelines.bundlesize.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 95c2ef9f26998..2ea1746793267 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -5,7 +5,7 @@ trigger: - master jobs: - - job: build-react + - job: build_react timeoutInMinutes: 75 pool: vmImage: 'windows-2019' @@ -38,7 +38,7 @@ jobs: PathtoPublish: 'apps/test-bundles/dist' ArtifactName: distdrop-react - - job: build-northstar + - job: build_northstar timeoutInMinutes: 75 pool: vmImage: 'windows-2019' @@ -78,8 +78,8 @@ jobs: pool: vmImage: 'windows-2019' dependsOn: - - build-react - - build-northstar + - build_react + - build_northstar steps: - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact React' From 8d88c0026b7b79a14be8d45c3d6eb6d1cacf19f6 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 18:06:35 +0100 Subject: [PATCH 16/44] fix pipeline jq --- azure-pipelines.bundlesize.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 2ea1746793267..7cd39e085a571 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -96,7 +96,7 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: "jq -s 'reduce .[] as $item ({}; . * $item)' $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesize.json" + - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesize.json displayName: 'Merge React and React-Northstar to bundlesize.json' - task: PublishBuildArtifacts@1 From 507dadebe4ea93a3f8660ed6ea6af02538425dd8 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 20:09:52 +0100 Subject: [PATCH 17/44] fix merge artifact --- azure-pipelines.bundlesize.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 7cd39e085a571..a4ce56bd08679 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -102,10 +102,8 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Merged Bundle Size information' inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/merge/bundlesize.json' + PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesize.json' ArtifactName: bundlesize - publishLocation: FilePath - TargetPath: '$(Build.ArtifactStagingDirectory)/bundlesize.json' - job: lightrail pool: server From 1aa7ccd308962970493459eea52cc6351e27b410 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 9 Feb 2021 21:23:24 +0100 Subject: [PATCH 18/44] Previous path and json name and path --- azure-pipelines.bundlesize.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index a4ce56bd08679..92fd8c95bb420 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -96,14 +96,13 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesize.json - displayName: 'Merge React and React-Northstar to bundlesize.json' + - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > apps/test-bundles/dist/bundlesizes.json + displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 displayName: 'Publish Merged Bundle Size information' inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesize.json' - ArtifactName: bundlesize + PathtoPublish: apps/test-bundles/dist/bundlesizes.json - job: lightrail pool: server From 49151aca18635df91393267ea8390d6e98b8d6c5 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Wed, 10 Feb 2021 00:10:43 +0100 Subject: [PATCH 19/44] update pipeline test --- azure-pipelines.bundlesize.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 92fd8c95bb420..9774285816761 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -96,13 +96,16 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > apps/test-bundles/dist/bundlesizes.json + - script: 'md apps\test-bundles' + displayName: 'Create folder' + + - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > apps/test-bundles/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 displayName: 'Publish Merged Bundle Size information' inputs: - PathtoPublish: apps/test-bundles/dist/bundlesizes.json + PathtoPublish: 'apps/test-bundles/bundlesizes.json' - job: lightrail pool: server From 5aca7cbdd51a36d2593439a5b57cfb9fe5bc52c2 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Wed, 10 Feb 2021 00:40:16 +0100 Subject: [PATCH 20/44] Publish path --- azure-pipelines.bundlesize.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 9774285816761..2d978104ca2e6 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -96,16 +96,19 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: 'md apps\test-bundles' - displayName: 'Create folder' - - - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > apps/test-bundles/bundlesizes.json + - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 displayName: 'Publish Merged Bundle Size information' inputs: - PathtoPublish: 'apps/test-bundles/bundlesizes.json' + PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesizes.json' + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact dist folder upon build for debug' + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: distdrop - job: lightrail pool: server From 39498ebebf95a744760204b530c2ca499df6caf4 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Wed, 10 Feb 2021 23:32:13 +0100 Subject: [PATCH 21/44] Fix single entry package import --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 8302a99c01b69..e5938816b88e4 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -123,7 +123,7 @@ function createFluentReactFixtures() { function createEntry(packageName) { try { - const importStatement = `import p from '${packageName}'; console.log(p)`; + const importStatement = `import * as p from '${packageName}'; console.log(p)`; const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, 'index.js'); fs.outputFileSync(entryPath, importStatement, 'utf-8'); From e1aeb188374f7010663ef2404bbb0f1905180fc1 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 00:12:39 +0100 Subject: [PATCH 22/44] Fix bundle size for react --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index e5938816b88e4..7f0d32625379f 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -109,7 +109,7 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import { ${item} } from '${packageName}'; console.log(${item})`; + const importStatement = `import * as p from '${distPath}/${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); From 352cd22a3151cfcf7cc315ca6cfcbccd3b524b30 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 00:36:09 +0100 Subject: [PATCH 23/44] fix folder import for build-react pipeline --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 7f0d32625379f..9cbcde3328447 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -109,7 +109,7 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import * as p from '${distPath}/${item}'; console.log(p)`; + const importStatement = `import * as p from '${distPath}\\${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); From 5ecf3c80c612b083d07b181fdaaf76b7e4174c8f Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 01:07:40 +0100 Subject: [PATCH 24/44] fix Octal literal in strict mode error --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 9cbcde3328447..2bc6ce71844bb 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -109,7 +109,7 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import * as p from '${distPath}\\${item}'; console.log(p)`; + const importStatement = `import * as p from '${distPath}\${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); From 1fc7be5a5ac5b32ee3c87c511951a2849c941115 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 01:51:27 +0100 Subject: [PATCH 25/44] fix the path for import with path.normalize --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 2bc6ce71844bb..707024ed47ddc 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -109,7 +109,7 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import * as p from '${distPath}\${item}'; console.log(p)`; + const importStatement = `import * as p from '${path.normalize(distPath)}/${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); From 84359b3024d7c85c15fb543479cd5d23f483249c Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 02:31:14 +0100 Subject: [PATCH 26/44] remove absolute path --- apps/test-bundles/webpackUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 707024ed47ddc..de1439216ea2d 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -109,7 +109,7 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); - const importStatement = `import * as p from '${path.normalize(distPath)}/${item}'; console.log(p)`; + const importStatement = `import * as p from '${packageName}/lib/${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); From 9ced0384f2b2dacd0d6cd5089d848cf968688b57 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 09:29:33 +0100 Subject: [PATCH 27/44] add comment --- apps/test-bundles/webpackUtils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index de1439216ea2d..55f39cffee181 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -123,6 +123,7 @@ function createFluentReactFixtures() { function createEntry(packageName) { try { + // import everything from a single package const importStatement = `import * as p from '${packageName}'; console.log(p)`; const folderName = getFolderName(packageName); const entryPath = path.join('temp/fixtures/', folderName, 'index.js'); From 29f8b4f429da55a74a82efc3177a835b68c52614 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 11:29:25 +0100 Subject: [PATCH 28/44] Remove task to install node and replace it with template file --- azure-pipelines.bundlesize.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 2d978104ca2e6..0fd2a8b43ba57 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -43,10 +43,7 @@ jobs: pool: vmImage: 'windows-2019' steps: - - task: NodeTool@0 - inputs: - versionSpec: '12.x' - displayName: 'Install Node.js' + - template: .devops/templates/tools.yml - script: npx midgard-yarn install displayName: yarn From b1fd7d6b595c638e5a3a3e0e48a9f666e1619942 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 20:41:43 +0100 Subject: [PATCH 29/44] Rename output file name for bundle size --- azure-pipelines.bundlesize.yml | 14 +++++++------- scripts/tasks/bundle-size-collect.ts | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 0fd2a8b43ba57..c9dbe774d798d 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -29,8 +29,8 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' - ArtifactName: bundlesizes-react + PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' + ArtifactName: bundlesize-react - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact dist folder upon build for debug' @@ -62,8 +62,8 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' - ArtifactName: bundlesizes-northstar + PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' + ArtifactName: bundlesize-northstar - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact dist folder upon build for debug' @@ -81,19 +81,19 @@ jobs: - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact React' inputs: - artifactName: 'bundlesizes-react' + artifactName: 'bundlesize-react' targetPath: '$(Build.ArtifactStagingDirectory)/react' - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact N*' inputs: - artifactName: 'bundlesizes-northstar' + artifactName: 'bundlesize-northstar' targetPath: '$(Build.ArtifactStagingDirectory)/react-northstar' - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json + - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 diff --git a/scripts/tasks/bundle-size-collect.ts b/scripts/tasks/bundle-size-collect.ts index c0d3521e07d48..6b1ea46dbed94 100644 --- a/scripts/tasks/bundle-size-collect.ts +++ b/scripts/tasks/bundle-size-collect.ts @@ -11,7 +11,7 @@ export function bundleSizeCollect() { const distRoot = path.join(__dirname, '../../apps/test-bundles/dist'); const sizes = {}; - const outputFilename = 'bundlesizes.json'; + const outputFilename = 'bundlesize.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { From 80f0a64fb0ab67a5a6bc3f66c06e0fd7abd306d0 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Thu, 11 Feb 2021 21:46:05 +0100 Subject: [PATCH 30/44] fix bundle-size-collect js --- scripts/bundle-size-collect.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/bundle-size-collect.js b/scripts/bundle-size-collect.js index 6da450dcd35ea..d2266082e53e2 100644 --- a/scripts/bundle-size-collect.js +++ b/scripts/bundle-size-collect.js @@ -10,7 +10,7 @@ const path = require('path'); const distRoot = path.resolve(__dirname, '../apps/test-bundles/dist'); const sizes = {}; -const outputFilename = 'bundlesizes.json'; +const outputFilename = 'bundlesize.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { From d998570399ba8a41d971d159dcd860688235aec2 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Sun, 14 Feb 2021 20:54:31 +0100 Subject: [PATCH 31/44] add compact option in jq bundlesize pipeline --- azure-pipelines.bundlesize.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index c9dbe774d798d..092b9b92bc411 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -93,7 +93,7 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json + - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 From 32b5e2066d4659471db57a41aede5dca5f217cab Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Sun, 14 Feb 2021 22:20:13 +0100 Subject: [PATCH 32/44] Test json from different build --- azure-pipelines.bundlesize.yml | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 092b9b92bc411..46c4e27871aff 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -79,33 +79,21 @@ jobs: - build_northstar steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download Pipeline Artifact React' + displayName: 'Download Pipeline Artifact' inputs: - artifactName: 'bundlesize-react' - targetPath: '$(Build.ArtifactStagingDirectory)/react' - - - task: DownloadPipelineArtifact@2 - displayName: 'Download Pipeline Artifact N*' - inputs: - artifactName: 'bundlesize-northstar' - targetPath: '$(Build.ArtifactStagingDirectory)/react-northstar' - - - script: 'chocolatey install jq' - displayName: 'Install jq' - - - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json - displayName: 'Merge React and React-Northstar to bundlesizes.json' + buildType: '$(Parameters.source)' + project: 'cd9e4e13-b8db-429a-9c21-499bf1c98639' + definition: 55 + buildVersionToDownload: specific + pipelineId: 186534 + artifactName: bundlesizes.json + targetPath: '$(Parameters.path)' - task: PublishBuildArtifacts@1 - displayName: 'Publish Merged Bundle Size information' - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesizes.json' - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact dist folder upon build for debug' + displayName: 'Publish Artifact: bundlesizes.json' inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)' - ArtifactName: distdrop + PathtoPublish: '$(Pipeline.Workspace)' + ArtifactName: bundlesizes.json - job: lightrail pool: server From 02bb807927737b6d61e07298ed47b33fa6488864 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Sun, 14 Feb 2021 23:01:31 +0100 Subject: [PATCH 33/44] Test new path --- azure-pipelines.bundlesize.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 46c4e27871aff..1a3f66cb91dc3 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -87,12 +87,12 @@ jobs: buildVersionToDownload: specific pipelineId: 186534 artifactName: bundlesizes.json - targetPath: '$(Parameters.path)' + targetPath: 'apps/test-bundles/dist' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: bundlesizes.json' inputs: - PathtoPublish: '$(Pipeline.Workspace)' + PathtoPublish: 'apps/test-bundles/dist' ArtifactName: bundlesizes.json - job: lightrail From b48903c83663c2c33bb0fdae03b9fb1b6e533d9a Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 08:14:51 +0100 Subject: [PATCH 34/44] fix build type --- azure-pipelines.bundlesize.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 1a3f66cb91dc3..451bd6b789b0c 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -81,7 +81,7 @@ jobs: - task: DownloadPipelineArtifact@2 displayName: 'Download Pipeline Artifact' inputs: - buildType: '$(Parameters.source)' + buildType: specific project: 'cd9e4e13-b8db-429a-9c21-499bf1c98639' definition: 55 buildVersionToDownload: specific From bb5a381212db5ffd8b134b8c142ddf654307a269 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 08:51:51 +0100 Subject: [PATCH 35/44] Change path for artifact test build --- azure-pipelines.bundlesize.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 451bd6b789b0c..319d66424e214 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -87,12 +87,12 @@ jobs: buildVersionToDownload: specific pipelineId: 186534 artifactName: bundlesizes.json - targetPath: 'apps/test-bundles/dist' + targetPath: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: bundlesizes.json' inputs: - PathtoPublish: 'apps/test-bundles/dist' + PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesizes.json' ArtifactName: bundlesizes.json - job: lightrail From 127b4c9ccf3a50c74aa8017d6dd2116668653707 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 09:51:46 +0100 Subject: [PATCH 36/44] test --- azure-pipelines.bundlesize.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 319d66424e214..4c9cd55608155 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -82,7 +82,7 @@ jobs: displayName: 'Download Pipeline Artifact' inputs: buildType: specific - project: 'cd9e4e13-b8db-429a-9c21-499bf1c98639' + project: 'fabricpublic' definition: 55 buildVersionToDownload: specific pipelineId: 186534 From 5dfa08af028b0509adbf8b64da4dbcd4468519c3 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 09:53:30 +0100 Subject: [PATCH 37/44] add downloadtype single --- azure-pipelines.bundlesize.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 4c9cd55608155..9e1d4ea589d1a 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -86,6 +86,7 @@ jobs: definition: 55 buildVersionToDownload: specific pipelineId: 186534 + downloadType: single artifactName: bundlesizes.json targetPath: '$(Build.ArtifactStagingDirectory)' From f8ccec9af88b78cff70f1df1dfaba497e8b81144 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 11:14:59 +0100 Subject: [PATCH 38/44] Add devopsAssemblyArtifactName to sizeauditor json --- azure-pipelines.bundlesize.yml | 33 ++++++++++++++++++++++----------- sizeauditor.json | 3 ++- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 9e1d4ea589d1a..092b9b92bc411 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -79,22 +79,33 @@ jobs: - build_northstar steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download Pipeline Artifact' + displayName: 'Download Pipeline Artifact React' inputs: - buildType: specific - project: 'fabricpublic' - definition: 55 - buildVersionToDownload: specific - pipelineId: 186534 - downloadType: single - artifactName: bundlesizes.json - targetPath: '$(Build.ArtifactStagingDirectory)' + artifactName: 'bundlesize-react' + targetPath: '$(Build.ArtifactStagingDirectory)/react' + + - task: DownloadPipelineArtifact@2 + displayName: 'Download Pipeline Artifact N*' + inputs: + artifactName: 'bundlesize-northstar' + targetPath: '$(Build.ArtifactStagingDirectory)/react-northstar' + + - script: 'chocolatey install jq' + displayName: 'Install jq' + + - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json + displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: bundlesizes.json' + displayName: 'Publish Merged Bundle Size information' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/bundlesizes.json' - ArtifactName: bundlesizes.json + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact dist folder upon build for debug' + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: distdrop - job: lightrail pool: server diff --git a/sizeauditor.json b/sizeauditor.json index e5525cd2e8aa8..10e432d1e5cc6 100644 --- a/sizeauditor.json +++ b/sizeauditor.json @@ -1,4 +1,5 @@ { "devopsDropFolderName": "drop", - "devopsWebpackStatsArtifactName": "bundlesizes.json" + "devopsWebpackStatsArtifactName": "bundlesizes.json", + "devopsAssemblyArtifactName": "bundlesizes.json" } From 59546788f874cee648f432f5b4749df52122e3bd Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 11:57:04 +0100 Subject: [PATCH 39/44] Change devopsAssemblyArtifactName to drop --- scripts/bundle-size-collect.js | 2 +- scripts/tasks/bundle-size-collect.ts | 2 +- sizeauditor.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/bundle-size-collect.js b/scripts/bundle-size-collect.js index d2266082e53e2..6da450dcd35ea 100644 --- a/scripts/bundle-size-collect.js +++ b/scripts/bundle-size-collect.js @@ -10,7 +10,7 @@ const path = require('path'); const distRoot = path.resolve(__dirname, '../apps/test-bundles/dist'); const sizes = {}; -const outputFilename = 'bundlesize.json'; +const outputFilename = 'bundlesizes.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { diff --git a/scripts/tasks/bundle-size-collect.ts b/scripts/tasks/bundle-size-collect.ts index 6b1ea46dbed94..c0d3521e07d48 100644 --- a/scripts/tasks/bundle-size-collect.ts +++ b/scripts/tasks/bundle-size-collect.ts @@ -11,7 +11,7 @@ export function bundleSizeCollect() { const distRoot = path.join(__dirname, '../../apps/test-bundles/dist'); const sizes = {}; - const outputFilename = 'bundlesize.json'; + const outputFilename = 'bundlesizes.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { diff --git a/sizeauditor.json b/sizeauditor.json index 10e432d1e5cc6..fcfa5192afd5d 100644 --- a/sizeauditor.json +++ b/sizeauditor.json @@ -1,5 +1,5 @@ { "devopsDropFolderName": "drop", "devopsWebpackStatsArtifactName": "bundlesizes.json", - "devopsAssemblyArtifactName": "bundlesizes.json" + "devopsAssemblyArtifactName": "drop" } From cf73620d11be13d2be781de7a85b74a6def99783 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 12:22:36 +0100 Subject: [PATCH 40/44] Rename bundlesize.json to bundlesizes --- azure-pipelines.bundlesize.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 092b9b92bc411..73bc506aefc9d 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -29,7 +29,7 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' + PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' ArtifactName: bundlesize-react - task: PublishBuildArtifacts@1 @@ -62,7 +62,7 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' + PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' ArtifactName: bundlesize-northstar - task: PublishBuildArtifacts@1 @@ -93,7 +93,7 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json + - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 From c23843884e879a5ea760dea0fda315d658326c40 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 12:24:43 +0100 Subject: [PATCH 41/44] bundle-size --- azure-pipelines.bundlesize.yml | 6 +++--- scripts/bundle-size-collect.js | 2 +- scripts/tasks/bundle-size-collect.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.bundlesize.yml b/azure-pipelines.bundlesize.yml index 73bc506aefc9d..092b9b92bc411 100644 --- a/azure-pipelines.bundlesize.yml +++ b/azure-pipelines.bundlesize.yml @@ -29,7 +29,7 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' + PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' ArtifactName: bundlesize-react - task: PublishBuildArtifacts@1 @@ -62,7 +62,7 @@ jobs: - task: PublishBuildArtifacts@1 displayName: 'Publish Bundle Size information to Azure Dev Ops Artifacts' inputs: - PathtoPublish: 'apps/test-bundles/dist/bundlesizes.json' + PathtoPublish: 'apps/test-bundles/dist/bundlesize.json' ArtifactName: bundlesize-northstar - task: PublishBuildArtifacts@1 @@ -93,7 +93,7 @@ jobs: - script: 'chocolatey install jq' displayName: 'Install jq' - - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesizes.json $(Build.ArtifactStagingDirectory)/react/bundlesizes.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json + - script: jq -c -s "reduce .[] as $item ({}; . * $item)" $(Build.ArtifactStagingDirectory)/react-northstar/bundlesize.json $(Build.ArtifactStagingDirectory)/react/bundlesize.json > $(Build.ArtifactStagingDirectory)/bundlesizes.json displayName: 'Merge React and React-Northstar to bundlesizes.json' - task: PublishBuildArtifacts@1 diff --git a/scripts/bundle-size-collect.js b/scripts/bundle-size-collect.js index 6da450dcd35ea..d2266082e53e2 100644 --- a/scripts/bundle-size-collect.js +++ b/scripts/bundle-size-collect.js @@ -10,7 +10,7 @@ const path = require('path'); const distRoot = path.resolve(__dirname, '../apps/test-bundles/dist'); const sizes = {}; -const outputFilename = 'bundlesizes.json'; +const outputFilename = 'bundlesize.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { diff --git a/scripts/tasks/bundle-size-collect.ts b/scripts/tasks/bundle-size-collect.ts index c0d3521e07d48..6b1ea46dbed94 100644 --- a/scripts/tasks/bundle-size-collect.ts +++ b/scripts/tasks/bundle-size-collect.ts @@ -11,7 +11,7 @@ export function bundleSizeCollect() { const distRoot = path.join(__dirname, '../../apps/test-bundles/dist'); const sizes = {}; - const outputFilename = 'bundlesizes.json'; + const outputFilename = 'bundlesize.json'; var items = fs.readdirSync(distRoot); items.forEach(item => { From 7968e2ddc7dcb8fd1241d5f6dee6a0d82d88dbe7 Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 13:17:10 +0100 Subject: [PATCH 42/44] experiment name for devops folder --- sizeauditor.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sizeauditor.json b/sizeauditor.json index fcfa5192afd5d..375c967cd060a 100644 --- a/sizeauditor.json +++ b/sizeauditor.json @@ -1,5 +1,4 @@ { - "devopsDropFolderName": "drop", - "devopsWebpackStatsArtifactName": "bundlesizes.json", + "devopsDropFolderName": "testdropfolder", "devopsAssemblyArtifactName": "drop" } From dba1b97405c32bb63a8172e003c0c162afaa433a Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Mon, 15 Feb 2021 14:03:40 +0100 Subject: [PATCH 43/44] Revert last changes with devopsDropFolder --- sizeauditor.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sizeauditor.json b/sizeauditor.json index 375c967cd060a..db19f6ce13e84 100644 --- a/sizeauditor.json +++ b/sizeauditor.json @@ -1,4 +1,4 @@ { - "devopsDropFolderName": "testdropfolder", + "devopsDropFolderName": "drop", "devopsAssemblyArtifactName": "drop" } From e056ee6580f350f7eb9036b6682a4b37ca844b2d Mon Sep 17 00:00:00 2001 From: Petr Duda Date: Tue, 16 Feb 2021 10:55:03 +0100 Subject: [PATCH 44/44] Refactor and additional comment --- apps/test-bundles/webpackUtils.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/test-bundles/webpackUtils.js b/apps/test-bundles/webpackUtils.js index 55f39cffee181..f5121ee8aee19 100644 --- a/apps/test-bundles/webpackUtils.js +++ b/apps/test-bundles/webpackUtils.js @@ -5,6 +5,8 @@ const resources = require('@fluentui/scripts/webpack/webpack-resources'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const TerserPlugin = require('terser-webpack-plugin'); +const FIXTURE_PATH = 'temp/fixtures/'; + function createWebpackConfig(entries) { return Object.keys(entries).map(entryName => { let anaylizerPluginOptions = { @@ -87,7 +89,7 @@ function createFluentNorthstarFixtures() { const importStatement = `import { ${itemName} } from '${packageName}'; console.log(${itemName})`; try { const folderName = getFolderName(packageName); - const entryPath = path.join('temp/fixtures/', folderName, `${itemName}.js`); + const entryPath = path.join(FIXTURE_PATH, folderName, `${itemName}.js`); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -109,10 +111,11 @@ function createFluentReactFixtures() { if (isAllowedFile && !isFolder) { const item = isFolder ? itemName : itemName.replace(/.js$/, ''); + // import everything from package/item path const importStatement = `import * as p from '${packageName}/lib/${item}'; console.log(p)`; try { const folderName = getFolderName(packageName); - const entryPath = path.join('temp/fixtures/', folderName, `${item}.js`); + const entryPath = path.join(FIXTURE_PATH, folderName, `${item}.js`); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -126,7 +129,7 @@ function createEntry(packageName) { // import everything from a single package const importStatement = `import * as p from '${packageName}'; console.log(p)`; const folderName = getFolderName(packageName); - const entryPath = path.join('temp/fixtures/', folderName, 'index.js'); + const entryPath = path.join(FIXTURE_PATH, folderName, 'index.js'); fs.outputFileSync(entryPath, importStatement, 'utf-8'); } catch (err) { console.log(err); @@ -144,7 +147,7 @@ function createEntry(packageName) { */ function buildEntries(packageName, entries = {}, includeStats = true) { const folderName = getFolderName(packageName); - const packagePath = path.join('temp/fixtures/', folderName); + const packagePath = path.join(FIXTURE_PATH, folderName); fs.readdirSync(packagePath).forEach(itemName => { const entryName = itemName.replace(/.js$/, ''); @@ -163,7 +166,7 @@ function buildEntries(packageName, entries = {}, includeStats = true) { */ function buildEntry(packageName, includeStats = true) { const folderName = getFolderName(packageName); - const entryPath = path.resolve(path.join('temp/fixtures/', folderName)); + const entryPath = path.resolve(path.join(FIXTURE_PATH, folderName)); return { entryPath: `${entryPath}/index.js`, includeStats,