feat(catalog): add catalog-backend-module-msgraph-incremental plugin

Introduces a new Backstage backend module that incrementally ingests
users and groups from Microsoft Graph one page at a time, using the
incremental ingestion framework.
Unlike MicrosoftGraphOrgEntityProvider, this module never holds the
full dataset in memory. Each burst processes a single page (up to 999
items), making it suitable for large Azure AD tenants where the
full-scan provider causes memory pressure or OOM failures.
The @odata.nextLink cursor is persisted in the incremental ingestion
marks table, so a pod restart during ingestion resumes from the last
completed page rather than starting over.
Signed-off-by: pillaris <pillaris@adobe.com>
This commit is contained in:
pillaris
2026-04-23 15:56:43 +05:30
parent e2fdc2b61f
commit f1279ea2d6
21 changed files with 2440 additions and 3 deletions
+23 -3
View File
@@ -5016,7 +5016,7 @@ __metadata:
languageName: unknown
linkType: soft
"@backstage/plugin-catalog-backend-module-incremental-ingestion@workspace:plugins/catalog-backend-module-incremental-ingestion":
"@backstage/plugin-catalog-backend-module-incremental-ingestion@workspace:^, @backstage/plugin-catalog-backend-module-incremental-ingestion@workspace:plugins/catalog-backend-module-incremental-ingestion":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-backend-module-incremental-ingestion@workspace:plugins/catalog-backend-module-incremental-ingestion"
dependencies:
@@ -5072,7 +5072,24 @@ __metadata:
languageName: unknown
linkType: soft
"@backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph":
"@backstage/plugin-catalog-backend-module-msgraph-incremental@workspace:plugins/catalog-backend-module-msgraph-incremental":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-backend-module-msgraph-incremental@workspace:plugins/catalog-backend-module-msgraph-incremental"
dependencies:
"@backstage/backend-plugin-api": "workspace:^"
"@backstage/catalog-model": "workspace:^"
"@backstage/cli": "workspace:^"
"@backstage/config": "workspace:^"
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "workspace:^"
"@backstage/plugin-catalog-backend-module-msgraph": "workspace:^"
"@backstage/plugin-catalog-node": "workspace:^"
"@backstage/types": "workspace:^"
"@microsoft/microsoft-graph-types": "npm:^2.6.0"
p-limit: "npm:^3.0.2"
languageName: unknown
linkType: soft
"@backstage/plugin-catalog-backend-module-msgraph@workspace:^, @backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph":
version: 0.0.0-use.local
resolution: "@backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph"
dependencies:
@@ -29085,7 +29102,9 @@ __metadata:
"@backstage/plugin-auth-node": "workspace:^"
"@backstage/plugin-catalog-backend": "workspace:^"
"@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^"
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "workspace:^"
"@backstage/plugin-catalog-backend-module-logs": "workspace:^"
"@backstage/plugin-catalog-backend-module-msgraph": "workspace:^"
"@backstage/plugin-catalog-backend-module-openapi": "workspace:^"
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^"
"@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^"
@@ -29115,6 +29134,7 @@ __metadata:
"@opentelemetry/exporter-prometheus": "npm:^0.213.0"
"@opentelemetry/sdk-node": "npm:^0.213.0"
example-app: "link:../app"
pg: "npm:^8.11.0"
languageName: unknown
linkType: soft
@@ -39927,7 +39947,7 @@ __metadata:
languageName: node
linkType: hard
"pg@npm:^8.11.3, pg@npm:^8.7.3, pg@npm:^8.9.0":
"pg@npm:^8.11.0, pg@npm:^8.11.3, pg@npm:^8.7.3, pg@npm:^8.9.0":
version: 8.20.0
resolution: "pg@npm:8.20.0"
dependencies: