Skip to content

deploy

deploy #11

Workflow file for this run

name: Main workflow
on:
push:
branches:
- main
jobs:
tests:
runs-on: ubuntu-latest
services:
rabbitmq:
image: rabbitmq:3.12
env:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports: [ "5672:5672" ]
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run migrations
env:
DJANGO_SETTINGS_MODULE: admin_panel.settings
DJANGO_CONFIGURATION: Test
run: |
python admin_panel/manage.py makemigrations
python admin_panel/manage.py migrate --run-syncdb
- name: Lint
run: |
ruff check .
- name: tests
run: |
pytest admin_panel
build_and_push:
name: Build Docker images and push them to DockerHub
runs-on: ubuntu-latest
needs: tests
strategy:
matrix:
include:
- image_name: valeevilja/admin_panel
dockerfile: admin_panel/Dockerfile
- image_name: valeevilja/edubot
dockerfile: bots/telegram/Dockerfile
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.0.0
- name: Login to Docker Hub
uses: docker/login-action@v3.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ matrix.image_name }}
- name: Build and push
uses: docker/build-push-action@v5
with:
file: ${{ matrix.dockerfile }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
deploy:
name: Deploy to server
runs-on: ubuntu-latest
needs: build_and_push
steps:
- name: Checkout code
uses: actions/checkout@v4.1.1
- name: Copy infra files to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
passphrase: ${{ secrets.SERVER_SSH_PASSPHRASE }}
source: "infra/docker-compose.yml,infra/swag_nginx.conf"
target: ${{ secrets.DEPLOY_PATH }}
overwrite: true
strip_components: 1
- name: Executing remote ssh commands to deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
passphrase: ${{ secrets.SERVER_SSH_PASSPHRASE }}
script: |
cd ${{ secrets.DEPLOY_PATH }}
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" > .env
echo DJANGO_SUPERUSER_USERNAME=${{ secrets.DJANGO_SUPERUSER_USERNAME }} >> .env
echo DJANGO_SUPERUSER_PASSWORD=${{ secrets.DJANGO_SUPERUSER_PASSWORD }} >> .env
echo DJANGO_SUPERUSER_EMAIL=${{ secrets.DJANGO_SUPERUSER_EMAIL }} >> .env
echo DJANGO_CONFIGURATION=${{ secrets.DJANGO_CONFIGURATION }} >> .env
echo GPT_TOKEN=${{ secrets.GPT_TOKEN }} >> .env
echo FOLDER_ID=${{ secrets.FOLDER_ID }} >> .env
echo POSTGRES_USER=${{ secrets.POSTGRES_USER }} >> .env
echo POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} >> .env
echo POSTGRES_DB=${{ secrets.POSTGRES_DB }} >> .env
echo POSTGRES_PORT=${{ secrets.POSTGRES_PORT }} >> .env
echo BOT_TOKEN=${{ secrets.BOT_TOKEN }} >> .env
echo CURATOR_CHAT_ID=${{ secrets.CURATOR_CHAT_ID }} >> .env
echo BASE_WEBHOOK_URL=${{ secrets.BASE_WEBHOOK_URL }} >> .env
echo WEB_SERVER_HOST=${{ secrets.WEB_SERVER_HOST }} >> .env
echo WEB_SERVER_PORT=${{ secrets.WEB_SERVER_PORT }} >> .env
echo WEB_SERVER_URL=${{ secrets.WEB_SERVER_URL }} >> .env
echo ALLOWED_HOSTS=${{ secrets.ALLOWED_HOSTS }} >> .env
echo CSRF_TRUSTED_ORIGINS=${{ secrets.CSRF_TRUSTED_ORIGINS }} >> .env
sudo docker-compose down
sudo docker pull --quiet ${{ secrets.DOCKERHUB_USERNAME }}/admin_panel:main
sudo docker pull --quiet ${{ secrets.DOCKERHUB_USERNAME }}/edubot:main
sudo docker-compose up -d --build
sudo docker-compose exec django python manage.py collectstatic --no-input
sudo docker system prune -af