Skip to content

Releases: floci-io/floci-gcp

0.2.1

04 Jun 00:54
af7e014

Choose a tag to compare

🎉 Highlights

A focused patch release sharpening GCS JSON API conformance: closer alignment with real GCP behavior, support for gcloud storage cp uploads, and microsecond-precision timestamps.

🪣 GCS conformance pass

Three coordinated fixes bring the storage service closer to real GCP behavior:

  • JSON API alignment with real GCP responses (#15)
  • gcloud storage cp uploads now work against the emulator (#16)
  • Microsecond-precision timestamps match what real GCS emits (#17)

If you've been running into subtle response shape mismatches when pointing the gcloud CLI or storage clients at floci-gcp, this release should clear them up.

🐛 Bug Fixes

  • fix(storage): align GCS JSON API with real GCP behavior by @hectorvent in #15
  • fix(storage): support gcloud storage cp uploads by @hectorvent in #16
  • fix(storage): emit microsecond-precision GCS timestamps by @hectorvent in #17

🧰 Internals

  • chore(deps): bump the actions-minor-patch group across 1 directory with 5 updates by @dependabot in #11

Full Changelog: 0.2.0...0.2.1

0.2.0

02 Jun 06:13
74dc0a1

Choose a tag to compare

🎉 Highlights

This release closes major API parity gaps across Firestore, Pub/Sub, and IAM, adds Cloud Tasks v2 gRPC, and lands a substantial GCS feature pack: object holds, retention policies, the batch API, and notification configs. CI now exercises real Terraform and OpenTofu suites, and the docs get a meaningful refresh with new branding.

🪣 GCS: object holds, retention, batch, and notifications

Four meaningful Cloud Storage additions land together (#7):

  • Object holds (event-based and temporary)
  • Retention policies at the bucket level
  • Batch API for bulk object operations
  • Notification configs for Pub/Sub-driven workflows

This brings GCS coverage much closer to what real GCP workloads need.

📨 Cloud Tasks v2 (gRPC)

floci-gcp now emulates Cloud Tasks v2 over gRPC (#5), enabling local testing of task queue workflows without standing up a real GCP project.

🔧 Firestore + Pub/Sub + IAM parity

A coordinated pass closes the remaining API parity gaps across the three core services (#12). Real-world SDK and IaC flows that exercise these services should now work end to end.

🧪 Terraform and OpenTofu in CI

Compatibility test suites for both Terraform and OpenTofu now run in CI (#8), so regressions in IaC behavior are caught at PR time rather than surfacing in user projects.

✨ New Features

  • feat(cloud-tasks): implement Cloud Tasks v2 gRPC service by @hectorvent in #5
  • feat(gcs): object holds, retention policy, batch API, and notification configs by @hectorvent in #7
  • feat: close remaining API parity gaps across Firestore, Pub/Sub, and IAM by @hectorvent in #12

🐛 Bug Fixes

  • fix(docker-compat): wrong gcp package install in dockerfile by @hectorvent in #4

🧰 Internals & CI

  • test(compatibility-tests): run Terraform and OpenTofu suites in CI by @hectorvent in #8
  • chore: replace integration tests with service unit tests by @hectorvent in #6

📚 Documentation

Full Changelog: 0.1.0...0.2.0

0.1.0

23 May 17:04
99196ea

Choose a tag to compare

Highlights

Initial release of floci-gcp, a unified Google Cloud Platform emulator. Serves REST and gRPC on a single ALPN-multiplexed port and ships emulations for 7 GCP services, validated by 186 SDK compatibility tests across Java, Python, Node.js, and Go, plus dedicated Terraform and OpenTofu test suites.

✨ Added

Core platform

  • Single-port transport: HTTP/2 + gRPC via ALPN on port 4588 — no split-server config
  • Unified error model: GcpException with paired HTTP/gRPC status codes, GcpExceptionMapper for JAX-RS, and GcpGrpcController base class mapping GcpExceptionStatusRuntimeException
  • Project context: ProjectContextFilter resolves the GCP project ID from the URL path, x-goog-request-params header, or FLOCI_GCP_DEFAULT_PROJECT_ID fallback
  • Resource naming: GcpResourceNames parses and builds projects/{project}/... strings
  • Project isolation: ProjectAwareStorageBackend namespaces all storage keys by GCP project ID
  • Request pipeline: GzipRequestFilter for Vert.x server-side gzip decompression (required by the Google Cloud Java SDK); ServiceRegistry + ServiceEnabledFilter to reject requests against disabled services

Configuration & storage

  • @ConfigMapping-based EmulatorConfig rooted at floci-gcp.*, every setting overridable via FLOCI_GCP_* env vars
  • Four storage modes: memory (default), persistent, hybrid, wal

Cloud Storage (GCS)

  • Full REST API: buckets (create, get, list, patch, delete) and objects (multipart / resumable / media upload, download, copy, list, delete) across both XML and JSON API paths
  • CRC32C + MD5 checksum support
  • PATCH /storage/v1/b/{bucket} for label and metadata updates
  • labels field on bucket create and patch — required for the Terraform/OpenTofu google_storage_bucket resource

Other services

  • Pub/Sub (gRPC): topics, subscriptions, publish, pull, acknowledge, StreamingPull
  • Secret Manager (gRPC): secrets, versions, access, enable/disable/destroy, versions/latest resolution
  • Firestore (gRPC): documents, collections, filtered queries, transactions, Listen streaming
  • Datastore (REST/JSON): entities, lookup, runQuery, commit with upsert/insert/update/delete mutations, transactions
  • IAM (REST): service account CRUD, getIamPolicy, setIamPolicy, testIamPermissions
  • Managed Kafka (REST): Tier 1 + Tier 2 coverage of clusters, topics, and consumer groups; Redpanda-backed via Docker; mock mode for CI

Compatibility, packaging & operations

  • SDK compatibility test suites in Java, Python, Node.js, and Go — 186 tests across all 7 services
  • Terraform compatibility suite (compat-terraform/) using GCP provider v6
  • OpenTofu compatibility suite (compat-opentofu/) using GCP provider v6
  • JVM and native Docker images
  • docker-compose.yml with /var/run/docker.sock mount for Managed Kafka container orchestration
  • Operational endpoints: /_floci-gcp/health and /_floci-gcp/info

🐛 Fixed

  • gcs: multipart object upload now falls back to the ?name= query parameter when the object name is absent from the JSON metadata body — fixes google_storage_bucket_object with the Terraform GCP provider

📝 Upgrade notes

Initial release — no migration required. Configure via floci-gcp.* properties or FLOCI_GCP_* environment variables, and pick a storage mode (memory, persistent, hybrid, wal) appropriate to your environment.

Full Changelog: https://github.com/hectorvent/floci-gcp/compare/main...HEAD