diff --git a/core/BUILD b/core/BUILD index db9219e8b..e8bb75839 100644 --- a/core/BUILD +++ b/core/BUILD @@ -81,6 +81,7 @@ ts_test_suite( "jit_context_test.ts", "main_test.ts", "utils_test.ts", + "workflow_settings_test.ts", ], data = [ ":node_modules", diff --git a/core/workflow_settings.ts b/core/workflow_settings.ts index df1dd9e7c..39f71b5bd 100644 --- a/core/workflow_settings.ts +++ b/core/workflow_settings.ts @@ -178,6 +178,9 @@ export function workflowSettingsAsProjectConfig( if (workflowSettings.preserveGovernanceControls) { projectConfig.preserveGovernanceControls = workflowSettings.preserveGovernanceControls; } + if (workflowSettings.lineage) { + projectConfig.lineage = workflowSettings.lineage; + } projectConfig.warehouse = "bigquery"; return projectConfig; } diff --git a/core/workflow_settings_test.ts b/core/workflow_settings_test.ts new file mode 100644 index 000000000..7654e35e1 --- /dev/null +++ b/core/workflow_settings_test.ts @@ -0,0 +1,25 @@ +import { expect } from "chai"; + +import { workflowSettingsAsProjectConfig } from "df/core/workflow_settings"; +import { dataform } from "df/protos/ts"; +import { suite, test } from "df/testing"; + +suite("workflowSettingsAsProjectConfig", () => { + test("copies lineage settings when set", () => { + const workflowSettings = dataform.WorkflowSettings.create({ + lineage: { enabled: true }, + }); + + const projectConfig = workflowSettingsAsProjectConfig(workflowSettings); + + expect(projectConfig.lineage).to.deep.equal({ enabled: true }); + }); + + test("leaves lineage unset when workflow settings omit it", () => { + const workflowSettings = dataform.WorkflowSettings.create({}); + + const projectConfig = workflowSettingsAsProjectConfig(workflowSettings); + + expect(projectConfig.lineage).to.equal(null); + }); +}); diff --git a/protos/configs.proto b/protos/configs.proto index e080f7163..3630695ae 100644 --- a/protos/configs.proto +++ b/protos/configs.proto @@ -71,6 +71,15 @@ message WorkflowSettings { // Optional. If set to true, governance controls (e.g. Data Policies) will be // preserved on BigQuery tables. bool preserve_governance_controls = 18; + + // Optional. Configuration for Knowledge Catalog lineage emission. + LineageSettings lineage = 19; +} + +message LineageSettings { + // If true, emit OpenLineage events to Knowledge Catalog + // (datalineage.googleapis.com) after each Dataform action completes. + bool enabled = 1; } // Action configs defines the contents of `actions.yaml` configuration files. diff --git a/protos/core.proto b/protos/core.proto index fa73e3236..da1d638e6 100644 --- a/protos/core.proto +++ b/protos/core.proto @@ -40,6 +40,8 @@ message ProjectConfig { bool preserve_governance_controls = 24; + LineageSettings lineage = 25; + reserved 3, 4, 6, 8, 10, 12, 13; }