Skip to content

Commit

Permalink
Merge pull request #835 from hngprojects/devops
Browse files Browse the repository at this point in the history
Devops
  • Loading branch information
DrInTech22 authored Aug 9, 2024
2 parents fb8283c + 9c658f2 commit 3eb3b67
Show file tree
Hide file tree
Showing 13 changed files with 394 additions and 56 deletions.
41 changes: 23 additions & 18 deletions .github/workflows/cd.dev.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
name: Dev Branch Deployment

name: Dev cd pipeline
on:
workflow_run:
workflows: ["CI"]
types:
- completed
push:
branches: [dev]

jobs:
on-success:
build-and-deploy:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
- name: Build image
run: docker build -t anchor-python-bp-dev:latest -f Dockerfile .

- name: Save image
run: docker save anchor-python-bp-dev:latest | gzip > dev.tar.gz

- name: Copy image to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
source: "dev.tar.gz"
target: "/home/${{ secrets.USERNAME }}/boilerplate-python/dev_source_code"

- name: Deploy image on server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/dev_source_code/
cd /home/${{ secrets.USERNAME }}/boilerplate-python/dev_source_code
git pull origin dev
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
docker load --input dev.tar.gz
docker-compose -f docker-compose.yml up -d
rm -f dev.tar.gz
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
35 changes: 35 additions & 0 deletions .github/workflows/cd.dev.yml.bac
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Dev Branch Deployment

on:
workflow_run:
workflows: ["CI"]
types:
- completed
branches: [dev]

jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/dev_source_code/
git pull origin dev
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head

on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
42 changes: 23 additions & 19 deletions .github/workflows/cd.prod.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,39 @@
name: Prod Branch Deployment

name: Prod cd pipeline
on:
workflow_run:
workflows: ["CI"]
types:
- completed
push:
branches: [main]

jobs:
on-success:
build-and-deploy:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
- name: Build image
run: docker build -t anchor-python-bp-prod:latest -f Dockerfile .

- name: Save image
run: docker save anchor-python-bp-prod:latest | gzip > prod.tar.gz

- name: Copy image to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
source: "prod.tar.gz"
target: "/home/${{ secrets.USERNAME }}/boilerplate-python/prod_source_code"

- name: Deploy image on server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/prod_source_code/
cd /home/${{ secrets.USERNAME }}/boilerplate-python/prod_source_code
git pull origin main
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
docker load --input prod.tar.gz
docker-compose -f docker-compose.prod.yml up -d
rm -f prod.tar.gz
35 changes: 35 additions & 0 deletions .github/workflows/cd.prod.yml.bac
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Prod Branch Deployment

on:
workflow_run:
workflows: ["CI"]
types:
- completed
branches: [main]

jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/prod_source_code/
git pull origin main
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head

on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
42 changes: 23 additions & 19 deletions .github/workflows/cd.staging.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,39 @@
name: Staging Branch Deployment

name: Staging cd pipeline
on:
workflow_run:
workflows: ["CI"]
types:
- completed
push:
branches: [staging]

jobs:
on-success:
build-and-deploy:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
- name: Build image
run: docker build -t anchor-python-bp-staging:latest -f Dockerfile .

- name: Save image
run: docker save anchor-python-bp-staging:latest | gzip > staging.tar.gz

- name: Copy image to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
source: "staging.tar.gz"
target: "/home/${{ secrets.USERNAME }}/boilerplate-python/staging_source_code"

- name: Deploy image on server
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/staging_source_code/
cd /home/${{ secrets.USERNAME }}/boilerplate-python/staging_source_code
git pull origin staging
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
docker load --input staging.tar.gz
docker-compose -f docker-compose.staging.yml up -d
rm -f staging.tar.gz
35 changes: 35 additions & 0 deletions .github/workflows/cd.staging.yml.bac
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Staging Branch Deployment

on:
workflow_run:
workflows: ["CI"]
types:
- completed
branches: [staging]

jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Use SSH Action
uses: appleboy/[email protected]
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
script: |
cd python/staging_source_code/
git pull origin staging
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head

on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
File renamed without changes.
34 changes: 34 additions & 0 deletions .github/workflows/pr-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: PR Deploy
on:
pull_request:
types: [opened, synchronize, reopened, closed]
paths-ignore:
- "README.md"
- ".github/workflows/**"

jobs:
deploy-pr:
environment:
name: preview
url: ${{ steps.deploy.outputs.preview-url }}
runs-on: ubuntu-latest
steps:
- name: Checkout to branch
uses: actions/checkout@v4
- name: Copy .env.sample to .env
run: cp .env.sample .env
- id: deploy
name: Pull Request Deploy
uses: hngprojects/pr-deploy@dev
with:
server_host: ${{ secrets.HOST }}
server_username: ${{ secrets.USERNAME }}
server_password: ${{ secrets.PASSWORD }}
comment: true
context: '.'
dockerfile: 'Dockerfile'
exposed_port: '7001'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Print Preview Url
run: |
echo "Preview Url: ${{ steps.deploy.outputs.preview-url }}"
53 changes: 53 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Test
on:
pull_request:
types: [opened, synchronize, reopened, closed]
paths-ignore:
- "README.md"
- ".github/workflows/**"

jobs:
test:
runs-on: ubuntu-latest

services:
postgres:
image: postgres:latest
env:
POSTGRES_USER: "username"
POSTGRES_PASSWORD: "password"
POSTGRES_DB: "test"
ports:
- 5432:5432

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"

- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
run: |
pip install -r requirements.txt
- name: Copy env file
run: cp .env.sample .env

- name: Run migrations
run: |
alembic upgrade head
- name: Run tests
run: |
PYTHONPATH=. pytest
Loading

0 comments on commit 3eb3b67

Please sign in to comment.