Skip to content

GitHub Releases Storage Configuration ​

CloudPaste supports GitHub Releases as a read-only storage backend, mapping GitHub repository Release assets as a virtual file system view.

Supported Features ​

The GitHub Releases storage driver supports the following capabilities:

  • ✅ READER: Read files and directories
  • ✅ DIRECT_LINK: Generate direct download links
  • ✅ PROXY: Proxy access
  • ❌ WRITER: Upload/modify not supported
  • ❌ ATOMIC: Batch operations not supported
  • ❌ MULTIPART: Chunked upload not supported

Note: GitHub Releases storage is read-only mode, does not support uploading, deleting, or modifying any files.

1. Preparation ​

1.1 Identify Target Repository ​

  1. Ensure the target GitHub repository has published Releases
  2. Note the repository's owner (username or organization name) and repo (repository name)
  3. Example: ling-drag0n/CloudPaste

1.2 Get Access Token (Optional) ​

If you need to access private repositories, create a GitHub Personal Access Token:

  1. Visit GitHub Settings → Developer settings → Personal access tokens
  2. Click "Generate new token"
  3. Select required permissions:
    • repo (access private repos)
    • Or public_repo (access public repos only)
  4. Generate and save the token

Public repositories can be accessed without configuring a token.

2. Create GitHub Releases Storage Configuration ​

  1. Log in to CloudPaste admin panel → Storage Configuration
  2. Click "Create Storage Configuration"
  3. Select GitHub Releases from the "Storage Type" dropdown
  4. Fill in configuration information (see below)
  5. After saving, create a mount point for this storage in "Mount Management"

3. Field Descriptions ​

3.1 Basic Information ​

  • Configuration Name Any recognizable name, e.g., "CloudPaste Releases", "Open Source Releases"

  • Storage Capacity Limit (Optional)

    • Only affects CloudPaste's own quota calculation
    • GitHub Releases has no actual capacity limit concept

3.2 Repository Structure Configuration ​

Core configuration for GitHub Releases storage

  • Repository Structure (repo_structure) Required

    Define the list of GitHub repositories to mount, one configuration per line:

    Supported formats:

    FormatDescriptionExample
    owner/repoRecommended format, mounts directly to root for single repoling-drag0n/CloudPaste
    alias:owner/repoCustom directory name, required for multiple reposcloudpaste:ling-drag0n/CloudPaste
    https://github.com/owner/repoFull URL formathttps://github.com/ling-drag0n/CloudPaste

    Configuration rules:

    • One configuration per line, empty lines and lines starting with # are ignored
    • Single repository: Can use owner/repo directly, files displayed in mount root
    • Multiple repositories: Must specify alias for each line (alias:owner/repo) to avoid directory conflicts

    Example configurations:

    # Single repository configuration (mounts directly to root)
    ling-drag0n/CloudPaste
    # Multiple repository configuration (each repo has its own directory)
    cloudpaste:ling-drag0n/CloudPaste
    vscode:microsoft/vscode
    node:nodejs/node

3.3 Display Options ​

  • Show All Versions (show_all_version) (Default: off)

    • Off: Only show latest Release assets (flat list)
    • On: Show all Release versions, each version as a subdirectory (named by tag_name)
  • Show README (show_readme) (Default: off)

    • When enabled, displays README.md and LICENSE files under the repository directory
    • These files come from the repository root, not Release assets
  • Show Source Code (show_source_code) (Default: off)

    • When enabled, each Release directory shows:
      • Source code (zip) - Source code ZIP archive
      • Source code (tar.gz) - Source code TAR.GZ archive
    • These are auto-generated source code archives by GitHub
  • Show Release Notes (show_release_notes) (Default: off)

    • When enabled, each Release directory shows a RELEASE_NOTES.md virtual file
    • Content is the Release's release notes (release.body)
    • Only displayed when the Release has release notes

3.4 Advanced Configuration ​

  • GitHub Token (token) (Optional)

    • Personal Access Token for accessing private repositories
    • Not required for public repositories
    • Encrypted and stored in backend
  • Per Page (per_page) (Default: 20)

    • Number of items per page when fetching Releases list
    • Range: 1-100
    • Larger values can reduce API request count
  • GitHub Proxy (gh_proxy) (Optional)

    • Proxy address for accelerating GitHub downloads
    • Example: https://mirror.ghproxy.com
    • Only replaces download links starting with https://github.com

4. Directory Structure ​

4.1 "Show All Versions" Off (Default) ​

/mount-point/
├── asset1.zip          # Latest Release assets
├── asset2.exe
├── README.md           # If show_readme enabled
├── LICENSE
├── Source code (zip)   # If show_source_code enabled
├── Source code (tar.gz)
└── RELEASE_NOTES.md    # If show_release_notes enabled

4.2 "Show All Versions" On ​

/mount-point/
├── v1.0.0/             # Release tag as directory name
│   ├── asset1.zip
│   ├── asset2.exe
│   ├── Source code (zip)
│   ├── Source code (tar.gz)
│   └── RELEASE_NOTES.md
├── v0.9.0/
│   └── ...
├── README.md           # If show_readme enabled (repo level)
└── LICENSE

4.3 Multiple Repository Configuration ​

/mount-point/
├── cloudpaste/         # Alias as directory name
│   ├── v1.0.0/
│   └── ...
├── vscode/
│   ├── 1.85.0/
│   └── ...
└── node/
    ├── v20.10.0/
    └── ...

5. Mount and Permission Configuration ​

After saving GitHub Releases storage configuration, create a mount point in "Mount Management":

  1. Go to Mount Management → Create new mount
  2. Select the GitHub Releases storage configuration
  3. Fill in mount path (e.g., /releases), notes, etc.
  4. Enable as needed:
    • Web Proxy: Force web scenarios to use CloudPaste proxy
    • Enable Signature: Signature protection for /api/p / proxy endpoint
    • Direct Link Strategy: native_direct / proxy

Additionally, the Allow API Key Usage (is_public) option in GitHub Releases storage configuration:

  • When enabled, API keys can use this storage within their "mount path" scope
  • Combined with API key's basic_path and mount path, precisely limit access scope

For detailed mount and permission documentation, refer to:

6. FAQ ​

6.1 Cannot Access Private Repository ​

Possible causes:

  • Token not configured
  • Token permissions insufficient
  • Token expired

Solutions:

  1. Create a new Personal Access Token
  2. Ensure it has repo permission
  3. Enter token in storage configuration

6.2 Release List is Empty ​

Possible causes:

  • Repository has no published Releases
  • repo_structure format is incorrect
  • Repository name or username spelling error

Solutions:

  1. Confirm repository has published Releases (not pre-release or draft)
  2. Check repo_structure format is correct
  3. Test using full URL format: https://github.com/owner/repo

6.3 Slow Download Speed ​

Possible causes:

  • Slow network connection to GitHub
  • Acceleration proxy not configured

Solutions:

  1. Configure gh_proxy with GitHub acceleration mirror
  2. Common mirrors:
    • https://mirror.ghproxy.com
    • https://gh.api.99988866.xyz
  3. Or configure mount proxy strategy to use local proxy

6.4 Multiple Repository Configuration Error ​

Error message:

GitHub Releases multi-repository configuration requires alias for each line

Solution: Multiple repositories must use alias:owner/repo format:

# Wrong example
ling-drag0n/CloudPaste
microsoft/vscode

# Correct example
cloudpaste:ling-drag0n/CloudPaste
vscode:microsoft/vscode

6.5 Source Code File Size Shows as 1 ​

Explanation:

  • GitHub's zipball/tarball URLs don't provide accurate file sizes
  • CloudPaste displays 1 to indicate "size unknown"
  • Actual download will get the complete file

6.6 RELEASE_NOTES.md Not Showing ​

Possible causes:

  • show_release_notes option not enabled
  • The Release has no release notes (release.body is empty)
  • There's a real asset file with the same name (real file takes priority)

Solutions:

  1. Confirm "Show Release Notes" option is enabled
  2. Check if Release has release notes content

7. API Rate Limits ​

GitHub API has request frequency limits:

ScenarioLimit
Unauthenticated requests60 requests/hour
Token authenticated requests5000 requests/hour

Recommendations:

  • Even for public repositories, configuring a token is recommended to increase request quota
  • CloudPaste uses in-memory caching to reduce duplicate requests
  • Cache TTL can be set via mount's cache_ttl setting (default 60 seconds)

8. Reference Resources ​

Released under the Apache License 2.0