Metadata-Version: 2.4
Name: gcp-aws-migrator
Version: 0.1.2
Summary: Agentic GCP-to-AWS code migration service with live UI
Requires-Python: >=3.10
Requires-Dist: boto3>=1.34.0
Requires-Dist: fastapi>=0.135.3
Requires-Dist: gitpython>=3.1.46
Requires-Dist: openai>=2.30.0
Requires-Dist: pydantic>=2.12.5
Requires-Dist: python-dotenv>=1.2.2
Requires-Dist: pyyaml>=6.0.3
Requires-Dist: uvicorn>=0.42.0
Description-Content-Type: text/markdown

## GCP -> AWS Migration Agent (Hackathon MVP)

Python app that:

- Accepts GCP architecture JSON.
- Accepts optional target AWS YAML (or auto-generates one).
- Clones a Python repo from Git.
- Finds GCP SDK usage (Cloud SQL, Storage, Secret Manager patterns).
- Rewrites matching files into AWS-oriented code via OpenAI (or fallback rule-based mode).
- Runs a validation command after rewrite and iteratively attempts runtime repairs on error.
- Installs dependencies inside the cloned repo (`install_command=auto` -> `uv sync` or pip fallback).
- Can launch the migrated service via `startup_command` and keep it running in background.
- Streams step-by-step logs to a frontend.

## Stack

- Backend: FastAPI
- Frontend: static HTML + JS (served by FastAPI)
- Package manager: uv
- Git clone: GitPython
- LLM: OpenAI with provider abstraction

## Quick Start

1. Install dependencies (already managed by uv):

```bash
uv sync
```

2. (Optional) enable OpenAI rewrite mode:

```bash
copy .env.example .env
# add OPENAI_API_KEY in .env
```

3. Run app:

```bash
uv run python main.py
```

4. Open:

```text
http://localhost:9000
```

## Use As A Python Package

After publishing/installing:

```python
from gcp_aws_migrator import launch_migration_ui

launch_migration_ui(
  repo_url="https://github.com/your-org/your-repo.git",
  branch="main",
  gcp_architecture={"services": ["storage", "secret_manager", "cloud_sql"]},
  auto_start=True,
  env_overrides={"AWS_DEFAULT_REGION": "eu-north-1"},
)
```

`launch_migration_ui(...)` supports pre-filling all UI fields and can auto-start the conversion.

## Build And Publish

Build wheel + source dist:

```bash
uv build
```

Upload to PyPI using an API token:

```bash
set TWINE_USERNAME=__token__
set TWINE_PASSWORD=pypi-<your-token>
uvx twine upload dist/*
```

## API

- `POST /api/migrate`
  - body:
    - `repo_url` (string)
    - `branch` (string, default `main`)
    - `gcp_architecture` (json object)
    - `aws_architecture_yaml` (string, optional)
    - `validation_command` (string, default `uv run tests.py`)
    - `max_fix_iterations` (int, default `8`, max `8`)
    - `install_command` (string, default `auto`)
    - `startup_command` (string, default `uv run main.py`)
    - `ensure_service_running` (bool, default `true`)
    - `create_env_file` (bool, default `true`)
    - `env_overrides` (object, optional)
- `GET /api/runs/{run_id}`
- `GET /api/runs/{run_id}/logs`
- `GET /api/runs/{run_id}/stream` (SSE)
  - `GET /api/runs/{run_id}/files` (shows cloned repo file list)

## Notes

- If `OPENAI_API_KEY` is missing, app uses deterministic rule-based rewrites.
- Repositories are cloned into `workspaces/<run_id>/`.
- If `startup_command` is set, process logs are written to `workspaces/<run_id>/.migration/startup.log`.
- Validation and repair logs are streamed in real time so migration progress is traceable.
- This is an MVP and does not enforce production-grade safety controls.
