https://github.com/dartilesm/vercel-blob-action
Automates the process of uploading files or folders to Vercel Blob Storage during CI/CD workflows. It supports both single and recursive directory uploads, making it useful for deploying assets, backups, or build artifacts to Vercel Blob.
https://github.com/dartilesm/vercel-blob-action
actions backup blob-storage cloud github-actions javascript objectstorage objectstore-database sdk storage vercel vercel-blob vercel-blob-storage
Last synced: 9 months ago
JSON representation
Automates the process of uploading files or folders to Vercel Blob Storage during CI/CD workflows. It supports both single and recursive directory uploads, making it useful for deploying assets, backups, or build artifacts to Vercel Blob.
- Host: GitHub
- URL: https://github.com/dartilesm/vercel-blob-action
- Owner: dartilesm
- License: mit
- Created: 2025-05-25T00:50:00.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2025-05-27T01:37:29.000Z (9 months ago)
- Last Synced: 2025-06-03T16:38:37.284Z (9 months ago)
- Topics: actions, backup, blob-storage, cloud, github-actions, javascript, objectstorage, objectstore-database, sdk, storage, vercel, vercel-blob, vercel-blob-storage
- Language: TypeScript
- Homepage:
- Size: 618 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Upload to Vercel Blob
This GitHub Action allows you to upload files or entire folders to Vercel Blob storage by specifying a source path and destination path. It provides an easy way to manage blob storage in your Vercel projects through GitHub Actions workflows.
## Inputs
### `source`
**Required** The source path of the file or folder you want to upload to Vercel Blob storage.
- **File**: Upload a single file
- **Folder**: Upload all files within the folder (including subdirectories)
### `destination`
**Required** The destination path where the file(s) should be stored in Vercel Blob storage.
- **For files**: The exact destination path for the file
- **For folders**: The base path where all files will be uploaded (maintaining folder structure)
### `read-write-token`
**Required** Your Vercel Blob read-write token (`BLOB_READ_WRITE_TOKEN`). This should be stored as a GitHub secret for security.
## Outputs
This action does not provide any outputs for privacy and security reasons. To access your uploaded files, check your Vercel dashboard under Storage → Blob.
## Environment Variables
This action requires a Vercel Blob read-write token. The action will automatically set the `BLOB_READ_WRITE_TOKEN` environment variable for the Vercel Blob SDK to use. You can obtain this token from your Vercel dashboard:
1. Go to your Vercel dashboard
2. Navigate to Storage → Blob
3. Create or copy your `BLOB_READ_WRITE_TOKEN`
4. Add it as a GitHub secret in your repository
## Usage
### Single File Upload
Upload a single file to Vercel Blob storage:
```yaml
name: Upload Single File
on:
push:
branches: [main]
jobs:
upload-file:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Upload file to Vercel Blob
uses: dartilesm/vercel-blob-action@v2
with:
source: "path/to/file.txt"
destination: "uploads/file.txt"
read-write-token: ${{ secrets.BLOB_READ_WRITE_TOKEN }}
```
### Folder Upload
Upload an entire folder (including subdirectories) to Vercel Blob storage:
```yaml
name: Upload Build Folder
on:
push:
branches: [main]
jobs:
build-and-upload:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build project
run: |
# Your build commands here
mkdir -p dist/assets
echo "Main file" > dist/index.html
echo "Stylesheet" > dist/assets/style.css
echo "Script" > dist/assets/script.js
- name: Upload entire build folder to Vercel Blob
uses: dartilesm/vercel-blob-action@v2
with:
source: "dist/"
destination: "builds/${{ github.sha }}"
read-write-token: ${{ secrets.BLOB_READ_WRITE_TOKEN }}
```
This will upload all files maintaining the folder structure:
- `dist/index.html` → `builds/{sha}/index.html`
- `dist/assets/style.css` → `builds/{sha}/assets/style.css`
- `dist/assets/script.js` → `builds/{sha}/assets/script.js`
## Setting up the Token
1. **Get your Vercel Blob token:**
- Visit your [Vercel dashboard](https://vercel.com/dashboard)
- Go to Storage → Blob
- Create or copy your `BLOB_READ_WRITE_TOKEN`
2. **Add the token to GitHub Secrets:**
- Go to your GitHub repository
- Navigate to Settings → Secrets and variables → Actions
- Click "New repository secret"
- Name: `BLOB_READ_WRITE_TOKEN`
- Value: Your Vercel Blob token
## Development
This action is built with TypeScript and uses a build process to bundle all dependencies into a single JavaScript file. This means consumers don't need to install dependencies when using the action.
### Prerequisites
- Node.js 20 or later
- npm or bun
### Setup
1. Clone the repository:
```bash
git clone https://github.com/dartilesm/vercel-blob-action.git
cd vercel-blob-action
```
2. Install dependencies:
```bash
npm install
# or
bun install
```
### Building
The action uses TypeScript and needs to be built before it can be used:
```bash
npm run build
# or
bun run build
```
This command:
1. Compiles TypeScript to JavaScript (`tsc`)
2. Bundles all dependencies into a single file using `@vercel/ncc`
3. Outputs the bundled file to `dist/index.js`
### Development Workflow
1. Make changes to `src/index.ts`
2. Commit your changes (the pre-commit hook will automatically build and stage the dist files)
3. Test the action locally or in a workflow
**Note:** A pre-commit hook automatically runs `npm run build` and stages the built files, ensuring the `dist/` directory is always in sync with your source code.
### Scripts
- `npm run build` - Build the action for production
- `npm run dev` - Watch mode for development (TypeScript compilation only)
### Project Structure
```
├── src/
│ └── index.ts # Main action source code
├── dist/
│ ├── index.js # Built and bundled action (committed)
│ └── index.js.map # Source map for debugging
├── action.yml # Action metadata
├── package.json # Dependencies and scripts
└── tsconfig.json # TypeScript configuration
```
**Note:** The `dist/` directory is committed to the repository because GitHub Actions need the built JavaScript file to run the action.
## License
This project is licensed under the ISC License.