@ohos-ports/nx 23.3.0-beta.2 → 24.0.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -6
- package/dist/bin/nx.js +2 -2
- package/dist/bin/post-install.js +5 -3
- package/dist/nx-cloud-internals.d.ts +1 -0
- package/dist/nx-cloud-internals.js +7 -1
- package/dist/src/adapter/ngcli-adapter.js +2 -2
- package/dist/src/ai/clone-ai-config-repo.js +49 -12
- package/dist/src/command-line/add/add.d.ts +2 -0
- package/dist/src/command-line/add/add.js +23 -5
- package/dist/src/command-line/affected/affected.js +2 -2
- package/dist/src/command-line/configure-ai-agents/configure-ai-agents.js +0 -12
- package/dist/src/command-line/graph/graph.js +38 -10
- package/dist/src/command-line/init/command-object.js +0 -12
- package/dist/src/command-line/init/implementation/add-nx-to-nest.js +21 -62
- package/dist/src/command-line/init/init-v2.js +0 -2
- package/dist/src/command-line/migrate/agentic/close-agent-session.d.ts +1 -1
- package/dist/src/command-line/migrate/agentic/close-agent-session.js +4 -3
- package/dist/src/command-line/migrate/agentic/definitions.d.ts +1 -3
- package/dist/src/command-line/migrate/agentic/definitions.js +5 -97
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.d.ts +7 -45
- package/dist/src/command-line/migrate/agentic/handoff-gitignore.js +9 -51
- package/dist/src/command-line/migrate/agentic/handoff.d.ts +1 -43
- package/dist/src/command-line/migrate/agentic/handoff.js +3 -119
- package/dist/src/command-line/migrate/agentic/instruction-files.d.ts +0 -21
- package/dist/src/command-line/migrate/agentic/instruction-files.js +6 -27
- package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +19 -1
- package/dist/src/command-line/migrate/agentic/master/run-master-session.js +88 -49
- package/dist/src/command-line/migrate/agentic/master/spawn-master.d.ts +1 -0
- package/dist/src/command-line/migrate/agentic/master/spawn-master.js +86 -24
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.d.ts +2 -2
- package/dist/src/command-line/migrate/agentic/print-dropped-agent-context.js +2 -2
- package/dist/src/command-line/migrate/agentic/prompts/fragments.d.ts +1 -12
- package/dist/src/command-line/migrate/agentic/prompts/fragments.js +8 -17
- package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.d.ts +0 -15
- package/dist/src/command-line/migrate/agentic/prompts/shared-rendering.js +3 -100
- package/dist/src/command-line/migrate/agentic/select.d.ts +12 -6
- package/dist/src/command-line/migrate/agentic/select.js +38 -8
- package/dist/src/command-line/migrate/agentic/types.d.ts +9 -68
- package/dist/src/command-line/migrate/agentic/types.js +6 -8
- package/dist/src/command-line/migrate/command-object.js +6 -10
- package/dist/src/command-line/migrate/execute-migration.d.ts +6 -6
- package/dist/src/command-line/migrate/execute-migration.js +25 -15
- package/dist/src/command-line/migrate/migrate-analytics.d.ts +18 -1
- package/dist/src/command-line/migrate/migrate-analytics.js +38 -0
- package/dist/src/command-line/migrate/migrate-commits.d.ts +29 -17
- package/dist/src/command-line/migrate/migrate-commits.js +86 -32
- package/dist/src/command-line/migrate/migrate-config.d.ts +6 -6
- package/dist/src/command-line/migrate/migrate-config.js +12 -6
- package/dist/src/command-line/migrate/migrate-output.d.ts +1 -6
- package/dist/src/command-line/migrate/migrate-output.js +1 -10
- package/dist/src/command-line/migrate/migrate.d.ts +6 -30
- package/dist/src/command-line/migrate/migrate.js +257 -255
- package/dist/src/command-line/migrate/resolve-package-version.d.ts +2 -4
- package/dist/src/command-line/migrate/resolve-package-version.js +2 -35
- package/dist/src/command-line/migrate/run/agent-output.d.ts +2 -0
- package/dist/src/command-line/migrate/run/agent-output.js +9 -0
- package/dist/src/command-line/migrate/run/broker.d.ts +14 -5
- package/dist/src/command-line/migrate/run/broker.js +69 -21
- package/dist/src/command-line/migrate/run/clean-retry.js +4 -2
- package/dist/src/command-line/migrate/run/existing-run-report.d.ts +1 -1
- package/dist/src/command-line/migrate/run/existing-run-report.js +7 -5
- package/dist/src/command-line/migrate/run/give-up.d.ts +4 -3
- package/dist/src/command-line/migrate/run/give-up.js +8 -5
- package/dist/src/command-line/migrate/run/index.d.ts +7 -5
- package/dist/src/command-line/migrate/run/index.js +16 -1
- package/dist/src/command-line/migrate/run/issues.js +7 -2
- package/dist/src/command-line/migrate/run/orchestrator.d.ts +61 -4
- package/dist/src/command-line/migrate/run/orchestrator.js +397 -133
- package/dist/src/command-line/migrate/run/run-state.d.ts +17 -1
- package/dist/src/command-line/migrate/run/run-state.js +41 -2
- package/dist/src/command-line/migrate/run/runbook.d.ts +1 -0
- package/dist/src/command-line/migrate/run/runbook.js +115 -18
- package/dist/src/command-line/migrate/run/state-lock.d.ts +29 -4
- package/dist/src/command-line/migrate/run/state-lock.js +102 -10
- package/dist/src/command-line/migrate/run/state-machine.js +4 -1
- package/dist/src/command-line/migrate/run/util.d.ts +7 -2
- package/dist/src/command-line/migrate/run/util.js +30 -3
- package/dist/src/command-line/migrate/run/worker.d.ts +1 -1
- package/dist/src/command-line/migrate/run/worker.js +252 -250
- package/dist/src/command-line/migrate/sort-migrations.d.ts +1 -7
- package/dist/src/command-line/migrate/sort-migrations.js +1 -12
- package/dist/src/command-line/nx-cloud/connect/connect-to-nx-cloud.js +17 -12
- package/dist/src/command-line/release/changelog.js +9 -6
- package/dist/src/command-line/release/config/config.d.ts +1 -0
- package/dist/src/command-line/release/config/config.js +48 -9
- package/dist/src/command-line/release/release.js +2 -2
- package/dist/src/command-line/release/utils/git.js +8 -7
- package/dist/src/command-line/release/utils/interpolate-release-config.d.ts +6 -0
- package/dist/src/command-line/release/utils/interpolate-release-config.js +39 -0
- package/dist/src/command-line/release/utils/release-graph.d.ts +5 -0
- package/dist/src/command-line/release/utils/release-graph.js +1 -0
- package/dist/src/command-line/release/utils/remote-release-clients/github.js +5 -6
- package/dist/src/command-line/release/utils/remote-release-clients/gitlab.js +5 -6
- package/dist/src/command-line/release/utils/resolve-changelog-renderer.js +2 -2
- package/dist/src/command-line/release/utils/shared.js +10 -10
- package/dist/src/command-line/release/utils/version-plan-utils.d.ts +3 -12
- package/dist/src/command-line/release/utils/version-plan-utils.js +33 -55
- package/dist/src/command-line/release/version/version-actions.js +2 -1
- package/dist/src/command-line/release/version.js +5 -2
- package/dist/src/command-line/reset/reset.js +58 -62
- package/dist/src/command-line/run/executor-utils.js +1 -0
- package/dist/src/command-line/run/run-one.d.ts +20 -1
- package/dist/src/command-line/run/run-one.js +153 -5
- package/dist/src/command-line/run/run.js +2 -1
- package/dist/src/command-line/show/projects.js +5 -3
- package/dist/src/command-line/show/show-target/info.d.ts +10 -1
- package/dist/src/command-line/show/show-target/info.js +100 -15
- package/dist/src/command-line/show/show-target/inputs.js +10 -2
- package/dist/src/command-line/show/show-target/utils.js +1 -0
- package/dist/src/command-line/watch/command-object.js +3 -22
- package/dist/src/command-line/watch/watch.d.ts +0 -7
- package/dist/src/command-line/watch/watch.js +1 -1
- package/dist/src/command-line/yargs-utils/shared-options.js +1 -1
- package/dist/src/config/misc-interfaces.d.ts +18 -0
- package/dist/src/config/nx-json.d.ts +22 -11
- package/dist/src/config/task-graph.d.ts +1 -1
- package/dist/src/config/workspace-json-project-json.d.ts +88 -0
- package/dist/src/core/graph/main.js +1 -1
- package/dist/src/core/graph/runtime.js +1 -1
- package/dist/src/core/graph/styles.css +1 -1
- package/dist/src/core/graph/styles.js +1 -1
- package/dist/src/daemon/client/client.d.ts +15 -0
- package/dist/src/daemon/client/client.js +181 -71
- package/dist/src/daemon/client/daemon-socket-messenger.d.ts +1 -1
- package/dist/src/daemon/client/daemon-socket-messenger.js +2 -2
- package/dist/src/daemon/server/client-socket-context.js +1 -1
- package/dist/src/daemon/server/handle-process-in-background.js +21 -9
- package/dist/src/daemon/server/handle-select-affected-tasks.d.ts +2 -1
- package/dist/src/daemon/server/handle-select-affected-tasks.js +21 -13
- package/dist/src/daemon/server/native-js-loader.d.ts +1 -0
- package/dist/src/daemon/server/native-js-loader.js +21 -0
- package/dist/src/daemon/server/project-graph-incremental-recomputation.js +4 -8
- package/dist/src/daemon/server/server.d.ts +2 -1
- package/dist/src/daemon/server/server.js +17 -4
- package/dist/src/daemon/server/shutdown-utils.js +0 -3
- package/dist/src/daemon/server/start.d.ts +1 -0
- package/dist/src/daemon/server/start.js +2 -0
- package/dist/src/daemon/socket-utils.d.ts +11 -9
- package/dist/src/daemon/socket-utils.js +31 -61
- package/dist/src/daemon/tmp-dir.d.ts +19 -14
- package/dist/src/daemon/tmp-dir.js +142 -354
- package/dist/src/devkit-exports.d.ts +9 -1
- package/dist/src/devkit-exports.js +12 -1
- package/dist/src/devkit-internals.d.ts +6 -5
- package/dist/src/devkit-internals.js +13 -4
- package/dist/src/executors/run-commands/run-commands.impl.d.ts +4 -2
- package/dist/src/executors/run-commands/run-commands.impl.js +53 -27
- package/dist/src/executors/run-commands/running-tasks.d.ts +13 -4
- package/dist/src/executors/run-commands/running-tasks.js +148 -95
- package/dist/src/executors/run-commands/schema.json +1 -1
- package/dist/src/hasher/check-task-files.js +5 -8
- package/dist/src/hasher/file-hasher.js +9 -7
- package/dist/src/hasher/hash-task.js +4 -0
- package/dist/src/hasher/native-task-hasher-impl.js +3 -1
- package/dist/src/hasher/task-hasher.d.ts +2 -0
- package/dist/src/hasher/task-hasher.js +4 -1
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.d.ts +1 -2
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +6 -11
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.md +2 -2
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.d.ts +4 -0
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.js +15 -0
- package/dist/src/migrations/update-24-0-0/enable-legacy-affected.md +30 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.d.ts +3 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.js +100 -0
- package/dist/src/migrations/update-24-0-0/find-custom-hashers.md +63 -0
- package/dist/src/migrations/update-24-0-0/move-custom-hashers-to-inputs.md +146 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.d.ts +3 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.js +130 -0
- package/dist/src/migrations/update-24-0-0/rename-ultracache-ignore-options.md +62 -0
- package/dist/src/native/assert-supported-platform.js +1 -1
- package/dist/src/native/index.d.ts +238 -18
- package/dist/src/native/index.js +6 -1
- package/dist/src/native/native-bindings.js +15 -6
- package/dist/src/native/nx.openharmony-arm64.node +0 -0
- package/dist/src/native/nx.wasi-browser.js +1 -0
- package/dist/src/native/nx.wasi.cjs +1 -0
- package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
- package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
- package/dist/src/nx-cloud/update-manager.d.ts +14 -0
- package/dist/src/nx-cloud/update-manager.js +237 -50
- package/dist/src/plugins/js/lock-file/pnpm-parser.js +3 -4
- package/dist/src/plugins/js/lock-file/pruned-output.d.ts +2 -2
- package/dist/src/plugins/js/lock-file/pruned-output.js +4 -4
- package/dist/src/plugins/js/utils/register.js +9 -4
- package/dist/src/project-graph/affected/affected-tasks.d.ts +9 -6
- package/dist/src/project-graph/affected/affected-tasks.js +31 -7
- package/dist/src/project-graph/plugins/isolation/isolated-plugin.js +7 -0
- package/dist/src/project-graph/plugins/loaded-nx-plugin.js +49 -6
- package/dist/src/project-graph/utils/project-configuration/target-merging.js +1 -1
- package/dist/src/project-graph/utils/project-configuration/target-normalization.js +12 -133
- package/dist/src/project-graph/utils/project-configuration-utils.js +2 -2
- package/dist/src/project-graph/utils/retrieve-workspace-files.js +27 -6
- package/dist/src/tasks-runner/create-task-graph.d.ts +8 -7
- package/dist/src/tasks-runner/create-task-graph.js +50 -27
- package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
- package/dist/src/tasks-runner/init-tasks-runner.js +116 -59
- package/dist/src/tasks-runner/life-cycle.d.ts +4 -1
- package/dist/src/tasks-runner/life-cycle.js +7 -0
- package/dist/src/tasks-runner/life-cycles/performance-analysis.d.ts +5 -2
- package/dist/src/tasks-runner/life-cycles/performance-analysis.js +13 -7
- package/dist/src/tasks-runner/life-cycles/performance-life-cycle.d.ts +4 -3
- package/dist/src/tasks-runner/life-cycles/performance-life-cycle.js +9 -2
- package/dist/src/tasks-runner/life-cycles/static-run-many-terminal-output-life-cycle.js +5 -2
- package/dist/src/tasks-runner/life-cycles/static-run-one-terminal-output-life-cycle.js +4 -1
- package/dist/src/tasks-runner/life-cycles/summary-terminal-output-life-cycle.js +5 -1
- package/dist/src/tasks-runner/pseudo-ipc.d.ts +1 -0
- package/dist/src/tasks-runner/pseudo-ipc.js +4 -0
- package/dist/src/tasks-runner/pseudo-terminal.d.ts +1 -1
- package/dist/src/tasks-runner/pseudo-terminal.js +2 -2
- package/dist/src/tasks-runner/readiness/executor-ready-signal.d.ts +7 -0
- package/dist/src/tasks-runner/readiness/executor-ready-signal.js +43 -0
- package/dist/src/tasks-runner/readiness/probes.d.ts +14 -0
- package/dist/src/tasks-runner/readiness/probes.js +101 -0
- package/dist/src/tasks-runner/readiness/ready-signal-server.d.ts +18 -0
- package/dist/src/tasks-runner/readiness/ready-signal-server.js +72 -0
- package/dist/src/tasks-runner/readiness/ready-signal.d.ts +33 -0
- package/dist/src/tasks-runner/readiness/ready-signal.js +92 -0
- package/dist/src/tasks-runner/readiness/ready-when.d.ts +84 -0
- package/dist/src/tasks-runner/readiness/ready-when.js +371 -0
- package/dist/src/tasks-runner/readiness/startup-host.d.ts +1 -0
- package/dist/src/tasks-runner/readiness/startup-host.js +32 -0
- package/dist/src/tasks-runner/run-command.d.ts +6 -2
- package/dist/src/tasks-runner/run-command.js +21 -31
- package/dist/src/tasks-runner/run-outcome.d.ts +16 -0
- package/dist/src/tasks-runner/run-outcome.js +39 -0
- package/dist/src/tasks-runner/running-tasks/batch-process.js +6 -0
- package/dist/src/tasks-runner/running-tasks/node-child-process.js +5 -4
- package/dist/src/tasks-runner/running-tasks/running-task.d.ts +1 -1
- package/dist/src/tasks-runner/task-env.d.ts +10 -0
- package/dist/src/tasks-runner/task-env.js +37 -5
- package/dist/src/tasks-runner/task-graph-utils.d.ts +9 -6
- package/dist/src/tasks-runner/task-graph-utils.js +17 -12
- package/dist/src/tasks-runner/task-orchestrator.d.ts +62 -18
- package/dist/src/tasks-runner/task-orchestrator.js +750 -150
- package/dist/src/tasks-runner/tasks-runner.d.ts +1 -1
- package/dist/src/tasks-runner/tasks-schedule.d.ts +18 -1
- package/dist/src/tasks-runner/tasks-schedule.js +63 -6
- package/dist/src/tasks-runner/tokens.d.ts +54 -0
- package/dist/src/tasks-runner/tokens.js +161 -0
- package/dist/src/tasks-runner/utils.d.ts +35 -6
- package/dist/src/tasks-runner/utils.js +149 -68
- package/dist/src/ultracache/ci-status.d.ts +24 -0
- package/dist/src/ultracache/ci-status.js +87 -0
- package/dist/src/ultracache/config.d.ts +3 -3
- package/dist/src/ultracache/config.js +4 -4
- package/dist/src/ultracache/fetch.d.ts +2 -0
- package/dist/src/ultracache/fetch.js +1 -0
- package/dist/src/ultracache/overrides.js +4 -0
- package/dist/src/utils/acknowledge-build-scripts.d.ts +34 -1
- package/dist/src/utils/acknowledge-build-scripts.js +171 -32
- package/dist/src/utils/child-process.js +2 -1
- package/dist/src/utils/find-matching-projects.js +9 -6
- package/dist/src/utils/git-utils.d.ts +12 -5
- package/dist/src/utils/git-utils.js +69 -11
- package/dist/src/utils/long-running-target.d.ts +1 -3
- package/dist/src/utils/long-running-target.js +1 -3
- package/dist/src/utils/output.d.ts +4 -3
- package/dist/src/utils/output.js +4 -3
- package/dist/src/utils/owned-private-dir.d.ts +1 -17
- package/dist/src/utils/owned-private-dir.js +10 -62
- package/dist/src/utils/package-manager.d.ts +8 -0
- package/dist/src/utils/package-manager.js +65 -8
- package/dist/src/utils/perf-hooks.d.ts +1 -0
- package/dist/src/utils/plugins/core-plugins.js +5 -1
- package/dist/src/utils/progress-topics.d.ts +1 -0
- package/dist/src/utils/progress-topics.js +1 -0
- package/dist/src/utils/safe-spawn.js +1 -5
- package/dist/src/utils/shell-quoting.d.ts +8 -1
- package/dist/src/utils/shell-quoting.js +12 -1
- package/dist/src/utils/spawn-without-terminal.d.ts +27 -0
- package/dist/src/utils/spawn-without-terminal.js +110 -0
- package/dist/src/utils/string-similarity.d.ts +38 -0
- package/dist/src/utils/string-similarity.js +108 -0
- package/migrations.json +20 -6
- package/package.json +15 -24
- package/schemas/migrations-schema.json +11 -0
- package/schemas/nx-schema.json +133 -11
- package/schemas/project-schema.json +114 -4
- package/dist/src/command-line/migrate/agentic/prompts/generic-validation.d.ts +0 -56
- package/dist/src/command-line/migrate/agentic/prompts/generic-validation.js +0 -67
- package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.d.ts +0 -49
- package/dist/src/command-line/migrate/agentic/prompts/hybrid-prompt-migration.js +0 -53
- package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.d.ts +0 -26
- package/dist/src/command-line/migrate/agentic/prompts/prompt-migration.js +0 -27
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.d.ts +0 -70
- package/dist/src/command-line/migrate/agentic/prompts/system-prompt.js +0 -113
- package/dist/src/command-line/migrate/agentic/run-step.d.ts +0 -68
- package/dist/src/command-line/migrate/agentic/run-step.js +0 -148
- package/dist/src/command-line/migrate/agentic/runner.d.ts +0 -21
- package/dist/src/command-line/migrate/agentic/runner.js +0 -262
- package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.d.ts +0 -9
- package/dist/src/migrations/update-23-0-0/consolidate-release-tag-config.js +0 -18
- package/dist/src/tasks-runner/legacy-depends-on-warning.d.ts +0 -18
- package/dist/src/tasks-runner/legacy-depends-on-warning.js +0 -109
|
@@ -3,43 +3,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateResolvedVersionPlansAgainstFilter = validateResolvedVersionPlansAgainstFilter;
|
|
4
4
|
exports.getProjectsAffectedByVersionPlan = getProjectsAffectedByVersionPlan;
|
|
5
5
|
exports.areAllVersionPlanProjectsFiltered = areAllVersionPlanProjectsFiltered;
|
|
6
|
-
exports.getVersionPlanProjectsOutsideFilter = getVersionPlanProjectsOutsideFilter;
|
|
7
6
|
/**
|
|
8
|
-
* Validates that
|
|
9
|
-
*
|
|
7
|
+
* Validates that no version plan mixes projects being released with projects outside the release filter,
|
|
8
|
+
* as such a plan could neither be fully applied nor safely deleted.
|
|
10
9
|
*
|
|
11
|
-
* @param releaseGroups -
|
|
10
|
+
* @param releaseGroups - All configured release groups, so that plans spanning groups outside the filter are caught
|
|
12
11
|
* @param releaseGroupToFilteredProjects - Map of release groups to their filtered projects
|
|
13
12
|
* @returns An error object if validation fails, null otherwise
|
|
14
13
|
*/
|
|
15
14
|
function validateResolvedVersionPlansAgainstFilter(releaseGroups, releaseGroupToFilteredProjects) {
|
|
15
|
+
const projectsByPlanFile = new Map();
|
|
16
16
|
for (const releaseGroup of releaseGroups) {
|
|
17
|
-
if (releaseGroup.resolvedVersionPlans
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
if (!releaseGroup.resolvedVersionPlans) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const filteredProjects = releaseGroupToFilteredProjects.get(releaseGroup);
|
|
21
|
+
for (const plan of releaseGroup.resolvedVersionPlans) {
|
|
22
|
+
let projects = projectsByPlanFile.get(plan.fileName);
|
|
23
|
+
if (!projects) {
|
|
24
|
+
projects = { filtered: new Set(), outsideFilter: new Set() };
|
|
25
|
+
projectsByPlanFile.set(plan.fileName, projects);
|
|
26
|
+
}
|
|
27
|
+
for (const project of getProjectsAffectedByVersionPlan(plan, releaseGroup)) {
|
|
28
|
+
if (filteredProjects?.has(project)) {
|
|
29
|
+
projects.filtered.add(project);
|
|
24
30
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (projectsOutsideFilter.length > 0) {
|
|
28
|
-
// Error if version plan contains projects not in the filter
|
|
29
|
-
return {
|
|
30
|
-
title: `Version plan contains projects not included in the release filter`,
|
|
31
|
-
bodyLines: [
|
|
32
|
-
`The following projects in the version plan are not being released:`,
|
|
33
|
-
...projectsOutsideFilter.map((p) => ` - ${p}`),
|
|
34
|
-
'',
|
|
35
|
-
`Either include all projects from the version plan in your release command,`,
|
|
36
|
-
`or create separate version plans for different sets of projects.`,
|
|
37
|
-
],
|
|
38
|
-
};
|
|
31
|
+
else {
|
|
32
|
+
projects.outsideFilter.add(project);
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
35
|
}
|
|
42
36
|
}
|
|
37
|
+
for (const [fileName, { filtered, outsideFilter }] of projectsByPlanFile) {
|
|
38
|
+
if (filtered.size > 0 && outsideFilter.size > 0) {
|
|
39
|
+
return {
|
|
40
|
+
title: `Version plan contains projects not included in the release filter`,
|
|
41
|
+
bodyLines: [
|
|
42
|
+
`The following projects in version plan '${fileName}' are not being released:`,
|
|
43
|
+
...Array.from(outsideFilter).map((p) => ` - ${p}`),
|
|
44
|
+
'',
|
|
45
|
+
`Either include all projects from the version plan in your release command,`,
|
|
46
|
+
`or create separate version plans for different sets of projects.`,
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
43
51
|
return null;
|
|
44
52
|
}
|
|
45
53
|
/**
|
|
@@ -79,33 +87,3 @@ function areAllVersionPlanProjectsFiltered(plan, releaseGroup, filteredProjects)
|
|
|
79
87
|
return (planProjects.size > 0 &&
|
|
80
88
|
Array.from(planProjects).every((project) => filteredProjects.has(project)));
|
|
81
89
|
}
|
|
82
|
-
/**
|
|
83
|
-
* Finds projects in a version plan that are NOT included in the filtered projects set.
|
|
84
|
-
*
|
|
85
|
-
* @param plan - The version plan to check
|
|
86
|
-
* @param releaseGroup - The release group containing the version plan
|
|
87
|
-
* @param filteredProjects - Set of projects that are being released (filtered)
|
|
88
|
-
* @returns Array of project names that are in the version plan but not in the filter
|
|
89
|
-
*/
|
|
90
|
-
function getVersionPlanProjectsOutsideFilter(plan, releaseGroup, filteredProjects) {
|
|
91
|
-
if (!filteredProjects) {
|
|
92
|
-
return [];
|
|
93
|
-
}
|
|
94
|
-
const planProjects = getProjectsAffectedByVersionPlan(plan, releaseGroup);
|
|
95
|
-
return Array.from(planProjects).filter((project) => !filteredProjects.has(project));
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Checks whether the version plan contains any of the filtered projects.
|
|
99
|
-
*
|
|
100
|
-
* @param plan - The version plan to check.
|
|
101
|
-
* @param releaseGroup - The release group associated with the version plan.
|
|
102
|
-
* @param filteredProjects - Set of projects that are being released (filtered).
|
|
103
|
-
* @returns Returns true if the version plan contains any of the filtered projects, or if no filtered projects are provided.
|
|
104
|
-
*/
|
|
105
|
-
function checkVersionPlanContainsFilteredProjects(plan, releaseGroup, filteredProjects) {
|
|
106
|
-
if (!filteredProjects) {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
const planProjects = getProjectsAffectedByVersionPlan(plan, releaseGroup);
|
|
110
|
-
return Array.from(filteredProjects).some((project) => planProjects.has(project));
|
|
111
|
-
}
|
|
@@ -5,6 +5,7 @@ exports.resolveVersionActionsForProject = resolveVersionActionsForProject;
|
|
|
5
5
|
const node_path_1 = require("node:path");
|
|
6
6
|
const register_1 = require("../../../plugins/js/utils/register");
|
|
7
7
|
const utils_1 = require("../../../tasks-runner/utils");
|
|
8
|
+
const interpolate_release_config_1 = require("../utils/interpolate-release-config");
|
|
8
9
|
const workspace_root_1 = require("../../../utils/workspace-root");
|
|
9
10
|
const config_1 = require("../config/config");
|
|
10
11
|
const semver_1 = require("../utils/semver");
|
|
@@ -123,7 +124,7 @@ class VersionActions {
|
|
|
123
124
|
const interpolatedManifestRoots = this.finalConfigForProject.manifestRootsToUpdate.map((manifestRoot) => {
|
|
124
125
|
return {
|
|
125
126
|
...manifestRoot,
|
|
126
|
-
path: (0,
|
|
127
|
+
path: (0, interpolate_release_config_1.interpolateReleaseConfig)(manifestRoot.path, {
|
|
127
128
|
workspaceRoot: '',
|
|
128
129
|
projectRoot: this.projectGraphNode.data.root,
|
|
129
130
|
projectName: this.projectGraphNode.name,
|
|
@@ -47,6 +47,9 @@ function createAPI(overrideReleaseConfig, ignoreNxJsonConfig) {
|
|
|
47
47
|
if (configError) {
|
|
48
48
|
return await (0, config_1.handleNxReleaseConfigError)(configError);
|
|
49
49
|
}
|
|
50
|
+
if (args.gitCommitMessage) {
|
|
51
|
+
(0, config_1.validateCommitMessageTokens)(args.gitCommitMessage);
|
|
52
|
+
}
|
|
50
53
|
// --print-config exits directly as it is not designed to be combined with any other programmatic operations
|
|
51
54
|
if (args.printConfig) {
|
|
52
55
|
return (0, print_config_1.printConfigAndExit)({
|
|
@@ -96,9 +99,9 @@ function createAPI(overrideReleaseConfig, ignoreNxJsonConfig) {
|
|
|
96
99
|
}
|
|
97
100
|
if (!args.specifier) {
|
|
98
101
|
const rawVersionPlans = await (0, version_plans_1.readRawVersionPlans)();
|
|
99
|
-
await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGraph.
|
|
102
|
+
await (0, version_plans_1.setResolvedVersionPlansOnGroups)(rawVersionPlans, releaseGraph.allReleaseGroups, Object.keys(projectGraph.nodes), args.verbose);
|
|
100
103
|
// Validate version plans against the filter after resolution
|
|
101
|
-
const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGraph.
|
|
104
|
+
const versionPlanValidationError = (0, version_plan_utils_1.validateResolvedVersionPlansAgainstFilter)(releaseGraph.allReleaseGroups, releaseGraph.releaseGroupToFilteredProjects);
|
|
102
105
|
if (versionPlanValidationError) {
|
|
103
106
|
output_1.output.error(versionPlanValidationError);
|
|
104
107
|
process.exit(1);
|
|
@@ -6,6 +6,7 @@ const client_1 = require("../../daemon/client/client");
|
|
|
6
6
|
const tmp_dir_1 = require("../../daemon/tmp-dir");
|
|
7
7
|
const cache_directory_1 = require("../../utils/cache-directory");
|
|
8
8
|
const output_1 = require("../../utils/output");
|
|
9
|
+
const spinner_1 = require("../../utils/spinner");
|
|
9
10
|
const native_file_cache_location_1 = require("../../native/native-file-cache-location");
|
|
10
11
|
const workspace_root_1 = require("../../utils/workspace-root");
|
|
11
12
|
const client_2 = require("../../nx-cloud/utilities/client");
|
|
@@ -19,80 +20,63 @@ const INCREMENTAL_BACKOFF_MAX_DURATION = 5000;
|
|
|
19
20
|
// If an operation fails, wait 100ms before first retry.
|
|
20
21
|
const INCREMENTAL_BACKOFF_FIRST_DELAY = 100;
|
|
21
22
|
async function resetHandler(args) {
|
|
22
|
-
|
|
23
|
+
const errors = [];
|
|
23
24
|
const all = args.onlyDaemon === undefined &&
|
|
24
25
|
args.onlyCache === undefined &&
|
|
25
26
|
args.onlyWorkspaceData === undefined;
|
|
26
27
|
const nxJson = (0, configuration_1.readNxJson)();
|
|
27
28
|
const cloudEnabled = (0, nx_cloud_utils_1.isNxCloudUsed)(nxJson);
|
|
28
|
-
const startupMessage = all
|
|
29
|
-
? 'Resetting the Nx cache and stopping the daemon.'
|
|
30
|
-
: 'Resetting:';
|
|
31
|
-
const bodyLines = [];
|
|
32
|
-
if (!all) {
|
|
33
|
-
if (args.onlyDaemon) {
|
|
34
|
-
bodyLines.push('- Nx Daemon and its workspace data');
|
|
35
|
-
}
|
|
36
|
-
if (args.onlyCache) {
|
|
37
|
-
bodyLines.push('- Cache directory');
|
|
38
|
-
}
|
|
39
|
-
if (args.onlyWorkspaceData) {
|
|
40
|
-
bodyLines.push('- Workspace data directory');
|
|
41
|
-
}
|
|
42
|
-
if (args.onlyCloud && cloudEnabled) {
|
|
43
|
-
bodyLines.push('- Nx Cloud Client');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
output_1.output.note({ title: startupMessage, bodyLines });
|
|
47
29
|
if (all || args.onlyDaemon) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
30
|
+
await runResetStep(errors, {
|
|
31
|
+
start: 'Stopping the Nx Daemon',
|
|
32
|
+
success: 'Stopped the Nx Daemon',
|
|
33
|
+
failure: 'Failed to stop the Nx Daemon.',
|
|
34
|
+
run: killDaemon,
|
|
35
|
+
});
|
|
36
|
+
await runResetStep(errors, {
|
|
37
|
+
start: 'Removing the Nx Daemon workspace data',
|
|
38
|
+
success: 'Removed the Nx Daemon workspace data',
|
|
39
|
+
failure: 'Failed to clean up the daemon workspace data directory.',
|
|
40
|
+
run: cleanupDaemonWorkspaceData,
|
|
41
|
+
});
|
|
60
42
|
}
|
|
61
43
|
if (all || args.onlyCache) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
44
|
+
await runResetStep(errors, {
|
|
45
|
+
start: 'Removing the cache directory',
|
|
46
|
+
success: 'Removed the cache directory',
|
|
47
|
+
failure: 'Failed to clean up the cache directory.',
|
|
48
|
+
run: cleanupCacheEntries,
|
|
49
|
+
});
|
|
68
50
|
}
|
|
69
51
|
if (all || args.onlyWorkspaceData) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
52
|
+
await runResetStep(errors, {
|
|
53
|
+
start: 'Removing the workspace data directory',
|
|
54
|
+
success: 'Removed the workspace data directory',
|
|
55
|
+
failure: 'Failed to clean up the workspace data directory.',
|
|
56
|
+
run: async () => {
|
|
57
|
+
try {
|
|
58
|
+
await cleanupNativeFileCache();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// ignore, deleting the native file cache is not critical and can fail if another process is locking the file
|
|
62
|
+
}
|
|
63
|
+
await cleanupWorkspaceData();
|
|
64
|
+
},
|
|
65
|
+
});
|
|
82
66
|
}
|
|
83
67
|
if ((cloudEnabled && all) || args.onlyCloud) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
68
|
+
await runResetStep(errors, {
|
|
69
|
+
start: 'Cleaning up the Nx Cloud client',
|
|
70
|
+
success: 'Cleaned up the Nx Cloud client',
|
|
71
|
+
failure: 'Failed to clean up the Nx Cloud client.',
|
|
72
|
+
run: resetCloudClient,
|
|
73
|
+
});
|
|
74
|
+
await runResetStep(errors, {
|
|
75
|
+
start: 'Removing the installed Nx Cloud client',
|
|
76
|
+
success: 'Removed the installed Nx Cloud client',
|
|
77
|
+
failure: 'Failed to reset the Nx Cloud client.',
|
|
78
|
+
run: removeInstalledNxCloudClient,
|
|
79
|
+
});
|
|
96
80
|
}
|
|
97
81
|
if (errors.length > 0) {
|
|
98
82
|
output_1.output.error({
|
|
@@ -107,6 +91,18 @@ async function resetHandler(args) {
|
|
|
107
91
|
});
|
|
108
92
|
}
|
|
109
93
|
}
|
|
94
|
+
/** Records a failure in `errors` so the remaining steps still run. */
|
|
95
|
+
async function runResetStep(errors, step) {
|
|
96
|
+
spinner_1.globalSpinner.start(step.start);
|
|
97
|
+
try {
|
|
98
|
+
await step.run();
|
|
99
|
+
spinner_1.globalSpinner.succeed(step.success);
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
spinner_1.globalSpinner.fail(step.failure);
|
|
103
|
+
errors.push(step.failure, e.toString());
|
|
104
|
+
}
|
|
105
|
+
}
|
|
110
106
|
async function killDaemon() {
|
|
111
107
|
if (client_1.daemonClient.enabled()) {
|
|
112
108
|
return client_1.daemonClient.stop();
|
|
@@ -44,6 +44,7 @@ projects) {
|
|
|
44
44
|
const batchImplementationFactory = executorConfig.batchImplementation
|
|
45
45
|
? (0, schema_utils_1.getImplementationFactory)(executorConfig.batchImplementation, executorsDir, nodeModule, projects)
|
|
46
46
|
: null;
|
|
47
|
+
// TODO(v25): remove custom hasher support.
|
|
47
48
|
const hasherFactory = executorConfig.hasher
|
|
48
49
|
? (0, schema_utils_1.getImplementationFactory)(executorConfig.hasher, executorsDir, nodeModule, projects)
|
|
49
50
|
: null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NxJsonConfiguration } from '../../config/nx-json';
|
|
2
|
-
import { ProjectGraph } from '../../config/project-graph';
|
|
2
|
+
import { ProjectGraph, ProjectGraphProjectNode } from '../../config/project-graph';
|
|
3
3
|
import { TargetDependencyConfig } from '../../config/workspace-json-project-json';
|
|
4
4
|
export declare function runOne(cwd: string, args: {
|
|
5
5
|
[k: string]: any;
|
|
@@ -7,6 +7,25 @@ export declare function runOne(cwd: string, args: {
|
|
|
7
7
|
excludeTaskDependencies: boolean;
|
|
8
8
|
loadDotEnvFiles: boolean;
|
|
9
9
|
}): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Builds the error shown when the project itself can't be found. Matches the
|
|
12
|
+
* attempted `project:target[:configuration]` against every runnable task id so
|
|
13
|
+
* a project typo (e.g. `webpai:build`) still surfaces the intended task
|
|
14
|
+
* (`webapi:build`).
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCannotFindProjectError(projectGraph: ProjectGraph, projectName: string, target: string, configuration?: string): {
|
|
17
|
+
title: string;
|
|
18
|
+
bodyLines: string[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Validates that `target` exists on the resolved project. When it does not,
|
|
22
|
+
* returns an error describing the available targets (and the closest match, if
|
|
23
|
+
* any) so the user can recover from a typo or discover what they can run.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getRunOneTargetError(project: ProjectGraphProjectNode, target: string, configuration?: string): {
|
|
26
|
+
title: string;
|
|
27
|
+
bodyLines: string[];
|
|
28
|
+
} | null;
|
|
10
29
|
export declare function parseRunOneOptions(cwd: string, parsedArgs: {
|
|
11
30
|
[k: string]: any;
|
|
12
31
|
}, projectGraph: ProjectGraph, nxJson: NxJsonConfiguration): {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runOne = runOne;
|
|
4
|
+
exports.getCannotFindProjectError = getCannotFindProjectError;
|
|
5
|
+
exports.getRunOneTargetError = getRunOneTargetError;
|
|
4
6
|
exports.parseRunOneOptions = parseRunOneOptions;
|
|
5
7
|
const calculate_default_project_name_1 = require("../../config/calculate-default-project-name");
|
|
6
8
|
const configuration_1 = require("../../config/configuration");
|
|
@@ -11,6 +13,7 @@ const command_line_utils_1 = require("../../utils/command-line-utils");
|
|
|
11
13
|
const find_matching_projects_1 = require("../../utils/find-matching-projects");
|
|
12
14
|
const output_1 = require("../../utils/output");
|
|
13
15
|
const split_target_1 = require("../../utils/split-target");
|
|
16
|
+
const string_similarity_1 = require("../../utils/string-similarity");
|
|
14
17
|
const workspace_root_1 = require("../../utils/workspace-root");
|
|
15
18
|
const graph_1 = require("../graph/graph");
|
|
16
19
|
const connect_to_nx_cloud_1 = require("../nx-cloud/connect/connect-to-nx-cloud");
|
|
@@ -28,7 +31,12 @@ async function runOne(cwd, args, extraTargetDependencies = {}, extraOptions = {
|
|
|
28
31
|
configuration: opts.configuration,
|
|
29
32
|
targets: [opts.target],
|
|
30
33
|
}, 'run-one', { printWarnings: args.graph !== 'stdout' }, nxJson);
|
|
31
|
-
const { projects, projectName } = getProjects(projectGraph, opts.project);
|
|
34
|
+
const { projects, projectName } = getProjects(projectGraph, opts.project, opts.target, opts.configuration);
|
|
35
|
+
const targetError = getRunOneTargetError(projects[0], opts.target, opts.configuration);
|
|
36
|
+
if (targetError) {
|
|
37
|
+
output_1.output.error(targetError);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
32
40
|
if (nxArgs.help) {
|
|
33
41
|
await (await (0, handle_import_1.handleImport)('./run.js', __dirname)).printTargetRunHelp({
|
|
34
42
|
...opts,
|
|
@@ -59,7 +67,7 @@ async function runOne(cwd, args, extraTargetDependencies = {}, extraOptions = {
|
|
|
59
67
|
process.exit(status);
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
|
-
function getProjects(projectGraph, projectName) {
|
|
70
|
+
function getProjects(projectGraph, projectName, target, configuration) {
|
|
63
71
|
if (projectGraph.nodes[projectName]) {
|
|
64
72
|
return {
|
|
65
73
|
projectName: projectName,
|
|
@@ -90,11 +98,151 @@ function getProjects(projectGraph, projectName) {
|
|
|
90
98
|
process.exit(1);
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
|
-
output_1.output.error(
|
|
94
|
-
title: `Cannot find project '${projectName}'`,
|
|
95
|
-
});
|
|
101
|
+
output_1.output.error(getCannotFindProjectError(projectGraph, projectName, target, configuration));
|
|
96
102
|
process.exit(1);
|
|
97
103
|
}
|
|
104
|
+
// Keep error output scannable: only show a handful of targets/suggestions.
|
|
105
|
+
const MAX_LISTED_TARGETS = 5;
|
|
106
|
+
const MAX_SUGGESTIONS = 3;
|
|
107
|
+
/**
|
|
108
|
+
* Builds the list of all runnable `project:target` task ids in the workspace,
|
|
109
|
+
* used to suggest the right invocation when a project or target can't be found.
|
|
110
|
+
*/
|
|
111
|
+
function getProjectTargetIds(projectGraph) {
|
|
112
|
+
const ids = [];
|
|
113
|
+
for (const projectName of Object.keys(projectGraph.nodes)) {
|
|
114
|
+
const targets = projectGraph.nodes[projectName].data.targets ?? {};
|
|
115
|
+
for (const targetName of Object.keys(targets)) {
|
|
116
|
+
ids.push(`${projectName}:${targetName}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return ids;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A target (and even a configuration) name can legally contain ':'. When the
|
|
123
|
+
* user typos such a name, `splitTarget` splits on every ':' and parses the
|
|
124
|
+
* trailing segment(s) as separate parts (e.g. `nx:zzcustom:variantt` becomes
|
|
125
|
+
* project `nx`, target `zzcustom`, configuration `variantt`).
|
|
126
|
+
*
|
|
127
|
+
* To match the real name we therefore score the fully-rejoined specifier and
|
|
128
|
+
* every progressively shorter form, and keep whichever produced the closest
|
|
129
|
+
* candidate. Rejoining wins for colon-containing names, while the shorter forms
|
|
130
|
+
* keep matching genuine `target` + `configuration` typos (where the real target
|
|
131
|
+
* name does not carry the configuration suffix). Ties go to the longer form,
|
|
132
|
+
* which is the one that reproduces the name the user actually typed.
|
|
133
|
+
*/
|
|
134
|
+
function findClosestSpecifier(parts, candidates, limit = 1) {
|
|
135
|
+
const present = parts.filter((part) => !!part);
|
|
136
|
+
let best = [];
|
|
137
|
+
for (let end = present.length; end >= 1; end--) {
|
|
138
|
+
const matches = (0, string_similarity_1.rankSuggestions)(present.slice(0, end).join(':'), candidates);
|
|
139
|
+
if (matches.length &&
|
|
140
|
+
(!best.length || matches[0].distance < best[0].distance)) {
|
|
141
|
+
best = matches;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return best.slice(0, limit).map(({ candidate }) => candidate);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Finds the closest available target to what the user typed, staying
|
|
148
|
+
* config-aware. When a configuration was parsed off the specifier, the rejoined
|
|
149
|
+
* `target:configuration` is scored too, so a colon-containing real target name
|
|
150
|
+
* (e.g. `zzcustom:variant`) still matches. Both forms are scored and the closest
|
|
151
|
+
* candidate wins, ties going to the rejoined form -- mirroring
|
|
152
|
+
* `findClosestSpecifier`'s preference order. The bare-`target` tier reuses the
|
|
153
|
+
* precomputed `ranked` list (its head, gated by the suggestion threshold)
|
|
154
|
+
* instead of recomputing distances.
|
|
155
|
+
*/
|
|
156
|
+
function findClosestTarget(target, configuration, availableTargets, ranked) {
|
|
157
|
+
let best;
|
|
158
|
+
if (configuration) {
|
|
159
|
+
[best] = (0, string_similarity_1.rankSuggestions)(`${target}:${configuration}`, availableTargets);
|
|
160
|
+
}
|
|
161
|
+
const nearest = ranked[0];
|
|
162
|
+
if (nearest &&
|
|
163
|
+
(0, string_similarity_1.isWithinSuggestionThreshold)(target, nearest.candidate, nearest.distance) &&
|
|
164
|
+
(!best || nearest.distance < best.distance)) {
|
|
165
|
+
best = nearest;
|
|
166
|
+
}
|
|
167
|
+
return best?.candidate;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Lists up to `MAX_LISTED_TARGETS` targets from a list already ranked by how
|
|
171
|
+
* closely they resemble the target the user typed (closest first, ties broken
|
|
172
|
+
* alphabetically) so the most likely intended targets surface first.
|
|
173
|
+
* `closestMatch` is dropped because it is already surfaced separately as the
|
|
174
|
+
* "Did you mean" suggestion. Appends a "...and N more" line when the project has
|
|
175
|
+
* more targets than we show, and returns no lines at all when the suggestion was
|
|
176
|
+
* the project's only target -- a bare "Available targets:" header reads as "this
|
|
177
|
+
* project has none".
|
|
178
|
+
*/
|
|
179
|
+
function formatAvailableTargets(ranked, closestMatch) {
|
|
180
|
+
const targets = ranked
|
|
181
|
+
.map(({ candidate }) => candidate)
|
|
182
|
+
.filter((candidate) => candidate !== closestMatch);
|
|
183
|
+
if (!targets.length) {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
const shown = targets.slice(0, MAX_LISTED_TARGETS);
|
|
187
|
+
const lines = ['Available targets:', ...shown.map((t) => ` - ${t}`)];
|
|
188
|
+
if (targets.length > shown.length) {
|
|
189
|
+
lines.push(` ...and ${targets.length - shown.length} more`);
|
|
190
|
+
}
|
|
191
|
+
return lines;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Builds the error shown when the project itself can't be found. Matches the
|
|
195
|
+
* attempted `project:target[:configuration]` against every runnable task id so
|
|
196
|
+
* a project typo (e.g. `webpai:build`) still surfaces the intended task
|
|
197
|
+
* (`webapi:build`).
|
|
198
|
+
*/
|
|
199
|
+
function getCannotFindProjectError(projectGraph, projectName, target, configuration) {
|
|
200
|
+
const bodyLines = [];
|
|
201
|
+
const suggestions = findClosestSpecifier([projectName, target, configuration], getProjectTargetIds(projectGraph), MAX_SUGGESTIONS);
|
|
202
|
+
if (suggestions.length) {
|
|
203
|
+
bodyLines.push('Did you mean one of these?', ...suggestions.map((id) => ` - ${id}`));
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
title: `Cannot find project '${projectName}'`,
|
|
207
|
+
bodyLines,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Validates that `target` exists on the resolved project. When it does not,
|
|
212
|
+
* returns an error describing the available targets (and the closest match, if
|
|
213
|
+
* any) so the user can recover from a typo or discover what they can run.
|
|
214
|
+
*/
|
|
215
|
+
function getRunOneTargetError(project, target, configuration) {
|
|
216
|
+
const availableTargets = Object.keys(project.data.targets ?? {});
|
|
217
|
+
if (availableTargets.includes(target)) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
const bodyLines = [];
|
|
221
|
+
// Rank the available targets by distance to the bare target ONCE. This drives
|
|
222
|
+
// the ordered "Available targets" block and doubles as the bare-target tier of
|
|
223
|
+
// the closest-match lookup, so distances are not computed twice.
|
|
224
|
+
const ranked = (0, string_similarity_1.rankByDistance)(target, availableTargets);
|
|
225
|
+
const closestMatch = findClosestTarget(target, configuration, availableTargets, ranked);
|
|
226
|
+
if (closestMatch) {
|
|
227
|
+
bodyLines.push(`Did you mean "${closestMatch}"?`);
|
|
228
|
+
}
|
|
229
|
+
if (!availableTargets.length) {
|
|
230
|
+
bodyLines.push(`The project "${project.name}" does not have any targets configured.`);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
const targetLines = formatAvailableTargets(ranked, closestMatch);
|
|
234
|
+
if (targetLines.length) {
|
|
235
|
+
if (bodyLines.length) {
|
|
236
|
+
bodyLines.push('');
|
|
237
|
+
}
|
|
238
|
+
bodyLines.push(...targetLines);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
title: `Cannot find target "${target}" for project "${project.name}"`,
|
|
243
|
+
bodyLines,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
98
246
|
const targetAliases = {
|
|
99
247
|
b: 'build',
|
|
100
248
|
e: 'e2e',
|
|
@@ -17,6 +17,7 @@ const configuration_1 = require("../../config/configuration");
|
|
|
17
17
|
const async_iterator_1 = require("../../utils/async-iterator");
|
|
18
18
|
const executor_utils_1 = require("./executor-utils");
|
|
19
19
|
const pseudo_terminal_1 = require("../../tasks-runner/pseudo-terminal");
|
|
20
|
+
const executor_ready_signal_1 = require("../../tasks-runner/readiness/executor-ready-signal");
|
|
20
21
|
const child_process_1 = require("child_process");
|
|
21
22
|
function printRunHelp(opts, schema, plugin) {
|
|
22
23
|
(0, print_help_1.printHelp)(`run ${opts.project}:${opts.target}`, schema, {
|
|
@@ -174,6 +175,6 @@ function run(cwd, root, targetDescription, overrides, isVerbose, taskGraph) {
|
|
|
174
175
|
const projectGraph = (0, project_graph_1.readCachedProjectGraph)();
|
|
175
176
|
return (0, handle_errors_1.handleErrors)(isVerbose, async () => {
|
|
176
177
|
const projectsConfigurations = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
|
|
177
|
-
return iteratorToProcessStatusCode(await runExecutorInternal(targetDescription, overrides, root, cwd, projectsConfigurations, (0, configuration_1.readNxJson)(), projectGraph, taskGraph, isVerbose));
|
|
178
|
+
return iteratorToProcessStatusCode((0, executor_ready_signal_1.signalReadyAtBaseUrl)(await runExecutorInternal(targetDescription, overrides, root, cwd, projectsConfigurations, (0, configuration_1.readNxJson)(), projectGraph, taskGraph, isVerbose)));
|
|
178
179
|
});
|
|
179
180
|
}
|
|
@@ -21,12 +21,12 @@ async function showProjectsHandler(args) {
|
|
|
21
21
|
printWarnings: false,
|
|
22
22
|
}, nxJson);
|
|
23
23
|
const explainsTasks = args.affected &&
|
|
24
|
-
(0, affected_tasks_1.selectsAffectedTasks)() &&
|
|
24
|
+
(0, affected_tasks_1.selectsAffectedTasks)(nxJson) &&
|
|
25
25
|
!!args.withTarget?.length &&
|
|
26
26
|
!args.projects;
|
|
27
27
|
if ((0, affected_reasons_1.isExplaining)(nxArgs.explain) && !explainsTasks) {
|
|
28
28
|
throw new Error((0, affected_reasons_1.explainUnavailable)([
|
|
29
|
-
!(0, affected_tasks_1.selectsAffectedTasks)() &&
|
|
29
|
+
!(0, affected_tasks_1.selectsAffectedTasks)(nxJson) && (0, affected_tasks_1.taskGranularityRequirement)(),
|
|
30
30
|
!args.affected && '--affected',
|
|
31
31
|
!args.withTarget?.length && 'targets passed with --withTarget (-t)',
|
|
32
32
|
].filter(Boolean), args.projects ? ['--projects'] : []));
|
|
@@ -35,7 +35,9 @@ async function showProjectsHandler(args) {
|
|
|
35
35
|
if (args.affected) {
|
|
36
36
|
const touchedFiles = await getTouchedFiles(nxArgs);
|
|
37
37
|
// With a target, list projects owning an affected task for it, matching `affected -t`.
|
|
38
|
-
if ((0, affected_tasks_1.selectsAffectedTasks)() &&
|
|
38
|
+
if ((0, affected_tasks_1.selectsAffectedTasks)(nxJson) &&
|
|
39
|
+
args.withTarget?.length &&
|
|
40
|
+
!args.projects) {
|
|
39
41
|
const affectedTasks = await (0, affected_tasks_1.computeAffectedTasks)({
|
|
40
42
|
projectGraph: graph,
|
|
41
43
|
nxJson,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { InputDefinition } from '../../../config/workspace-json-project-json';
|
|
1
|
+
import type { InputDefinition, ReadyWhen } from '../../../config/workspace-json-project-json';
|
|
2
|
+
import { type UltracacheModeInCI } from '../../../ultracache/ci-status';
|
|
2
3
|
import type { ShowTargetBaseOptions } from '../command-object';
|
|
3
4
|
import { type ResolvedTarget } from './utils';
|
|
4
5
|
export declare function showTargetInfoHandler(args: ShowTargetBaseOptions): Promise<void>;
|
|
@@ -13,9 +14,14 @@ declare function resolveTargetInfoData(t: ResolvedTarget): {
|
|
|
13
14
|
customHasher?: boolean;
|
|
14
15
|
dependsOn?: string[];
|
|
15
16
|
_depSources?: number[];
|
|
17
|
+
_continuousDeps?: Record<string, {
|
|
18
|
+
inputsHashed: boolean;
|
|
19
|
+
waitsForReady: boolean;
|
|
20
|
+
}>;
|
|
16
21
|
transitiveTasks?: string[];
|
|
17
22
|
parallelism: boolean;
|
|
18
23
|
continuous: boolean;
|
|
24
|
+
readyWhen?: ReadyWhen;
|
|
19
25
|
cache: boolean;
|
|
20
26
|
inputs?: (string | InputDefinition)[];
|
|
21
27
|
_inputSources?: number[];
|
|
@@ -24,5 +30,8 @@ declare function resolveTargetInfoData(t: ResolvedTarget): {
|
|
|
24
30
|
configurations?: string[];
|
|
25
31
|
defaultConfiguration?: string;
|
|
26
32
|
sourceMap?: Record<string, [file: string, plugin: string]>;
|
|
33
|
+
/** Set by the handler once Nx Cloud confirms the workspace is On. */
|
|
34
|
+
ultracacheInCI: UltracacheModeInCI | undefined;
|
|
35
|
+
ultracacheMode: UltracacheModeInCI;
|
|
27
36
|
};
|
|
28
37
|
export {};
|