feat(backend): enable GCS backend (multistore gcp + wasm-compatible signing) - #191
Merged
Conversation
…igning) Enable the `gcp` feature on `multistore` and `multistore-cf-workers` so `BackendType::Gcs` builds a GoogleCloudStorageBuilder instead of erroring with "GCS backend support not enabled". This lets source.coop data connections with provider "gcs" reach an actual storage client. object_store's GCS credential module signs JWTs with ring's SystemRandom, whose SecureRandom impl on wasm32-unknown-unknown is gated behind ring's `wasm32_unknown_unknown_js` feature. ring is a transitive dep, so opt into that feature via a direct wasm-target entry; without it the Workers build fails to compile. (source.coop uses keyless Workload Identity Federation, so the signing path isn't exercised at runtime, but the code must compile.) Verified: cargo check + clippy (-D warnings) + fmt all pass for wasm32-unknown-unknown. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # Cargo.toml
Contributor
|
Claude finished @alukach's task in 51s —— View job Review of PR #191✅ No blocking issues — safe to merge.
No correctness, security, or best-practice issues found. |
|
🚀 Latest commit deployed to https://source-data-proxy-pr-191.source-coop.workers.dev
|
alukach
marked this pull request as ready for review
July 22, 2026 18:46
alukach
enabled auto-merge (squash)
July 22, 2026 18:47
alukach
disabled auto-merge
July 22, 2026 18:47
alukach
pushed a commit
that referenced
this pull request
Jul 27, 2026
🤖 I have created a release *beep* *boop* --- ## [2.3.0](v2.2.2...v2.3.0) (2026-07-27) ### Features * **backend:** enable GCS backend (multistore gcp + wasm-compatible signing) ([#191](#191)) ([33f2b25](33f2b25)) * **s3:** enforce conditional-write preconditions on PutObject ([003db0d](003db0d)) * **s3:** support server-side CopyObject via x-amz-copy-source ([97d5121](97d5121)) * **sts:** accept ARN-shaped alias for the _default role ([#185](#185)) ([8da7e72](8da7e72)) * **sts:** accept AssumeRoleWithWebIdentity from form-encoded POST bodies ([#196](#196)) ([f77e8d2](f77e8d2)) ### Bug Fixes * **gcs:** pass bucket_name to multistore GCS store ([#193](#193)) ([0efb66f](0efb66f)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: source-release-bot[bot] <265100246+source-release-bot[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Enables the Google Cloud Storage backend in the data proxy so source.coop data connections with
provider: "gcs"resolve to a real storage client instead of erroring.Changes (Cargo.toml / Cargo.lock only)
gcpfeature onmultistoreandmultistore-cf-workers→BackendType::Gcsbuilds aGoogleCloudStorageBuilderinstead of returningConfigError("GCS backend support not enabled").ringwasm32_unknown_unknown_jsfeature (via a direct wasm-target entry):object_store's GCS credential module signs JWTs withring::rand::SystemRandom, whoseSecureRandomimpl onwasm32-unknown-unknownis gated behind that ring feature (enables getrandom 0.2's js backend). Without it the Workers build fails to compile:object_store); this only turns the feature on for the wasm target.Runtime note
source.coop uses keyless Workload Identity Federation for GCS, so the RSA private-key signing path isn't exercised at runtime — but the code must compile, which this enables. (getrandom's js backend maps to Web Crypto, which the Workers runtime provides, so it's also safe if ever hit.)
Pairs with
source-cooperative/source.coop#453 — aligns the persisted provider value to
"gcs"(the string this backend accepts).Verification
cargo check+cargo clippy -D warnings+cargo fmt --checkfor wasm32-unknown-unknown, and the fullcargo testsuite — all pass.🤖 Generated with Claude Code