Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devops/templates/runpublishvrscreenshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ steps:
isPR=${{lower(eq(variables['Build.Reason'], 'PullRequest'))}}
echo $isPR
if [[ $isPR == true ]]; then
packageAffected=$(yarn --silent check:affected-package --packages ${{ parameters.vrTestPackageName }} --pr=true)
packageAffected=$(yarn --silent check:affected --package ${{ parameters.vrTestPackageName }})
if [[ $packageAffected == false ]]; then
echo "In PR pipeline but NOT affecting test package. Skipping test run"
echo "##vso[task.setvariable variable=vrTestSkip;]yes"
Expand Down
6 changes: 3 additions & 3 deletions azure-pipelines.perf-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ jobs:
displayName: yarn

- script: |
NorthstarAffected=$(yarn --silent check:affected-package --packages @fluentui/react-northstar --pr)
V8Affected=$(yarn --silent check:affected-package --packages @fluentui/react --pr)
ReactComponentsAffected=$(yarn --silent check:affected-package --packages @fluentui/react-components --pr)
NorthstarAffected=$(yarn --silent check:affected --package @fluentui/react-northstar)
V8Affected=$(yarn --silent check:affected --package @fluentui/react)
ReactComponentsAffected=$(yarn --silent check:affected --package @fluentui/react-components)
if [[ $NorthstarAffected == true ]]; then
echo "##vso[task.setvariable variable=NorthstarPackageAffected;isOutput=true]true"
fi
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"change": "beachball change --no-commit",
"check:change": "beachball check",
"check:modified-files": "node -r ./scripts/ts-node/register ./scripts/executors/check-for-modified-files",
"check:affected-package": "node ./scripts/executors/checkIfPackagesAffected.js",
"check:affected": "node ./scripts/executors/checkIfPackagesAffected.js",
"check:installed-dependencies-versions": "satisfied --no-peers --skip-invalid",
"clean": "lage clean --verbose",
"code-style": "lage code-style --verbose",
Expand Down
43 changes: 19 additions & 24 deletions scripts/executors/checkIfPackagesAffected.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,36 @@
const { getAffectedPackages, getNthCommit } = require('@fluentui/scripts-monorepo');
const { getAffectedPackages } = require('@fluentui/scripts-monorepo');
const yargs = require('yargs');

const args = yargs
.option('packages', {
.option('package', {
alias: 'p',
type: 'array',
// eslint-disable-next-line @typescript-eslint/naming-convention
string: true,
description: 'Package to check modified files from',
demandOption: true,
demandOption: false,
})
.option('pr', {
alias: 'r',
type: 'boolean',
description: 'During PR build compares to origin/master, in CI build compares to last commit',
default: false,
.option('base', {
type: 'string',
description: 'Base of the current branch (usually main or master)',
default: 'origin/master',
})
.scriptName('bundle-size')
.version(false).argv;

const isPackageAffected = () => {
const { packages, pr } = args;
const { package: packages, base } = args;
const affectedPackages = getAffectedPackages(base);

let affectedPackages = new Set();

if (pr) {
affectedPackages = getAffectedPackages();
} else {
// master CI build,
const previousMasterCommit = getNthCommit();
affectedPackages = getAffectedPackages(previousMasterCommit);
}

for (const pkg of packages) {
if (affectedPackages.has(pkg)) {
return true;
if (packages) {
for (const pkg of packages) {
if (affectedPackages.has(pkg)) {
return true;
}
}
return false;
}
return false;

return affectedPackages;
};

function main() {
Expand Down
17 changes: 17 additions & 0 deletions scripts/monorepo/src/getAffectedPackages.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const { spawnSync } = require('child_process');

const findGitRoot = require('./findGitRoot');
const { getUncommittedFiles, getUntrackedFiles } = require('./utils');

/**
* Indicator of what packages have been affected by changes
Expand All @@ -10,6 +11,7 @@ const findGitRoot = require('./findGitRoot');
* @returns {Set<string>} - Set of packages that are affected by in the current branch
*/
function getAffectedPackages(since = 'origin/master') {
reportLageAffectedSinceResolution();
const gitRoot = findGitRoot();
const res = spawnSync('yarn', ['lage', 'info', '--since', since], { cwd: gitRoot, shell: true });
if (res.status !== 0) {
Expand All @@ -28,4 +30,19 @@ function getAffectedPackages(since = 'origin/master') {
return new Set(info.scope);
}

/**
* @see https://github.com/microsoft/fluentui/issues/26147
*/
function reportLageAffectedSinceResolution() {
const uncommittedGitFiles = [...getUncommittedFiles(), ...getUntrackedFiles()];
if (uncommittedGitFiles.length > 0) {
console.warn(
'⚠️ NOTE:\n',
'You workspace contains uncommitted or untracked files!\n',
'This gives you false positives about true affected tree.\n',
'To get proper results make sure you have clean git tree.\n\n',
);
}
}

exports.getAffectedPackages = getAffectedPackages;
2 changes: 1 addition & 1 deletion scripts/monorepo/src/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ export { isConvergedPackage, shipsAMD } from './isConvergedPackage';
export { getAffectedPackages } from './getAffectedPackages';
export { getLernaAliases } from './get-lerna-aliases';
export { getDefaultEnvironmentVars } from './getDefaultEnvironmentVars';
export { getProjectMetadata, workspaceRoot } from './utils';
export { getProjectMetadata, workspaceRoot, getUncommittedFiles, getUntrackedFiles } from './utils';
export * as eslintConstants from './eslint-constants';
export { getNthCommit } from './getNthCommit';
36 changes: 35 additions & 1 deletion scripts/monorepo/src/utils.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const { workspaceRoot } = require('nx/src/utils/app-root');

const { workspaceRoot } = require('@nrwl/devkit');

const findGitRoot = require('./findGitRoot');
const TEN_MEGABYTES = 1024 * 10000;

/**
* Gets project metadata from monorepo source of truth which is `workspace.json`
Expand All @@ -20,5 +23,36 @@ function getProjectMetadata(options) {
return nxWorkspace.projects[options.name];
}

/**
*
* @param {string} command
* @returns {string[]}
*/
function parseGitOutput(command) {
return execSync(command, { maxBuffer: TEN_MEGABYTES, cwd: workspaceRoot })
.toString('utf-8')
.split('\n')
.map(a => a.trim())
.filter(a => a.length > 0);
}

/**
*
* @returns {string[]}
*/
function getUncommittedFiles() {
return parseGitOutput(`git diff --name-only --no-renames --relative HEAD .`);
}

/**
*
* @returns {string[]}
*/
function getUntrackedFiles() {
return parseGitOutput(`git ls-files --others --exclude-standard`);
}

exports.getUncommittedFiles = getUncommittedFiles;
exports.getUntrackedFiles = getUntrackedFiles;
exports.getProjectMetadata = getProjectMetadata;
exports.workspaceRoot = workspaceRoot;