Skip to content

last commit after review #53

last commit after review

last commit after review #53

Workflow file for this run

on:
push:
branches:
- main
jobs:
backend-tests:
runs-on: ubuntu-latest
strategy:
matrix:
python-major-version: [3]
python-minor-version: [8, 9, 10, 11]
services:
postgres:
image: postgres
env:
python-version: ${{ format('{0}.{1}', matrix.python-major-version, matrix.python-minor-version) }}
POSTGRES_USER: postgres_kittygram_user
POSTGRES_PASSWORD: postgres_kittygram_password
POSTGRES_DB: kittygram
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Python ${{ env.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8==6.0.0 flake8-isort==6.0.0
pip install -r ./backend/requirements.txt
- name: Test with flake8 and django tests
env:
POSTGRES_USER: postgres_kittygram_user
POSTGRES_PASSWORD: postgres_kittygram_password
POSTGRES_DB: kittygram
DB_HOST: postgres
DB_PORT: 5432
SECRET_KEY: supersecurekeyfodjango
DEBUG: False
run: |
python -m flake8 backend/
cd backend/
python manage.py test
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up nodeJS
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install dependencies
run: |
cd frontend/
npm ci
- name: Test frontend
run: |
cd frontend/
npm run test
build_and_push_backend:
name: Build backend and push to DockerHub
runs-on: ubuntu-latest
needs:
- backend-tests
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push
uses: docker/build-push-action@v6
with:
context: ./backend/
push: true
tags: ${{ secrets.DOCKER_USER }}/kittygram_backend:latest
build_and_push_frontend:
name: Build frontend and push to DockerHub
runs-on: ubuntu-latest
needs:
- frontend-tests
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push
uses: docker/build-push-action@v6
with:
context: ./frontend/
push: true
tags: ${{ secrets.DOCKER_USER }}/kittygram_frontend:latest
build_and_push_gateway:
name: Build gateway and push to DockerHub
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push
uses: docker/build-push-action@v6
with:
context: ./nginx/
push: true
tags: ${{ secrets.DOCKER_USER }}/kittygram_gateway:latest
deploy:
name: Deploy Kittygram to YandexCloud VM
runs-on: ubuntu-latest
needs:
- build_and_push_backend
- build_and_push_frontend
- build_and_push_gateway
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Copy docker-compose.production.yml via scp
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSER }}
key: ${{ secrets.SSHKEY }}
source: "docker-compose.production.yml"
target: "~/kittygram"
- name: Executing remote ssh commands to deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSER }}
key: ${{ secrets.SSHKEY }}
script: |
sudo docker system prune -af
cd ~/kittygram
sudo docker-compose -f docker-compose.production.yml pull
sudo docker-compose -f docker-compose.production.yml down
sudo docker-compose -f docker-compose.production.yml up -d
sudo docker-compose -f docker-compose.production.yml exec -T backend python manage.py migrate
sudo docker-compose -f docker-compose.production.yml exec -T backend python manage.py collectstatic --no-input
sudo docker-compose -f docker-compose.production.yml exec -T backend cp -r /app/collected_static/. /backend_static
telegram-notify:
name: "Telegram Notify"
needs: deploy
runs-on: ubuntu-latest
steps:
- name: Notify in Telegram
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_CHAT_ID }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
✅ *Kittygram успешно задеплоен!*
👤 *Автор:* ${{ github.actor }}
📝 *Сообщение коммита:* ${{ github.event.commits[0].message }}
🔗 [Посмотреть коммит](https://github.com/${{ github.repository }}/commit/${{ github.sha }})