Metadata-Version: 2.4
Name: eai-platform-infra
Version: 2.2.2
Summary: Pulumi stack program for the Extensibility AI dual-cloud platform
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: eai-core-infra<3,>=2.7.1
Requires-Dist: pulumi<4.0.0,>=3.0.0
Requires-Dist: pulumi-aws<7.0.0,>=6.0.0
Requires-Dist: pulumi-gcp<10.0.0,>=9.0.0
Requires-Dist: pulumi-github<7.0.0,>=6.13.1
Requires-Dist: pulumi-kubernetes<5.0.0,>=4.0.0
Requires-Dist: pulumi-random<5.0.0,>=4.0.0
Requires-Dist: pydantic>=2
Provides-Extra: dev
Requires-Dist: eai-core-infra[testing]<3,>=2.7.1; extra == "dev"
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: ruff>=0.4; extra == "dev"
Provides-Extra: publish
Requires-Dist: twine>=5; extra == "publish"
Requires-Dist: keyring>=24; extra == "publish"
Requires-Dist: keyrings.google-artifactregistry-auth>=0.0.3; extra == "publish"
Dynamic: license-file

# eai-platform-infra

Pulumi stack program for the shared GCP/AWS platform (VPC, GKE Autopilot / EKS,
KEDA, WIF / GitHub OIDC, Artifact Registry / ECR + CodeArtifact, DNS/TLS,
Envoy Gateway edge, and on AWS an Amazon Managed Prometheus workspace + ADOT
IRSA). Orchestrates `eai-core-infra` managers. AWS AMP/ADOT prerequisites:
[`docs/AMP-ADOT.md`](docs/AMP-ADOT.md).

```python
from eai_platform_infra import GCPPlatformProgram

GCPPlatformProgram().run()
```

Use `AWSPlatformProgram` on AWS. Moving from 1.x: see the 2.0.0 entry in
[CHANGELOG.md](CHANGELOG.md).

## Stack config

Load with `eai_core_infra.config.load_stack_config` into
`GCPPlatformStackConfig` or `AWSPlatformStackConfig`. Unknown keys are errors.

AWS renames from 1.x: `aws.rds.tier` → `instanceClass`,
`aws.rds.skipFinalSnapshot` → `finalSnapshot` (inverted). GCP keys are unchanged.

## Install

Use **uv**. Private packages come from Artifact Registry PyPI (`extensibility-ai`).

```bash
gcloud auth application-default login
uv sync --extra dev
uv run pytest
uv run ruff check src tests
```

The tests include the shared guardrail suites (`eai_core_infra.testing`; spec
in `tests/guardrails.py`, allowlists in `tests/allowlists/`, all empty) and
resource-graph snapshots (`tests/snapshots/`). A refactor keeps the snapshots
byte-identical apart from the approved core 2.0 diffs in
`downstream-remediation-plan.md` §6.2; an intended change is re-recorded with
`RECORD_SNAPSHOTS=1` and explained in the PR.

## License

Apache-2.0
