35 lines
1.2 KiB
JavaScript
Executable File
35 lines
1.2 KiB
JavaScript
Executable File
/***
|
|
* Running lerna with since and scope is not working as expected.
|
|
* For example, running the command `yarn test --scope=@budibase/worker --since=master`, with changes only on `@budibase/backend-core` will not work as expected, as it does not analyse the dependencies properly. The actual `@budibase/worker` task will not be triggered.
|
|
*
|
|
* This script is using `lerna ls` to detect all the affected projects from a given commit, and if the scoped package is affected, the actual command will be executed.
|
|
*
|
|
* The current version of the script only supports a single project in the scope.
|
|
*/
|
|
|
|
const { execSync } = require("child_process")
|
|
|
|
const argv = require("yargs").demandOption(["task", "since", "scope"]).argv
|
|
|
|
const { task, since, scope } = argv
|
|
|
|
const affectedPackages = execSync(
|
|
`yarn --silent lerna ls --since=${since} --json`,
|
|
{
|
|
encoding: "utf-8",
|
|
}
|
|
)
|
|
|
|
const packages = JSON.parse(affectedPackages)
|
|
|
|
const isAffected = packages.some(pkg => pkg.name === scope)
|
|
|
|
if (isAffected) {
|
|
console.log(`${scope} is affected. Running task "${task}"`)
|
|
execSync(`yarn ${task} --scope=${scope}`, {
|
|
stdio: "inherit",
|
|
})
|
|
} else {
|
|
console.log(`${scope} is not affected. Skipping task "${task}"`)
|
|
}
|