sync-s3-compatible-action

The sync-s3-compatible-action is a GitHub action which can sync a directory to an S3-compatible storage.

GPL-3.0 License

Stars
3
Committers
1

Sync S3-Compatible Action

The sync-s3-compatible-action is a GitHub action which can sync a directory to an S3-compatible storage. Currently supports:

  • AWS S3
  • CloudFlare R2
  • Aliyun OSS
  • QCloud COS
  • Baidu Cloud BOS

This action only updates the changed files by comparing local directory and cloud storage.

Environment Variables

The sync-s3-compatible-action takes the following environment variables as inputs:

Name Default Value Required Description
SYNC_DIR _site No Source directory to sync
SYNC_TYPE aws No Cloud storage provider
SYNC_BUCKET Yes Bucket name.
SYNC_REGION Yes Region name.
SYNC_ACCESS_ID Yes API access id.
SYNC_ACCESS_SECRET Yes API aceess secret.
SYNC_OPT_UNUSED keep No How to process files exist on cloud storage but not exist in local.

Notes

  • SYNC_ACCESS_ID and SYNC_ACCESS_SECRET are confidential and should NOT be written in GitHub action yaml. Add these values as encrypted secrets and pass the secrets as inputs.
  • Files which exist on cloud storage but not exist in local directory will be keeped by default. To remove unused files you must set SYNC_OPT_UNUSED to delete explicitly.
  • Default value of SYNC_DIR is _site, which is useful to sync generated GitHub page to cloud storage.

Example

An example of GitHub action shows how to generate GitHub pages and sync _site to AWS S3:

# build-and-sync.yml
name: Build static site and sync to cloud storage.

on:
  push:
    branches: [$default-branch]
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup Ruby
        uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0
        with:
          ruby-version: '3.1'
          bundler-cache: true
          cache-version: 0
      - name: Build with Jekyll
        # Outputs to the './_site' directory by default
        run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
        env:
          JEKYLL_ENV: production
      - name: Sync to Cloud Storage
        uses: michaelliao/sync-s3-compatible-action@v2
        env:
          # force delete unused files on cloud storage:
          SYNC_OPT_UNUSED: delete
          # "_site" is default value
          SYNC_DIR: _site
          SYNC_TYPE: aws
          # bucket must be exist in region:
          SYNC_REGION: us-west-1
          SYNC_BUCKET: gh-s3-sync-action-example
          # set at: Settings - Secrets and variables - Actions - Repository secrets:
          SYNC_ACCESS_ID: ${{ secrets.SYNC_ACCESS_ID }}
          SYNC_ACCESS_SECRET: ${{ secrets.SYNC_ACCESS_SECRET }}

Configurations

AWS

AWS regions can be found on this page:

CloudFlare

The region of CloudFlare R2 must be set to your account id which can be found on R2 page:

Aliyun

Aliyun regions can be found on this page:

QCloud

The region of QCloud bucket can be found in bucket list page:

Baidu Cloud

Baidu cloud regions can be found on this page:

Related Projects