Skip to content

fix: correct www subdomain from api-map-action.com to api.map-action.com #209

fix: correct www subdomain from api-map-action.com to api.map-action.com

fix: correct www subdomain from api-map-action.com to api.map-action.com #209

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
cleanup:
runs-on: self-hosted
steps:
- name: Free up disk space and clean workspace
run: |
# Clean up Docker resources
docker system prune -af
docker volume prune -f
# Display disk usage
df -h
# Clean up Python cache files
sudo find /home/ec2-user/actions-runner/_work/Mapapi -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
sudo find /home/ec2-user/actions-runner/_work/Mapapi -name "*.pyc" -exec rm -f {} + 2>/dev/null || true
# Fix permissions
sudo chown -R ec2-user:ec2-user /home/ec2-user/actions-runner/_work/Mapapi || true
sudo chmod -R 755 /home/ec2-user/actions-runner/_work/Mapapi || true
# setup-and-test:
# needs: cleanup
# runs-on: ubuntu-latest
# steps:
# - name: Checkout Repository
# uses: actions/checkout@v3
# - name: Login to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# - name: Set up Python 3.x
# uses: actions/setup-python@v4
# with:
# python-version: "3.x"
# - name: Create .env file
# run: |
# {
# echo "ALLOWED_HOSTS=${{ secrets.ALLOWED_HOSTS }}"
# echo "ANDROID_CLIENT_ID=${{ secrets.ANDROID_CLIENT_ID }}"
# echo "DB_HOST=${{ secrets.DB_HOST }}"
# echo "DJANGO_SUPERUSER_EMAIL=${{ secrets.DJANGO_SUPERUSER_EMAIL }}"
# echo "DJANGO_SUPERUSER_FIRST_NAME=${{ secrets.DJANGO_SUPERUSER_FIRST_NAME }}"
# echo "DJANGO_SUPERUSER_LAST_NAME=${{ secrets.DJANGO_SUPERUSER_LAST_NAME }}"
# echo "DJANGO_SUPERUSER_PASSWORD=${{ secrets.DJANGO_SUPERUSER_PASSWORD }}"
# echo "DJANGO_SUPERUSER_USERNAME=${{ secrets.DJANGO_SUPERUSER_USERNAME }}"
# echo "IOS_CLIENT_ID=${{ secrets.IOS_CLIENT_ID }}"
# echo "PORT=${{ secrets.PORT }}"
# echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}"
# echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}"
# echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}"
# echo "SECRET_KEY=${{ secrets.SECRET_KEY }}"
# echo "WEB_CLIENT_ID=${{ secrets.WEB_CLIENT_ID }}"
# echo "WEB_CLIENT_SECRET=${{ secrets.WEB_CLIENT_SECRET }}"
# echo "TWILIO_ACCOUNT_SID=${{ secrets.TWILIO_ACCOUNT_SID }}"
# echo "TWILIO_AUTH_TOKEN=${{ secrets.TWILIO_AUTH_TOKEN }}"
# echo "TWILIO_PHONE_NUMBER=${{ secrets.TWILIO_PHONE_NUMBER }}"
# } > .env
# - name: Run Tests
# env:
# ALLOWED_HOSTS: ${{ secrets.ALLOWED_HOSTS }}
# ANDROID_CLIENT_ID: ${{ secrets.ANDROID_CLIENT_ID }}
# DB_HOST: ${{ secrets.DB_HOST }}
# DJANGO_SUPERUSER_EMAIL: ${{ secrets.DJANGO_SUPERUSER_EMAIL }}
# DJANGO_SUPERUSER_FIRST_NAME: ${{ secrets.DJANGO_SUPERUSER_FIRST_NAME }}
# DJANGO_SUPERUSER_LAST_NAME: ${{ secrets.DJANGO_SUPERUSER_LAST_NAME }}
# DJANGO_SUPERUSER_PASSWORD: ${{ secrets.DJANGO_SUPERUSER_PASSWORD }}
# DJANGO_SUPERUSER_USERNAME: ${{ secrets.DJANGO_SUPERUSER_USERNAME }}
# IOS_CLIENT_ID: ${{ secrets.IOS_CLIENT_ID }}
# PORT: ${{ secrets.PORT }}
# POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
# POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
# POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
# SECRET_KEY: ${{ secrets.SECRET_KEY }}
# TEST_POSTGRES_DB: ${{ secrets.TEST_POSTGRES_DB }}
# WEB_CLIENT_ID: ${{ secrets.WEB_CLIENT_ID }}
# WEB_CLIENT_SECRET: ${{ secrets.WEB_CLIENT_SECRET }}
# TWILIO_ACCOUNT_SID: ${{ secrets.TWILIO_ACCOUNT_SID }}
# TWILIO_AUTH_TOKEN: ${{ secrets.TWILIO_AUTH_TOKEN }}
# TWILIO_PHONE_NUMBER: ${{ secrets.TWILIO_PHONE_NUMBER }}
# run: |
# mkdir -p coverage
# chmod 777 coverage
# docker compose -f _ci_pipeline.yml pull
# docker compose -f _ci_pipeline.yml up --build -d
# docker exec api-server-test bash -c "
# python3 manage.py wait_for_db &&
# python3 -m pytest --verbose --cov=. --cov-report=xml:/tmp/coverage.xml --cov-report=term-missing | tee /tmp/coverage_report.txt
# "
# docker cp api-server-test:/tmp/coverage.xml /home/azureuser/coverage/coverage.xml
# docker cp api-server-test:/tmp/coverage_report.txt /home/azureuser/coverage/coverage_report.txt
# sudo chown -R $USER:$USER /home/azureuser/coverage
# docker compose -f _ci_pipeline.yml down
# - name: Upload coverage reports to Codecov
# uses: codecov/codecov-action@v4
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# files: /home/azureuser/coverage/coverage.xml
# fail_ci_if_error: true
# - name: Check coverage
# id: coverage
# run: |
# COVERAGE=$(grep TOTAL /home/azureuser/coverage/coverage_report.txt | awk '{print $NF}' | sed 's/%//')
# echo "Coverage: $COVERAGE%"
# if (( $(echo "$COVERAGE < 40" | bc -l) )); then
# echo "Coverage below threshold"
# exit 1
# else
# echo "Coverage meets threshold"
# fi
# deploy:
# needs: setup-and-test
# if: success() && github.event_name == 'push' && github.ref == 'refs/heads/main'
# runs-on: ubuntu-latest
# permissions: write-all
# steps:
# - name: Pre-checkout cleanup
# run: |
# # Stop any Python processes
# sudo pkill -f python || true
# # Remove problematic __pycache__ directories
# sudo find /home/azureuser/actions-runner/_work/Mapapi/Mapapi -type d -name "__pycache__" -exec rm -rf {} + || true
# # Force remove the entire directory if needed
# sudo rm -rf /home/azureuser/actions-runner/_work/Mapapi/Mapapi || true
# # Recreate directory with proper permissions
# sudo mkdir -p /home/azureuser/actions-runner/_work/Mapapi/Mapapi
# sudo chown -R $USER:$USER /home/azureuser/actions-runner/_work/Mapapi/Mapapi
# sudo chmod -R 777 /home/azureuser/actions-runner/_work/Mapapi/Mapapi
# - name: Checkout Repository
# uses: actions/checkout@v3
# - name: Login to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# - name: Create entrypoint.sh
# run: |
# cat > entrypoint.sh << 'EOL'
# #!/bin/sh
# set -e
# # Wait for postgres to be ready
# python manage.py wait_for_db
# # Apply database migrations
# python manage.py migrate
# # Create superuser if it doesn't exist
# python manage.py createsuperuser --noinput || true
# # Start server
# exec python manage.py runserver 0.0.0.0:8000
# EOL
# shell: bash
# continue-on-error: false
# - name: Create .env file
# run: |
# {
# echo "ALLOWED_HOSTS=${{ secrets.ALLOWED_HOSTS }}"
# echo "ANDROID_CLIENT_ID=${{ secrets.ANDROID_CLIENT_ID }}"
# echo "DB_HOST=${{ secrets.DB_HOST }}"
# echo "DJANGO_SUPERUSER_EMAIL=${{ secrets.DJANGO_SUPERUSER_EMAIL }}"
# echo "DJANGO_SUPERUSER_FIRST_NAME=${{ secrets.DJANGO_SUPERUSER_FIRST_NAME }}"
# echo "DJANGO_SUPERUSER_LAST_NAME=${{ secrets.DJANGO_SUPERUSER_LAST_NAME }}"
# echo "DJANGO_SUPERUSER_PASSWORD=${{ secrets.DJANGO_SUPERUSER_PASSWORD }}"
# echo "DJANGO_SUPERUSER_USERNAME=${{ secrets.DJANGO_SUPERUSER_USERNAME }}"
# echo "IOS_CLIENT_ID=${{ secrets.IOS_CLIENT_ID }}"
# echo "PORT=${{ secrets.PORT }}"
# echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}"
# echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}"
# echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}"
# echo "SECRET_KEY=${{ secrets.SECRET_KEY }}"
# echo "WEB_CLIENT_ID=${{ secrets.WEB_CLIENT_ID }}"
# echo "WEB_CLIENT_SECRET=${{ secrets.WEB_CLIENT_SECRET }}"
# echo "TWILIO_ACCOUNT_SID=${{ secrets.TWILIO_ACCOUNT_SID }}"
# echo "TWILIO_AUTH_TOKEN=${{ secrets.TWILIO_AUTH_TOKEN }}"
# echo "TWILIO_PHONE_NUMBER=${{ secrets.TWILIO_PHONE_NUMBER }}"
# } > .env
# - name: Build and Run Docker Compose
# env:
# ALLOWED_HOSTS: ${{ secrets.ALLOWED_HOSTS }}
# ANDROID_CLIENT_ID: ${{ secrets.ANDROID_CLIENT_ID }}
# DB_HOST: ${{ secrets.DB_HOST }}
# DJANGO_SUPERUSER_EMAIL: ${{ secrets.DJANGO_SUPERUSER_EMAIL }}
# DJANGO_SUPERUSER_FIRST_NAME: ${{ secrets.DJANGO_SUPERUSER_FIRST_NAME }}
# DJANGO_SUPERUSER_LAST_NAME: ${{ secrets.DJANGO_SUPERUSER_LAST_NAME }}
# DJANGO_SUPERUSER_PASSWORD: ${{ secrets.DJANGO_SUPERUSER_PASSWORD }}
# DJANGO_SUPERUSER_USERNAME: ${{ secrets.DJANGO_SUPERUSER_USERNAME }}
# IOS_CLIENT_ID: ${{ secrets.IOS_CLIENT_ID }}
# PORT: ${{ secrets.PORT }}
# POSTGRES_USER: ${{ secrets.POSTGRES_USER }}
# POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
# POSTGRES_DB: ${{ secrets.POSTGRES_DB }}
# SECRET_KEY: ${{ secrets.SECRET_KEY }}
# TEST_POSTGRES_DB: ${{ secrets.TEST_POSTGRES_DB }}
# WEB_CLIENT_ID: ${{ secrets.WEB_CLIENT_ID }}
# WEB_CLIENT_SECRET: ${{ secrets.WEB_CLIENT_SECRET }}
# TWILIO_ACCOUNT_SID: ${{ secrets.TWILIO_ACCOUNT_SID }}
# TWILIO_AUTH_TOKEN: ${{ secrets.TWILIO_AUTH_TOKEN }}
# TWILIO_PHONE_NUMBER: ${{ secrets.TWILIO_PHONE_NUMBER }}
# run: |
# # Conditionally remove existing network if it exists
# docker network ls | grep -q mapapi_micro-services-network && docker network rm mapapi_micro-services-network || true
# # Build and run Docker Compose
# docker compose -f _cd_pipeline.yml up --build -d
# - name: Post-deployment cleanup
# if: always()
# run: |
# # Clean up dangling volumes and images
# docker system prune -af --volumes
# docker image prune -af
# docker volume prune -f
deploy:
needs: cleanup
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: self-hosted
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Create .env file
run: |
{
echo "ALLOWED_HOSTS=${{ secrets.ALLOWED_HOSTS }}"
echo "ANDROID_CLIENT_ID=${{ secrets.ANDROID_CLIENT_ID }}"
echo "DB_HOST=${{ secrets.DB_HOST }}"
echo "DJANGO_SUPERUSER_EMAIL=${{ secrets.DJANGO_SUPERUSER_EMAIL }}"
echo "DJANGO_SUPERUSER_FIRST_NAME=${{ secrets.DJANGO_SUPERUSER_FIRST_NAME }}"
echo "DJANGO_SUPERUSER_LAST_NAME=${{ secrets.DJANGO_SUPERUSER_LAST_NAME }}"
echo "DJANGO_SUPERUSER_PASSWORD=${{ secrets.DJANGO_SUPERUSER_PASSWORD }}"
echo "DJANGO_SUPERUSER_USERNAME=${{ secrets.DJANGO_SUPERUSER_USERNAME }}"
echo "IOS_CLIENT_ID=${{ secrets.IOS_CLIENT_ID }}"
echo "PORT=${{ secrets.PORT }}"
echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}"
echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}"
echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}"
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}"
echo "TEST_POSTGRES_DB=${{ secrets.TEST_POSTGRES_DB }}"
echo "WEB_CLIENT_ID=${{ secrets.WEB_CLIENT_ID }}"
echo "WEB_CLIENT_SECRET=${{ secrets.WEB_CLIENT_SECRET }}"
echo "TWILIO_ACCOUNT_SID=${{ secrets.TWILIO_ACCOUNT_SID }}"
echo "TWILIO_AUTH_TOKEN=${{ secrets.TWILIO_AUTH_TOKEN }}"
echo "TWILIO_PHONE_NUMBER=${{ secrets.TWILIO_PHONE_NUMBER }}"
echo "SUPABASE_URL=${{ secrets.SUPABASE_URL }}"
echo "SUPABASE_ANON_KEY=${{ secrets.SUPABASE_ANON_KEY }}"
echo "USE_SUPABASE_STORAGE=${{ secrets.USE_SUPABASE_STORAGE }}"
echo "EMAIL_HOST=${{ secrets.EMAIL_HOST }}"
echo "EMAIL_HOST_USER=${{ secrets.EMAIL_HOST_USER }}"
echo "EMAIL_HOST_PASSWORD=${{ secrets.EMAIL_HOST_PASSWORD }}"
} > .env
- name: Build and Deploy Docker Image
run: |
docker compose -f _cd_pipeline.yml build
docker compose -f _cd_pipeline.yml down --remove-orphans
docker compose -f _cd_pipeline.yml up --build -d
- name: Post-deployment cleanup
if: always()
run: |
docker system prune -af --volumes
docker image prune -af
docker volume prune -f