Skip to content

feat(client): adopt MX.Api.Client 2.3.77 shared cache configuration pattern - #738

Merged
frasermolyneux merged 2 commits into
mainfrom
agents/shared-cache-configuration-adoption
Aug 3, 2026
Merged

frasermolyneux merged 2 commits into
mainfrom
agents/shared-cache-configuration-adoption

Conversation

@frasermolyneux

Copy link
Copy Markdown
Owner

Summary

Adopt MX.Api.Client 2.3.77's reflection-free SharedCacheConfiguration registration pattern in MX.GeoLocation.Api.Client.V1, add read-only library cache defaults for the GeoLookup surface, and lock the fix in with a DI-composition regression test. Consumers can now register cache expressions targeting multiple typed sub-APIs in a single .WithCaching(...) delegate without the previous ArgumentException scope crash at DI registration time.

Closes: agent task (no numbered issue)

Type of change

  • bugfix
  • feature
  • chore / refactor
  • docs
  • infra (Terraform)
  • ci (GitHub Actions / Dependabot)
  • dependencies
  • breaking change

Required reading consulted

  • AGENTS.md (repo brief)
  • .github/copilot-instructions.md (repo orientation)
  • .github-copilot/.github/instructions/personal.working-preferences.instructions.md (always-on rules)
  • Stack-specific instruction files referenced in AGENTS.md (standards.dotnet-project.instructions.md, standards.branching-and-prs.instructions.md)

Validation evidence

Build

$ dotnet build src/MX.GeoLocation.sln
...
Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:11.61

Tests

$ dotnet test src/MX.GeoLocation.sln --filter "FullyQualifiedName!~IntegrationTests"
...
Passed!  - Failed:     0, Passed:     7, Skipped:     0, Total:     7, Duration: 218 ms - MX.GeoLocation.Api.Client.Tests.V1.dll (net9.0)
Passed!  - Failed:     0, Passed:   209, Skipped:     0, Total:   209, Duration: 156 ms - MX.GeoLocation.Api.Tests.V1.dll (net9.0)
Passed!  - Failed:     0, Passed:    42, Skipped:     0, Total:    42, Duration: 103 ms - MX.GeoLocation.Api.Client.Testing.Tests.dll (net9.0)
Passed!  - Failed:     0, Passed:    16, Skipped:     0, Total:    16, Duration: 203 ms - MX.GeoLocation.Web.Tests.dll (net9.0)

Total: 274 tests passed, 0 failed. The 3 new tests in AddGeoLocationApiClientCompositionTests are part of the MX.GeoLocation.Api.Client.Tests.V1 count (previously 4, now 7).

Format check

$ dotnet format src/MX.GeoLocation.sln --verify-no-changes
(no output — pass)

Risk and rollout

  • Blast radius: MX.GeoLocation.Api.Client.V1 NuGet package — consumed by the in-repo MX.GeoLocation.Web project and any external consumers of the client library. Also touches MX.GeoLocation.Abstractions.V1, MX.GeoLocation.Api.V1, and MX.GeoLocation.Web via transitive dependency version bumps (Microsoft.Extensions.* 10.0.9 → 10.0.10 patch, MX.Api.* 2.3.67 → 2.3.77).
  • Auto-deploys on merge? Client NuGet package is published by CI on merge to main. The API + Web apps auto-deploy per the standard deploy-dev/deploy-prd workflows on main.
  • Manual steps post-merge: None.
  • Rollback plan: Revert the merge commit; NuGet consumers stay on the previous version until they choose to upgrade. Redeploy previous API/Web build via workflow re-run of the prior successful run.

Consumer impact

  • Contracts touched: MX.GeoLocation.Api.Client.V1 — new public method GeoLocationApiOptionsBuilder.WithCaching(Action<CacheBuilder>) (method-hiding new override) and new public type MX.GeoLocation.Api.Client.V1.Caching.GeoLocationApiCacheDefaults. Registration semantics of AddGeoLocationApiClient now applies WithSharedCaching per typed sub-API and calls SharedCacheConfiguration.ValidateAllOperationsMatched() at the end.
  • Breaking? No. Existing consumers with no .WithCaching(...) are unaffected. Existing single-scope .WithCaching(...) targeting IGeoLookupApi (V1) continues to work — the delegate is captured and re-applied per sub-API, and scope-mismatched siblings are silently skipped by WithSharedCaching instead of throwing. Any consumer that was previously relying on the crash to detect a typo will now get a clearer InvalidOperationException from ValidateAllOperationsMatched() at registration time instead.
  • Downstream consumers: In-repo MX.GeoLocation.Web (no .WithCaching usage). Any external consumers of the client NuGet package.
  • Migration notes: No code changes required. Consumers can now opt into library cache defaults with .WithCaching(c => c.UseLibraryDefaults()) — defaults cover: v1 GetGeoLocation (60 min in-memory), v1.1 GetCityGeoLocation (60 min), GetInsightsGeoLocation (30 min), GetProxyCheck (15 min), GetIpIntelligence (15 min). Batch, delete, info, and health surfaces are intentionally uncached.

Reviewer focus areas

  • src/MX.GeoLocation.Api.Client.V1/ServiceCollectionExtensions.cs — capture-and-share flow: probe → SharedCacheConfiguration → per-client WithSharedCaching → ValidateAllOperationsMatched.
  • src/MX.GeoLocation.Api.Client.V1/GeoLocationApiOptionsBuilder.cs — new WithCaching overload is intentional method-hiding; it stashes the delegate on CapturedCacheConfigure for the orchestrator to re-apply.
  • src/MX.GeoLocation.Api.Client.V1/Caching/GeoLocationApiCacheDefaults.cs — TTL choices for read-only lookups. ProxyCheck / IP intelligence are deliberately shorter than MaxMind city/insights to bound risk-signal staleness.
  • src/MX.GeoLocation.Api.Client.Tests.V1/AddGeoLocationApiClientCompositionTests.cs — the "multi-sub-API cache" test is the pre-fix crash reproducer; a passing run locks the regression down.

Agent attestation

  • Ran code-review sub-agent; High/Medium findings resolved or justified above in Reviewer focus areas (review reported no significant issues)
  • PR body cites each acceptance criterion from the linked issue (task deliverable: 2.3.77 bump ✅, capture-and-share scoping ✅, read-only GeoLookup cache defaults ✅, DI-composition regression test under default filter ✅)
  • No client secrets, GUIDs, connection strings, or hard-coded subscription IDs introduced (standards.oidc-and-secrets.instructions.md)

…attern

Adopt reflection-free SharedCacheConfiguration so consumers can register
cache expressions targeting multiple typed sub-APIs (V1 IGeoLookupApi,
V1.1 IGeoLookupApi, IApiInfoApi, IApiHealthApi) in a single WithCaching
delegate without ArgumentException at DI registration time.

- Bump MX.Api.Client + MX.Api.Abstractions 2.3.67 -> 2.3.77
- Bump Microsoft.Extensions.* 10.0.9 -> 10.0.10 (required by MX.Api.Client 2.3.77)
- Override GeoLocationApiOptionsBuilder.WithCaching(Action<CacheBuilder>) to
  capture the delegate instead of applying it against a single client scope
- Rewrite AddGeoLocationApiClient to probe once, share via
  WithSharedCaching, then ValidateAllOperationsMatched as a typo guard
- Add read-only library cache defaults (Caching/GeoLocationApiCacheDefaults)
  for GetGeoLocation (v1, 60m), GetCityGeoLocation (v1.1, 60m),
  GetInsightsGeoLocation (30m), GetProxyCheck (15m), GetIpIntelligence (15m);
  write/delete/batch/info/health left uncached
- Add AddGeoLocationApiClientCompositionTests DI-composition regression test
  under the default (non-integration) filter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 3, 2026 11:13
@github-actions

github-actions Bot commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 29 package(s) with unknown licenses.
See the Details below.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA b6b1e0d.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

License Issues

src/MX.GeoLocation.Abstractions.V1/MX.GeoLocation.Abstractions.V1.csproj

PackageVersionLicenseIssue Type
MX.Api.Abstractions2.3.77NullUnknown License

src/MX.GeoLocation.Api.Client.Testing.Tests/MX.GeoLocation.Api.Client.Testing.Tests.csproj

PackageVersionLicenseIssue Type
Microsoft.Extensions.DependencyInjection10.0.10NullUnknown License

src/MX.GeoLocation.Api.Client.Testing/MX.GeoLocation.Api.Client.Testing.csproj

PackageVersionLicenseIssue Type
MX.Api.Abstractions2.3.77NullUnknown License
Microsoft.Extensions.DependencyInjection.Abstractions10.0.10NullUnknown License

src/MX.GeoLocation.Api.Client.Tests.V1/MX.GeoLocation.Api.Client.Tests.V1.csproj

PackageVersionLicenseIssue Type
Microsoft.Extensions.Logging10.0.10NullUnknown License

src/MX.GeoLocation.Api.Client.V1/MX.GeoLocation.Api.Client.V1.csproj

PackageVersionLicenseIssue Type
MX.Api.Abstractions2.3.77NullUnknown License
MX.Api.Client2.3.77NullUnknown License
Microsoft.Extensions.Caching.Abstractions10.0.10NullUnknown License
Microsoft.Extensions.Caching.Memory10.0.10NullUnknown License
Microsoft.Extensions.Configuration10.0.10NullUnknown License
Microsoft.Extensions.Configuration.Abstractions10.0.10NullUnknown License
Microsoft.Extensions.DependencyInjection10.0.10NullUnknown License
Microsoft.Extensions.DependencyInjection.Abstractions10.0.10NullUnknown License
Microsoft.Extensions.Logging10.0.10NullUnknown License
Microsoft.Extensions.Logging.Abstractions10.0.10NullUnknown License
Microsoft.Extensions.Options10.0.10NullUnknown License

src/MX.GeoLocation.Api.V1/MX.GeoLocation.Api.V1.csproj

PackageVersionLicenseIssue Type
MX.Api.Abstractions2.3.77NullUnknown License
MX.Api.Web.Extensions2.3.77NullUnknown License
Microsoft.Extensions.Caching.Memory10.0.10NullUnknown License
Microsoft.Extensions.Diagnostics.HealthChecks10.0.10NullUnknown License

src/MX.GeoLocation.Web.IntegrationTests/MX.GeoLocation.Web.IntegrationTests.csproj

PackageVersionLicenseIssue Type
Microsoft.Extensions.Configuration10.0.10NullUnknown License
Microsoft.Extensions.Configuration.EnvironmentVariables10.0.10NullUnknown License
Microsoft.Extensions.Configuration.Json10.0.10NullUnknown License

src/MX.GeoLocation.Web/MX.GeoLocation.Web.csproj

PackageVersionLicenseIssue Type
MX.Api.Web.Extensions2.3.77NullUnknown License
Microsoft.Extensions.Caching.Memory10.0.10NullUnknown License
Microsoft.Extensions.Configuration.EnvironmentVariables10.0.10NullUnknown License
Microsoft.Extensions.Configuration.Json10.0.10NullUnknown License
Microsoft.Extensions.Diagnostics.HealthChecks10.0.10NullUnknown License
Microsoft.Extensions.Logging10.0.10NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
nuget/MX.Api.Abstractions 2.3.77 UnknownUnknown
nuget/Microsoft.Extensions.DependencyInjection 10.0.10 UnknownUnknown
nuget/MX.Api.Abstractions 2.3.77 UnknownUnknown
nuget/Microsoft.Extensions.DependencyInjection.Abstractions 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Logging 10.0.10 UnknownUnknown
nuget/MX.Api.Abstractions 2.3.77 UnknownUnknown
nuget/MX.Api.Client 2.3.77 UnknownUnknown
nuget/Microsoft.Extensions.Caching.Abstractions 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Caching.Memory 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration.Abstractions 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.DependencyInjection 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.DependencyInjection.Abstractions 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Logging 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Logging.Abstractions 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Options 10.0.10 UnknownUnknown
nuget/MX.Api.Abstractions 2.3.77 UnknownUnknown
nuget/MX.Api.Web.Extensions 2.3.77 UnknownUnknown
nuget/Microsoft.Extensions.Caching.Memory 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Diagnostics.HealthChecks 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration.EnvironmentVariables 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration.Json 10.0.10 UnknownUnknown
nuget/MX.Api.Web.Extensions 2.3.77 UnknownUnknown
nuget/Microsoft.Extensions.Caching.Memory 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration.EnvironmentVariables 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Configuration.Json 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Diagnostics.HealthChecks 10.0.10 UnknownUnknown
nuget/Microsoft.Extensions.Logging 10.0.10 UnknownUnknown

Scanned Files

  • src/MX.GeoLocation.Abstractions.V1/MX.GeoLocation.Abstractions.V1.csproj
  • src/MX.GeoLocation.Api.Client.Testing.Tests/MX.GeoLocation.Api.Client.Testing.Tests.csproj
  • src/MX.GeoLocation.Api.Client.Testing/MX.GeoLocation.Api.Client.Testing.csproj
  • src/MX.GeoLocation.Api.Client.Tests.V1/MX.GeoLocation.Api.Client.Tests.V1.csproj
  • src/MX.GeoLocation.Api.Client.V1/MX.GeoLocation.Api.Client.V1.csproj
  • src/MX.GeoLocation.Api.V1/MX.GeoLocation.Api.V1.csproj
  • src/MX.GeoLocation.Web.IntegrationTests/MX.GeoLocation.Web.IntegrationTests.csproj
  • src/MX.GeoLocation.Web/MX.GeoLocation.Web.csproj

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates MX.GeoLocation.Api.Client.V1 to use MX.Api.Client 2.3.77’s reflection-free shared caching registration approach, enabling a single .WithCaching(...) delegate to target multiple typed sub-APIs without scope-validation crashes. It also introduces opt-in library cache defaults for read-only lookup operations and adds a DI-composition regression test to lock in the behavior.

Changes:

  • Adopt SharedCacheConfiguration + WithSharedCaching(...) flow in AddGeoLocationApiClient, including a final ValidateAllOperationsMatched() typo guard.
  • Add opt-in library cache defaults (UseLibraryDefaults()) for key read-only GeoLookup operations (v1 + v1.1).
  • Bump MX.Api.* and Microsoft.Extensions.* dependencies (plus regression tests for the new DI/caching composition).

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/MX.GeoLocation.Web/MX.GeoLocation.Web.csproj Bumps Microsoft.Extensions.* patch versions used by the web app.
src/MX.GeoLocation.Web.IntegrationTests/MX.GeoLocation.Web.IntegrationTests.csproj Aligns integration test project Microsoft.Extensions.Configuration* patch versions.
src/MX.GeoLocation.Api.V1/MX.GeoLocation.Api.V1.csproj Updates Microsoft.Extensions.* patches and bumps MX.Api.Abstractions.
src/MX.GeoLocation.Api.Client.V1/ServiceCollectionExtensions.cs Implements shared-cache capture/apply pattern and validates shared cache expressions post-registration.
src/MX.GeoLocation.Api.Client.V1/MX.GeoLocation.Api.Client.V1.csproj Bumps MX.Api.Client / MX.Api.Abstractions and Microsoft.Extensions.* patches.
src/MX.GeoLocation.Api.Client.V1/GeoLocationApiOptionsBuilder.cs Adds method-hiding WithCaching(...) to capture cache configuration for shared-scope application.
src/MX.GeoLocation.Api.Client.V1/Caching/GeoLocationApiCacheDefaults.cs Introduces opt-in library cache defaults (TTLs) for read-only GeoLookup calls.
src/MX.GeoLocation.Api.Client.Tests.V1/MX.GeoLocation.Api.Client.Tests.V1.csproj Updates Microsoft.Extensions.Logging patch version for the test project.
src/MX.GeoLocation.Api.Client.Tests.V1/AddGeoLocationApiClientCompositionTests.cs Adds DI-composition regression tests for multi-sub-API caching and unknown-interface validation.
src/MX.GeoLocation.Api.Client.Testing/MX.GeoLocation.Api.Client.Testing.csproj Bumps MX.Api.Abstractions and Microsoft.Extensions.DependencyInjection.Abstractions patch versions.
src/MX.GeoLocation.Api.Client.Testing.Tests/MX.GeoLocation.Api.Client.Testing.Tests.csproj Updates Microsoft.Extensions.DependencyInjection patch version (and normalizes file header).
src/MX.GeoLocation.Abstractions.V1/MX.GeoLocation.Abstractions.V1.csproj Bumps MX.Api.Abstractions to match the updated MX.Api dependency baseline.

Comment thread src/MX.GeoLocation.Web/MX.GeoLocation.Web.csproj
Comment thread src/MX.GeoLocation.Api.V1/MX.GeoLocation.Api.V1.csproj
@github-actions

github-actions Bot commented Aug 3, 2026 •

Copy link
Copy Markdown
Contributor
⛔ Superseded — A newer run has replaced this result.

🏗️ Terraform Plan

🌍 Environment: dev

✅ Validate — Passed

✅ Plan

Count
➕ Add 43
📋 Resource Details
Action Resource
➕ Create azuread_app_role_assignment.web_to_api
➕ Create azuread_application.api
➕ Create azuread_application.web
➕ Create azuread_application_password.api
➕ Create azuread_application_password.web
➕ Create azuread_service_principal.api
➕ Create azuread_service_principal.web
➕ Create azurerm_api_management.apim
➕ Create azurerm_api_management_api_version_set.api_version_set
➕ Create azurerm_api_management_diagnostic.app_insights
➕ Create azurerm_api_management_logger.app_insights
➕ Create azurerm_api_management_product.api_product
➕ Create azurerm_api_management_product_policy.api_product_policy
➕ Create azurerm_api_management_subscription.web
➕ Create azurerm_app_service_certificate_binding.web
➕ Create azurerm_app_service_custom_hostname_binding.web
➕ Create azurerm_app_service_managed_certificate.web
➕ Create azurerm_application_insights.ai
➕ Create azurerm_dns_cname_record.web
➕ Create azurerm_dns_txt_record.web_verification
➕ Create azurerm_key_vault.kv
➕ Create azurerm_key_vault_secret.api_client_id
➕ Create azurerm_key_vault_secret.api_client_secret
➕ Create azurerm_key_vault_secret.google_maps_api_key
➕ Create azurerm_key_vault_secret.maxmind_apikey
➕ Create azurerm_key_vault_secret.maxmind_userid
➕ Create azurerm_key_vault_secret.proxycheck_apikey
➕ Create azurerm_key_vault_secret.web_apim_subscription_key
➕ Create azurerm_linux_web_app.api
➕ Create azurerm_linux_web_app.web
➕ Create azurerm_role_assignment.api_kv_secrets_user
➕ Create azurerm_role_assignment.api_table_data_contributor
➕ Create azurerm_role_assignment.deploy_kv_secrets_officer
➕ Create azurerm_role_assignment.web_kv_secrets_user
➕ Create azurerm_storage_account.data
➕ Create azurerm_storage_table.geolocations
➕ Create azurerm_storage_table.geolocationsv11
➕ Create azurerm_storage_table.proxycheck
➕ Create google_apikeys_key.maps
➕ Create random_id.environment_id
➕ Create random_id.storage
➕ Create time_rotating.thirty_days
➕ Create time_sleep.wait_for_hostname_binding

Align MX.Api.Web.Extensions with the rest of the MX.Api.* stack (Client/Abstractions already at 2.3.77) per PR review feedback.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings August 3, 2026 11:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.

@sonarqubecloud

sonarqubecloud Bot commented Aug 3, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

🏗️ Terraform Plan

🌍 Environment: dev

✅ Validate — Passed

✅ Plan

Count
➕ Add 43
📋 Resource Details
Action Resource
➕ Create azuread_app_role_assignment.web_to_api
➕ Create azuread_application.api
➕ Create azuread_application.web
➕ Create azuread_application_password.api
➕ Create azuread_application_password.web
➕ Create azuread_service_principal.api
➕ Create azuread_service_principal.web
➕ Create azurerm_api_management.apim
➕ Create azurerm_api_management_api_version_set.api_version_set
➕ Create azurerm_api_management_diagnostic.app_insights
➕ Create azurerm_api_management_logger.app_insights
➕ Create azurerm_api_management_product.api_product
➕ Create azurerm_api_management_product_policy.api_product_policy
➕ Create azurerm_api_management_subscription.web
➕ Create azurerm_app_service_certificate_binding.web
➕ Create azurerm_app_service_custom_hostname_binding.web
➕ Create azurerm_app_service_managed_certificate.web
➕ Create azurerm_application_insights.ai
➕ Create azurerm_dns_cname_record.web
➕ Create azurerm_dns_txt_record.web_verification
➕ Create azurerm_key_vault.kv
➕ Create azurerm_key_vault_secret.api_client_id
➕ Create azurerm_key_vault_secret.api_client_secret
➕ Create azurerm_key_vault_secret.google_maps_api_key
➕ Create azurerm_key_vault_secret.maxmind_apikey
➕ Create azurerm_key_vault_secret.maxmind_userid
➕ Create azurerm_key_vault_secret.proxycheck_apikey
➕ Create azurerm_key_vault_secret.web_apim_subscription_key
➕ Create azurerm_linux_web_app.api
➕ Create azurerm_linux_web_app.web
➕ Create azurerm_role_assignment.api_kv_secrets_user
➕ Create azurerm_role_assignment.api_table_data_contributor
➕ Create azurerm_role_assignment.deploy_kv_secrets_officer
➕ Create azurerm_role_assignment.web_kv_secrets_user
➕ Create azurerm_storage_account.data
➕ Create azurerm_storage_table.geolocations
➕ Create azurerm_storage_table.geolocationsv11
➕ Create azurerm_storage_table.proxycheck
➕ Create google_apikeys_key.maps
➕ Create random_id.environment_id
➕ Create random_id.storage
➕ Create time_rotating.thirty_days
➕ Create time_sleep.wait_for_hostname_binding

@frasermolyneux
frasermolyneux merged commit edcc735 into main Aug 3, 2026
21 checks passed
@frasermolyneux
frasermolyneux deleted the agents/shared-cache-configuration-adoption branch August 3, 2026 14:55

This branch was previously deployed

1 inactive deployment
Development — b6b1e0d7 Deployed Aug 3, 2026 by frasermolyneux via terraform-plan-dev #483
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.

2 participants