Updated README.md #74
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy the site to AWS | |
on: | |
push: | |
branches: ['main'] | |
repository_dispatch: | |
types: | |
- webhook | |
jobs: | |
terraform: | |
name: 'Terraform infrastructure check' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Setup Terraform | |
uses: hashicorp/setup-terraform@v1 | |
with: | |
cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} # Authenticates to TF Cloud | |
- name: Terraform Init | |
id: init | |
run: terraform -chdir=./infrastructure init | |
- name: Terraform Validate | |
id: validate | |
run: terraform -chdir=./infrastructure validate -no-color | |
- name: Terraform Plan | |
id: plan | |
if: github.event_name == 'pull_request' # Only run on PRs. | |
run: terraform -chdir=./infrastructure plan -no-color | |
continue-on-error: true # Display error even on fail | |
- name: Update Pull Request With TF Results | |
uses: actions/[email protected] | |
if: github.event_name == 'pull_request' | |
env: | |
PLAN: "terraform\n${{ steps.plan.outputs.stdout }}" | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const output = `#### Terraform Format and Style 🖌\`${{ steps.fmt.outcome }}\` | |
#### Terraform Initialization ⚙️\`${{ steps.init.outcome }}\` | |
#### Terraform Plan 📖\`${{ steps.plan.outcome }}\` | |
#### Terraform Validation 🤖\`${{ steps.validate.outcome }}\` | |
<details><summary>Show Plan</summary> | |
\`\`\`\n | |
${process.env.PLAN} | |
\`\`\` | |
</details> | |
*Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`*`; | |
github.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: output | |
}) | |
- name: Terraform Plan Status | |
if: steps.plan.outcome == 'failure' | |
run: exit 1 | |
- name: Terraform Apply | |
if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
run: terraform -chdir=./infrastructure apply -auto-approve | |
deploy: | |
name: 'Build and deploy assets to S3 and Cloudfront' | |
needs: terraform | |
runs-on: ubuntu-latest | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
CONTENTFUL_SPACE_ID: ${{ secrets.CONTENTFUL_SPACE_ID }} | |
CONTENTFUL_DELIVERY_TOKEN: ${{ secrets.CONTENTFUL_DELIVERY_TOKEN }} | |
CONTENTFUL_PREVIEW_TOKEN: ${{ secrets.CONTENTFUL_PREVIEW_TOKEN }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Add Node.js | |
uses: actions/setup-node@v2 | |
with: | |
node-version: 18.x | |
cache: 'npm' | |
- name: Install dependencies | |
run: npm ci | |
- name: Build production site | |
run: npm run build | |
- name: Send assets to S3 and invalidate old cloudfront distribution | |
uses: reggionick/s3-deploy@v3 | |
with: | |
folder: dist | |
bucket: ${{ secrets.AWS_BUCKET_NAME }} | |
bucket-region: ${{ secrets.AWS_BUCKET_REGION }} | |
dist-id: ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} |