Skip to content

Commit

Permalink
Merge pull request #12 from DostEducation/feature/10-continuous-deplo…
Browse files Browse the repository at this point in the history
…yment-for-gen2-function

Feature/10 continuous deployment for gen2 function
  • Loading branch information
Sachinbisht27 authored Apr 24, 2024
2 parents 6ae3886 + 64c44ef commit 92d462d
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 27 deletions.
132 changes: 132 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: build-and-deployment

on:
push:
branches:
- develop
- main

jobs:
deploy-staging:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/develop'
steps:
- uses: 'actions/checkout@v4'
- id: 'auth'
name: 'Authenticate to Google Cloud'
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

- name: Debug GCP credentials
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
run: |
echo "$GOOGLE_APPLICATION_CREDENTIALS" > credentials.json
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v2'
with:
version: '>= 363.0.0'
- name: 'Use gcloud CLI'
run: 'gcloud info'
- name: Install Python dependencies
run: |
pip install -r requirements.txt
- name: Set up Cloud SQL Proxy
run: |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
- name: Start Cloud SQL Proxy
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
run: |
echo "$GOOGLE_APPLICATION_CREDENTIALS" > credentials.json
./cloud_sql_proxy -instances=${{ secrets.CONNECTION_NAME_GITHUB_ACTION }}=tcp:5432 -credential_file=credentials.json &
- name: Run Flask Migration
env:
SQLALCHEMY_DATABASE_URI: ${{ secrets.SQLALCHEMY_DATABASE_URI }}
FLASK_APP: ${{ secrets.FLASK_APP }}
FLASK_ENV: ${{ secrets.FLASK_APP_STAGING }}
run: |
flask db upgrade
- name: Stop Cloud SQL Proxy
run: |
pkill cloud_sql_proxy
- name: 'Deploying stging whatsapp webhook analytics function'
run: |
gcloud functions deploy whatsapp-webhook-analytics-staging \
--gen2 \
--runtime=python312 \
--region=asia-south1 \
--trigger-http \
--entry-point=handle_payload \
--memory=256MB \
--timeout=30s \
--set-env-vars=FLASK_APP=${{ secrets.FLASK_APP_STAGING }},LOGGING_LEVEL=${{ secrets.LOGGING_LEVEL }},SQLALCHEMY_DATABASE_URI=${{ secrets.SQLALCHEMY_DATABASE_URI_STAGING }}
deploy-production:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: 'actions/checkout@v4'
- id: 'auth'
name: 'Authenticate to Google Cloud'
uses: 'google-github-actions/auth@v2'
with:
credentials_json: '${{ secrets.GCP_CREDENTIALS }}'

- name: Debug GCP credentials
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
run: |
echo "$GOOGLE_APPLICATION_CREDENTIALS" > credentials.json
- name: 'Set up Cloud SDK'
uses: 'google-github-actions/setup-gcloud@v2'
with:
version: '>= 363.0.0'
- name: 'Use gcloud CLI'
run: 'gcloud info'
- name: Install Python dependencies
run: |
pip install -r requirements.txt
- name: Set up Cloud SQL Proxy
run: |
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy
- name: Start Cloud SQL Proxy
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }}
run: |
echo "$GOOGLE_APPLICATION_CREDENTIALS" > credentials.json
./cloud_sql_proxy -instances=${{ secrets.CONNECTION_NAME_GITHUB_ACTION_PROD }}=tcp:5432 -credential_file=credentials.json &
- name: Run Flask Migration
env:
SQLALCHEMY_DATABASE_URI: ${{ secrets.SQLALCHEMY_DATABASE_URI_PROD }}
FLASK_APP: ${{ secrets.FLASK_APP }}
FLASK_ENV: ${{ secrets.FLASK_APP_PROD }}
run: |
flask db upgrade
- name: Stop Cloud SQL Proxy
run: |
pkill cloud_sql_proxy
- name: 'Deploying production whatsapp webhook analytics function'
run: |
gcloud functions deploy whatsapp-webhook-analytics-prod \
--gen2 \
--runtime=python312 \
--region=asia-south1 \
--trigger-http \
--entry-point=handle_payload \
--memory=256MB \
--timeout=30s \
--set-env-vars=FLASK_APP=${{ secrets.FLASK_APP_PROD }},LOGGING_LEVEL=${{ secrets.LOGGING_LEVEL }},SQLALCHEMY_DATABASE_URI=${{ secrets.SQLALCHEMY_DATABASE_URI_PRODUCTION }}
28 changes: 1 addition & 27 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,6 @@

FLASK_APP = os.environ.get("FLASK_APP", "development")

if FLASK_APP == "development":
from dotenv import load_dotenv

load_dotenv()


# Database configuration
POSTGRES = {
"user": os.environ.get("DB_USER"),
"password": os.environ.get("DB_PASSWORD"),
"database": os.environ.get("DB_NAME"),
"host": os.environ.get("DB_HOST"),
"port": os.environ.get("DB_PORT"),
"conn_str": os.environ.get("CONNECTION_NAME"),
}

SQLALCHEMY_DATABASE_URI = (
"postgresql://%(user)s:%(password)s@%(host)s:%(port)s/%(database)s"
% POSTGRES
)

# For socket based connection
if FLASK_APP in ("production", "staging"):
SQLALCHEMY_DATABASE_URI = (
"postgresql://%(user)s:%(password)s@/%(database)s?host=%(conn_str)s/"
% POSTGRES
)
SQLALCHEMY_DATABASE_URI = os.environ.get("SQLALCHEMY_DATABASE_URI", None)

LOGGING_LEVEL = os.environ.get("LOGGING_LEVEL", "DEBUG")

0 comments on commit 92d462d

Please sign in to comment.