diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..1fa92c9 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,52 @@ +name: Deploy Production + +on: + workflow_run: + workflows: ["Run Tests"] + types: + - completed + workflow_dispatch: + pull_request: + branches: ["release"] + types: ["closed"] + +env: + NODE_VERSION: 20 + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Install NodeJS + uses: actions/setup-node@v4 + with: + node-version: ${{env.NODE_VERSION}} + + - name: Code Checkout + uses: actions/checkout@v4 + + - name: Install Dependencies + run: npm ci + + - name: Build Production + run: npm run build + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{secrets.AWS_ACCESS_KEY_ID}} + aws-secret-access-key: ${{secrets.AWS_SECRET_ACCESS_KEY}} + aws-region: ap-southeast-2 + + - name: Upload to S3 + env: + BUCKET_NAME: ${{secrets.AWS_S3_BUCKET_NAME}} + run: aws s3 sync ./dist s3://$BUCKET_NAME --delete + + - name: CloudFront Invalidation + env: + CLOUD_FRONT_ID: ${{ secrets.AWS_CLOUDFRONT_ID}} + run: | + aws cloudfront create-invalidation \ + --distribution-id $CLOUD_FRONT_ID --paths /*