Skip to content

Merge pull request #11 from CodeWithAsheville/8-implementation #7

Merge pull request #11 from CodeWithAsheville/8-implementation

Merge pull request #11 from CodeWithAsheville/8-implementation #7

Workflow file for this run

name: Deploy
on:
push:
branches: [main, live]
jobs:
determine-environment:
name: Determine Environment
runs-on: ubuntu-latest
outputs:
environment_name: ${{ steps.set-env.outputs.environment_name }}
steps:
- id: set-env
run: |
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
echo "environment_name=dev" >> $GITHUB_OUTPUT
elif [[ "${{ github.ref }}" == "refs/heads/live" ]]; then
echo "environment_name=prod" >> $GITHUB_OUTPUT
fi
verify-ssm-parameters:
name: Verify SSM Parameters
needs: determine-environment
uses: ./.github/workflows/verify-ssm-parameters.yml
with:
environment: ${{ needs.determine-environment.outputs.environment_name }}
secrets: inherit
terraform-apply:
name: Terraform Apply
runs-on: ubuntu-latest
needs: [determine-environment, verify-ssm-parameters]
defaults:
run:
working-directory: ./infra/terraform
steps:
- uses: actions/checkout@v4
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: "1.11.4"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_ACCESS_KEY_ID || secrets.PROD_AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_SECRET_ACCESS_KEY || secrets.PROD_AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-2
- name: Set Terraform environment variables
run: |
echo "TF_VAR_alert_email=${{ vars.ALERT_EMAIL }}" >> $GITHUB_ENV
- name: Terraform Init
working-directory: ./infra/terraform/${{ needs.determine-environment.outputs.environment_name }}
run: terraform init
- name: Terraform Apply
working-directory: ./infra/terraform/${{ needs.determine-environment.outputs.environment_name }}
run: |
terraform apply -auto-approve
deploy-backend:
name: Deploy Backend API
runs-on: ubuntu-latest
needs: [determine-environment, terraform-apply]
defaults:
run:
working-directory: ./serverless
steps:
- uses: actions/checkout@v4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_ACCESS_KEY_ID || secrets.PROD_AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_SECRET_ACCESS_KEY || secrets.PROD_AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-2
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: "./serverless/package-lock.json"
- name: Install dependencies
run: npm ci
- name: Run tests before deployment
run: npm test
- name: Run linting
run: npm run lint
- name: Install serverless framework
run: npm install -g serverless
- name: Deploy API with serverless
env:
SERVERLESS_ACCESS_KEY: ${{ secrets.SERVERLESS_ACCESS_KEY }}
run: |
cd api
serverless deploy --stage ${{ needs.determine-environment.outputs.environment_name }}
create-release:
name: Create Release
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/live'
needs: [deploy-backend]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get version
id: get-version
run: |
CURRENT_DATE=$(date +'%Y.%m.%d')
RELEASE_COUNT=$(git tag -l "v$CURRENT_DATE.*" | wc -l)
RELEASE_VERSION="v$CURRENT_DATE.$((RELEASE_COUNT + 1))"
echo "version=$RELEASE_VERSION" >> $GITHUB_OUTPUT
- name: Create Release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.get-version.outputs.version }}
name: Release ${{ steps.get-version.outputs.version }}
generateReleaseNotes: true