[Integration] Add ScaleQuality integration - #3597
Conversation
Adds an Ocean exporter that ingests ScaleQuality quality signals (AI code durability, engineering maturity, code maturity, tech radar) for every org, business unit and team as Port entities. Signed-off-by: Erik Amaral <erik.fernandes87@gmail.com>
a6d1da7 to
7c728be
Compare
PR Summary by QodoAdd ScaleQuality Ocean exporter integration
AI Description
Diagram
High-Level Assessment
Files changed (21)
|
|
This pull request is automatically being deployed by Amplify Hosting (learn more). |
Code Review by Qodo
Context used✅ Compliance rules (platform):
23 rules 1. get_entities() returns full entity list
|
- get_entities is now an async generator, aligning with Ocean's streaming resync contract instead of returning one large in-memory list - catch httpx.RequestError and JSON decode errors with URL/operation context - bound the logged upstream error body so a large response cannot bloat logs Signed-off-by: Erik Amaral <erik.fernandes87@gmail.com>
Description
Adds the ScaleQuality integration, an Ocean exporter that ingests ScaleQuality's measured quality signals into Port.
ScaleQuality exposes a read-only REST API. This integration calls a single bulk endpoint,
GET /v1/entities, which returns every organization, business unit and team the API key can see (each already enriched with its signals), and maps them onto ascaleQualityEntityblueprint:ok/warn/risk/unknownEach entity carries a
parentrelation, so teams roll up into business units and business units into the organization, plus a deep link back into the ScaleQuality app.Type of change
Notes
saas.enabled: false. Auth is a read-only Bearer API key.make lint(black, ruff, mypy strict, yamllint, poetry check) andpytestpass locally.Note
Low Risk
Greenfield read-only exporter with no changes to shared Ocean core; risk is limited to correct mapping and handling of the external API key.
Overview
Adds a new ScaleQuality Ocean integration under
integrations/scalequalitythat syncs org, business unit, and team quality signals into Port on a polling resync schedule (saas.enabled: false).On resync it calls ScaleQuality
GET /v1/entitiesvia a thin async client (Bearer API key), returns theentitiespayload, and maps each row to thescaleQualityEntityblueprint (AI durability, engineering/code maturity, tech radar count, durability status,measuredAt, deep link, andparenthierarchy). Port resources includeblueprints.json,port-app-config.yaml, and integrationspec.yamlwithscaleQualityApiUrl/ sensitivescaleQualityApiKey.Includes standard Ocean packaging (Poetry, shared Makefile),
.env.example, README/changelog, and pytest coverage for the HTTP client (auth header, URL normalization, entity parsing).Reviewed by Cursor Bugbot for commit a6d1da7. Configure here.