diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b6c9caa..c93a2bb 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -7,9 +7,6 @@ # API backend /apps/api/ @RepliMap/backend-team @RepliMap/core-team -# CLI -/apps/cli/ @RepliMap/cli-team @RepliMap/core-team - # Shared configuration - requires core team review /packages/config/ @RepliMap/core-team diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index fc01766..043f02a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,7 +19,6 @@ - [ ] `apps/web` - Web Dashboard - [ ] `apps/api` - API Backend -- [ ] `apps/cli` - Python CLI - [ ] `packages/config` - Shared Configuration - [ ] `.github/` - CI/CD & Workflows - [ ] Documentation diff --git a/.github/dependabot.yml b/.github/dependabot.yml index de35dc2..cc9fad1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -88,34 +88,6 @@ updates: commit-message: prefix: "chore(deps-api)" - # CLI (Python) - - package-ecosystem: "pip" - directory: "/apps/cli" - schedule: - interval: "weekly" - day: "monday" - groups: - aws: - patterns: - - "boto3" - - "botocore" - cli: - patterns: - - "click" - - "rich" - - "typer" - testing: - patterns: - - "pytest*" - - "ruff" - - "mypy" - labels: - - "dependencies" - - "python" - - "cli" - commit-message: - prefix: "chore(deps-cli)" - # GitHub Actions - package-ecosystem: "github-actions" directory: "/" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e36ce6f..45b4bc6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,45 +37,3 @@ jobs: - name: Type check run: pnpm typecheck || true - - test-cli: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Enable Corepack - run: corepack enable - - - uses: pnpm/action-setup@v4 - - - uses: actions/setup-node@v4 - with: - node-version: '24' - cache: 'pnpm' - - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Build config and sync to CLI - run: | - pnpm install - pnpm --filter @replimap/config build - bash apps/cli/scripts/sync-config.sh - - - name: Install CLI dependencies - working-directory: apps/cli - run: pip install -e ".[dev]" || pip install -e . - - - name: Verify config loads - working-directory: apps/cli - run: | - python -c " - from replimap._generated.config import CONFIG_VERSION, PLANS - print(f'Config loaded: version={CONFIG_VERSION}') - print(f'Plans: {list(PLANS.keys())}') - " - - - name: Run tests - working-directory: apps/cli - run: pytest tests/ -v || true diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml deleted file mode 100644 index 0318b4d..0000000 --- a/.github/workflows/release-cli.yml +++ /dev/null @@ -1,147 +0,0 @@ -name: Release CLI to PyPI - -on: - push: - tags: - - 'cli-v*' - workflow_dispatch: - inputs: - dry_run: - description: 'Dry run (build but do not publish)' - required: false - default: 'false' - type: boolean - -concurrency: - group: release-cli-${{ github.ref }} - cancel-in-progress: false - -jobs: - build: - name: Build Distribution - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Enable Corepack - run: corepack enable - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - - uses: actions/setup-node@v4 - with: - node-version: '24' - cache: 'pnpm' - - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Build config package - run: | - pnpm install --frozen-lockfile - pnpm --filter @replimap/config build - - - name: Sync config to CLI - run: bash apps/cli/scripts/sync-config.sh - - - name: Install build tools - run: pip install build twine - - - name: Build package - working-directory: apps/cli - run: | - rm -rf dist/ build/ *.egg-info - python -m build - - - name: Check package - working-directory: apps/cli - run: twine check dist/* - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: python-package-distributions - path: apps/cli/dist/ - - publish-testpypi: - name: Publish to TestPyPI - needs: build - runs-on: ubuntu-latest - if: github.event.inputs.dry_run != 'true' - environment: - name: testpypi - url: https://test.pypi.org/p/replimap - permissions: - id-token: write - steps: - - name: Download artifact - uses: actions/download-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - - name: Publish to TestPyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ - - publish-pypi: - name: Publish to PyPI - needs: [build, publish-testpypi] - runs-on: ubuntu-latest - if: github.event.inputs.dry_run != 'true' && startsWith(github.ref, 'refs/tags/cli-v') - environment: - name: pypi - url: https://pypi.org/p/replimap - permissions: - id-token: write - steps: - - name: Download artifact - uses: actions/download-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - - create-github-release: - name: Create GitHub Release - needs: publish-pypi - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@v4 - - - name: Download artifact - uses: actions/download-artifact@v4 - with: - name: python-package-distributions - path: dist/ - - - name: Extract version from tag - id: version - run: echo "VERSION=${GITHUB_REF#refs/tags/cli-v}" >> $GITHUB_OUTPUT - - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - name: CLI v${{ steps.version.outputs.VERSION }} - body: | - ## RepliMap CLI v${{ steps.version.outputs.VERSION }} - - ### Installation - - ```bash - pip install replimap==${{ steps.version.outputs.VERSION }} - ``` - - ### Changes - - See [CHANGELOG.md](./apps/cli/CHANGELOG.md) for details. - files: dist/* - generate_release_notes: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ff8dfb..2ce93a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,14 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Monorepo structure with Turborepo -- Shared configuration package with cross-language support +- Shared configuration package - GitHub Actions CI/CD pipelines -- OIDC-based PyPI publishing - Comprehensive Makefile for development commands - Cross-platform development support (Linux, macOS, Windows/WSL) ### Changed - Migrated from multi-repo to monorepo architecture +- Removed CLI from public repo (moved to private repo) ## [0.5.0] - 2025-01-15 @@ -24,12 +24,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial monorepo release - Web dashboard (Next.js 16) - API backend (Hono + Cloudflare Workers) -- CLI tool (Python 3.11+) ### Security - Integrated CodeQL scanning - Added Dependabot for automated updates -- Implemented OIDC Trusted Publishing for PyPI --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0e8db4a..5556f54 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,7 +22,6 @@ Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md). |------|---------|----------| | Node.js | 24.x | All | | pnpm | 9.x | All | -| Python | 3.11+ | All | | Make | any | Linux/macOS/WSL | ### Platform-Specific Setup @@ -82,7 +81,6 @@ wsl --install -d Ubuntu ```powershell # Install Node.js from https://nodejs.org/ -# Install Python from https://python.org/ # Enable pnpm corepack enable @@ -96,10 +94,6 @@ pnpm install # Build packages pnpm build - -# Setup CLI -cd apps/cli -pip install -e ".[dev]" ``` #### PowerShell Command Reference @@ -136,7 +130,6 @@ make dev # Or individually make dev-web # Web: http://localhost:3000 make dev-api # API: http://localhost:8787 -make dev-cli # CLI: editable install ``` ### Testing @@ -180,7 +173,6 @@ We follow [Conventional Commits](https://www.conventionalcommits.org/): |-------|---------| | `web` | apps/web | | `api` | apps/api | -| `cli` | apps/cli | | `config` | packages/config | | `deps` | Dependencies | | `ci` | GitHub Actions | @@ -188,11 +180,11 @@ We follow [Conventional Commits](https://www.conventionalcommits.org/): ### Examples ```bash -feat(cli): add terraform export command +feat(web): add dashboard analytics fix(api): resolve rate limiting issue docs(readme): update installation instructions chore(deps): update dependencies -perf(cli): optimize resource scanning by 40% +perf(api): optimize response time by 40% ``` ## Pull Request Process @@ -209,7 +201,7 @@ perf(cli): optimize resource scanning by 40% Use Conventional Commits format: ``` feat(web): add dashboard analytics -fix(cli): resolve timeout on large scans +fix(api): resolve rate limiting issue ``` ### Review Process diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 96e1d18..528dd8f 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -10,7 +10,6 @@ | `VERCEL_ORG_ID` | Vercel organization ID | Vercel Dashboard -> Settings -> General | | `VERCEL_PROJECT_ID_WEB` | Web project ID | Vercel Dashboard -> Project -> Settings | | `CLOUDFLARE_API_TOKEN` | CF API token | Cloudflare Dashboard -> API Tokens | -| `PYPI_API_TOKEN` | PyPI upload token | PyPI -> Account Settings -> API tokens | ## Platform Configuration @@ -34,49 +33,6 @@ and Vercel's build cache won't work correctly. Without this setting, wrangler deploy may fail to find dependencies. -### PyPI (apps/cli) - -CLI releases are triggered by git tags: -```bash -# Create and push a release tag -make tag-cli VERSION=0.5.0 -``` - -## PyPI OIDC Trusted Publishing Setup - -OIDC (OpenID Connect) eliminates the need for long-lived API tokens. Configure once on PyPI: - -### Step 1: Create Publisher on PyPI - -1. Go to https://pypi.org/manage/account/publishing/ -2. Add a new "pending publisher" with: - - **PyPI Project Name**: `replimap` - - **Owner**: `RepliMap` - - **Repository**: `replimap-mono` - - **Workflow name**: `release-cli.yml` - - **Environment name**: `pypi` - -3. Repeat for TestPyPI at https://test.pypi.org/manage/account/publishing/ - - **Environment name**: `testpypi` - -### Step 2: Create GitHub Environments - -1. Go to Repository Settings -> Environments -2. Create environment `pypi`: - - Add protection rule: Required reviewers (optional) - - Add protection rule: Restrict to tags matching `cli-v*` -3. Create environment `testpypi`: - - No special restrictions needed - -### Why OIDC? - -| Aspect | API Token | OIDC | -|--------|-----------|------| -| Secret Management | Manual rotation needed | No secrets to manage | -| Scope | Can be overly broad | Scoped to specific workflow | -| Audit | Limited | Full GitHub audit trail | -| Revocation | Manual | Automatic | - ## Manual Deployment ```bash @@ -85,9 +41,6 @@ make deploy-web # Deploy api to Cloudflare make deploy-api - -# Release CLI to PyPI -make release-cli ``` ## Troubleshooting @@ -98,9 +51,6 @@ Run: `make build-config` ### Generated files out of sync Run: `make commit-config` -### CLI config import fails -Run: `make sync-cli-config` - ### Vercel build fails with "command not found: pnpm" Ensure the installCommand in vercel.json includes `corepack enable`: ```json @@ -122,14 +72,11 @@ The monorepo includes the following GitHub Actions workflows: - Builds all packages - Runs linting and type checking - Verifies generated files are committed - - Tests CLI config loading - **deploy-web.yml**: Deploys to Vercel when apps/web or packages/config changes - **deploy-api.yml**: Deploys to Cloudflare when apps/api or packages/config changes -- **release-cli.yml**: Publishes to PyPI when a `cli-v*` tag is pushed - ## Environment Variables ### Web (apps/web) @@ -140,7 +87,3 @@ The monorepo includes the following GitHub Actions workflows: ### API (apps/api) - Configured in `wrangler.toml` `[vars]` section - Secrets set via `wrangler secret put` - -### CLI (apps/cli) -- No build-time environment variables required -- Runtime configuration via CLI flags or config files diff --git a/Makefile b/Makefile index e0c3411..20a0cd3 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: help install build dev clean lint typecheck test \ - dev-web dev-api dev-cli build-config sync-cli-config \ - deploy-web deploy-api release-cli deploy-all \ + dev-web dev-api build-config \ + deploy-web deploy-api deploy-all \ check-generated check-versions pre-commit setup info \ - commit-config tag-cli update + commit-config update .DEFAULT_GOAL := help @@ -16,7 +16,6 @@ RESET := \033[0m # Version detection NODE_VERSION := $(shell node --version 2>/dev/null || echo "not installed") PNPM_VERSION := $(shell pnpm --version 2>/dev/null || echo "not installed") -PYTHON_VERSION := $(shell python3 --version 2>/dev/null || echo "not installed") NPM_VERSION := $(shell npm --version 2>/dev/null || echo "not installed") #============================================================================== @@ -31,7 +30,6 @@ help: ## Show this help message @echo " Node: $(NODE_VERSION) (required: 24.x)" @echo " npm: $(NPM_VERSION)" @echo " pnpm: $(PNPM_VERSION) (required: 9.x)" - @echo " Python: $(PYTHON_VERSION) (required: 3.11+)" @echo "" @echo "$(GREEN)Available commands:$(RESET)" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \ @@ -76,10 +74,6 @@ build-web: build-config ## Build web app build-api: build-config ## Build api app pnpm --filter @replimap/api build -build-cli: sync-cli-config ## Build CLI package - cd apps/cli && rm -rf dist/ build/ *.egg-info && python -m build - @echo "$(GREEN)CLI package built$(RESET)" - #============================================================================== # Development #============================================================================== @@ -92,16 +86,6 @@ dev-web: ## Start web dev server dev-api: ## Start api dev server pnpm --filter @replimap/api dev -dev-cli: sync-cli-config ## Setup CLI for development - cd apps/cli && pip install -e ".[dev]" 2>/dev/null || pip install -e . - @echo "$(GREEN)CLI installed in dev mode$(RESET)" - -#============================================================================== -# Config Sync -#============================================================================== -sync-cli-config: build-config ## Sync config to CLI (generates Python code) - @bash apps/cli/scripts/sync-config.sh - check-generated: ## Verify generated files are committed @pnpm --filter @replimap/config build @if [ -n "$$(git status --porcelain packages/config/dist/)" ]; then \ @@ -125,11 +109,9 @@ typecheck: ## Run type checking format: ## Format code pnpm format 2>/dev/null || npx prettier --write "**/*.{ts,tsx,js,json,md}" - cd apps/cli && ruff format . 2>/dev/null || true test: ## Run all tests pnpm test 2>/dev/null || true - cd apps/cli && pytest tests/ -v 2>/dev/null || echo "$(YELLOW)CLI tests skipped$(RESET)" pre-commit: lint typecheck check-generated ## Run pre-commit checks @echo "$(GREEN)Pre-commit checks passed$(RESET)" @@ -143,9 +125,6 @@ deploy-web: build-web ## Deploy web to Vercel deploy-api: build-api ## Deploy api to Cloudflare cd apps/api && wrangler deploy --minify -release-cli: build-cli ## Release CLI to PyPI - cd apps/cli && twine check dist/* && twine upload dist/* - deploy-all: deploy-web deploy-api ## Deploy web and api @echo "$(GREEN)All deployments complete$(RESET)" @@ -156,16 +135,12 @@ clean: ## Clean build artifacts rm -rf node_modules .turbo rm -rf apps/web/.next apps/web/out apps/web/node_modules rm -rf apps/api/dist apps/api/node_modules .wrangler - rm -rf apps/cli/dist apps/cli/build apps/cli/*.egg-info rm -rf packages/config/node_modules - find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".turbo" -exec rm -rf {} + 2>/dev/null || true - find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true @echo "$(GREEN)Cleaned$(RESET)" clean-all: clean ## Deep clean (includes generated files and caches) rm -rf packages/config/dist - rm -rf apps/cli/replimap/_generated pnpm store prune 2>/dev/null || true @echo "$(GREEN)Deep cleaned$(RESET)" @@ -177,20 +152,17 @@ setup: check-versions ## First-time development setup @echo "" $(MAKE) install $(MAKE) build-config - $(MAKE) sync-cli-config - cd apps/cli && pip install -e ".[dev]" 2>/dev/null || pip install -e . @echo "" @echo "$(GREEN)Setup complete!$(RESET)" @echo "" @echo "$(CYAN)Next steps:$(RESET)" @echo " make dev-web # Start web development" @echo " make dev-api # Start api development" - @echo " make dev-cli # Setup CLI development" @echo "" @echo "$(CYAN)Deployment checklist:$(RESET)" @echo " 1. Vercel: Set Root Directory to 'apps/web'" @echo " 2. Cloudflare: Set Root Directory to 'apps/api'" - @echo " 3. Add secrets: VERCEL_TOKEN, CLOUDFLARE_API_TOKEN, PYPI_API_TOKEN" + @echo " 3. Add secrets: VERCEL_TOKEN, CLOUDFLARE_API_TOKEN" check-versions: ## Verify installed versions meet requirements @echo "$(CYAN)Checking versions...$(RESET)" @@ -217,11 +189,6 @@ check-versions: ## Verify installed versions meet requirements echo "$(GREEN)pnpm $(PNPM_VERSION)$(RESET)"; \ fi @echo "$(GREEN)npm $(NPM_VERSION)$(RESET)" - @if ! command -v python3 >/dev/null 2>&1; then \ - echo "$(RED)Python 3 not installed$(RESET)"; \ - exit 1; \ - fi - @echo "$(GREEN)$(PYTHON_VERSION)$(RESET)" info: ## Show environment info @echo "" @@ -231,17 +198,14 @@ info: ## Show environment info @echo " Node: $(NODE_VERSION)" @echo " npm: $(NPM_VERSION)" @echo " pnpm: $(PNPM_VERSION)" - @echo " Python: $(PYTHON_VERSION)" @echo "" @echo "$(GREEN)Required versions:$(RESET)" @echo " Node: 24.x (Vercel production)" @echo " pnpm: 9.x" - @echo " Python: 3.11+" @echo "" @echo "$(GREEN)Components:$(RESET)" @echo " apps/web -> Next.js 16 (Vercel)" @echo " apps/api -> Hono (Cloudflare Workers)" - @echo " apps/cli -> Python (PyPI)" @echo " packages/config -> Shared configuration" @echo "" @if [ -f packages/config/dist/index.ts ]; then \ @@ -258,14 +222,3 @@ info: ## Show environment info commit-config: build-config ## Build and commit config changes git add packages/config/dist/ git commit -m "chore: regenerate config files [skip ci]" || echo "$(YELLOW)No changes to commit$(RESET)" - -tag-cli: ## Create CLI release tag (usage: make tag-cli VERSION=0.5.0) - @if [ -z "$(VERSION)" ]; then \ - echo "$(RED)Usage: make tag-cli VERSION=0.5.0$(RESET)"; \ - exit 1; \ - fi - @echo "$(CYAN)Creating tag cli-v$(VERSION)...$(RESET)" - git tag -a "cli-v$(VERSION)" -m "CLI release v$(VERSION)" - git push origin "cli-v$(VERSION)" - @echo "$(GREEN)Tagged and pushed cli-v$(VERSION)$(RESET)" - @echo "$(CYAN)GitHub Actions will now build and publish to PyPI$(RESET)" diff --git a/README.md b/README.md index cb123a1..3c7ab13 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,11 @@ [![CI](https://github.com/RepliMap/replimap-mono/actions/workflows/ci.yml/badge.svg)](https://github.com/RepliMap/replimap-mono/actions/workflows/ci.yml) [![Node.js](https://img.shields.io/badge/Node.js-24.x-339933?style=flat-square&logo=node.js&logoColor=white)](https://nodejs.org/) -[![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white)](https://python.org/) [![pnpm](https://img.shields.io/badge/pnpm-9.x-F69220?style=flat-square&logo=pnpm&logoColor=white)](https://pnpm.io/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=flat-square&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) - -[![PyPI](https://img.shields.io/pypi/v/replimap?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/replimap/) -[![PyPI Downloads](https://img.shields.io/pypi/dm/replimap?style=flat-square&logo=pypi&logoColor=white)](https://pypi.org/project/replimap/) [![License](https://img.shields.io/badge/License-Proprietary-red?style=flat-square)](LICENSE) -[Website](https://replimap.com) | [Documentation](https://replimap.com/docs) | [CLI](https://pypi.org/project/replimap/) | [Changelog](CHANGELOG.md) +[Website](https://replimap.com) | [Documentation](https://replimap.com/docs) | [Changelog](CHANGELOG.md) @@ -35,85 +31,30 @@ graph TB end subgraph "RepliMap Platform" - CLI["CLI
(Python)"] API["API
(Cloudflare Workers)"] WEB["Dashboard
(Next.js)"] DB[("Database")] end - AWS -->|"1. Scan"| CLI - CLI -->|"2. Analyze"| API + AWS -->|"1. Scan"| API API --> DB - CLI -->|"3. Generate"| TF + API -->|"2. Generate"| TF WEB -->|"View Results"| API style AWS fill:#FF9900,stroke:#232F3E,color:#232F3E - style CLI fill:#3776AB,stroke:#FFD43B,color:white style API fill:#F38020,stroke:#F38020,color:white style WEB fill:#000000,stroke:#000000,color:white style TF fill:#7B42BC,stroke:#7B42BC,color:white ``` -### Data Flow - -```mermaid -sequenceDiagram - participant U as User - participant C as CLI - participant A as API - participant W as AWS - - U->>C: replimap scan - C->>W: Discover Resources - W-->>C: Resource Inventory - C->>C: Build Dependency Graph - C->>A: Upload Analysis - A-->>C: Scan ID - U->>C: replimap export - C->>C: Generate Terraform - C-->>U: ./terraform/*.tf -``` - ## Packages | Package | Description | Version | Status | |---------|-------------|---------|--------| | [`@replimap/web`](./apps/web) | Next.js Dashboard | Internal | [![Vercel](https://img.shields.io/badge/Vercel-Live-000?style=flat-square&logo=vercel)](https://replimap.com) | | [`@replimap/api`](./apps/api) | Hono API | Internal | [![Cloudflare](https://img.shields.io/badge/CF-Live-F38020?style=flat-square&logo=cloudflare)](https://api.replimap.com) | -| [`replimap`](./apps/cli) | Python CLI | [![PyPI](https://img.shields.io/pypi/v/replimap?style=flat-square&label=)](https://pypi.org/project/replimap/) | [![Downloads](https://img.shields.io/pypi/dm/replimap?style=flat-square&label=)](https://pypi.org/project/replimap/) | | [`@replimap/config`](./packages/config) | Shared Config | Internal | - | -## Quick Start - -### Install CLI - -```bash -# Using pip -pip install replimap - -# Using pipx (recommended for CLI tools) -pipx install replimap - -# Using uv (fastest) -uv tool install replimap -``` - -### Basic Usage - -```bash -# Authenticate with RepliMap -replimap auth login - -# Scan your AWS environment -replimap scan --profile production --region ap-southeast-2 - -# View dependency graph -replimap graph --output graph.html - -# Generate Terraform code -replimap export --format terraform --output ./staging-infra -``` - ## Development ### Prerequisites @@ -122,7 +63,6 @@ replimap export --format terraform --output ./staging-infra |------|---------|--------------|-------| | Node.js | 24.x | [nodejs.org](https://nodejs.org/) | Required for web/api | | pnpm | 9.x | `corepack enable` | Package manager | -| Python | 3.11+ | [python.org](https://python.org/) | Required for CLI | | Make | any | Pre-installed on Linux/macOS | See Windows section | ### Setup @@ -138,7 +78,6 @@ make setup # Start development servers make dev-web # Web on http://localhost:3000 make dev-api # API on http://localhost:8787 -make dev-cli # Install CLI in editable mode ``` ### Available Commands @@ -159,7 +98,6 @@ make pre-commit # All checks before committing # Deployment make deploy-web # Deploy to Vercel make deploy-api # Deploy to Cloudflare -make release-cli # Publish to PyPI # Utilities make info # Show environment info @@ -197,10 +135,6 @@ pnpm build # Development pnpm --filter @replimap/web dev pnpm --filter @replimap/api dev - -# CLI development -cd apps/cli -pip install -e ".[dev]" ``` #### Option 3: Git Bash @@ -218,18 +152,14 @@ replimap-mono/ │ │ ├── src/ │ │ ├── package.json │ │ └── vercel.json -│ ├── api/ # Hono + Cloudflare Workers -│ │ ├── src/ -│ │ ├── package.json -│ │ └── wrangler.toml -│ └── cli/ # Python CLI -│ ├── replimap/ -│ ├── pyproject.toml -│ └── README.md +│ └── api/ # Hono + Cloudflare Workers +│ ├── src/ +│ ├── package.json +│ └── wrangler.toml ├── packages/ │ └── config/ # Shared configuration │ ├── src/ # JSON source files -│ ├── dist/ # Generated TS + Python +│ ├── dist/ # Generated TS │ └── scripts/ ├── .github/ │ ├── workflows/ # CI/CD pipelines @@ -247,7 +177,7 @@ replimap-mono/ We take security seriously. Our security measures include: -- **OIDC-based publishing** - No long-lived secrets for PyPI +- **OIDC-based publishing** - No long-lived secrets for deployments - **Dependabot** - Automated dependency updates - **SOC2 compliance** - Enterprise-grade infrastructure diff --git a/package.json b/package.json index 180e937..26407e0 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "dev:api": "turbo run dev --filter=@replimap/api", "build:web": "turbo run build --filter=@replimap/web", "build:api": "turbo run build --filter=@replimap/api", - "build:config": "turbo run build --filter=@replimap/config", - "sync:cli-config": "bash apps/cli/scripts/sync-config.sh" + "build:config": "turbo run build --filter=@replimap/config" }, "devDependencies": { "prettier": "^3.4.0",