build(deps): bump github.com/cloudfoundry/bosh-utils
Bumps github.com/cloudfoundry/bosh-utils from 0.0.661 to 0.0.667.
updated-dependencies:
- dependency-name: github.com/cloudfoundry/bosh-utils dependency-version: 0.0.667 dependency-type: direct:production update-type: version-update:semver-patch …
Signed-off-by: dependabot[bot] support@github.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
Storage CLI
A unified command-line tool for interacting with multiple cloud storage providers through a single binary. The CLI supports five blob-storage providers (Azure Blob Storage, AWS S3, Google Cloud Storage, Alibaba Cloud OSS, and WebDAV), each with its own client implementation while sharing a common command interface.
Note: This CLI works with existing storage resources (buckets, containers, etc.) that are already created and configured in your cloud provider. The storage bucket/container name and credentials must be specified in the provider-specific configuration file.
Key points
Single binary with provider selection via
-sflag.Each provider has its own directory (azurebs/, s3/, gcs/, alioss/, dav/) containing client implementations and configurations.
All providers support the same core commands (put, get, delete, exists, list, copy, etc.).
Provider-specific configurations are passed via JSON config files.
Providers
Build
Build the unified storage CLI binary:
Or with version information:
Usage
The CLI uses a unified command structure across all providers:
Flags:
-s: Storage provider type (azurebs|s3|gcs|alioss|dav)-c: Path to provider-specific configuration file-v: Show version-log-file: Path to log file (optional, logs to stderr by default)-log-level: Logging level: debug, info, warn, error (default: warn)Common commands:
put <path/to/file> <remote-object>- Upload a local file to remote storageget <remote-object> <path/to/file>- Download a remote object to local filedelete <remote-object>- Delete a remote objectdelete-recursive [prefix]- Delete objects recursively. If prefix is omitted, deletes all objectsexists <remote-object>- Check if a remote object exists (exits with code 3 if not found)list [prefix]- List remote objects. If prefix is omitted, lists all objectscopy <source-object> <destination-object>- Copy object within the same storagesign <object> <action> <duration_as_second>- Generate signed URL (action: get|put, duration: e.g., 60s)properties <remote-object>- Display properties/metadata of a remote objectensure-storage-exists- Ensure the storage container/bucket exists, if not create the storage(bucket,container etc)Examples:
Contributing
Follow these steps to make a contribution to the project:
mainbranch (pull requests must be made against this branch)mainas the target branchIntegration tests for fork PRs
Integration tests run automatically for PRs from within this repository. For fork PRs, each push triggers the integration test workflows, but they pause at an approval gate before executing.
Dependency Updates
This project uses Dependabot to keep dependencies up to date. Dependencies are grouped (e.g., AWS SDK, Azure SDK, Google Cloud, testing tools) to reduce PR noise.
Dependabot PRs are merged automatically if they pass all required checks (tests and integration tests).
Releases
Automatic Weekly Releases
The workflow Release Cron builds an automatic weekly patch release if there are changes on the
mainbranch (e.g. version bumps).The workflow builds and tests storage-cli, runs the integration tests and finally builds and publishes the new patch release. Note that published storage-cli releases are picked up by capi-release automatically.
Disable the Release Cron workflow (3 dot button on the right > Disable workflow) to stop automatic releases, e.g. in case of known bugs on main or when a new major/minor version shall be released manually.
Manual Release
Releases must be triggered manually by an approver. This can be done either via
GitHub Actions(workflow dispatch) or through theGitHub Releasespage using the Draft a new release option. The Release Manual workflow is responsible for creating and completing the release.Option 1: Release via Workflow Dispatch
Go to Actions and select the Release Manual workflow.
Click Run workflow.
Enter the next incremented version number with the v prefix (for example, v1.2.3).
The workflow will create the release and upload the build artifacts once completed.
Option 2: Release via Draft Release
Go to Releases and click Draft a new release.
Create a new tag using the next incremented version with the v prefix.
Fill in the release title and description.
Click Publish release.
The release will appear immediately on the Releases page. This action will also trigger the Release Manual workflow, which will build the artifacts and upload them to the published release once the workflow finishes.
Notes
These commit IDs represent the last migration checkpoint from each provider’s original repository, marking the final commit that was copied during the consolidation process.