Home

Awesome

GitHub Action to Sync S3 Bucket 🔄

This simple action uses the vanilla AWS CLI to sync a directory (either from your repository or generated during your workflow) with a remote S3 bucket.

Usage

workflow.yml Example

Place in a .yml file such as this one in your .github/workflows folder. Refer to the documentation on workflow YAML syntax here.

As of v0.3.0, all aws s3 sync flags are optional to allow for maximum customizability (that's a word, I promise) and must be provided by you via args:.

The following example includes optimal defaults for a public static website:

name: Upload Website

on:
  push:
    branches:
    - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl public-read --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_REGION: 'us-west-1'   # optional: defaults to us-east-1
        SOURCE_DIR: 'public'      # optional: defaults to entire repository

Configuration

The following settings must be passed as environment variables as shown in the example. Sensitive information, especially AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, should be set as encrypted secrets — otherwise, they'll be public to anyone browsing your repository's source code and CI logs.

KeyValueSuggested TypeRequiredDefault
AWS_ACCESS_KEY_IDYour AWS Access Key. More info here.secret envYesN/A
AWS_SECRET_ACCESS_KEYYour AWS Secret Access Key. More info here.secret envYesN/A
AWS_S3_BUCKETThe name of the bucket you're syncing to. For example, jarv.is or my-app-releases.secret envYesN/A
AWS_REGIONThe region where you created your bucket. Set to us-east-1 by default. Full list of regions here.envNous-east-1
AWS_S3_ENDPOINTThe endpoint URL of the bucket you're syncing to. Can be used for VPC scenarios or for non-AWS services using the S3 API, like DigitalOcean Spaces.envNoAutomatic (s3.amazonaws.com or AWS's region-specific equivalent)
SOURCE_DIRThe local directory (or file) you wish to sync/upload to S3. For example, public. Defaults to your entire repository.envNo./ (root of cloned repository)
DEST_DIRThe directory inside of the S3 bucket you wish to sync/upload to. For example, my_project/assets. Defaults to the root of the bucket.envNo/ (root of bucket)

License

This project is distributed under the MIT license.