Deploy PRs to S3
ActionsAbout
Tags
(2)See Vapor's Website for an example application using this action.
name: PR
permissions:
deployments: write
contents: read
on:
pull_request:
branches: [main]
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Create Site
run: swift build
- name: Deploy S3 Website
uses: brokenhandsio/s3-website-pr-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
with:
bucket-prefix: "vapor-website-pulls"
folder-to-copy: "./Output"
bucket-region: "eu-west-2"name: PR
on:
pull_request:
branches: [main]
permissions:
id-token: write
deployments: write
contents: read
build:
runs-on: ubuntu-latest
steps:
- name: Get GH app token
id: get-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ vars.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: ${{ vars.OIDC_ROLE_ARN }}
aws-region: ${{ vars.OIDC_ROLE_REGION }}
- uses: actions/checkout@v6
with:
token: ${{ steps.get-token.outputs.token }}
- name: Create Site
run: swift build
- name: Deploy S3 Website
uses: brokenhandsio/s3-website-pr-action@v2
with:
token: ${{ steps.get-token.outputs.token }}
bucket-prefix: "vapor-website-pulls"
folder-to-copy: "./Output"
bucket-region: "eu-west-2"Execute the s3-website-pr-action action on pull request opened, synchronize and reopened events. This will create a new S3 static site and upload the contents of folder-to-copy.
The site url will be posted as a deployment on the pull request.
Note: By default, workflows using the pull_request activity type will include the above events. Docs
| Environment Variable | Description |
|---|---|
| AWS_ACCESS_KEY_ID | AWS Access Key ID of an IAM user |
| AWS_SECRET_ACCESS_KEY | AWS Secret Access Key of an IAM user |
| GITHUB_TOKEN | GitHub automatically provides the secret value |
Note
The GITHUB_TOKEN environment variable is not required if you provide the token input to the action instead. This is most useful when used in conjunction with the GitHub OIDC provider.
| Parameter | Description |
|---|---|
| bucket-prefix | Prefix to the S3 bucket name |
| folder-to-copy | The directory to your built web app. This folder will be copied to S3 |
| bucket-region | Region to deploy the S3 bucket into |
| Parameter | Description |
|---|---|
| environment-prefix | Prefix to the GitHub Deployment. Defaults to 'PR-' |
| token | A GitHub access token to use. Overrides GITHUB_TOKEN environment var if present |
name: PR - Closed
on:
pull_request:
branches: [ main ]
types: [ closed ]
build:
runs-on: ubuntu-latest
steps:
- name: Delete Website Bucket
uses: brokenhandsio/s3-website-pr-action@v2
with:
bucket-prefix: "vapor-website-pulls"
bucket-region: "eu-west-2"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Execute the s3-website-pr-action action on pull request closed events. This will remove the S3 bucket that was created in the previous stage.
| Environment Variable | Description |
|---|---|
| AWS_ACCESS_KEY_ID | AWS Access Key ID of an IAM user |
| AWS_SECRET_ACCESS_KEY | AWS Secret Access Key of an IAM user |
| GITHUB_TOKEN | GitHub automatically provides the secret value |
Note
The GITHUB_TOKEN environment variable is not required if you provide the token input to the action instead. This is most useful when used in conjunction with the GitHub OIDC provider.
| Parameter | Description |
|---|---|
| bucket-prefix | Prefix to the S3 bucket name. This should be the same value as the other stage |
| bucket-region | Region to deploy the S3 bucket into |
| Parameter | Description |
|---|---|
| environment-prefix | Prefix to the GitHub Deployment. Defaults to 'PR-' |
| folder-to-copy | The directory to your built web app. This folder will be copied to S3 |
| index-document | The index document for the S3 bucket. Defaults to 'index.html' |
| error-document | The error document for the S3 bucket. Defaults to 'error.html' |
| token | A GitHub access token to use. Overrides GITHUB_TOKEN environment var if present |
Required IAM permissions for this action.
Replace <YOUR_BUCKET_PREFIX> with the same bucket-prefix value that you defined in your workflows.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:PutBucketWebsite",
"s3:PutObjectAcl",
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::<YOUR_BUCKET_PREFIX>-*"]
}
]
}If using the OIDC provider, this policy must be attached to the provider's IAM role.
The scripts and documentation in this project are released under the MIT License
Resources
Deploy PRs to S3 is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.
