This action runs when tags are created, and will upload your code to an S3 bucket to multiple directories for @latest
and @major
, @major.minor
and @major.minor.patch
, for access similar to how unpkg.com works. For example, for first release, for release version v1.2.3-beta.1
the dist
content will be uploaded to 1
, 1.2
, 1.2.3-beta.1
directores.
In general, 4 new directories will be created or updated in S3 for latest
and the different versions. Though it's possible in S3 to do some redirects (which could in theory reduce the number of folders and files created), there are limitations there, and S3 storage space for things like npm packages should generally be very negligible.
Note that it doesn't allow for tilde (~
) or caret (^
) ranges, nor for asterisks (*
), though as with unpkg.com, you you can get the latest of any major or minor release by simply not including the minor or patch version, such as package@1
(which will serve the latest 1.x.x
release) or [email protected]
(which will serve the latest 1.1.x
release). Unlike unpkg, which redirects, it will serve the files in the corresponding directories in S3.
This package relies on your tags using semantic versioning.
We'd recommend putting CloudFront in front of your S3 bucket, but that's up to you.
Create workflow YAML file in .github/workflows/
directory of your app.
Go to Project's settings in GitHub, Click Secret
, create the Secret key/values as mentioned in the docs below. On every release, this action should run.
Example of the workflow is given below:
name: S3CDN upload
on:
push:
tags:
- "*"
jobs:
s3cdn:
runs-on: ubuntu-latest
steps:
- name: Checkout Foxy/foxy-elements
uses: actions/checkout@v2
- name: Install & Build # Update this section with your own build commands
run: |
npm install
npm run prepack
- uses: Foxy/foxy-github-action-s3cdn@main
# with:
# package-name: elements # optional: defaults to the repo name
env:
AWS_S3_CDN_BUCKET_NAME: ${{ secrets.AWS_S3_CDN_BUCKET_NAME }}
AWS_S3_CDN_KEY_ID: ${{ secrets.AWS_S3_CDN_KEY_ID }}
AWS_S3_CDN_KEY_SECRET: ${{ secrets.AWS_S3_CDN_KEY_SECRET }}
SOURCE_DIR: "dist"
# AWS_REGION: "us-west-1" # optional: defaults to us-east-1
Key | Value | Suggested Type | Required | Default |
---|---|---|---|---|
AWS_S3_CDN_KEY_ID |
Your AWS Access Key. More info here. | secret env |
Yes | N/A |
AWS_S3_CDN_KEY_SECRET |
Your AWS Secret Access Key. More info here. | secret env |
Yes | N/A |
AWS_S3_CDN_BUCKET_NAME |
The name of the bucket you're syncing to. For example, my-app-releases . |
secret env |
Yes | N/A |
AWS_REGION |
The region where you created your bucket. Set to us-east-1 by default. Full list of regions here. |
env |
No | us-east-1 |
SOURCE_DIR |
The local directory (or build directory) you wish to sync/upload to S3 against those release version. For example, dist , public . |
env |
Yes | If nothing is passed, dist will be considered your app/build directory |
package-name |
Name of the package that will be appended to package version to make directory name. For example, MyPackage . |
arg |
No | If nothing is passed, project's repo name will be used |
This project is distributed under the MIT license.