github-sandbox-file-downloader
GitHub Sandbox File Downloader
Skill by ara.so — Daily 2026 Skills collection.
A GitHub Actions-based tool that lets you download files into your repository simply by writing a specially formatted commit message — no CLI, no tokens, no secrets required.
What It Does
github-sandbox listens for commit messages containing download: or download-zip: commands. When detected, a GitHub Actions workflow runs and:
download:— Fetches each URL and saves files individually todownloads/using their original filenames.download-zip:— Fetches all URLs and bundles them into a single timestamped.ziparchive indownloads/.
Setup
1. Fork the Repository
Fork maanimis/github-sandbox into your GitHub account.
2. Enable Read/Write Workflow Permissions
- Go to your forked repo on GitHub
- Navigate to Settings → Actions → General
- Scroll to Workflow permissions
- Select Read and write permissions
- Click Save
No API keys, tokens, or secrets are needed.
Usage
Trigger downloads by committing to your repo with a specially formatted commit message.
Via GitHub Web UI
- Open any file (e.g.,
README.md) in your repo - Click the pencil icon (✏️) to edit
- Make any minor change (a space, blank line, etc.)
- In the Commit changes box, type your download command
- Select Commit directly to the
mainbranch - Click Commit changes
Via Git CLI
# Download individual files
git commit --allow-empty -m "download: https://example.com/file.zip"
# Download multiple files
git commit --allow-empty -m "download: https://example.com/a.zip https://example.com/b.pdf"
# Download and bundle into a ZIP archive
git commit --allow-empty -m "download-zip: https://example.com/a.zip https://example.com/b.pdf"
git push origin main
Command Reference
download: — Save Files Individually
download: URL1 URL2 URL3
Examples:
# Single file
git commit --allow-empty -m "download: https://example.com/dataset.csv"
# Multiple files
git commit --allow-empty -m "download: https://example.com/model.bin https://example.com/config.json https://example.com/vocab.txt"
Output: Files saved individually to downloads/ with original filenames:
downloads/
dataset.csv
model.bin
config.json
vocab.txt
download-zip: — Bundle Into ZIP Archive
download-zip: URL1 URL2 URL3
Examples:
# Single file zipped
git commit --allow-empty -m "download-zip: https://example.com/report.pdf"
# Multiple files bundled
git commit --allow-empty -m "download-zip: https://example.com/a.zip https://example.com/b.pdf https://example.com/c.csv"
Output: A single timestamped archive in downloads/:
downloads/
archive_20260423_153012.zip
Command Summary Table
| Command | URLs | Output |
|---|---|---|
download: URL |
Single | downloads/filename.ext |
download: URL1 URL2 |
Multiple | downloads/file1.ext, downloads/file2.ext |
download-zip: URL |
Single | downloads/archive_YYYYMMDD_HHMMSS.zip |
download-zip: URL1 URL2 |
Multiple | downloads/archive_YYYYMMDD_HHMMSS.zip (all bundled) |
How the Workflow Works
The GitHub Actions workflow (.github/workflows/download.yml) operates as follows:
# Conceptual workflow structure
on:
push:
branches: [main]
jobs:
download:
runs-on: ubuntu-latest
steps:
- name: Check commit message for download command
# Parses commit message for "download:" or "download-zip:"
# Extracts URLs from the message
# Downloads files using curl/wget
# Commits results to downloads/ with [skip ci] to prevent loops
Key design details:
- The workflow uses
[skip ci]in its own commit message to avoid infinite trigger loops. - If no
download:ordownload-zip:command is found, the workflow exits without doing anything. - All output files are committed back to the
downloads/directory automatically.
Checking Download Results
- Click the Actions tab in your repository
- Click the latest workflow run to monitor progress and view logs
- After completion, go to the Code tab and open
downloads/to find your files
Common Patterns
Downloading a Dataset
git commit --allow-empty -m "download: https://raw.githubusercontent.com/datasets/covid-19/main/data/worldwide-aggregated.csv"
git push origin main
Downloading Multiple Assets and Archiving
git commit --allow-empty -m "download-zip: https://example.com/weights.bin https://example.com/tokenizer.json https://example.com/config.yaml"
git push origin main
Downloading a Public GitHub Release Asset
git commit --allow-empty -m "download: https://github.com/owner/repo/releases/download/v1.0.0/binary-linux-amd64.tar.gz"
git push origin main
Troubleshooting
Workflow doesn't trigger
- Confirm Read and write permissions are enabled under Settings → Actions → General → Workflow permissions.
- Make sure you committed directly to the
mainbranch (not a PR or other branch, unless the workflow is configured otherwise). - Check the Actions tab for any failed or skipped runs.
Files not appearing in downloads/
- Verify the URLs are publicly accessible — no authentication, login, or VPN required.
- Check workflow logs in the Actions tab for HTTP errors (403, 404, etc.).
- Ensure URLs don't redirect to a login page.
Workflow runs in an infinite loop
- This shouldn't happen — the workflow appends
[skip ci]to its own commit messages. - If you've modified the workflow file, verify the
[skip ci]tag is still present in the auto-commit step.
Multiple URLs not downloading
- Ensure URLs are separated by spaces only (no commas).
- Avoid special characters in the commit message that might break shell parsing.
# ✅ Correct
git commit --allow-empty -m "download: https://example.com/a.zip https://example.com/b.zip"
# ❌ Incorrect (comma separator)
git commit --allow-empty -m "download: https://example.com/a.zip, https://example.com/b.zip"
Commit message not recognized
- The command prefix must be exactly
download:ordownload-zip:(lowercase, with colon, followed by a space). - The command must appear in the commit message subject line (first line), not the body.
# ✅ Correct
git commit --allow-empty -m "download: https://example.com/file.zip"
# ❌ Won't trigger (wrong prefix)
git commit --allow-empty -m "Download: https://example.com/file.zip"
Notes & Limitations
- Public URLs only — downloads require no authentication.
- GitHub Actions limits apply — workflow execution time, storage, and API rate limits are subject to your GitHub plan.
- Branch — by default, the workflow triggers on pushes to
main. Check.github/workflows/if your default branch differs. - File size — very large files may hit GitHub repository size limits (typically 100MB per file, 1GB total soft limit).