Skip to content

feat: Azure Blob Storage backup provider - #21

Merged
kellyelton merged 30 commits into
masterfrom
feature/azure-blob-provider-phase1
Jan 13, 2026
Merged

feat: Azure Blob Storage backup provider#21
kellyelton merged 30 commits into
masterfrom
feature/azure-blob-provider-phase1

Conversation

@kellyelton

Copy link
Copy Markdown
Owner

Adds complete Azure Blob Storage support as a backup destination. Includes: storage provider infrastructure, CLI commands for managing providers, job integration with cloud destinations, BackupExecutor cloud upload support, progress reporting, and DPAPI credential encryption.

@continue

continue Bot commented Jan 12, 2026

Copy link
Copy Markdown

All Green - Keep your PRs mergeable

Learn more

All Green is an AI agent that automatically:

✅ Addresses code review comments

✅ Fixes failing CI checks

✅ Resolves merge conflicts


Unsubscribe from All Green comments

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds comprehensive Azure Blob Storage support as a backup destination for MaxBackup. It introduces a provider abstraction layer that enables cloud-based backups while maintaining backward compatibility with local backups.

Changes:

  • Implements Azure Blob Storage provider with DPAPI credential encryption for secure storage of account keys
  • Adds CLI commands for managing storage providers (add, list, remove, test)
  • Integrates cloud backup functionality into BackupExecutor with intelligent change detection and progress reporting

Reviewed changes

Copilot reviewed 28 out of 28 changed files in this pull request and generated 17 comments.

Show a summary per file
File Description
docs/tasks/*.md Task documentation for Azure Blob Storage implementation and future enhancements
docs/AzureBlobStorageProvider.md Comprehensive design documentation for Azure Blob Storage integration
docs/AWSS3Provider.md Design documentation for future AWS S3 provider
MaxBackup.Shared/ProviderConfig.cs Base provider configuration with validation and Azure-specific config
MaxBackup.Shared/CredentialProtection.cs Windows DPAPI-based encryption for sensitive credentials
MaxBackup.ServiceApp/Providers/IStorageProvider.cs Storage provider abstraction interface
MaxBackup.ServiceApp/Providers/AzureBlobStorageProvider.cs Azure Blob Storage implementation with metadata-based change detection
MaxBackup.ServiceApp/Providers/StorageProviderFactory.cs Factory for creating provider instances from configuration
MaxBackup.ServiceApp/BackupExecutor.cs Enhanced backup logic supporting both local and cloud destinations
MaxBackup.ServiceApp/UserBackupWorker.cs Service integration for provider factory
MaxBackup.ServiceApp/ServiceRootConfig.cs Root configuration including providers array
MaxBackup.ServiceApp/BackupJobConfig.cs Added optional Provider field for cloud backups
Max/ProviderCommand.cs New CLI commands for provider management with interactive TUI
Max/JobsCommand.cs Updated job commands to support provider specification
Max/Program.cs Registered provider command
*.csproj Added required NuGet packages
AGENTS.md Task management guidelines for AI agents
.agent/workflows/*.md Workflow definitions for task management, git operations

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread MaxBackup.Shared/CredentialProtection.cs
Comment thread MaxBackup.Shared/CredentialProtection.cs Outdated
Comment thread MaxBackup.ServiceApp/BackupExecutor.cs
Comment thread Max/ProviderCommand.cs Outdated
Comment thread Max/ProviderCommand.cs Outdated
Comment thread MaxBackup.ServiceApp/BackupExecutor.cs Outdated
Comment thread Max/ProviderCommand.cs Outdated
Comment thread Max/ProviderCommand.cs Outdated
Comment thread Max/JobsCommand.cs Outdated
Comment thread Max/ProviderCommand.cs
kellyelton added a commit that referenced this pull request Jan 13, 2026
Add static BuildConnectionString(accountName, accountKey) helper to
AzureBlobProviderConfig and update both call sites in ProviderCommand.cs.
The instance method now delegates to the static helper.

Resolves PR #21 review comment #9.
kellyelton added a commit that referenced this pull request Jan 13, 2026
Removed ValidateProviderName() method from ProviderCommand.cs and replaced with
MaxBackup.Shared.ProviderConfig.ValidateNameGetError(). Used fully qualified name
to avoid conflict with local ProviderConfig record in JobsCommand.cs.
Add warning about #N syntax being auto-linked by GitHub.
Reference other comments by description, not local number.
- Add reply step with templates for accept/reject/defer
- Add warning about using hash-number syntax in replies and commits
- Remove hardcoded PR number from template
- Use description instead of number in commit messages
Add static BuildConnectionString(accountName, accountKey) helper to
AzureBlobProviderConfig and update both call sites in ProviderCommand.cs.
The instance method now delegates to the static helper.

Resolves PR #21 review comment #9.
Address PR review comment #10 - duplicate error message mapping between
ProviderCommand.cs and AzureBlobStorageProvider.cs.

Created MaxBackup.Shared.AzureErrorHelper with consolidated
GetFriendlyErrorMessage() method. Both consumers now delegate to it.
Remove 2-second tolerance from mtime comparison. Since we store the exact
mtime in blob metadata ourselves, any tolerance could skip legitimately
changed files. Added comment explaining this decision.

Resolves PR review comment #13.
@kellyelton
kellyelton force-pushed the feature/azure-blob-provider-phase1 branch from 26766e3 to bc3f7ed Compare January 13, 2026 01:38
@kellyelton
kellyelton merged commit 94efe25 into master Jan 13, 2026
1 check passed
@kellyelton
kellyelton deleted the feature/azure-blob-provider-phase1 branch January 13, 2026 19:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants