diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index cae35cd..ff0b2c6 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -16,8 +16,9 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 # v7.2.0 + - uses: release-drafter/release-drafter@a6a982fee9675c45c1765e9fa5308f7d6c3ecbd4 # v7.2.0 with: config-name: release-drafter.yml + commitish: main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 448d3c4..e7591f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,7 +50,7 @@ First public release of DevCloud — a local development companion for cloud-nat - Generated files (`internal/generated/**`) include SPDX license headers and are marked `DO NOT EDIT`. **Web dashboard** (optional, gated on `dashboard.enabled`) -- Next.js 15 / React 19 / Tailwind UI served statically by the Go server. +- Next.js 16 / React 19 / Tailwind UI served statically by the Go server. - Service status, resource browser, WebSocket-based live API log stream. **Docker packaging** diff --git a/Makefile b/Makefile index 72adeec..b2c6ff6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build test codegen run clean test-compat build-web build-all docker-build docker-run changelog +.PHONY: build test codegen run clean test-compat build-web build-all docker-build docker-run changelog stats build: go build -o dist/devcloud ./cmd/devcloud @@ -39,3 +39,9 @@ changelog: exit 1; \ fi @changie batch $(VERSION) && changie merge + +stats: + @svcs=$$(awk '/^services:/{found=1;next} /^[^ \t]/{found=0} found && /^[ \t]+[a-z][a-z0-9_]+:$$/' internal/config/default.yaml | wc -l | tr -d ' '); \ + ops=$$(grep -r 'case "' internal/services/*/provider.go 2>/dev/null | wc -l | tr -d ' '); \ + echo "Services: $$svcs"; \ + echo "Operations: $$ops" diff --git a/README.md b/README.md index d877211..936eab3 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,13 @@ Today DevCloud targets **AWS**. Our long-term goal is to support the full range ## Features -- **96 AWS services scaffolded** — 4,438 operations across all major categories (see [services-matrix.md](docs/services-matrix.md)) +- **101 AWS services scaffolded** — 4,451 operations across all major categories (run `make stats` to verify; see [services-matrix.md](docs/services-matrix.md)) - **96% boto3 compatibility** — 671/699 SDK tests pass; works with most boto3 apps - **Cross-service integration** — CFN provisioning, DDB Streams → Lambda, EventBridge targets, S3 → Lambda - **Smithy-driven codegen** — auto-generate Go interfaces, types, and serializers from Smithy models - **Weekly auto-sync** — GitHub Actions keeps generated code up to date with upstream AWS API changes - **Single binary, zero-config** — one Docker image, one port (4747), no config file required (embedded defaults) +- **Environment variable overrides** — `DEVCLOUD_SERVICES`, `DEVCLOUD_DATA_DIR`, `DEVCLOUD_PORT` for quick configuration without YAML - **SDK/CLI compatible** — works with the AWS SDK, CLI, Terraform, CDK out of the box - **Web dashboard** — real-time monitoring and resource browser diff --git a/changes/v0.1.0.md b/changes/v0.1.0.md index 01121b2..fb64a4d 100644 --- a/changes/v0.1.0.md +++ b/changes/v0.1.0.md @@ -29,7 +29,7 @@ First public release of DevCloud — a local development companion for cloud-nat **Web dashboard** (optional, gated on `dashboard.enabled`) -- Next.js 15 / React 19 / Tailwind UI served statically by the Go server. +- Next.js 16 / React 19 / Tailwind UI served statically by the Go server. - Service status, resource browser, WebSocket-based live API log stream. **Docker packaging** diff --git a/docs/architecture.md b/docs/architecture.md index db63097..70ac37e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -158,19 +158,8 @@ devcloud/ │ ├── plugin/ # ServicePlugin interface, Registry │ ├── codegen/ # Smithy parser, code generators, templates │ ├── config/ # YAML config loading, env overrides -│ ├── generated/ # Auto-generated code (DO NOT EDIT) -│ │ ├── s3/ -│ │ ├── sqs/ -│ │ ├── dynamodb/ -│ │ ├── lambda/ -│ │ ├── iam/ -│ │ └── sts/ -│ ├── services/ # Service implementations -│ │ ├── s3/ # FileSystem + SQLite -│ │ ├── sqs/ # In-memory queues -│ │ ├── dynamodb/ # BadgerDB -│ │ ├── lambda/ # SQLite + filesystem (stub runtime) -│ │ └── iam/ # SQLite (IAM + STS) +│ ├── generated/ # Auto-generated code (DO NOT EDIT; run `make stats` for count) +│ ├── services/ # Service implementations (run `make stats` for count) │ ├── dashboard/ # Dashboard REST API + WebSocket │ ├── eventbus/ # In-memory event pub/sub │ └── storage/ # Shared storage abstractions @@ -186,11 +175,11 @@ devcloud/ ## Startup Flow -1. Load config from `devcloud.yaml` (or specified path) +1. Load config from `devcloud.yaml` (or specified path), applying environment variable overrides (`DEVCLOUD_PORT`, `DEVCLOUD_SERVICES`, `DEVCLOUD_DATA_DIR`) 2. Initialize structured logger (slog) 3. Create plugin registry -4. Register service factories (S3, SQS, DynamoDB, IAM, Lambda) -5. Initialize services in order: S3 → SQS → DynamoDB → IAM → STS → Lambda +4. Register service factories (run `make stats` for count) +5. Initialize services in dependency order (IAM before STS, etc.) 6. IAM store is shared with STS via plugin config options 7. Set up event bus, log collector, dashboard API 8. Create gateway with middleware chain and service router diff --git a/docs/configuration.md b/docs/configuration.md index 11910ef..a016a55 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -8,7 +8,13 @@ To override defaults, provide a YAML file. DevCloud looks for config in this ord 2. `./devcloud.yaml` in the current working directory (auto-detected) 3. Embedded defaults (used when neither of the above is present) -Environment variables override YAML values for selected keys (see [Environment Variable Overrides](#environment-variable-overrides)). +Environment variables override YAML values for selected keys (see [Environment Variable Overrides](#environment-variable-overrides)). All three env vars follow the same precedence: **env var wins over YAML, YAML wins over embedded default**. + +| Variable | Overrides | Description | +|----------|-----------|-------------| +| `DEVCLOUD_PORT` | `server.port` | HTTP server port | +| `DEVCLOUD_SERVICES` | `services.*.enabled` | Comma-separated list of services to enable | +| `DEVCLOUD_DATA_DIR` | `services.*.data_dir` | Base data directory for all services | ## Configuration File @@ -92,9 +98,21 @@ logging: ## Environment Variable Overrides +### `DEVCLOUD_PORT` + +Overrides the HTTP server port. + +```bash +# Run on port 8080 instead of 4747 +DEVCLOUD_PORT=8080 ./dist/devcloud + +# With Docker (map the host port accordingly) +docker run -p 8080:8080 -e DEVCLOUD_PORT=8080 ghcr.io/skyoo2003/devcloud:latest +``` + ### `DEVCLOUD_SERVICES` -Comma-separated list of services to enable. All other services listed in the config file are disabled. Accepts individual service names and tier shortcuts. +Comma-separated list of services to enable. When set, **only** the listed services are enabled — all others are disabled regardless of their `enabled` setting in YAML. When not set, each service uses its YAML `enabled` value (or the embedded default of `true`). **Tier shortcuts** (expand to predefined service groups — see [`internal/config/config.go`](https://github.com/skyoo2003/devcloud/blob/main/internal/config/config.go) for the exact list): @@ -123,7 +141,7 @@ docker run -p 4747:4747 -e DEVCLOUD_SERVICES=tier1 ghcr.io/skyoo2003/devcloud:la ### `DEVCLOUD_DATA_DIR` -Overrides the base data directory for **all** services. Each service's `data_dir` becomes `/` regardless of what's in the YAML file. +Overrides the base data directory for **all** services. When set, every service uses `/` — per-service `data_dir` values in YAML are ignored. When not set, each service falls back to its YAML `data_dir` value (or the embedded default). ```bash # Put all service data under /tmp/devcloud-local diff --git a/docs/roadmap.md b/docs/roadmap.md index 721bfd0..8c43f07 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -19,7 +19,7 @@ We pursue this vision through a **phased rollout** to manage scope, architectura **Goal**: prove the core thesis on AWS before expanding surface area. - [x] Core AWS services: S3, SQS, DynamoDB, Lambda, IAM, STS -- [x] Smithy-based codegen pipeline (96 services, 4,438 operations scaffolded) +- [x] Smithy-based codegen pipeline (run `make stats` for current counts) - [x] Cross-service integration (CFN, DDB Streams → Lambda, EventBridge, S3 → Lambda) - [x] boto3 compatibility suite (currently 671/699 passing) - [ ] Lift boto3 compatibility to ≥ 95% diff --git a/docs/services-matrix.md b/docs/services-matrix.md index d5c5e50..e59a595 100644 --- a/docs/services-matrix.md +++ b/docs/services-matrix.md @@ -1,6 +1,8 @@ # DevCloud Services Matrix -**Total**: 96 services, 4,438 operations, 96% boto3 compatibility +**Total**: 101 services, 4,451 operations, 96% boto3 compatibility + +> To refresh these numbers, run `make stats` and update the line above. _Last updated with each release. For unreleased changes, see [CHANGELOG.md](../CHANGELOG.md)._ @@ -21,7 +23,7 @@ DevCloud is a Go-based local cloud environment with AWS API compatibility. This |---|---------|-----|----------| | 1 | sesv2 | 155 | Business Apps | | 2 | appconfig | 97 | Management | -| 3 | pinpoint | 91 | Business Apps | +| 3 | pinpoint | 93 | Business Apps | | 4 | opensearch | 87 | Analytics | | 5 | iot | 82 | IoT | | 6 | backup | 82 | Storage | @@ -92,11 +94,8 @@ make test # Run boto3 compatibility tests make test-compat -# Count ops per service (quick matrix refresh) -for svc in $(ls internal/services/); do - count=$(grep -c 'case "' internal/services/$svc/provider.go 2>/dev/null || echo 0) - [ "$count" -gt "0" ] && echo "$count $svc" -done | sort -rn +# Print service and operation counts +make stats ``` See [Getting Started](getting-started.md) for installation and [contributing.md](contributing.md) for development setup.