Fix App Health Check 🩺 #29
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: CI/CD Pipeline | |
on: | |
push: | |
pull_request: | |
types: [opened, synchronize, closed] | |
workflow_dispatch: | |
inputs: | |
test: | |
type: boolean | |
description: 'Run tests' | |
required: true | |
default: true | |
deploy: | |
type: boolean | |
description: 'Deploy application' | |
required: true | |
default: false | |
jobs: | |
build-api: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-buildx-action@v3 | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and Push API Image | |
run: | | |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/api:latest | |
docker build -t $IMAGE_NAME ./api | |
docker push $IMAGE_NAME | |
build-app: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-buildx-action@v3 | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and Push Testing Image | |
run: | | |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/app:latest-test | |
docker build --build-arg VITE_HUU_API_BASE_URL=http://127.0.0.1:8080/api --target development --tag $IMAGE_NAME ./app | |
docker push $IMAGE_NAME | |
- name: Build Production Image | |
run: | | |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/app:latest | |
ENCODED_KEY=$(echo -n "${{ secrets.HUU_EC2_SSH_KEY }}" | base64) | |
docker build --build-arg VITE_HUU_API_BASE_URL=http://127.0.0.1:8080/api --build-arg ENV_KEY=$ENCODED_KEY --target production --tag $IMAGE_NAME ./app | |
docker push $IMAGE_NAME | |
test-api-mock: | |
runs-on: ubuntu-latest | |
needs: [build-api] | |
if: >- | |
github.event_name == 'push' || | |
github.event.pull_request || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.test) | |
steps: | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Tests With 3rd Party Service Mocking | |
run: docker run --no-healthcheck ghcr.io/hackforla/homeuniteus/api:latest pytest | |
test-api-nomock: | |
runs-on: ubuntu-latest | |
needs: [build-api] | |
if: >- | |
github.event_name == 'push' || | |
github.event.pull_request || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.test) | |
env: | |
COGNITO_REGION: ${{ secrets.COGNITO_REGION }} | |
COGNITO_ACCESS_ID: ${{ secrets.COGNITO_ACCESS_ID }} | |
COGNITO_ACCESS_KEY: ${{ secrets.COGNITO_ACCESS_KEY }} | |
steps: | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Tests Without Mocking | |
run: docker run --no-healthcheck --env COGNITO_REGION --env COGNITO_ACCESS_ID --env COGNITO_ACCESS_KEY ghcr.io/hackforla/homeuniteus/api:latest "pytest --mode=release" | |
test-app-mock: | |
runs-on: ubuntu-latest | |
needs: [build-app, build-api] | |
if: >- | |
github.event_name == 'push' || | |
github.event.pull_request || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.test) | |
services: | |
frontend: | |
image: ghcr.io/hackforla/homeuniteus/app:latest-test | |
env: | |
VITE_HUU_API_BASE_URL: http://127.0.0.1:8080/api | |
steps: | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Tests With Backend Mocking | |
run: docker run --env CYPRESS_BASE_URL --env CYPRESS_USE_MOCK ghcr.io/hackforla/homeuniteus/app:latest-test "npx cypress run" | |
env: | |
CYPRESS_BASE_URL: http://frontend:4040 | |
CYPRESS_USE_MOCK: true | |
test-app-nomock: | |
runs-on: ubuntu-latest | |
needs: [build-app, build-api] | |
if: >- | |
github.event_name == 'push' || | |
github.event.pull_request || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.test) | |
services: | |
backend: | |
image: ghcr.io/hackforla/homeuniteus/api:latest | |
env: | |
ENV: development | |
HOST: 0.0.0.0 | |
frontend: | |
image: ghcr.io/hackforla/homeuniteus/app:latest-test | |
env: | |
VITE_HUU_API_BASE_URL: http://backend:8080/api | |
steps: | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Add Test User | |
run: | | |
curl http://backend:8080/api/auth/signup/host -H "accept: application/json" -H "Content-Type: application/json" -d "{\"email\": \"nottarealemail@gmail.com\", \"password\": \"alskdf454#Adfa\"}" | |
- name: Test without mocking | |
run: docker run --env CYPRESS_BASE_URL --env CYPRESS_USE_MOCK --env CYPRESS_REAL_EMAIL --env CYPRESS_REAL_PASSWORD ghcr.io/hackforla/homeuniteus/app:latest-test "npx cypress run" | |
env: | |
CYPRESS_BASE_URL: http://frontend:4040 | |
CYPRESS_USE_MOCK: false | |
CYPRESS_REAL_EMAIL: nottarealemail@gmail.com | |
CYPRESS_REAL_PASSWORD: alskdf454#Adfa | |
deploy: | |
runs-on: ubuntu-latest | |
needs: [build-api, build-app, test-api-mock, test-api-nomock, test-app-mock, test-app-nomock] | |
if: >- | |
(github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
(github.event_name == 'workflow_dispatch' && github.event.inputs.deploy) | |
steps: | |
- uses: actions/checkout@v4 |