Add Azure Blob Storage backend - #9
Draft
werkamsus wants to merge 1 commit into
Draft
Conversation
Add Azure Blob Storage as an optional ObjectStore backend with explicit workload-identity or account-key credentials. Implement the existing store contract with ETag CAS, conditional and ranged reads, streaming uploads, isolated multipart block IDs, server-side compose, and signed GET URLs. Add Azurite contract coverage and keep large-object traffic on the bulk client. This ports and hardens the Azure backend from upstream PR tobi#1 by @kzu onto current main. It removes unrelated platform changes and narrows authentication to explicit modes.
Author
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.
store.backend = "azure"supports workload identity in Azure and account-key authentication for Azurite or explicit deployments.PR overview
Why
Running Walgit on Azure currently requires a second cloud storage protocol or an out-of-tree patch. That adds another service, credential model, and failure boundary even though Azure Blob can provide the versioned object operations Walgit's store contract needs.
This work ports the Azure backend from #1 by @kzu onto current
main, then narrows and hardens it for the current contract. Thank you to Daniel Cazzulino for the original implementation.What changed
Azure store contract
AzureStorebehind the optionalazurefeature.head, listing, deletion, streaming uploads, multipart block uploads, compose, and signed GET URLs.Authentication and trust boundaries
workload_identityoraccount_key.Local development and documentation
just dev-azurite/just test-azurerecipes.docs/CONTRACT.md.Security
Workload identity is the production default and does not require an account key. Account-key mode reads one explicitly configured environment variable and never accepts the key as a TOML value. Workload tokens cannot be sent to plaintext custom endpoints. Signed URLs use service SAS with an account key or a cached user-delegation key with workload identity.
How this was tested
cargo fmt --all -- --checkcargo check -p walgit-cli --lockedwalgit-cli.cargo test -p walgit-configcargo test -p walgit-store --features azurejust test-azureagainst local AzuriteHEADbefore conditional delete;After merge
No existing deployment changes behavior. Azure users enable the Cargo feature, select
store.backend = "azure", and configure one credential mode. A live Azure deployment should still verify workload-identity token exchange, user-delegation SAS, and server-sidePut Block From URL; Azurite covers the account-key and local compose paths.