feat(core): added the ability to split command property into an array in nx:run-commands executor (#20201)
<!-- Please make sure you have read the submission guidelines before posting an PR --> <!-- https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr --> <!-- Please make sure that your commit message follows our format --> <!-- Example: `fix(nx): must begin with lowercase` --> ## Current Behavior In projects, you can often find teams that are too long. Example here: ```json "run:dev": { "executor": "nx:run-commands", "options": { "command": "docker compose -f .docker/compose/docker-compose.services.yml -f .docker/compose/docker-compose.dev.yml --project-directory . up -d" }, "dependsOn": ["update:dev"] } ``` ## Expected Behavior Implemented splitting of the 'command' parameter, added the ability to pass it as an array to avoid such *huge* strings: ```json "run:dev": { "executor": "nx:run-commands", "options": { "command": [ "docker compose -f", ".docker/compose/docker-compose.services.yml -f", ".docker/compose/docker-compose.dev.yml", "--project-directory . up -d" ] }, "dependsOn": ["update:dev"] }, ``` Added a couple of tests and changed schema.json to 'run-commands' executor.
This commit is contained in:
parent
412a450dae
commit
df83dd4c6e
@ -76,6 +76,18 @@
|
|||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
},
|
},
|
||||||
"command": {
|
"command": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"description": "Command to run in child process, but divided into parts.",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"x-priority": "important"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "Command to run in child process."
|
||||||
|
}
|
||||||
|
],
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Command to run in child process.",
|
"description": "Command to run in child process.",
|
||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
|
|||||||
@ -234,6 +234,42 @@ describe('Run Commands', () => {
|
|||||||
expect(readFile(f)).toEqual('1212');
|
expect(readFile(f)).toEqual('1212');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should run the command, but divided into paths', async () => {
|
||||||
|
const f = fileSync().name;
|
||||||
|
const result = await runCommands(
|
||||||
|
{
|
||||||
|
command: [`echo 1 >> ${f}`, '&&', `echo 2 >> ${f}`],
|
||||||
|
parallel: false,
|
||||||
|
|
||||||
|
__unparsed__: [],
|
||||||
|
},
|
||||||
|
context
|
||||||
|
);
|
||||||
|
expect(result).toEqual(expect.objectContaining({ success: true }));
|
||||||
|
expect(readFile(f)).toEqual('12');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should run the command, but divided into several paths', async () => {
|
||||||
|
const f = fileSync().name;
|
||||||
|
const result = await runCommands(
|
||||||
|
{
|
||||||
|
command: [
|
||||||
|
`echo 1 >> ${f} `,
|
||||||
|
`&&`,
|
||||||
|
`echo 2 >> ${f}`,
|
||||||
|
';',
|
||||||
|
`echo 34 >> ${f}`,
|
||||||
|
],
|
||||||
|
parallel: false,
|
||||||
|
|
||||||
|
__unparsed__: [],
|
||||||
|
},
|
||||||
|
context
|
||||||
|
);
|
||||||
|
expect(result).toEqual(expect.objectContaining({ success: true }));
|
||||||
|
expect(readFile(f)).toEqual('1234');
|
||||||
|
});
|
||||||
|
|
||||||
it('should run commands in parallel', async () => {
|
it('should run commands in parallel', async () => {
|
||||||
const f = fileSync().name;
|
const f = fileSync().name;
|
||||||
const result = await runCommands(
|
const result = await runCommands(
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export type Json = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export interface RunCommandsOptions extends Json {
|
export interface RunCommandsOptions extends Json {
|
||||||
command?: string;
|
command?: string | string[];
|
||||||
commands?: (
|
commands?: (
|
||||||
| {
|
| {
|
||||||
command: string;
|
command: string;
|
||||||
@ -237,7 +237,13 @@ function normalizeOptions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options.command) {
|
if (options.command) {
|
||||||
options.commands = [{ command: options.command }];
|
options.commands = [
|
||||||
|
{
|
||||||
|
command: Array.isArray(options.command)
|
||||||
|
? options.command.join(' ')
|
||||||
|
: options.command,
|
||||||
|
},
|
||||||
|
];
|
||||||
options.parallel = options.readyWhenStatus?.length > 0;
|
options.parallel = options.readyWhenStatus?.length > 0;
|
||||||
} else {
|
} else {
|
||||||
options.commands = options.commands.map((c) =>
|
options.commands = options.commands.map((c) =>
|
||||||
|
|||||||
@ -84,6 +84,20 @@
|
|||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
},
|
},
|
||||||
"command": {
|
"command": {
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"description": "Command to run in child process, but divided into parts.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"x-priority": "important"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "Command to run in child process."
|
||||||
|
}
|
||||||
|
],
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Command to run in child process.",
|
"description": "Command to run in child process.",
|
||||||
"x-priority": "important"
|
"x-priority": "important"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user