Skip to content

deploy to stage

deploy to stage #4

Workflow file for this run

name: Build, test, and deploy
on: [ push ]
jobs:
api:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ github.ref == 'ref/head/master' && secrets.PROD_AWS_ACCESS_KEY_ID || secrets.STAGE_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ github.ref == 'ref/head/master' && secrets.PROD_AWS_SECRET_ACCESS_KEY || secrets.STAGE_AWS_SECRET_ACCESS_KEY }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Test Backend
run: pip install -r requirements.txt && python -m unittest
working-directory: ./app
- name: Build and Deploy Backend
working-directory: ./app
if: github.ref == 'refs/heads/master'
run: |
# Bundle all files
zip -r ./deployment.zip .
# Push to S3
aws s3 cp deployment.zip s3://${{ github.ref == 'ref/head/master' && secrets.PROD_S3_CODE_BUCKET || secrets.STAGE_S3_CODE_BUCKET }}/deployment.zip
# Get version form bucket
NEW_VERSION=$( \
aws s3api list-object-versions \
--bucket ${{ github.ref == 'ref/head/master' && secrets.PROD_S3_CODE_BUCKET || secrets.STAGE_S3_CODE_BUCKET }} \
--prefix deployment.zip \
--query 'Versions[?IsLatest].[VersionId]' \
--output text)
# Update CF with new version
aws cloudformation update-stack \
--stack-name ${{ github.ref == 'ref/head/master' && secrets.PROD_API_CF_NAME || secrets.STAGE_API_CF_NAME }} \
--use-previous-template \
--capabilities CAPABILITY_IAM \
--parameters \
ParameterKey=s3CodeVersion,ParameterValue=$NEW_VERSION \
ParameterKey=hostedZoneId,UsePreviousValue=true \
ParameterKey=lambdaBucket,UsePreviousValue=true \
ParameterKey=apiDomain,UsePreviousValue=true \
ParameterKey=environment,UsePreviousValue=true \
ParameterKey=signingSecretString,UsePreviousValue=true
# Wait for update
aws cloudformation wait stack-update-complete --stack-name ${{ github.ref == 'ref/head/master' && secrets.PROD_API_CF_NAME || secrets.STAGE_API_CF_NAME }}
env:
AWS_DEFAULT_REGION: ${{ github.ref == 'ref/head/master' && 'ap-southeast-2' || 'us-east-1' }}
spa:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ github.ref == 'ref/head/master' && secrets.PROD_AWS_ACCESS_KEY_ID || secrets.STAGE_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ github.ref == 'ref/head/master' && secrets.PROD_AWS_SECRET_ACCESS_KEY || secrets.STAGE_AWS_SECRET_ACCESS_KEY }}
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '14.3'
- name: Install dependencies
working-directory: ./web
run: npm i
- name: Test Frontend
working-directory: ./web
run: npx tsc && npm run test
- name: Build
working-directory: ./web
run: npm run build-stage
- name: Deploy Frontend
uses: reggionick/s3-deploy@v3
if: github.ref == 'refs/heads/master'
with:
folder: ./web/build
bucket: ${{ github.ref == 'ref/head/master' && secrets.PROD_S3_BUCKET || secrets.STAGE_S3_BUCKET }}
bucket-region: ${{ github.ref == 'ref/head/master' && 'ap-southeast-2' || 'us-east-1' }}
dist-id: ${{ github.ref == 'ref/head/master' && secrets.PROD_CF_DISTRIBUTION_ID || secrets.STAGE_CF_DISTRIBUTION_ID }}
invalidation: /*