A TypeScript GitHub Action for uploading assets to Alibaba Cloud OSS (Object Storage Service).
name: Deploy to OSS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Upload to OSS
uses: diverger/gh-oss-helper@v1
with:
access-key: ${{ secrets.OSS_ACCESS_KEY }}
secret-key: ${{ secrets.OSS_SECRET_KEY }}
bucket: my-website-bucket
region: oss-cn-hangzhou
assets: |
dist/**/*:/
public/favicon.ico:favicon.ico
Input | Required | Default | Description |
---|---|---|---|
access-key |
✅ | - | Alibaba Cloud Access Key ID |
secret-key |
✅ | - | Alibaba Cloud Access Key Secret |
bucket |
✅ | - | OSS bucket name |
assets |
✅ | - | Upload rules (see format below) |
region |
❌ | - | OSS region (e.g., oss-cn-hangzhou ) |
endpoint |
❌ | - | Custom OSS endpoint URL |
timeout |
❌ | 600 |
Upload timeout in seconds |
max-retries |
❌ | 3 |
Maximum retry attempts for failed uploads |
continue-on-error |
❌ | false |
Continue even if some uploads fail |
enable-gzip |
❌ | false |
Enable gzip compression |
public-read |
❌ | false |
Set public-read ACL on uploaded files |
headers |
❌ | - | Custom headers as JSON string |
enable-debug |
❌ | false |
Enable verbose debug logging |
Output | Description |
---|---|
url |
Comma-separated list of uploaded file URLs |
urls |
Array of uploaded file URLs |
count |
Number of successfully uploaded files |
total-files |
Total number of files processed |
uploaded-files |
Number of successfully uploaded files |
failed-files |
Number of failed uploads |
total-size |
Total size of all files in bytes |
uploaded-size |
Total size of successfully uploaded files |
success-rate |
Upload success rate as percentage |
duration |
Total upload duration in milliseconds |
bucket |
OSS bucket name used |
region |
OSS region used |
The assets
input uses a simple format: source:destination
- Single files:
src/file.txt:path/to/file.txt
- Directories:
dist/**/*:website/
(note the trailing/
) - Multiple rules: One per line
assets: |
# Upload entire dist folder to root
dist/**/*:/
# Upload specific files
package.json:meta/package.json
README.md:docs/readme.md
# Upload with custom path structure
src/assets/**/*:static/assets/
public/favicon.ico:favicon.ico
- name: Upload with custom headers
uses: diverger/gh-oss-helper@v1
with:
# ... other inputs
headers: |
{
"Cache-Control": "max-age=31536000",
"Content-Type": "application/json"
}
- name: Upload with custom retry logic
uses: diverger/gh-oss-helper@v1
with:
# ... other inputs
max-retries: 5
timeout: 300
continue-on-error: true
- name: Upload with compression
uses: diverger/gh-oss-helper@v1
with:
# ... other inputs
enable-gzip: true
public-read: true
name: Deploy Website
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build website
run: npm run build
- name: Upload to OSS
uses: diverger/gh-oss-helper@v1
with:
access-key: ${{ secrets.OSS_ACCESS_KEY }}
secret-key: ${{ secrets.OSS_SECRET_KEY }}
bucket: my-website
region: oss-cn-hangzhou
public-read: true
enable-gzip: true
assets: |
dist/**/*:/
- name: Display upload results
run: |
echo "Uploaded ${{ steps.upload.outputs.count }} files"
echo "Success rate: ${{ steps.upload.outputs.success-rate }}%"
name: Update Documentation
on:
push:
paths: ['docs/**']
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Upload documentation
uses: diverger/gh-oss-helper@v1
with:
access-key: ${{ secrets.OSS_ACCESS_KEY }}
secret-key: ${{ secrets.OSS_SECRET_KEY }}
bucket: documentation-bucket
region: oss-cn-beijing
timeout: 60
max-retries: 2
headers: '{"Cache-Control": "max-age=3600"}'
assets: |
docs/**/*:documentation/
README.md:documentation/index.md
Enable detailed debug logging in two ways:
- Action input: Set
enable-debug: true
in your workflow - Repository secret: Set
ACTIONS_STEP_DEBUG
totrue
in your repository secrets
Debug mode provides detailed information about:
- Configuration parsing and validation
- File discovery and processing
- Upload progress and retry attempts
- OSS API responses and errors
- Timing and performance metrics
- name: Upload with debug logging
uses: diverger/gh-oss-helper@v1
with:
# ... other inputs
enable-debug: true
Note: Debug output is only visible in the "Raw logs" view in GitHub Actions.
This project is licensed under the MIT License - see the LICENSE file for details.