nx 23.3.0-beta.7 → 23.3.0-beta.9
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 +1 -1
- package/dist/nx-cloud-internals.d.ts +1 -1
- package/dist/nx-cloud-internals.js +4 -4
- package/dist/src/command-line/affected/affected.js +20 -1
- package/dist/src/command-line/affected/command-object.js +1 -1
- package/dist/src/command-line/migrate/agentic/master/run-master-session.d.ts +6 -2
- package/dist/src/command-line/migrate/agentic/master/run-master-session.js +88 -14
- package/dist/src/command-line/migrate/command-object.d.ts +1 -0
- package/dist/src/command-line/migrate/command-object.js +6 -1
- package/dist/src/command-line/migrate/migrate-analytics.d.ts +34 -9
- package/dist/src/command-line/migrate/migrate-analytics.js +71 -10
- package/dist/src/command-line/migrate/migrate-config.d.ts +5 -2
- package/dist/src/command-line/migrate/migrate-config.js +19 -11
- package/dist/src/command-line/migrate/migrate.d.ts +2 -0
- package/dist/src/command-line/migrate/migrate.js +152 -45
- package/dist/src/command-line/migrate/resolve-package-version.js +2 -19
- package/dist/src/command-line/migrate/run/broker.d.ts +14 -2
- package/dist/src/command-line/migrate/run/broker.js +95 -34
- package/dist/src/command-line/migrate/run/existing-run-report.d.ts +55 -0
- package/dist/src/command-line/migrate/run/existing-run-report.js +225 -0
- package/dist/src/command-line/migrate/run/give-up.d.ts +41 -0
- package/dist/src/command-line/migrate/run/give-up.js +148 -0
- package/dist/src/command-line/migrate/run/index.d.ts +6 -4
- package/dist/src/command-line/migrate/run/index.js +15 -2
- package/dist/src/command-line/migrate/run/issues.d.ts +14 -0
- package/dist/src/command-line/migrate/run/issues.js +59 -0
- package/dist/src/command-line/migrate/run/orchestrator.d.ts +40 -1
- package/dist/src/command-line/migrate/run/orchestrator.js +509 -160
- package/dist/src/command-line/migrate/run/run-id.d.ts +0 -8
- package/dist/src/command-line/migrate/run/run-id.js +0 -30
- package/dist/src/command-line/migrate/run/run-state.d.ts +11 -9
- package/dist/src/command-line/migrate/run/run-state.js +25 -12
- package/dist/src/command-line/migrate/run/runbook.js +9 -4
- package/dist/src/command-line/migrate/run/state-lock.d.ts +31 -0
- package/dist/src/command-line/migrate/run/state-lock.js +126 -0
- package/dist/src/command-line/migrate/run/state-machine.d.ts +15 -0
- package/dist/src/command-line/migrate/run/state-machine.js +137 -10
- package/dist/src/command-line/migrate/run/util.d.ts +1 -0
- package/dist/src/command-line/migrate/run/util.js +21 -0
- package/dist/src/command-line/migrate/run/worker.js +3 -0
- package/dist/src/command-line/migrate/step-actions.d.ts +1 -1
- package/dist/src/command-line/migrate/step-actions.js +7 -1
- package/dist/src/command-line/migrate/text.d.ts +6 -0
- package/dist/src/command-line/migrate/text.js +25 -0
- package/dist/src/command-line/release/utils/release-graph.js +1 -1
- package/dist/src/command-line/release/utils/remote-release-clients/github.js +2 -5
- package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.d.ts +2 -2
- package/dist/src/command-line/release/utils/remote-release-clients/remote-release-client.js +4 -5
- package/dist/src/command-line/release/version/version-actions.d.ts +3 -0
- package/dist/src/command-line/reset/reset.js +10 -4
- package/dist/src/command-line/show/command-object.js +1 -1
- package/dist/src/command-line/show/projects.js +22 -0
- package/dist/src/command-line/yargs-utils/shared-options.d.ts +4 -0
- package/dist/src/command-line/yargs-utils/shared-options.js +16 -0
- package/dist/src/config/task-graph.d.ts +1 -1
- package/dist/src/config/workspace-json-project-json.d.ts +4 -4
- package/dist/src/daemon/client/client.d.ts +3 -3
- package/dist/src/daemon/client/client.js +4 -4
- package/dist/src/daemon/message-types/select-affected-tasks.d.ts +3 -0
- package/dist/src/daemon/message-types/ultracache-configuration-version.d.ts +8 -0
- package/dist/src/daemon/server/handle-hash-tasks.d.ts +2 -2
- package/dist/src/daemon/server/handle-hash-tasks.js +3 -3
- package/dist/src/daemon/server/handle-select-affected-tasks.js +5 -2
- package/dist/src/daemon/server/ultracache-configuration-state.d.ts +7 -0
- package/dist/src/daemon/server/{io-snapshots-state.js → ultracache-configuration-state.js} +5 -4
- package/dist/src/devkit-internals.d.ts +3 -1
- package/dist/src/devkit-internals.js +8 -3
- package/dist/src/hasher/create-task-hasher.d.ts +3 -3
- package/dist/src/hasher/create-task-hasher.js +6 -6
- package/dist/src/hasher/hash-task.d.ts +2 -2
- package/dist/src/hasher/hash-task.js +6 -5
- package/dist/src/hasher/native-task-hasher-impl.d.ts +7 -7
- package/dist/src/hasher/native-task-hasher-impl.js +19 -19
- package/dist/src/hasher/task-hasher.d.ts +14 -14
- package/dist/src/hasher/task-hasher.js +13 -13
- package/dist/src/native/index.d.ts +151 -102
- package/dist/src/native/native-bindings.js +4 -5
- 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/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +15 -8
- package/dist/src/nx-cloud/update-manager.d.ts +3 -3
- package/dist/src/nx-cloud/update-manager.js +19 -13
- package/dist/src/nx-cloud/utilities/client.d.ts +1 -1
- package/dist/src/nx-cloud/utilities/client.js +1 -1
- package/dist/src/nx-cloud/utilities/is-workspace-claimed.js +2 -1
- package/dist/src/nx-cloud/utilities/nx-cloud-http-client.d.ts +5 -0
- package/dist/src/nx-cloud/utilities/nx-cloud-http-client.js +16 -0
- package/dist/src/nx-cloud/utilities/url-shorten.js +17 -10
- package/dist/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +22 -18
- package/dist/src/plugins/js/utils/register.js +11 -3
- package/dist/src/project-graph/affected/affected-reasons.d.ts +116 -0
- package/dist/src/project-graph/affected/affected-reasons.js +459 -0
- package/dist/src/project-graph/affected/affected-tasks.d.ts +23 -10
- package/dist/src/project-graph/affected/affected-tasks.js +203 -31
- package/dist/src/project-graph/affected/print-explanation.d.ts +11 -0
- package/dist/src/project-graph/affected/print-explanation.js +44 -0
- package/dist/src/tasks-runner/default-tasks-runner.js +1 -1
- package/dist/src/tasks-runner/init-tasks-runner.d.ts +5 -5
- package/dist/src/tasks-runner/init-tasks-runner.js +8 -15
- package/dist/src/tasks-runner/run-command.d.ts +7 -7
- package/dist/src/tasks-runner/run-command.js +19 -23
- package/dist/src/tasks-runner/task-orchestrator.d.ts +7 -3
- package/dist/src/tasks-runner/task-orchestrator.js +9 -8
- package/dist/src/tasks-runner/tasks-runner.d.ts +2 -0
- package/dist/src/ultracache/config.d.ts +21 -0
- package/dist/src/ultracache/config.js +29 -0
- package/dist/src/ultracache/fetch.d.ts +21 -0
- package/dist/src/{io-snapshots → ultracache}/fetch.js +9 -9
- package/dist/src/ultracache/overrides.d.ts +17 -0
- package/dist/src/{io-snapshots → ultracache}/overrides.js +14 -13
- package/dist/src/ultracache/report.d.ts +13 -0
- package/dist/src/{io-snapshots → ultracache}/report.js +15 -21
- package/dist/src/ultracache/store.d.ts +40 -0
- package/dist/src/{io-snapshots → ultracache}/store.js +45 -45
- package/dist/src/utils/ab-testing.js +11 -12
- package/dist/src/utils/command-line-utils.d.ts +1 -0
- package/dist/src/utils/create-cli-options.d.ts +6 -0
- package/dist/src/utils/create-cli-options.js +29 -0
- package/dist/src/utils/db-connection.d.ts +1 -0
- package/dist/src/utils/db-connection.js +1 -0
- package/dist/src/utils/git-utils.d.ts +7 -0
- package/dist/src/utils/git-utils.js +21 -9
- package/dist/src/utils/http-client.d.ts +27 -0
- package/dist/src/utils/http-client.js +193 -0
- package/package.json +12 -38
- package/dist/src/daemon/message-types/io-snapshot-version.d.ts +0 -5
- package/dist/src/daemon/server/io-snapshots-state.d.ts +0 -7
- package/dist/src/io-snapshots/config.d.ts +0 -23
- package/dist/src/io-snapshots/config.js +0 -32
- package/dist/src/io-snapshots/fetch.d.ts +0 -21
- package/dist/src/io-snapshots/outputs.d.ts +0 -12
- package/dist/src/io-snapshots/outputs.js +0 -33
- package/dist/src/io-snapshots/overrides.d.ts +0 -17
- package/dist/src/io-snapshots/report.d.ts +0 -13
- package/dist/src/io-snapshots/store.d.ts +0 -37
- package/dist/src/nx-cloud/utilities/axios.d.ts +0 -4
- package/dist/src/nx-cloud/utilities/axios.js +0 -17
- /package/dist/src/daemon/message-types/{io-snapshot-version.js → ultracache-configuration-version.js} +0 -0
|
@@ -211,7 +211,7 @@ class DaemonClient {
|
|
|
211
211
|
async getAllFileData() {
|
|
212
212
|
return await this.sendToDaemonViaQueue({ type: 'REQUEST_FILE_DATA' });
|
|
213
213
|
}
|
|
214
|
-
hashTasks(runnerOptions, tasks, taskGraph, perTaskEnvs, cwd, collectInputs,
|
|
214
|
+
hashTasks(runnerOptions, tasks, taskGraph, perTaskEnvs, cwd, collectInputs, ultracacheConfigurationsVersion) {
|
|
215
215
|
return this.sendToDaemonViaQueue({
|
|
216
216
|
type: 'HASH_TASKS',
|
|
217
217
|
runnerOptions,
|
|
@@ -221,10 +221,10 @@ class DaemonClient {
|
|
|
221
221
|
collectInputs,
|
|
222
222
|
// An External cannot cross the socket: the version names the stored set
|
|
223
223
|
// to hash from. Absent means native hashing.
|
|
224
|
-
|
|
224
|
+
ultracacheConfigurationsVersion,
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
|
-
hashTasksUpfront(runnerOptions, tasks, taskGraph, perTaskEnvs, cwd, collectInputs,
|
|
227
|
+
hashTasksUpfront(runnerOptions, tasks, taskGraph, perTaskEnvs, cwd, collectInputs, ultracacheConfigurationsVersion) {
|
|
228
228
|
return this.sendToDaemonViaQueue({
|
|
229
229
|
type: 'HASH_TASKS_UPFRONT',
|
|
230
230
|
runnerOptions,
|
|
@@ -232,7 +232,7 @@ class DaemonClient {
|
|
|
232
232
|
...withoutTaskResults(tasks, taskGraph),
|
|
233
233
|
cwd,
|
|
234
234
|
collectInputs,
|
|
235
|
-
|
|
235
|
+
ultracacheConfigurationsVersion,
|
|
236
236
|
});
|
|
237
237
|
}
|
|
238
238
|
async registerFileWatcher(config, callback) {
|
|
@@ -2,6 +2,7 @@ import type { ProjectGraph } from '../../config/project-graph';
|
|
|
2
2
|
import type { TaskGraph } from '../../config/task-graph';
|
|
3
3
|
import type { TaskSelection } from '../../tasks-runner/run-command';
|
|
4
4
|
import type { AffectedTasksRequest } from '../../project-graph/affected/affected-tasks';
|
|
5
|
+
import type { InternedExplanation } from '../../project-graph/affected/affected-reasons';
|
|
5
6
|
export declare const SELECT_AFFECTED_TASKS: 'SELECT_AFFECTED_TASKS';
|
|
6
7
|
export type HandleSelectAffectedTasksMessage = {
|
|
7
8
|
type: typeof SELECT_AFFECTED_TASKS;
|
|
@@ -14,5 +15,7 @@ export type SelectAffectedTasksResponse = {
|
|
|
14
15
|
taskGraph: TaskGraph;
|
|
15
16
|
/** Without a planning context: the plans stay in the daemon. */
|
|
16
17
|
taskSelection: TaskSelection;
|
|
18
|
+
/** Interned, so it stays small on the wire; the client hydrates it. */
|
|
19
|
+
explanation?: InternedExplanation;
|
|
17
20
|
};
|
|
18
21
|
export declare function isHandleSelectAffectedTasksMessage(message: unknown): message is HandleSelectAffectedTasksMessage;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Task, TaskGraph } from '../../config/task-graph';
|
|
2
|
-
import type {
|
|
2
|
+
import type { UltracacheConfigurationVersion } from '../message-types/ultracache-configuration-version';
|
|
3
3
|
interface HashTasksPayload {
|
|
4
4
|
runnerOptions: any;
|
|
5
5
|
tasks: Task[];
|
|
@@ -7,7 +7,7 @@ interface HashTasksPayload {
|
|
|
7
7
|
perTaskEnvs: Record<string, NodeJS.ProcessEnv>;
|
|
8
8
|
cwd: string;
|
|
9
9
|
collectInputs?: boolean;
|
|
10
|
-
|
|
10
|
+
ultracacheConfigurationsVersion?: UltracacheConfigurationVersion;
|
|
11
11
|
}
|
|
12
12
|
export declare function handleHashTasks(payload: HashTasksPayload): Promise<{
|
|
13
13
|
response: import("../../hasher/task-hasher").Hash[];
|
|
@@ -5,7 +5,7 @@ exports.handleHashTasksUpfront = handleHashTasksUpfront;
|
|
|
5
5
|
const project_graph_incremental_recomputation_1 = require("./project-graph-incremental-recomputation");
|
|
6
6
|
const task_hasher_1 = require("../../hasher/task-hasher");
|
|
7
7
|
const configuration_1 = require("../../config/configuration");
|
|
8
|
-
const
|
|
8
|
+
const ultracache_configuration_state_1 = require("./ultracache-configuration-state");
|
|
9
9
|
const planning_context_1 = require("./planning-context");
|
|
10
10
|
/**
|
|
11
11
|
* We use this not to recreated hasher for every hash operation
|
|
@@ -27,7 +27,7 @@ async function getHasher(runnerOptions) {
|
|
|
27
27
|
}
|
|
28
28
|
async function handleHashTasks(payload) {
|
|
29
29
|
const hasher = await getHasher(payload.runnerOptions);
|
|
30
|
-
const response = await hasher.hashTasks(payload.tasks, payload.taskGraph, payload.perTaskEnvs, payload.cwd, payload.collectInputs, (0,
|
|
30
|
+
const response = await hasher.hashTasks(payload.tasks, payload.taskGraph, payload.perTaskEnvs, payload.cwd, payload.collectInputs, (0, ultracache_configuration_state_1.getUltracacheConfigurationsForVersion)(payload.ultracacheConfigurationsVersion));
|
|
31
31
|
return {
|
|
32
32
|
response,
|
|
33
33
|
description: 'handleHashTasks',
|
|
@@ -35,7 +35,7 @@ async function handleHashTasks(payload) {
|
|
|
35
35
|
}
|
|
36
36
|
async function handleHashTasksUpfront(payload) {
|
|
37
37
|
const hasher = await getHasher(payload.runnerOptions);
|
|
38
|
-
const response = await hasher.hashTasksUpfront(payload.tasks, payload.taskGraph, payload.perTaskEnvs, payload.cwd, payload.collectInputs, (0,
|
|
38
|
+
const response = await hasher.hashTasksUpfront(payload.tasks, payload.taskGraph, payload.perTaskEnvs, payload.cwd, payload.collectInputs, (0, ultracache_configuration_state_1.getUltracacheConfigurationsForVersion)(payload.ultracacheConfigurationsVersion));
|
|
39
39
|
return {
|
|
40
40
|
response,
|
|
41
41
|
description: 'handleHashTasksUpfront',
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.handleSelectAffectedTasks = handleSelectAffectedTasks;
|
|
4
4
|
const configuration_1 = require("../../config/configuration");
|
|
5
5
|
const affected_tasks_1 = require("../../project-graph/affected/affected-tasks");
|
|
6
|
-
const
|
|
6
|
+
const ultracache_configuration_state_1 = require("./ultracache-configuration-state");
|
|
7
7
|
const planning_context_1 = require("./planning-context");
|
|
8
8
|
const project_graph_incremental_recomputation_1 = require("./project-graph-incremental-recomputation");
|
|
9
9
|
async function handleSelectAffectedTasks(request) {
|
|
@@ -12,12 +12,15 @@ async function handleSelectAffectedTasks(request) {
|
|
|
12
12
|
throw error;
|
|
13
13
|
}
|
|
14
14
|
const nxJson = (0, configuration_1.readNxJson)();
|
|
15
|
-
const selection = await (0, affected_tasks_1.selectAffectedTasks)(projectGraph, nxJson, (0, planning_context_1.planningContextFor)(projectGraph, nxJson), request, {
|
|
15
|
+
const selection = await (0, affected_tasks_1.selectAffectedTasks)(projectGraph, nxJson, (0, planning_context_1.planningContextFor)(projectGraph, nxJson), request, {
|
|
16
|
+
ultracacheConfigurations: (0, ultracache_configuration_state_1.getUltracacheConfigurationsForVersion)(request.ultracacheConfigurationsVersion),
|
|
17
|
+
});
|
|
16
18
|
const response = {
|
|
17
19
|
projectGraph,
|
|
18
20
|
affectedTaskIds: [...selection.affectedTaskIds],
|
|
19
21
|
taskGraph: selection.taskGraph,
|
|
20
22
|
taskSelection: selection.taskSelection,
|
|
23
|
+
explanation: selection.explanation,
|
|
21
24
|
};
|
|
22
25
|
return { response, description: 'handleSelectAffectedTasks' };
|
|
23
26
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UltracacheConfigurations } from '../../native';
|
|
2
|
+
import type { UltracacheConfigurationVersion } from '../message-types/ultracache-configuration-version';
|
|
3
|
+
/**
|
|
4
|
+
* Exactly the version the client hashes from, never a newer import for the
|
|
5
|
+
* same commit. `undefined` when it is not stored, e.g. after `nx reset`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getUltracacheConfigurationsForVersion(version: UltracacheConfigurationVersion | undefined): UltracacheConfigurations | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const store_1 = require("../../
|
|
3
|
+
exports.getUltracacheConfigurationsForVersion = getUltracacheConfigurationsForVersion;
|
|
4
|
+
const store_1 = require("../../ultracache/store");
|
|
5
5
|
// One handle at a time: entries read for a request serve the next one while
|
|
6
6
|
// the version holds, and another version replaces it, so nothing accumulates
|
|
7
7
|
// over a long-lived daemon.
|
|
@@ -10,7 +10,7 @@ let remembered;
|
|
|
10
10
|
* Exactly the version the client hashes from, never a newer import for the
|
|
11
11
|
* same commit. `undefined` when it is not stored, e.g. after `nx reset`.
|
|
12
12
|
*/
|
|
13
|
-
function
|
|
13
|
+
function getUltracacheConfigurationsForVersion(version) {
|
|
14
14
|
if (!version) {
|
|
15
15
|
return undefined;
|
|
16
16
|
}
|
|
@@ -26,7 +26,8 @@ function getIoSnapshotsForVersion(version) {
|
|
|
26
26
|
}
|
|
27
27
|
function readStored({ commit, fetchedAt, }) {
|
|
28
28
|
try {
|
|
29
|
-
return (0, store_1.
|
|
29
|
+
return ((0, store_1.getUltracacheConfigurationStore)().getVersion(commit, fetchedAt) ??
|
|
30
|
+
undefined);
|
|
30
31
|
}
|
|
31
32
|
catch {
|
|
32
33
|
// An unusable database hashes natively rather than failing the request.
|
|
@@ -47,6 +47,8 @@ export { getEnvFilesForTask, getGraphTimeDotEnvForTask, } from './tasks-runner/t
|
|
|
47
47
|
export { getEnvPathsForTask } from './tasks-runner/task-env-paths';
|
|
48
48
|
export { hashDaemonClientEnv, getDaemonClientEnvGeneration, getAppliedDaemonClientEnv, applyDaemonEnvFromClient, } from './daemon/client/daemon-environment';
|
|
49
49
|
export { isCI } from './utils/is-ci';
|
|
50
|
+
export { createCliOptions } from './utils/create-cli-options';
|
|
51
|
+
export { createOverrides } from './utils/command-line-utils';
|
|
50
52
|
export { isUsingPrettierInTree, prettierConfigFiles, } from './utils/formatters/prettier';
|
|
51
53
|
export { detectFormatter, detectFormatterInTree } from './utils/formatters';
|
|
52
54
|
export type { FormatterType } from './utils/formatters';
|
|
@@ -85,7 +87,7 @@ export { getRelativeProjectJsonSchemaPath } from './generators/utils/project-con
|
|
|
85
87
|
export { hashFile } from './hasher/file-hasher';
|
|
86
88
|
export { filterUsingGlobPatterns, getTargetInputs } from './hasher/task-hasher';
|
|
87
89
|
export type { JsonInput } from './native';
|
|
88
|
-
export { killProcessTreeGraceful } from './native';
|
|
90
|
+
export { isAiAgent, killProcessTreeGraceful } from './native';
|
|
89
91
|
export { killChildOnHostExit } from './utils/kill-child-on-host-exit';
|
|
90
92
|
export { connectToNxCloud } from './nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud';
|
|
91
93
|
export type { NxCloudOnBoardingStatus } from './nx-cloud/models/onboarding-status';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDaemonClientEnvGeneration = exports.hashDaemonClientEnv = exports.getEnvPathsForTask = exports.getGraphTimeDotEnvForTask = exports.getEnvFilesForTask = exports.interpolate = exports.requireWithTsconfigFallback = exports.isTsEsmNamedExportLinkageError = exports.isRequireInEsmScopeError = exports.forceRegisterEsmLoader = exports.loadTsFile = exports.registerTsProject = exports.LoadedNxPlugin = exports.retrieveProjectConfigurations = exports.findProjectForPath = exports.createProjectRootMappings = exports.createProjectRootMappingsFromProjectConfigurations = exports.hashMultiGlobWithWorkspaceContext = exports.hashWithWorkspaceContext = exports.hashObject = exports.splitByColons = exports.installPackageToTmpAsync = exports.installPackageToTmp = exports.readModulePackageJson = exports.stripIndent = exports.sortObjectByKeys = exports.combineOptionsForExecutor = exports.confirmationPrompt = exports.textPrompt = exports.multiselectPrompt = exports.selectPrompt = exports.splitTarget = exports.createPrettierIgnoreChecker = exports.createOxfmtIgnoreChecker = exports.createGitIgnoreChecker = exports.readTargetDefaultsForTarget = exports.createTargetDefaultsResults = exports.findMatchingProjects = exports.findMatchingConfigFiles = exports.readProjectConfigurationsFromRootMap = exports.findMatchingTargetNames = exports.resolveCommandSyntacticSugar = exports.mergeTargetConfigurations = exports.retrieveProjectConfigurationsWithAngularProjects = exports.calculateDefaultProjectName = exports.readNxJsonFromDisk = exports.parseExecutor = exports.getExecutorInformation = exports.parseVersionFromPackageManagerField = exports.createTempNpmDirectory = void 0;
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.safeSpawn = exports.safeExecFileSync = exports.workspaceRootInner = exports.setWorkspaceRoot = exports.setupWorkspaceContext = exports.resetWorkspaceContext = exports.globWithWorkspaceContext = exports.getFilesInDirectoryUsingContext = exports.nxVersion = exports.SyncError = exports.quoteShellArg = exports.getSourceDirOfDependentProjects = exports.findAllProjectNodeDependencies = exports.findInstalledPlugins = exports.deriveGroupNameFromTarget = exports.warnUnshippableLocalPathSpec = exports.relocatePrunedLocalPathSpec = exports.movePeerDependencyToDependencies = exports.dropEmptyPeerDependencySections = exports.readNxMigrateConfig = exports.isNxCloudUsed = exports.getNxCloudUrl = exports.orange = exports.NX_PREFIX = exports.getNxRequirePaths = exports.isGlobPattern = exports.combineGlobPatterns = exports.getLatestCommitSha = exports.readFileIfExisting = exports.isRelativePath = exports.fileExists = exports.directoryExists = exports.createDirectory = exports.deduceDefaultBase = exports.codeFrameColumns = exports.runNxSync = exports.workspaceDataDirectory = exports.getLastValueFromAsyncIterableIterator = exports.validateOutputs = exports.unparse = exports.transformLegacyOutputs = exports.shouldStreamOutput = exports.removeTasksFromTaskGraph = exports.readProjectAndTargetFromTargetString = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = void 0;
|
|
4
|
+
exports.connectToNxCloud = exports.killChildOnHostExit = exports.killProcessTreeGraceful = exports.isAiAgent = exports.getTargetInputs = exports.filterUsingGlobPatterns = exports.hashFile = exports.getRelativeProjectJsonSchemaPath = exports.FsTree = exports.LARGE_BUFFER = exports.daemonClient = exports.isProjectGraphProjectNode = exports.isProjectGraphExternalNode = exports.fileDataDepType = exports.fileDataDepTarget = exports.BatchFunctionRunner = exports.getGeneratorInformation = exports.setupAiAgentsGenerator = exports.toOldFormat = exports.toNewFormat = exports.runCommandsExecutor = exports.acknowledgeBuildScripts = exports.getCatalogDependenciesFromPackageJson = exports.getCatalogManager = exports.checkFilesAreOutputs = exports.checkFilesAreInputs = exports.PromptResolutionError = exports.resolvePrompt = exports.SchemaResolutionError = exports.ImplementationResolutionError = exports.resolveSchema = exports.resolveImplementation = exports.emitPluginWorkerLog = exports.safeWriteFileCache = exports.PluginCache = exports.handleImport = exports.signalToCode = exports.globalSpinner = exports.readYamlFile = exports.oxfmtConfigFiles = exports.formatFilesWithOxfmt = exports.detectFormatterInTree = exports.detectFormatter = exports.prettierConfigFiles = exports.isUsingPrettierInTree = exports.createOverrides = exports.createCliOptions = exports.isCI = exports.applyDaemonEnvFromClient = exports.getAppliedDaemonClientEnv = void 0;
|
|
5
|
+
exports.getTargetConfigurationForTask = exports.getSerializedArgsForTask = exports.getPrintableCommandArgsForTask = exports.getOutputs = exports.getExecutorNameForTask = exports.getExecutorForTask = exports.getDependencyConfigs = exports.getCustomHasher = exports.getCliPath = exports.expandWildcardTargetConfiguration = exports.expandInitiatingTasksThroughNoop = exports.expandDependencyConfigSyntaxSugar = exports.createTaskId = exports.calculateReverseDeps = exports.createRunManyDynamicOutputRenderer = exports.CompositeLifeCycle = exports.RemoteCacheV2 = exports.Cache = exports.readCachedProjectConfiguration = exports.preventRecursionInGraphConstruction = exports.handleProjectGraphError = exports.createProjectGraphAndSourceMapsAsync = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.isNpmProject = exports.readFileMapCache = exports.readPackageJson = exports.isWholeFileChange = exports.isLockFileChange = exports.isDeletedFileChange = exports.defaultFileRead = exports.calculateFileChanges = exports.WholeFileChange = exports.TEN_MEGABYTES = exports.LockFileChange = exports.DeletedFileChange = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.registerTsConfigPaths = exports.getWorkspacePackagesFromGraph = exports.isBuiltinModuleImport = exports.TargetProjectLocator = exports.findProjectsNpmDependencies = exports.createPackageJson = exports.getLockFileName = exports.generatePrunedDeployOutput = exports.createLockFile = exports.createNxCloudOnboardingURL = exports.getNxCloudAppOnBoardingUrl = exports.createNxCloudOnboardingURLForWelcomeApp = void 0;
|
|
6
|
+
exports.safeSpawn = exports.safeExecFileSync = exports.workspaceRootInner = exports.setWorkspaceRoot = exports.setupWorkspaceContext = exports.resetWorkspaceContext = exports.globWithWorkspaceContext = exports.getFilesInDirectoryUsingContext = exports.nxVersion = exports.SyncError = exports.quoteShellArg = exports.getSourceDirOfDependentProjects = exports.findAllProjectNodeDependencies = exports.findInstalledPlugins = exports.deriveGroupNameFromTarget = exports.warnUnshippableLocalPathSpec = exports.relocatePrunedLocalPathSpec = exports.movePeerDependencyToDependencies = exports.dropEmptyPeerDependencySections = exports.readNxMigrateConfig = exports.isNxCloudUsed = exports.getNxCloudUrl = exports.orange = exports.NX_PREFIX = exports.getNxRequirePaths = exports.isGlobPattern = exports.combineGlobPatterns = exports.getLatestCommitSha = exports.readFileIfExisting = exports.isRelativePath = exports.fileExists = exports.directoryExists = exports.createDirectory = exports.deduceDefaultBase = exports.codeFrameColumns = exports.runNxSync = exports.workspaceDataDirectory = exports.getLastValueFromAsyncIterableIterator = exports.validateOutputs = exports.unparse = exports.transformLegacyOutputs = exports.shouldStreamOutput = exports.removeTasksFromTaskGraph = exports.readProjectAndTargetFromTargetString = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = exports.normalizeDependencyConfigDefinition = exports.isCacheableTask = exports.getUnparsedOverrideArgs = void 0;
|
|
7
7
|
const tslib_1 = require("tslib");
|
|
8
8
|
/**
|
|
9
9
|
* Note to developers: STOP! These are nx internals, not part of the public
|
|
@@ -112,6 +112,10 @@ Object.defineProperty(exports, "getAppliedDaemonClientEnv", { enumerable: true,
|
|
|
112
112
|
Object.defineProperty(exports, "applyDaemonEnvFromClient", { enumerable: true, get: function () { return daemon_environment_1.applyDaemonEnvFromClient; } });
|
|
113
113
|
var is_ci_1 = require("./utils/is-ci");
|
|
114
114
|
Object.defineProperty(exports, "isCI", { enumerable: true, get: function () { return is_ci_1.isCI; } });
|
|
115
|
+
var create_cli_options_1 = require("./utils/create-cli-options");
|
|
116
|
+
Object.defineProperty(exports, "createCliOptions", { enumerable: true, get: function () { return create_cli_options_1.createCliOptions; } });
|
|
117
|
+
var command_line_utils_1 = require("./utils/command-line-utils");
|
|
118
|
+
Object.defineProperty(exports, "createOverrides", { enumerable: true, get: function () { return command_line_utils_1.createOverrides; } });
|
|
115
119
|
var prettier_1 = require("./utils/formatters/prettier");
|
|
116
120
|
Object.defineProperty(exports, "isUsingPrettierInTree", { enumerable: true, get: function () { return prettier_1.isUsingPrettierInTree; } });
|
|
117
121
|
Object.defineProperty(exports, "prettierConfigFiles", { enumerable: true, get: function () { return prettier_1.prettierConfigFiles; } });
|
|
@@ -181,6 +185,7 @@ var task_hasher_1 = require("./hasher/task-hasher");
|
|
|
181
185
|
Object.defineProperty(exports, "filterUsingGlobPatterns", { enumerable: true, get: function () { return task_hasher_1.filterUsingGlobPatterns; } });
|
|
182
186
|
Object.defineProperty(exports, "getTargetInputs", { enumerable: true, get: function () { return task_hasher_1.getTargetInputs; } });
|
|
183
187
|
var native_1 = require("./native");
|
|
188
|
+
Object.defineProperty(exports, "isAiAgent", { enumerable: true, get: function () { return native_1.isAiAgent; } });
|
|
184
189
|
Object.defineProperty(exports, "killProcessTreeGraceful", { enumerable: true, get: function () { return native_1.killProcessTreeGraceful; } });
|
|
185
190
|
var kill_child_on_host_exit_1 = require("./utils/kill-child-on-host-exit");
|
|
186
191
|
Object.defineProperty(exports, "killChildOnHostExit", { enumerable: true, get: function () { return kill_child_on_host_exit_1.killChildOnHostExit; } });
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { NxJsonConfiguration } from '../config/nx-json';
|
|
2
2
|
import { ProjectGraph } from '../config/project-graph';
|
|
3
|
-
import type {
|
|
3
|
+
import type { UltracacheConfigurations } from '../native';
|
|
4
4
|
import type { TaskPlanningContext } from './task-planning-context';
|
|
5
5
|
import { TaskHasher } from './task-hasher';
|
|
6
6
|
/**
|
|
7
|
-
* `
|
|
7
|
+
* `ultracacheConfigurations` is this run's set (see `loadUltracacheConfigurationsForRun`); undefined
|
|
8
8
|
* hashes natively. The daemon gets its version, so it hashes from the same
|
|
9
9
|
* set even after a newer one is imported for the commit.
|
|
10
10
|
*/
|
|
11
|
-
export declare function createTaskHasher(projectGraph: ProjectGraph, nxJson: NxJsonConfiguration, runnerOptions?: any,
|
|
11
|
+
export declare function createTaskHasher(projectGraph: ProjectGraph, nxJson: NxJsonConfiguration, runnerOptions?: any, ultracacheConfigurations?: UltracacheConfigurations, planningContext?: TaskPlanningContext): TaskHasher;
|
|
@@ -5,21 +5,21 @@ const client_1 = require("../daemon/client/client");
|
|
|
5
5
|
const build_project_graph_1 = require("../project-graph/build-project-graph");
|
|
6
6
|
const task_hasher_1 = require("./task-hasher");
|
|
7
7
|
/**
|
|
8
|
-
* `
|
|
8
|
+
* `ultracacheConfigurations` is this run's set (see `loadUltracacheConfigurationsForRun`); undefined
|
|
9
9
|
* hashes natively. The daemon gets its version, so it hashes from the same
|
|
10
10
|
* set even after a newer one is imported for the commit.
|
|
11
11
|
*/
|
|
12
|
-
function createTaskHasher(projectGraph, nxJson, runnerOptions,
|
|
12
|
+
function createTaskHasher(projectGraph, nxJson, runnerOptions, ultracacheConfigurations, planningContext) {
|
|
13
13
|
if (client_1.daemonClient.enabled()) {
|
|
14
|
-
return new task_hasher_1.DaemonBasedTaskHasher(client_1.daemonClient, runnerOptions,
|
|
14
|
+
return new task_hasher_1.DaemonBasedTaskHasher(client_1.daemonClient, runnerOptions, ultracacheConfigurations
|
|
15
15
|
? {
|
|
16
|
-
commit:
|
|
17
|
-
fetchedAt:
|
|
16
|
+
commit: ultracacheConfigurations.commit,
|
|
17
|
+
fetchedAt: ultracacheConfigurations.resolution.fetchedAt,
|
|
18
18
|
}
|
|
19
19
|
: undefined);
|
|
20
20
|
}
|
|
21
21
|
else {
|
|
22
22
|
const { rustReferences } = (0, build_project_graph_1.getFileMap)();
|
|
23
|
-
return new task_hasher_1.InProcessTaskHasher(projectGraph, nxJson, rustReferences, runnerOptions, planningContext,
|
|
23
|
+
return new task_hasher_1.InProcessTaskHasher(projectGraph, nxJson, rustReferences, runnerOptions, planningContext, ultracacheConfigurations);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { NxJsonConfiguration } from '../config/nx-json';
|
|
2
2
|
import { ProjectGraph } from '../config/project-graph';
|
|
3
3
|
import { Task, TaskGraph } from '../config/task-graph';
|
|
4
|
-
import { type
|
|
4
|
+
import { type UltracacheConfigurations, TaskDetails } from '../native';
|
|
5
5
|
import { TaskHasher } from './task-hasher';
|
|
6
6
|
export declare function getTaskDetails(): TaskDetails | null;
|
|
7
|
-
export declare function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher: TaskHasher, projectGraph: ProjectGraph, taskGraph: TaskGraph, nxJson: NxJsonConfiguration, tasksDetails: TaskDetails | null,
|
|
7
|
+
export declare function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher: TaskHasher, projectGraph: ProjectGraph, taskGraph: TaskGraph, nxJson: NxJsonConfiguration, tasksDetails: TaskDetails | null, ultracacheConfigurations?: UltracacheConfigurations): Promise<Set<string>>;
|
|
8
8
|
export declare function hashTask(hasher: TaskHasher, projectGraph: ProjectGraph, taskGraph: TaskGraph, task: Task, env: NodeJS.ProcessEnv, taskDetails: TaskDetails | null): Promise<void>;
|
|
9
9
|
/**
|
|
10
10
|
* Batch-hash `tasks`. `perTaskEnvs` must contain an entry keyed by
|
|
@@ -23,13 +23,13 @@ function getTaskDetails() {
|
|
|
23
23
|
}
|
|
24
24
|
return taskDetails;
|
|
25
25
|
}
|
|
26
|
-
async function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher, projectGraph, taskGraph, nxJson, tasksDetails,
|
|
26
|
+
async function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher, projectGraph, taskGraph, nxJson, tasksDetails, ultracacheConfigurations) {
|
|
27
27
|
performance.mark('hashMultipleTasks:start');
|
|
28
28
|
const projects = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph).projects;
|
|
29
|
-
//
|
|
29
|
+
// An Ultracache configuration can make a task depend on producer outputs its declared
|
|
30
30
|
// inputs never mentioned; those hash after their producers too.
|
|
31
|
-
const
|
|
32
|
-
? new Set((0, native_1.
|
|
31
|
+
const deferredByConfiguration = ultracacheConfigurations
|
|
32
|
+
? new Set((0, native_1.getUltracacheDeferredTaskIds)(ultracacheConfigurations, taskGraph))
|
|
33
33
|
: null;
|
|
34
34
|
const tasks = Object.values(taskGraph.tasks);
|
|
35
35
|
const tasksWithHashers = await Promise.all(tasks.map(async (task) => {
|
|
@@ -42,7 +42,7 @@ async function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher, projectGrap
|
|
|
42
42
|
// a continuous server, which only planning reveals.
|
|
43
43
|
const candidates = tasksWithHashers
|
|
44
44
|
.filter(({ task, customHasher }) => !customHasher &&
|
|
45
|
-
!
|
|
45
|
+
!deferredByConfiguration?.has(task.id) &&
|
|
46
46
|
!readsDependencyOutputs(task, taskGraph, projectGraph, nxJson))
|
|
47
47
|
.map((t) => t.task);
|
|
48
48
|
const perTaskEnvs = {};
|
|
@@ -72,6 +72,7 @@ async function hashTasksThatDoNotDependOnOutputsOfOtherTasks(hasher, projectGrap
|
|
|
72
72
|
}
|
|
73
73
|
performance.mark('hashMultipleTasks:end');
|
|
74
74
|
performance.measure('hashMultipleTasks', 'hashMultipleTasks:start', 'hashMultipleTasks:end');
|
|
75
|
+
return new Set(tasks.filter((t) => !(t.id in hashes)).map((t) => t.id));
|
|
75
76
|
}
|
|
76
77
|
function readsDependencyOutputs(task, taskGraph, projectGraph, nxJson) {
|
|
77
78
|
return (taskGraph.dependencies[task.id]?.length > 0 &&
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NxJsonConfiguration } from '../config/nx-json';
|
|
2
2
|
import { ProjectGraph } from '../config/project-graph';
|
|
3
3
|
import { Task, TaskGraph } from '../config/task-graph';
|
|
4
|
-
import { ExternalObject, FileData, HasherOptions, HashPlanner,
|
|
4
|
+
import { ExternalObject, FileData, HasherOptions, HashPlanner, UltracacheConfigurations, ProjectGraph as NativeProjectGraph, NxWorkspaceFilesExternals, TaskHasher } from '../native';
|
|
5
5
|
import type { IgnoredIndexReader } from '../native';
|
|
6
6
|
import type { TaskPlanningContext } from './task-planning-context';
|
|
7
7
|
import { PartialHash, TaskHasherImpl } from './task-hasher';
|
|
@@ -22,13 +22,13 @@ export declare class NativeTaskHasherImpl implements TaskHasherImpl {
|
|
|
22
22
|
constructor(workspaceRoot: string, nxJson: NxJsonConfiguration, projectGraph: ProjectGraph, externals: NxWorkspaceFilesExternals, options: {
|
|
23
23
|
selectivelyHashTsConfig: boolean;
|
|
24
24
|
}, planningContext?: TaskPlanningContext);
|
|
25
|
-
hashTask(task: Task, taskGraph: TaskGraph, env: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean,
|
|
26
|
-
hashTasks(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
25
|
+
hashTask(task: Task, taskGraph: TaskGraph, env: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<PartialHash>;
|
|
26
|
+
hashTasks(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<PartialHash[]>;
|
|
27
27
|
/**
|
|
28
|
-
* Plans through the native planner. With
|
|
29
|
-
* custom-hashed or opted out ride along so the
|
|
30
|
-
* withholds their
|
|
28
|
+
* Plans through the native planner. With Ultracache configurations, the
|
|
29
|
+
* tasks JS resolves as custom-hashed or opted out ride along so the
|
|
30
|
+
* planner's eligibility walk withholds their entries.
|
|
31
31
|
*/
|
|
32
32
|
private plan;
|
|
33
|
-
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
33
|
+
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<Record<string, PartialHash>>;
|
|
34
34
|
}
|
|
@@ -6,7 +6,7 @@ const transform_objects_1 = require("../native/transform-objects");
|
|
|
6
6
|
const typescript_1 = require("../plugins/js/utils/typescript");
|
|
7
7
|
const task_io_service_1 = require("../tasks-runner/task-io-service");
|
|
8
8
|
const fileutils_1 = require("../utils/fileutils");
|
|
9
|
-
const overrides_1 = require("../
|
|
9
|
+
const overrides_1 = require("../ultracache/overrides");
|
|
10
10
|
class NativeTaskHasherImpl {
|
|
11
11
|
constructor(workspaceRoot, nxJson, projectGraph, externals, options, planningContext) {
|
|
12
12
|
this.projectGraph = projectGraph;
|
|
@@ -36,11 +36,11 @@ class NativeTaskHasherImpl {
|
|
|
36
36
|
planningContext?.planner ?? new native_1.HashPlanner(nxJson, this.projectGraphRef);
|
|
37
37
|
this.hasher = new native_1.TaskHasher(workspaceRoot, this.projectGraphRef, this.projectFileMapRef, this.allWorkspaceFilesRef, Buffer.from(JSON.stringify(tsconfig)), paths, rootTsConfigPath, options, this.ignoredIndexRef);
|
|
38
38
|
}
|
|
39
|
-
async hashTask(task, taskGraph, env, cwd, collectInputs,
|
|
40
|
-
const hashes = await this.hashTasks([task], taskGraph, { [task.id]: env }, cwd, collectInputs,
|
|
39
|
+
async hashTask(task, taskGraph, env, cwd, collectInputs, ultracacheConfigurations) {
|
|
40
|
+
const hashes = await this.hashTasks([task], taskGraph, { [task.id]: env }, cwd, collectInputs, ultracacheConfigurations);
|
|
41
41
|
return hashes[0];
|
|
42
42
|
}
|
|
43
|
-
async hashTasks(tasks, taskGraph, perTaskEnvs, cwd, collectInputs,
|
|
43
|
+
async hashTasks(tasks, taskGraph, perTaskEnvs, cwd, collectInputs, ultracacheConfigurations) {
|
|
44
44
|
const envs = perTaskEnvs;
|
|
45
45
|
const shouldCollectInputs = collectInputs ?? (0, task_io_service_1.getTaskIOService)().hasTaskInputSubscribers();
|
|
46
46
|
const resolvedCwd = cwd ?? process.cwd();
|
|
@@ -49,31 +49,31 @@ class NativeTaskHasherImpl {
|
|
|
49
49
|
if (this.upfrontPlans &&
|
|
50
50
|
unplanned.some((id) => this.upfrontPlans.taskIds.has(id)) &&
|
|
51
51
|
this.upfrontPlans.fingerprint ===
|
|
52
|
-
taskGraphFingerprint(taskGraph,
|
|
52
|
+
taskGraphFingerprint(taskGraph, ultracacheConfigurations)) {
|
|
53
53
|
Object.assign(hashes, this.hasher.hashPlansFor(this.upfrontPlans.plans, unplanned, envs, resolvedCwd, shouldCollectInputs));
|
|
54
54
|
unplanned = unplanned.filter((id) => !(id in hashes));
|
|
55
55
|
}
|
|
56
56
|
if (unplanned.length > 0) {
|
|
57
|
-
const plans = this.plan(unplanned, taskGraph,
|
|
57
|
+
const plans = this.plan(unplanned, taskGraph, ultracacheConfigurations);
|
|
58
58
|
Object.assign(hashes, this.hasher.hashPlans(plans, envs, resolvedCwd, shouldCollectInputs));
|
|
59
59
|
}
|
|
60
60
|
return tasks.map((t) => hashes[t.id]);
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
* Plans through the native planner. With
|
|
64
|
-
* custom-hashed or opted out ride along so the
|
|
65
|
-
* withholds their
|
|
63
|
+
* Plans through the native planner. With Ultracache configurations, the
|
|
64
|
+
* tasks JS resolves as custom-hashed or opted out ride along so the
|
|
65
|
+
* planner's eligibility walk withholds their entries.
|
|
66
66
|
*/
|
|
67
|
-
plan(taskIds, taskGraph,
|
|
68
|
-
if (!
|
|
67
|
+
plan(taskIds, taskGraph, ultracacheConfigurations) {
|
|
68
|
+
if (!ultracacheConfigurations) {
|
|
69
69
|
return this.planner.getPlansReference(taskIds, taskGraph);
|
|
70
70
|
}
|
|
71
|
-
return this.planner.getPlansReference(taskIds, taskGraph,
|
|
71
|
+
return this.planner.getPlansReference(taskIds, taskGraph, ultracacheConfigurations, (0, overrides_1.ultracacheEligibilityOptions)(this.projectGraph, taskGraph));
|
|
72
72
|
}
|
|
73
|
-
async hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd, collectInputs,
|
|
74
|
-
const plans = this.plan(tasks.map((t) => t.id), taskGraph,
|
|
73
|
+
async hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd, collectInputs, ultracacheConfigurations) {
|
|
74
|
+
const plans = this.plan(tasks.map((t) => t.id), taskGraph, ultracacheConfigurations);
|
|
75
75
|
this.upfrontPlans = {
|
|
76
|
-
fingerprint: taskGraphFingerprint(taskGraph,
|
|
76
|
+
fingerprint: taskGraphFingerprint(taskGraph, ultracacheConfigurations),
|
|
77
77
|
taskIds: new Set(tasks.map((t) => t.id)),
|
|
78
78
|
plans,
|
|
79
79
|
};
|
|
@@ -84,16 +84,16 @@ class NativeTaskHasherImpl {
|
|
|
84
84
|
exports.NativeTaskHasherImpl = NativeTaskHasherImpl;
|
|
85
85
|
/**
|
|
86
86
|
* Everything the planner reads from a task graph: each task's target and
|
|
87
|
-
* outputs, and the graph's edges, plus the
|
|
87
|
+
* outputs, and the graph's edges, plus the Ultracache configurations the plans were
|
|
88
88
|
* built against. The project graph and nx.json are fixed for the life of a
|
|
89
89
|
* hasher, so equal fingerprints mean equal plans. A run's
|
|
90
90
|
* results (hash, timings) are left out so hashing one task does not
|
|
91
91
|
* invalidate the plans of the rest.
|
|
92
92
|
*/
|
|
93
|
-
function taskGraphFingerprint(taskGraph,
|
|
93
|
+
function taskGraphFingerprint(taskGraph, ultracacheConfigurations) {
|
|
94
94
|
const parts = [
|
|
95
|
-
|
|
96
|
-
? `${
|
|
95
|
+
ultracacheConfigurations
|
|
96
|
+
? `${ultracacheConfigurations.commit}@${ultracacheConfigurations.resolution.fetchedAt}`
|
|
97
97
|
: '',
|
|
98
98
|
];
|
|
99
99
|
for (const id of Object.keys(taskGraph.tasks).sort()) {
|
|
@@ -2,10 +2,10 @@ import { FileData, ProjectGraph, ProjectGraphProjectNode } from '../config/proje
|
|
|
2
2
|
import { NxJsonConfiguration } from '../config/nx-json';
|
|
3
3
|
import { Task, TaskGraph } from '../config/task-graph';
|
|
4
4
|
import { DaemonClient } from '../daemon/client/client';
|
|
5
|
-
import type {
|
|
5
|
+
import type { UltracacheConfigurationVersion } from '../daemon/message-types/ultracache-configuration-version';
|
|
6
6
|
import { InputDefinition } from '../config/workspace-json-project-json';
|
|
7
7
|
import type { TaskPlanningContext } from './task-planning-context';
|
|
8
|
-
import { HashInputs,
|
|
8
|
+
import { HashInputs, UltracacheConfigurations, NxWorkspaceFilesExternals } from '../native';
|
|
9
9
|
export { HashInputs };
|
|
10
10
|
/**
|
|
11
11
|
* A data structure returned by the default hasher.
|
|
@@ -76,16 +76,16 @@ export interface TaskHasherImpl {
|
|
|
76
76
|
* single shared env should construct `{ [task.id]: env }` for every
|
|
77
77
|
* task.
|
|
78
78
|
*/
|
|
79
|
-
hashTasks(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
80
|
-
hashTask(task: Task, taskGraph: TaskGraph, env: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean,
|
|
81
|
-
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
79
|
+
hashTasks(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<PartialHash[]>;
|
|
80
|
+
hashTask(task: Task, taskGraph: TaskGraph, env: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<PartialHash>;
|
|
81
|
+
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<Record<string, PartialHash>>;
|
|
82
82
|
}
|
|
83
83
|
export type Hasher = TaskHasher;
|
|
84
84
|
export declare class DaemonBasedTaskHasher implements TaskHasher {
|
|
85
85
|
private readonly daemonClient;
|
|
86
86
|
private readonly runnerOptions;
|
|
87
|
-
private readonly
|
|
88
|
-
constructor(daemonClient: DaemonClient, runnerOptions: any,
|
|
87
|
+
private readonly ultracacheConfigurationsVersion?;
|
|
88
|
+
constructor(daemonClient: DaemonClient, runnerOptions: any, ultracacheConfigurationsVersion?: UltracacheConfigurationVersion);
|
|
89
89
|
hashTasks(tasks: Task[], taskGraph: TaskGraph, envOrPerTaskEnvs: NodeJS.ProcessEnv | Record<string, NodeJS.ProcessEnv>): Promise<Hash[]>;
|
|
90
90
|
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>): Promise<Record<string, Hash>>;
|
|
91
91
|
hashTask(task: Task, taskGraph?: TaskGraph, env?: NodeJS.ProcessEnv): Promise<Hash>;
|
|
@@ -96,15 +96,15 @@ export declare class InProcessTaskHasher implements TaskHasher {
|
|
|
96
96
|
private readonly externalRustReferences;
|
|
97
97
|
private readonly options;
|
|
98
98
|
private readonly planningContext?;
|
|
99
|
-
/** This run's
|
|
100
|
-
private readonly
|
|
99
|
+
/** This run's Ultracache configurations; the daemon passes them per request instead. */
|
|
100
|
+
private readonly ultracacheConfigurations?;
|
|
101
101
|
private taskHasher;
|
|
102
102
|
constructor(projectGraph: ProjectGraph, nxJson: NxJsonConfiguration, externalRustReferences: NxWorkspaceFilesExternals | null, options: any, planningContext?: TaskPlanningContext,
|
|
103
|
-
/** This run's
|
|
104
|
-
|
|
105
|
-
hashTasks(tasks: Task[], taskGraph: TaskGraph, envOrPerTaskEnvs: NodeJS.ProcessEnv | Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
106
|
-
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean,
|
|
107
|
-
hashTask(task: Task, taskGraph?: TaskGraph, env?: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean,
|
|
103
|
+
/** This run's Ultracache configurations; the daemon passes them per request instead. */
|
|
104
|
+
ultracacheConfigurations?: UltracacheConfigurations);
|
|
105
|
+
hashTasks(tasks: Task[], taskGraph: TaskGraph, envOrPerTaskEnvs: NodeJS.ProcessEnv | Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<Hash[]>;
|
|
106
|
+
hashTasksUpfront(tasks: Task[], taskGraph: TaskGraph, perTaskEnvs: Record<string, NodeJS.ProcessEnv>, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<Record<string, Hash>>;
|
|
107
|
+
hashTask(task: Task, taskGraph?: TaskGraph, env?: NodeJS.ProcessEnv, cwd?: string, collectInputs?: boolean, ultracacheConfigurations?: UltracacheConfigurations): Promise<Hash>;
|
|
108
108
|
private createHashDetails;
|
|
109
109
|
private hashCommand;
|
|
110
110
|
}
|
|
@@ -44,18 +44,18 @@ function normalizePerTaskEnvs(tasks, arg) {
|
|
|
44
44
|
return arg;
|
|
45
45
|
}
|
|
46
46
|
class DaemonBasedTaskHasher {
|
|
47
|
-
constructor(daemonClient, runnerOptions,
|
|
47
|
+
constructor(daemonClient, runnerOptions, ultracacheConfigurationsVersion) {
|
|
48
48
|
this.daemonClient = daemonClient;
|
|
49
49
|
this.runnerOptions = runnerOptions;
|
|
50
|
-
this.
|
|
50
|
+
this.ultracacheConfigurationsVersion = ultracacheConfigurationsVersion;
|
|
51
51
|
}
|
|
52
52
|
async hashTasks(tasks, taskGraph, envOrPerTaskEnvs) {
|
|
53
53
|
const collectInputs = (0, task_io_service_1.getTaskIOService)().hasTaskInputSubscribers();
|
|
54
|
-
return this.daemonClient.hashTasks(this.runnerOptions, tasks, taskGraph, normalizePerTaskEnvs(tasks, envOrPerTaskEnvs), process.cwd(), collectInputs, this.
|
|
54
|
+
return this.daemonClient.hashTasks(this.runnerOptions, tasks, taskGraph, normalizePerTaskEnvs(tasks, envOrPerTaskEnvs), process.cwd(), collectInputs, this.ultracacheConfigurationsVersion);
|
|
55
55
|
}
|
|
56
56
|
async hashTasksUpfront(tasks, taskGraph, perTaskEnvs) {
|
|
57
57
|
const collectInputs = (0, task_io_service_1.getTaskIOService)().hasTaskInputSubscribers();
|
|
58
|
-
return this.daemonClient.hashTasksUpfront(this.runnerOptions, tasks, taskGraph, perTaskEnvs, process.cwd(), collectInputs, this.
|
|
58
|
+
return this.daemonClient.hashTasksUpfront(this.runnerOptions, tasks, taskGraph, perTaskEnvs, process.cwd(), collectInputs, this.ultracacheConfigurationsVersion);
|
|
59
59
|
}
|
|
60
60
|
async hashTask(task, taskGraph, env) {
|
|
61
61
|
return (await this.hashTasks([task], taskGraph, {
|
|
@@ -66,24 +66,24 @@ class DaemonBasedTaskHasher {
|
|
|
66
66
|
exports.DaemonBasedTaskHasher = DaemonBasedTaskHasher;
|
|
67
67
|
class InProcessTaskHasher {
|
|
68
68
|
constructor(projectGraph, nxJson, externalRustReferences, options, planningContext,
|
|
69
|
-
/** This run's
|
|
70
|
-
|
|
69
|
+
/** This run's Ultracache configurations; the daemon passes them per request instead. */
|
|
70
|
+
ultracacheConfigurations) {
|
|
71
71
|
this.projectGraph = projectGraph;
|
|
72
72
|
this.nxJson = nxJson;
|
|
73
73
|
this.externalRustReferences = externalRustReferences;
|
|
74
74
|
this.options = options;
|
|
75
75
|
this.planningContext = planningContext;
|
|
76
|
-
this.
|
|
76
|
+
this.ultracacheConfigurations = ultracacheConfigurations;
|
|
77
77
|
this.taskHasher = new native_task_hasher_impl_1.NativeTaskHasherImpl(workspace_root_1.workspaceRoot, this.nxJson, this.projectGraph, this.externalRustReferences, {
|
|
78
78
|
selectivelyHashTsConfig: this.options?.selectivelyHashTsConfig ?? false,
|
|
79
79
|
}, this.planningContext);
|
|
80
80
|
}
|
|
81
|
-
async hashTasks(tasks, taskGraph, envOrPerTaskEnvs, cwd, collectInputs,
|
|
82
|
-
const hashes = await this.taskHasher.hashTasks(tasks, taskGraph, normalizePerTaskEnvs(tasks, envOrPerTaskEnvs), cwd ?? process.cwd(), collectInputs,
|
|
81
|
+
async hashTasks(tasks, taskGraph, envOrPerTaskEnvs, cwd, collectInputs, ultracacheConfigurations) {
|
|
82
|
+
const hashes = await this.taskHasher.hashTasks(tasks, taskGraph, normalizePerTaskEnvs(tasks, envOrPerTaskEnvs), cwd ?? process.cwd(), collectInputs, ultracacheConfigurations ?? this.ultracacheConfigurations);
|
|
83
83
|
return tasks.map((task, index) => this.createHashDetails(task, hashes[index]));
|
|
84
84
|
}
|
|
85
|
-
async hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd, collectInputs,
|
|
86
|
-
const hashes = await this.taskHasher.hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd ?? process.cwd(), collectInputs,
|
|
85
|
+
async hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd, collectInputs, ultracacheConfigurations) {
|
|
86
|
+
const hashes = await this.taskHasher.hashTasksUpfront(tasks, taskGraph, perTaskEnvs, cwd ?? process.cwd(), collectInputs, ultracacheConfigurations ?? this.ultracacheConfigurations);
|
|
87
87
|
const result = {};
|
|
88
88
|
for (const task of tasks) {
|
|
89
89
|
if (hashes[task.id]) {
|
|
@@ -92,8 +92,8 @@ class InProcessTaskHasher {
|
|
|
92
92
|
}
|
|
93
93
|
return result;
|
|
94
94
|
}
|
|
95
|
-
async hashTask(task, taskGraph, env, cwd, collectInputs,
|
|
96
|
-
const res = await this.taskHasher.hashTask(task, taskGraph, env ?? process.env, cwd ?? process.cwd(), collectInputs,
|
|
95
|
+
async hashTask(task, taskGraph, env, cwd, collectInputs, ultracacheConfigurations) {
|
|
96
|
+
const res = await this.taskHasher.hashTask(task, taskGraph, env ?? process.env, cwd ?? process.cwd(), collectInputs, ultracacheConfigurations ?? this.ultracacheConfigurations);
|
|
97
97
|
return this.createHashDetails(task, res);
|
|
98
98
|
}
|
|
99
99
|
createHashDetails(task, res) {
|