ingestron 0.16.2 → 0.17.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/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.0
4
+
5
+ - Bind one ingestion flow to named execution profiles with `--flow` and `--profile`.
6
+ Environments, datasets and contracts remain shared.
7
+ - Pin core 0.12.7; builds and execution reject mismatched profile evidence.
8
+
9
+ ## 0.16.3
10
+
11
+ - Resolve qualified plugin aliases through the same adapter in JSON-stdin, terminal
12
+ and MCP installation routes. Preserve permission checks and exact package locks.
13
+
3
14
  ## 0.16.2
4
15
 
5
16
  - Pin core 0.12.6 so mixed local and native-target projects validate correctly.
package/README.md CHANGED
@@ -77,3 +77,17 @@ not inside the compiler's JavaScript sandbox. See [security](SECURITY.md).
77
77
  Original code is licensed by **Otrera Limited** under [Apache-2.0](LICENSE).
78
78
  [NOTICE](NOTICE) and [third-party notices](THIRD_PARTY_NOTICES.md) retain attribution
79
79
  and dependency terms.
80
+
81
+ ### Select an execution profile
82
+
83
+ An ingestion flow can declare named `executionProfiles`. Select the environment
84
+ and profile independently; datasets and contracts stay in the same logical flow.
85
+
86
+ ```sh
87
+ ingestron --environment dev check --flow northwind --profile adf
88
+ ingestron --environment dev build --flow northwind --profile adf --out build/adf
89
+ ```
90
+
91
+ Omit `--profile` to use the flow's default provider. Local runtime preparation and
92
+ execution must select the same profile recorded by the build. A native-provider
93
+ build generates assets; it does not deploy or run them on the target platform.
@@ -75,7 +75,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
75
75
  SOFTWARE.
76
76
  ```
77
77
 
78
- ### @ingestron/core@0.12.6
78
+ ### @ingestron/core@0.12.7
79
79
 
80
80
  Declared licence: Apache-2.0
81
81
 
@@ -11,6 +11,7 @@ import { check, Problem } from "@ingestron/core/adapter";
11
11
  import { version } from "../version.js";
12
12
  import { terminal, exitCode } from "./output.js";
13
13
  import { decorate, banner, backgroundOperation } from "./presentation.js";
14
+ import { executePluginOperation } from "./plugin-resolution.js";
14
15
  import { workflowCommands } from "./workflow-commands.js";
15
16
  const app = new Command()
16
17
  .name("ingestron")
@@ -103,7 +104,7 @@ app
103
104
  catch {
104
105
  throw new Problem("INPUT", "Expected a JSON operation request on stdin");
105
106
  }
106
- const result = await executeAsync({
107
+ const result = await executePluginOperation({
107
108
  ...context(),
108
109
  allowWrite: !!flags.allowWrite && !opts().dryRun,
109
110
  allowNetwork: !!flags.allowNetwork && !opts().dryRun,
@@ -478,11 +479,13 @@ app
478
479
  .command("validate")
479
480
  .option("--mode <mode>", "draft or strict", "strict")
480
481
  .option("--flow <id>")
482
+ .option("--profile <name>", "Execution profile within the selected flow")
481
483
  .option("--table <id>")
482
484
  .option("--step <id>")
483
485
  .action((command) => run("validate", {
484
486
  mode: command.mode,
485
487
  ...(command.flow ? { flow: command.flow } : {}),
488
+ ...(command.profile ? { profile: command.profile } : {}),
486
489
  ...(command.table ? { table: command.table } : {}),
487
490
  ...(command.step ? { step: command.step } : {}),
488
491
  }));
@@ -490,16 +493,22 @@ app
490
493
  .command("doctor")
491
494
  .description("Check local configuration and missing inputs; no platform connection")
492
495
  .action(() => run("doctor"));
493
- app.command("resolve").action(() => run("resolve"));
496
+ app
497
+ .command("resolve")
498
+ .option("--flow <id>")
499
+ .option("--profile <name>")
500
+ .action((command) => run("resolve", command));
494
501
  app
495
502
  .command("plan")
496
503
  .option("--flow <id>")
504
+ .option("--profile <name>", "Execution profile within the selected flow")
497
505
  .option("--table <id>")
498
506
  .option("--step <id>")
499
507
  .option("--out <file>", "Save a digest-bound JSON plan")
500
508
  .action((command) => {
501
509
  const result = execute(context(), "plan", {
502
510
  ...(command.flow ? { flow: command.flow } : {}),
511
+ ...(command.profile ? { profile: command.profile } : {}),
503
512
  ...(command.table ? { table: command.table } : {}),
504
513
  ...(command.step ? { step: command.step } : {}),
505
514
  });
@@ -131,13 +131,14 @@ export function workflowCommands(app, host) {
131
131
  .option("--setup", "Diagnose missing local configuration; no platform access")
132
132
  .option("--output <directory>", "Check generated output ownership and syntax")
133
133
  .option("--flow <id>", "Check one flow")
134
+ .option("--profile <name>", "Execution profile within the selected flow")
134
135
  .option("--table <id>", "Check one table within a selected flow")
135
136
  .option("--step <id>", "Check one step within a selected flow")
136
137
  .action((options) => {
137
138
  check([options.draft, options.setup, options.output].filter(Boolean).length <=
138
139
  1, "OPTION", "Choose only one check scope: --draft, --setup or --output");
139
140
  check(!(options.setup || options.output) ||
140
- !(options.flow || options.table || options.step), "OPTION", "Flow/table/step selection applies only to project checks");
141
+ !(options.flow || options.table || options.step || options.profile), "OPTION", "Flow/table/step selection applies only to project checks");
141
142
  if (options.output)
142
143
  run("validate_output", { directory: options.output });
143
144
  else if (options.setup)
@@ -146,6 +147,7 @@ export function workflowCommands(app, host) {
146
147
  run("validate", {
147
148
  mode: options.draft ? "draft" : "strict",
148
149
  ...(options.flow ? { flow: options.flow } : {}),
150
+ ...(options.profile ? { profile: options.profile } : {}),
149
151
  ...(options.table ? { table: options.table } : {}),
150
152
  ...(options.step ? { step: options.step } : {}),
151
153
  });
@@ -156,13 +158,15 @@ export function workflowCommands(app, host) {
156
158
  .description("Build project assets, or a provider/flow subset, without deployment")
157
159
  .option("--provider <configuration>", "Build a configured target and required dependencies")
158
160
  .option("--flow <id>", "Build one flow")
161
+ .option("--profile <name>", "Execution profile within the selected flow")
159
162
  .option("--out <directory>", "Generated output directory", "build/generated")
160
163
  .option("--ownership <mode>", "managed or team", "managed")
161
164
  .action((options) => run("build", options));
162
165
  const executionOptions = (command) => command
163
166
  .option("--from <directory>", "Managed project build (default build/generated)")
164
167
  .option("--provider <configuration>", "Execute flows in one configured target")
165
- .option("--flow <id>", "Execute one flow from the build");
168
+ .option("--flow <id>", "Execute one flow from the build")
169
+ .option("--profile <name>", "Execution profile recorded in the build");
166
170
  executionOptions(app
167
171
  .command("runtime")
168
172
  .description("Prepare locked execution dependencies")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ingestron",
3
- "version": "0.16.2",
3
+ "version": "0.17.0",
4
4
  "type": "module",
5
5
  "description": "Build repeatable data pipelines from reviewed contracts and versioned standards.",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@clack/prompts": "1.7.0",
43
- "@ingestron/core": "0.12.6",
43
+ "@ingestron/core": "0.12.7",
44
44
  "@modelcontextprotocol/sdk": "1.30.0",
45
45
  "commander": "15.0.0",
46
46
  "yaml": "2.9.0"