Skip to content

Enforce runtime config minimum property requirements#3242

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/enforce-runtime-config-requirements
Draft

Enforce runtime config minimum property requirements#3242
Copilot wants to merge 2 commits intomainfrom
copilot/enforce-runtime-config-requirements

Conversation

Copy link
Contributor

Copilot AI commented Mar 12, 2026

Why make this change?

Enforces the documented minimum property requirements for RuntimeConfig:

  • When data-source-files is present (multi-config), only runtime is required at the top level — data-source and entities should not be required
  • When autoentities is present, data-source is required but entities is not
  • Confirms existing schema enforcement that endpoint is required when azure-key-vault is specified

What is this change?

JSON Schema (dab.draft.schema.json)

  • Replaces the static required: ["data-source", "entities"] + top-level if/then with an allOf block of three conditional rules:
    • data-source required unless data-source-files is present
    • entities required unless autoentities or data-source-files is present
    • azure-key-vault.endpoint required when azure-key-vault is present (preserved)

RuntimeConfig constructor

  • Allows DataSource to be null when DataSourceFiles is provided; does not throw DataApiBuilderException in that case
  • Guards _dataSourceNameToDataSource init to skip null DataSource
  • Skips entities/autoentities non-empty check when DataSourceFiles is present
  • Fixes a pre-existing bug: allEntities?.Concat(...) returned null when the main config had no entities section, silently dropping all sub-config entities

RuntimeConfigLoader.TryParseConfig

  • Guards the default DataSource connection-string update behind config.DataSource is not null to prevent NullReferenceException in multi-config scenarios

How was this tested?

  • Integration Tests
  • Unit Tests
    • TestValidateConfigPassesWithAutoentitiesAndNoEntities — config with autoentities and no entities parses successfully
    • TestValidateConfigPassesWithDataSourceFilesOnly — multi-config with data-source-files and no data-source/entities parses successfully
    • Existing TestValidateConfigFailsWithNoDataSource and TestValidateConfigFailsWithNoEntities continue to pass, confirming single-config validation is unaffected

Sample Request(s)

Valid multi-config top-level (only runtime + data-source-files required):

{
  "$schema": "...",
  "runtime": { ... },
  "data-source-files": ["child-mssql.json", "child-pgsql.json"]
}

Valid autoentities config (entities not required):

{
  "$schema": "...",
  "data-source": { "database-type": "mssql", "connection-string": "..." },
  "runtime": { ... },
  "autoentities": {
    "myGroup": { "patterns": { "include": ["%.%"] } }
  }
}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • azuread
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35279 --endpoint 127.0.0.1:035279 --role client --parentprocessid 5825 --telemetryoptedin false seBuilder.cs tnet/tools/grep grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 37545 --endpoint 127.0.0.1:037545 --role client --parentprocessid 6003 --telemetryoptedin false ntParser.cs de/node/bin/grepValidateDatabaseType\|runtimeConfig\.DataSource\b grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35393 --endpoint 127.0.0.1:035393 --role client --parentprocessid 6528 --telemetryoptedin false (dns block)
  • custom
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35279 --endpoint 127.0.0.1:035279 --role client --parentprocessid 5825 --telemetryoptedin false seBuilder.cs tnet/tools/grep grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 37545 --endpoint 127.0.0.1:037545 --role client --parentprocessid 6003 --telemetryoptedin false ntParser.cs de/node/bin/grepValidateDatabaseType\|runtimeConfig\.DataSource\b grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35393 --endpoint 127.0.0.1:035393 --role client --parentprocessid 6528 --telemetryoptedin false (dns block)
  • entraid
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35279 --endpoint 127.0.0.1:035279 --role client --parentprocessid 5825 --telemetryoptedin false seBuilder.cs tnet/tools/grep grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 37545 --endpoint 127.0.0.1:037545 --role client --parentprocessid 6003 --telemetryoptedin false ntParser.cs de/node/bin/grepValidateDatabaseType\|runtimeConfig\.DataSource\b grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35393 --endpoint 127.0.0.1:035393 --role client --parentprocessid 6528 --telemetryoptedin false (dns block)
  • xxxxx
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35279 --endpoint 127.0.0.1:035279 --role client --parentprocessid 5825 --telemetryoptedin false seBuilder.cs tnet/tools/grep grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 37545 --endpoint 127.0.0.1:037545 --role client --parentprocessid 6003 --telemetryoptedin false ntParser.cs de/node/bin/grepValidateDatabaseType\|runtimeConfig\.DataSource\b grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/Cli.Tests.deps.json /home/REDACTED/work/data-api-builder/data-api-builder/src/out/tests/net8.0/testhost.dll --port 35393 --endpoint 127.0.0.1:035393 --role client --parentprocessid 6528 --telemetryoptedin false (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Enforce runtime config minimum property requirements</issue_title>
<issue_description>- Confirm we have validation for endpoint required when azure-key-vault is specified.

  • we need to ensure following requirements of RuntimeConfig:
  • When data-source-files is present (multi-config top-level), only runtime is required.
  • When autoentities is present, data-source is required but entities is not</issue_description>

<agent_instructions>Ensure copilot-instructions.md are followed with proper formatting</agent_instructions>

Comments on the Issue (you are @copilot in this section)


📱 Kick off Copilot coding agent tasks wherever you are with GitHub Mobile, available on iOS and Android.

Co-authored-by: Aniruddh25 <3513779+Aniruddh25@users.noreply.github.com>
Copilot AI changed the title [WIP] Enforce runtime config minimum property requirements Enforce runtime config minimum property requirements Mar 12, 2026
Copilot AI requested a review from Aniruddh25 March 12, 2026 19:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enforce runtime config minimum property requirements

2 participants