Skip to content

feat(infrastructure): add conversion pipeline Terraform module#542

Merged
WilliamBerryiii merged 10 commits into
mainfrom
feat/issue-39-conversion-pipeline-iac
May 1, 2026
Merged

feat(infrastructure): add conversion pipeline Terraform module#542
WilliamBerryiii merged 10 commits into
mainfrom
feat/issue-39-conversion-pipeline-iac

Conversation

@nguyena2
Copy link
Copy Markdown
Contributor

@nguyena2 nguyena2 commented Apr 22, 2026

Summary

Adds a new conversion-pipeline Terraform module that provisions the Azure infrastructure for the dataset conversion pipeline, along with supporting examples, root-level wiring, and CI updates.

Fixes #39

Changes

  • New module infrastructure/terraform/modules/conversion-pipeline/:
    • Storage account with blob/dfs private endpoints, lifecycle policies, and diagnostic settings
    • Event Grid topic with role assignments
    • Fabric workspace integration and role assignments
    • Full module documentation (README.md, TERRAFORM.md) and terraform test coverage
  • Root deployment (infrastructure/terraform/): wire the new module into main.tf, expose outputs, add variables, and pin provider versions
  • Examples: add terraform.tfvars.dev, terraform.tfvars.staging, and terraform.tfvars.prod samples
  • CI: extend pr-validation.yml and add a new terraform-security.yml workflow
  • Docs: regenerate TERRAFORM.md files across modules

Validation

  • terraform test cases under modules/conversion-pipeline/tests/
  • Updated PR validation workflow runs lint:tf:validate and the new security scan

CI / Security

This PR introduces a new code-scanning surface for Terraform via Checkov. Extended from #39 to cover security validation of the new module alongside the broader Terraform tree.

  • Scanner: Checkov (bridgecrewio/checkov-action), framework terraform, download_external_modules: false.
  • Scope: scans infrastructure/terraform recursively (all root deployments and modules under that path). Configurable via the reusable workflow's working-directory input.
  • Trigger: runs as the terraform-security job in pr-validation.yml on every PR, and is reusable via workflow_call (.github/workflows/terraform-security.yml).
  • Soft-fail default: soft-fail: true. Findings do not block merges today; the job is informational while the existing finding matrix is triaged and remediated.
  • Where results land:
    • SARIF uploaded to the GitHub Security tab under the checkov category (visible to security and repo admins via code scanning alerts).
    • SARIF also uploaded as a workflow artifact (checkov-sarif, 30-day retention) for offline review.
  • Rollout plan to flip soft-fail to hard-fail:
    1. Triage the initial Checkov findings surfaced in the Security tab and either remediate or file suppressions with justification.
    2. Once the backlog is at zero (or only contains accepted, suppressed findings), flip soft-fail: false in the terraform-security job in pr-validation.yml and add terraform-security to the required-status-check aggregator.
    3. Track this rollout via a follow-up issue referencing infra(cloud): conversion pipeline Bicep/Terraform template #39.

- add diagnostic settings for storage account and blob service
- create private endpoints for blob and dfs subresources
- define outputs for storage account, containers, and event grid
- set up role assignments for Event Grid and Fabric workspace
- add tests for conversion pipeline module functionality

🔧 - Generated by Copilot
@nguyena2 nguyena2 requested a review from a team as a code owner April 22, 2026 15:37
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 22, 2026

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
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA ebad89e.
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

.github/workflows/terraform-security.yml

PackageVersionLicenseIssue Type
bridgecrewio/checkov-action99bb2caf247dfd9f03cf984373bc6043d4e32ebfNullUnknown License

OpenSSF Scorecard

PackageVersionScoreDetails
actions/actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd 🟢 5.2
Details
CheckScoreReason
Code-Review🟢 5Found 16/29 approved changesets -- score normalized to 5
Maintained⚠️ 00 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Packaging⚠️ -1packaging workflow not detected
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 5branch protection is not maximal on development and all release branches
SAST🟢 9SAST tool detected but not run on all commits
actions/actions/upload-artifact 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 🟢 5.7
Details
CheckScoreReason
Code-Review🟢 7Found 7/9 approved changesets -- score normalized to 7
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 88 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 8
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 10SAST tool is run on all commits
actions/bridgecrewio/checkov-action 99bb2caf247dfd9f03cf984373bc6043d4e32ebf UnknownUnknown
actions/github/codeql-action/upload-sarif 95e58e9a2cdfd71adc6e0353d5c52f41a045d225 UnknownUnknown

Scanned Files

  • .github/workflows/terraform-security.yml

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 22, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.59%. Comparing base (c809d2f) to head (ebad89e).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #542      +/-   ##
==========================================
+ Coverage   65.16%   66.59%   +1.42%     
==========================================
  Files         251      262      +11     
  Lines       15597    16611    +1014     
  Branches     2193     2294     +101     
==========================================
+ Hits        10164    11062     +898     
- Misses       5142     5262     +120     
+ Partials      291      287       -4     
Flag Coverage Δ *Carryforward flag
pester 83.13% <ø> (ø) Carriedforward from 5e011bb
pytest-data-pipeline 100.00% <ø> (ø) Carriedforward from 5e011bb
pytest-dataviewer 65.21% <ø> (-1.72%) ⬇️ Carriedforward from 5e011bb
pytest-dm-tools 100.00% <ø> (ø) Carriedforward from 5e011bb
pytest-evaluation 99.83% <ø> (?)
pytest-fuzz 4.99% <ø> (+0.09%) ⬆️ Carriedforward from 5e011bb
pytest-inference 0.00% <ø> (ø) Carriedforward from 5e011bb
pytest-training 82.14% <ø> (ø) Carriedforward from 5e011bb
vitest 51.06% <ø> (-1.96%) ⬇️ Carriedforward from 5e011bb

*This pull request uses carry forward flags. Click here to find out more.
see 30 files with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

@rezatnoMsirhC rezatnoMsirhC left a comment

Choose a reason for hiding this comment

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

Good module structure and conventions throughout. Four comments below: one high-severity bug in the staging tfvars that will fail at plan time, one least-privilege RBAC issue, one Event Grid reliability concern, and one stale TODO to remove.

Comment thread infrastructure/examples/terraform.tfvars.staging
Comment thread infrastructure/terraform/modules/conversion-pipeline/event-grid.tf
Comment thread .github/workflows/terraform-security.yml
Copy link
Copy Markdown
Member

@WilliamBerryiii WilliamBerryiii left a comment

Choose a reason for hiding this comment

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

Review Summary — Conversion Pipeline IaC

Thanks for this; the module structure (Edge → Raw blob → Event Grid → Function App → Converted blob → Fabric Lakehouse) is coherent and easy to follow. Requesting changes for the items below — most are small, but RI-03 and RI-04 are blockers in my view.

Acknowledgements

  • Existing reviewer @rezatnoMsirhC has already covered E1–E4 (Function App SKU/runtime, identity, network ACLs, retention defaults). I've intentionally left those alone to avoid duplicate noise; please address them in the same revision pass.
  • I withdrew several internal candidates (provider version pinning, blob CORS, etc.) after confirming they were either already raised or non-issues against repo conventions.

Blocking items (inline)

  • RI-03 🟧 Mediummain.tf:64 — Four checkov:skip directives reference unresolved WI-01 placeholder. File the real follow-up issue(s) and replace WI-01 with the issue reference before merge.
  • RI-04 🟧 Mediuminfrastructure/terraform/variables.tf (root, ~lines 547–573) and infrastructure/terraform/main.tf (~lines 217–260) — The conversion_pipeline_config object exposed at the root does not surface every meaningful module variable. Operators today cannot, for example, override Function App SKU, blob retention windows, or Event Grid retry policy without editing the module directly. Either: (a) widen the root config object to mirror the module's full variable surface, or (b) document explicitly which knobs are intentionally fixed at the module layer and why. As-is the partial passthrough is a hidden footgun.

Non-blocking items (inline)

  • RI-02 🟨 Lowfabric.tf:23 — Fabric capacity name lacks separators; align with hyphenated convention (fc-${local.resource_name_suffix}).
  • RI-06 🟨 LowREADME.md:121 — Two-pass deployment with manual GUID copy is UX-fragile; suggest -target first pass or wrapper script.
  • RI-09 🟨 Lowversions.tf:43 — Add precondition or doc note for FABRIC_TENANT_ID / FABRIC_CLIENT_ID / FABRIC_CLIENT_SECRET env vars so missing values fail fast.
  • RI-07 🟦 TrivialREADME.md:4author: Edge AI Team inconsistent with sibling module READMEs.
  • RI-10 ℹ️ Verify-onlyevent-grid.tf:11 — Confirm evgt (vs. egst) is the intended Event Grid System Topic abbreviation.

Body-only finding

  • RI-05 🟨 Lowinfrastructure/terraform/variables.tf (root, ~lines 547–573) duplicates module-level defaults (Function App SKU F2, storage ZRS, raw retention 30 days, converted retention 90 days). Each default now lives in two places and will drift. Recommendation: drop the defaults from the root variable block and let the module own them, or remove them from the module and centralize at the root — either is fine, but not both.

Validation evidence

  • All 6 inline anchors verified against the PR diff hunks for commit 01de39ebf3db4eff0eba0cf7966b44e4d71c1f22 before posting.
  • Findings cross-checked against .github/copilot-instructions.md (Terraform Conventions section) and existing PR conversation to avoid duplication of @rezatnoMsirhC's review.

Happy to re-review once RI-03 and RI-04 are addressed.

Comment thread infrastructure/terraform/versions.tf Outdated
Comment thread infrastructure/terraform/modules/conversion-pipeline/README.md Outdated
Comment thread infrastructure/terraform/modules/conversion-pipeline/fabric.tf
Comment thread infrastructure/terraform/modules/conversion-pipeline/README.md Outdated
Comment thread infrastructure/terraform/modules/conversion-pipeline/main.tf Outdated
Comment thread infrastructure/terraform/modules/conversion-pipeline/event-grid.tf
…d letter support

- implement dynamic dead letter identity based on configuration
- update role assignment scope for event grid dead letter queue
- modify staging variables for PostgreSQL high availability

🔒 - Generated by Copilot
…loyment details

- correct author attribution to Microsoft Robotics-AI Team
- clarify two-pass deployment process in README
- add lifecycle precondition for fabric workspace in fabric.tf
- update Checkov control tracking references in main.tf

🔒 - Generated by Copilot
… pipeline module

- eliminate unused virtual network variable and references
- update tests to reflect changes in module dependencies

🔧 - Generated by Copilot
@github-advanced-security
Copy link
Copy Markdown
Contributor

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

Copy link
Copy Markdown
Collaborator

@katriendg katriendg left a comment

Choose a reason for hiding this comment

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

Thanks @nguyena2 for this great addition and integrating Fabric into the picture.
Reviewing the work, I have two generic notes which were based on reflections as I was looking through your updates. I'll let you decide being able to integrate these. For the first one I believe it's valuable, the second one I'll leave to you to assess if relevant.

Comment 1 — Can we drop the two-pass deploy and FABRIC_* env vars

Files referenced:

  • infrastructure/terraform/modules/conversion-pipeline/fabric.tf
  • infrastructure/terraform/modules/conversion-pipeline/variables.tf
  • infrastructure/terraform/modules/conversion-pipeline/README.md
  • infrastructure/terraform/versions.tf
  • infrastructure/README.md

Comment body

The two-pass workflow and the FABRIC_TENANT_ID / FABRIC_CLIENT_ID / FABRIC_CLIENT_SECRET prerequisite are avoidable. microsoft/edge-ai already solves the same azurerm_fabric_capacity "GUID not exposed" problem in a single apply and uses Azure CLI auth — no SP secret required. We should align with that pattern, if possible.

Wdty?

Reference: edge-ai/src/000-cloud/031-fabric/terraform/main.tf and versions.tf.

Edge-ai resolves the capacity GUID via a deferred data "fabric_capacity" lookup keyed by display_name. The terraform_data indirection prevents plan-time queries (handles the same testing/build-system constraint that prompted the two-pass design here):

resource "terraform_data" "defer_fabric_capacity_created" {
  count      = var.should_create_fabric_capacity ? 1 : 0
  input      = { display_name = local.fabric_capacity_name }
  depends_on = [module.fabric_capacity]
}

data "fabric_capacity" "created" {
  count        = length(terraform_data.defer_fabric_capacity_created)
  display_name = terraform_data.defer_fabric_capacity_created[0].output.display_name
}

locals {
  capacity_id = try(data.fabric_capacity.created[0].id, data.fabric_capacity.existing[0].id, null)
}

resource "fabric_workspace" "this" {
  count        = var.should_create_fabric_workspace ? 1 : 0
  capacity_id  = local.capacity_id
  display_name = "fws-${local.resource_name_suffix}"
  description  = "Conversion pipeline workspace (${var.environment})"
}

Edge-ai's versions.tf also has no provider "fabric" {} block and the blueprint README documents no FABRIC_* env vars. The microsoft/fabric provider supports Azure CLI auth (use_cli defaults to true) and picks up the same az login already used by azurerm. The SP-secret env-var path is one auth mode of several, not a requirement.

Proposed changes:

  1. Replace fabric_capacity_uuid (variable + workspace gating + lifecycle.precondition) with the deferred data "fabric_capacity" pattern above. Drop the entire "Two-pass deployment" README section.
  2. Remove the provider "fabric" {} block and its comment from infrastructure/terraform/versions.tf. The provider auto-discovers via Azure CLI when no provider block is declared.
  3. Remove the FABRIC_TENANT_ID / FABRIC_CLIENT_ID / FABRIC_CLIENT_SECRET prerequisite from both infrastructure/README.md and modules/conversion-pipeline/README.md. Replace with a note that az login is sufficient and that the operator's identity (or an opt-in SP, if the user explicitly chooses SP auth) must be in the "Service principals can use Fabric APIs" tenant allow-list.
  4. Pin the fabric provider to 1.3.0 (matching edge-ai) instead of ~> 1.0, which would let any new 1.x minor drift in.

This collapses the workflow to a single terraform apply, removes the secret-handling burden in CI, and aligns with the established Microsoft pattern.

Comment 2 — Storage overlap with the platform data-lake account

Files referenced:

  • infrastructure/terraform/modules/platform/storage.tf
  • infrastructure/terraform/modules/conversion-pipeline/main.tf
  • infrastructure/terraform/modules/conversion-pipeline/lifecycle.tf
  • infrastructure/terraform/main.tf

Comment body

The platform module already creates an HNS Gen2 data-lake account (stdl{prefix}{env}{instance}) with datasets, models, evaluation containers and lifecycle rules on datasets/raw/ (delete), datasets/converted/ (cool), and evaluation/reports/ (cool → archive). See modules/platform/storage.tf lines 61–120 and 200+.

The conversion-pipeline module creates a second HNS Gen2 account (stcp{prefix}{env}{instance}) with raw, converted, event-grid-dlq containers and the same lifecycle semantics on raw/ and converted/.

With the defaults should_create_data_lake_storage = true and should_deploy_conversion_pipeline = true, the deployment provisions:

  • Two HNS Gen2 storage accounts in the same resource group
  • Two raw / converted lanes with duplicate lifecycle policies
  • Two sets of blob + dfs private endpoints in the same PE subnet

The README's blast-radius rationale — "The AzureML extension storage account is managed separately by modules/platform" — refers to the st... ML-workspace account, not stdl... (the data-lake account). The data-lake account already serves the raw/converted use case and is silently duplicated.

There is no cross-gating in infrastructure/terraform/main.tf (should_create_data_lake_storage and should_deploy_conversion_pipeline are independent flags), and the conversion-pipeline README/variables make no mention of stdl.

Requested resolution (pick one and document it):

  • Option A — Reuse the platform data-lake account (preferred). Add data_lake_storage_account to modules/conversion-pipeline/variables.deps.tf as a typed object dependency, and create the raw / converted / event-grid-dlq containers (or use the existing datasets/ prefix) inside the platform-owned account. Drop stcp... and the duplicate private endpoints and lifecycle policy. This matches the variables.deps.tf pattern already used by modules/sil/ and modules/dataviewer/.
  • Option B — Mutually exclude. Add a root-level precondition that fails when both should_create_data_lake_storage and should_deploy_conversion_pipeline are true, and update the dev/staging/prod tfvars examples to flip should_create_data_lake_storage = false when the conversion pipeline is enabled. Document the rationale in both READMEs.

Option A is preferred — it eliminates the overlap rather than papering over it, and it preserves the intended platform/conversion-pipeline split (compute and event plumbing stay in conversion-pipeline; durable storage stays platform-owned).

Comment thread infrastructure/terraform/modules/conversion-pipeline/fabric.tf
Comment thread .github/workflows/terraform-security.yml
- refactor conversion pipeline tests to validate data lake dependencies
- remove unused variables related to storage account configuration
- enhance role assignments for Fabric SP on datasets container
- add precondition tests for conversion pipeline deployment

🔧 - Generated by Copilot
Copy link
Copy Markdown
Collaborator

@katriendg katriendg left a comment

Choose a reason for hiding this comment

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

Thanks for update and switch with the Fabric provide & data lake, looks clean now!

Comment thread infrastructure/terraform/main.tf
@WilliamBerryiii WilliamBerryiii dismissed rezatnoMsirhC’s stale review May 1, 2026 17:40

comments addressed

@WilliamBerryiii WilliamBerryiii merged commit 244531e into main May 1, 2026
48 checks passed
@WilliamBerryiii WilliamBerryiii deleted the feat/issue-39-conversion-pipeline-iac branch May 1, 2026 17:40
WilliamBerryiii pushed a commit that referenced this pull request May 8, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.8.0](v0.7.4...v0.8.0)
(2026-05-08)


### ⚠ BREAKING CHANGES

* **dataviewer:** bump frontend stack to React 19, Vite 8, Tailwind v4,
MSAL 5, ESLint 10
([#524](#524))

### ✨ Features

* **agents:** add automated validation for high-risk Dependabot bumps
([#574](#574))
([8c3686a](8c3686a)),
closes
[#573](#573)
* **data:** add camera selector to annotation workspace and fix AV1
frame extraction
([#591](#591))
([c809d2f](c809d2f))
* **data:** seed dataviewer frontend test foundation and per-section
codecov flags
([#594](#594))
([c06c4e3](c06c4e3))
* **dataviewer:** add OWASP security middleware stack
([#439](#439))
([239edb9](239edb9))
* **infrastructure:** add conversion pipeline Terraform module
([#542](#542))
([244531e](244531e))
* **infrastructure:** upgrade OSMO to chart 1.2.1 / image 6.2 with
secure auth and skrl 2.0.0 compatibility
([#492](#492))
([edfd7a5](edfd7a5))
* **pipeline:** add ACSA setup for ROS2 bag sync to Blob
([#451](#451))
([c271a54](c271a54))
* **workflows:** add advisory Dependabot PR reviewer agentic workflow
([#498](#498))
([d4bb140](d4bb140))
* **workflows:** trigger AW Dependabot PR reviewer after PR Validation
([#580](#580))
([7ab3d16](7ab3d16))


### 🐛 Bug Fixes

* **ci:** correct stale version comment for
actions/create-github-app-token
([#506](#506))
([b2e9a54](b2e9a54))
* **ci:** restore data-pipeline and training broken tests by domain
folder restructure
([#547](#547))
([06d8472](06d8472))
* **docs:** update remaining stale 'Coming soon' labels in
docs/README.md
([#507](#507))
([02439d6](02439d6))
* **docs:** update stale coming soon label for Training section
([#472](#472))
([46db49b](46db49b))
* **evaluation:** scope SIL AzureML validation code path and script
reference
([#387](#387))
([9f138a9](9f138a9))
* **infrastructure:** OSMO workflow execution, PostgreSQL public access,
and quickstart corrections
([#477](#477))
([9ed2da6](9ed2da6))
* **scripts:** exclude CHANGELOG.md from changed-files msdate check
([#644](#644))
([8133bdc](8133bdc))
* **workflows:** allow dependabot[bot] to activate AW Dependabot PR
Review
([#586](#586))
([39dc022](39dc022))
* **workflows:** correct branches filter on AW Dependabot PR Review
workflow_run trigger
([#584](#584))
([fe06b52](fe06b52))
* **workflows:** normalize validate.yaml placeholder env/compute values
([#510](#510))
([340ff44](340ff44))
* **workflows:** recompile aw-dependabot-pr-review lock file
([#576](#576))
([d77c167](d77c167))
* **workflows:** switch AW Dependabot PR Review to pull_request_target
([#589](#589))
([3f1edd1](3f1edd1))


### 📚 Documentation

* **docs:** Fix deployment guide links
([#614](#614))
([0070b04](0070b04))
* document dependency-pinning-artifacts directory purpose
([#508](#508))
([50e0010](50e0010))


### 📦 Build System

* **training:** standardize on Python 3.12 across manifests, containers,
and runtime scripts
([#541](#541))
([7ad014a](7ad014a))


### 🔧 Operations

* **build:** add Copilot cloud agent setup-steps workflow
([#593](#593))
([c912668](c912668))


### 🔧 Miscellaneous

* **build:** exclude auto-generated CHANGELOG.md from cspell and seed
dictionary
([#582](#582))
([de1dd57](de1dd57))
* **build:** redesign codecov flags and split pytest CI per component
([#520](#520))
([357e745](357e745))
* **dataviewer:** bump frontend stack to React 19, Vite 8, Tailwind v4,
MSAL 5, ESLint 10
([#524](#524))
([50f8ad4](50f8ad4))
* **dataviewer:** repoint stale src/dataviewer references to
data-management/viewer
([#504](#504))
([88fa1b4](88fa1b4)),
closes
[#503](#503)
* **deps-dev:** bump basic-ftp from 5.3.0 to 5.3.1
([#618](#618))
([ca10f2a](ca10f2a))
* **deps-dev:** bump globals from 15.15.0 to 17.5.0 in
/data-management/viewer/frontend
([#527](#527))
([0e0b2ae](0e0b2ae))
* **deps-dev:** bump ip-address from 10.1.0 to 10.2.0
([#616](#616))
([816c9cf](816c9cf))
* **deps-dev:** bump lint-staged from 16.4.0 to 17.0.2 in the
root-npm-dependencies group across 1 directory
([#626](#626))
([0e2f293](0e2f293))
* **deps-dev:** bump pydantic from 2.13.3 to 2.13.4 in the
python-dependencies group across 1 directory
([#629](#629))
([c24f1c1](c24f1c1))
* **deps-dev:** bump the python-dependencies group across 1 directory
with 2 updates
([#514](#514))
([8410f4b](8410f4b))
* **deps:** bump azure-core from 1.39.0 to 1.40.0 in /evaluation in the
inference-dependencies group across 1 directory
([#597](#597))
([6141db4](6141db4))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in
/data-management/viewer
([#424](#424))
([5fb6d58](5fb6d58))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in
/data-management/viewer/backend
([#423](#423))
([b516ad5](b516ad5))
* **deps:** bump lucide-react from 0.469.0 to 1.8.0 in
/data-management/viewer/frontend
([#528](#528))
([1bdfc1e](1bdfc1e))
* **deps:** bump nginx from `8aa63af` to `5616878` in
/data-management/viewer/frontend
([#511](#511))
([9e7e20e](9e7e20e))
* **deps:** bump nginx from 1.27-alpine to 1.29-alpine in
/data-management/viewer/frontend
([#484](#484))
([0e5c3dd](0e5c3dd))
* **deps:** bump node from `435f353` to `e49fd70` in
/data-management/viewer/frontend
([#560](#560))
([2884649](2884649))
* **deps:** bump react-is from 18.3.1 to 19.2.5 in
/data-management/viewer/frontend
([#530](#530))
([d51318c](d51318c))
* **deps:** bump tensordict from 0.11.0 to 0.12.1 in /evaluation in the
inference-dependencies group across 1 directory
([#456](#456))
([b24e733](b24e733))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 2 updates
([#531](#531))
([171a1da](171a1da))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 5 updates
([#516](#516))
([4f9a577](4f9a577))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 5 updates
([#602](#602))
([6c27ab5](6c27ab5))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 2 updates
([#529](#529))
([8646971](8646971))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 3 updates
([#601](#601))
([d28fb50](d28fb50))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 3 updates
([#632](#632))
([4ca5f3e](4ca5f3e))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 5 updates
([#515](#515))
([109ee81](109ee81))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 6 updates
([#630](#630))
([04d5dfd](04d5dfd))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 9 updates
([#563](#563))
([c08f450](c08f450))
* **deps:** bump the docusaurus-dependencies group across 1 directory
with 4 updates
([#627](#627))
([f5825fc](f5825fc))
* **deps:** bump the docusaurus-dependencies group across 1 directory
with 6 updates
([#599](#599))
([b859344](b859344))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#459](#459))
([2609c52](2609c52))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#517](#517))
([f54bf5d](f54bf5d))
* **deps:** bump the inference-dependencies group across 1 directory
with 11 updates
([#562](#562))
([087f53a](087f53a))
* **deps:** bump the inference-dependencies group across 1 directory
with 2 updates
([#628](#628))
([4a3be47](4a3be47))
* **deps:** bump the pip group across 2 directories with 1 update
([#494](#494))
([a14b6b0](a14b6b0))
* **docs:** update stale Python 3.11 references to 3.12
([#575](#575))
([6f85c95](6f85c95))
* **scripts:** remove redundant SC1091 disables in OSMO deploy scripts
([#509](#509))
([ae1cb82](ae1cb82))


### 🔒 Security

* **build:** pin dependencies and hash-verify downloads
([#465](#465))
([0289f49](0289f49))
* **build:** remediate dependency security advisories
([#479](#479))
([7196d6d](7196d6d))
* **deps-dev:** bump basic-ftp from 5.2.1 to 5.2.2
([#454](#454))
([cb158f1](cb158f1))
* **deps-dev:** bump basic-ftp from 5.2.2 to 5.3.0
([#495](#495))
([e983b8b](e983b8b))
* **deps-dev:** bump hypothesis from 6.152.3 to 6.152.4 in the
python-dependencies group
([#598](#598))
([83384d2](83384d2))
* **deps-dev:** bump markdownlint-cli2 from 0.22.0 to 0.22.1 in the
root-npm-dependencies group
([#559](#559))
([32bde35](32bde35))
* **deps-dev:** bump picomatch from 2.3.1 to 2.3.2 in /docs/docusaurus
([#455](#455))
([66f86ca](66f86ca))
* **deps-dev:** bump postcss from 8.5.10 to 8.5.12 in
/data-management/viewer/frontend
([#569](#569))
([a652dba](a652dba))
* **deps-dev:** bump the python-dependencies group with 2 updates
([#457](#457))
([749d231](749d231))
* **deps-dev:** bump the python-dependencies group with 2 updates
([#485](#485))
([71b44fd](71b44fd))
* **deps-dev:** bump the python-dependencies group with 3 updates
([#564](#564))
([9fc52fd](9fc52fd))
* **deps-dev:** bump typescript from 6.0.2 to 6.0.3 in /docs/docusaurus
in the docusaurus-dependencies group
([#513](#513))
([5694dbc](5694dbc))
* **deps:** bump azureml/openmpi4.1.0-ubuntu22.04 from 20260303.v5 to
20260409.v4 in /evaluation/sil/docker
([#480](#480))
([25d4df8](25d4df8))
* **deps:** bump cryptography from 46.0.6 to 46.0.7 in /evaluation in
the uv group across 1 directory
([#538](#538))
([92c5b2e](92c5b2e))
* **deps:** bump diffusers from 0.35.2 to 0.38.0 in /training/il/lerobot
([#638](#638))
([6261d19](6261d19))
* **deps:** bump follow-redirects from 1.15.11 to 1.16.0 in
/docs/docusaurus
([#469](#469))
([0458908](0458908))
* **deps:** bump gitpython and mako for lerobot IL training
([#623](#623))
([9f8022b](9f8022b))
* **deps:** bump node from 24.14.1-slim to 25.9.0-slim in
/data-management/viewer/frontend
([#482](#482))
([1532d09](1532d09))
* **deps:** bump packaging from 26.0 to 26.1 in /evaluation in the
inference-dependencies group
([#483](#483))
([f4afb6c](f4afb6c))
* **deps:** bump pillow from 12.1.1 to 12.2.0
([#467](#467))
([39fb663](39fb663))
* **deps:** bump python from 3.11-slim to 3.14-slim in
/data-management/viewer/backend
([#481](#481))
([7af9dfc](7af9dfc))
* **deps:** bump the dataviewer-backend-dependencies group across 1
directory with 15 updates
([#428](#428))
([e4446a2](e4446a2))
* **deps:** bump the dataviewer-backend-dependencies group in
/data-management/viewer/backend with 4 updates
([#487](#487))
([0f57c5b](0f57c5b))
* **deps:** bump the dataviewer-backend-dependencies group in
/data-management/viewer/backend with 8 updates
([#566](#566))
([d6e7869](d6e7869))
* **deps:** bump the dataviewer-dependencies group across 1 directory
with 5 updates
([#464](#464))
([24c208d](24c208d))
* **deps:** bump the dataviewer-dependencies group in
/data-management/viewer with 2 updates
([#486](#486))
([90149f3](90149f3))
* **deps:** bump the dataviewer-dependencies group in
/data-management/viewer with 6 updates
([#565](#565))
([f0bb36b](f0bb36b))
* **deps:** bump the dataviewer-frontend-patch-minor group across 1
directory with 10 updates
([#613](#613))
([e481f83](e481f83))
* **deps:** bump the github-actions group across 1 directory with 4
updates
([#534](#534))
([5478ab6](5478ab6))
* **deps:** bump the github-actions group with 2 updates
([#488](#488))
([4e6ce98](4e6ce98))
* **deps:** bump the github-actions group with 3 updates
([#567](#567))
([48c38dc](48c38dc))
* **deps:** bump the github-actions group with 3 updates
([#634](#634))
([00cfb49](00cfb49))
* **deps:** bump the github-actions group with 6 updates
([#603](#603))
([73eb79a](73eb79a))
* **deps:** bump the training-dependencies group across 1 directory with
23 updates
([#463](#463))
([d5a8656](d5a8656))
* **deps:** bump yaml from 2.8.2 to 2.8.3 in
/data-management/viewer/frontend
([#453](#453))
([10449df](10449df))
* pytest harness, dependabot advisories, and OSSF Scorecard remediations
([#501](#501))
([e8756e8](e8756e8))
* **scripts:** pin and hash-verify all shell script downloads
([#468](#468))
([0c2bb9c](0c2bb9c))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: physical-ai-toolchain-release[bot] <267194360+physical-ai-toolchain-release[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

infra(cloud): conversion pipeline Bicep/Terraform template

6 participants