Skip to content

diverger/gh-oss-helper

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

GH OSS Helper

GitHub GitHub release Build and Package Unit Tests Integration Tests Action Tests

A TypeScript GitHub Action for uploading assets to Alibaba Cloud OSS (Object Storage Service).

🚀 Quick Start

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

📋 Inputs

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

📤 Outputs

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

📝 Assets Format

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

Examples

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

🔧 Advanced Configuration

Custom Headers

- name: Upload with custom headers
  uses: diverger/gh-oss-helper@v1
  with:
    # ... other inputs
    headers: |
      {
        "Cache-Control": "max-age=31536000",
        "Content-Type": "application/json"
      }

Retry Configuration

- name: Upload with custom retry logic
  uses: diverger/gh-oss-helper@v1
  with:
    # ... other inputs
    max-retries: 5
    timeout: 300
    continue-on-error: true

Gzip Compression

- name: Upload with compression
  uses: diverger/gh-oss-helper@v1
  with:
    # ... other inputs
    enable-gzip: true
    public-read: true

🎯 Example Workflows

Static Website Deployment

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 }}%"

Documentation Upload

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

🔍 Troubleshooting

Debug Mode

Enable detailed debug logging in two ways:

  1. Action input: Set enable-debug: true in your workflow
  2. Repository secret: Set ACTIONS_STEP_DEBUG to true 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

Example with debug enabled:

- 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.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A GitHub Action for uploading assets to Alibaba Cloud OSS (Object Storage Service).

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •