-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (123 loc) · 4.69 KB
/
deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
- name: Set up Python
uses: actions/setup-python@v5
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
- name: Login to Docker Hub
uses: docker/login-action@v3
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:
platforms: linux/amd64
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
- name: Copy infra files to server
uses: appleboy/scp-action@v0.1.7
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 ${{ secrets.DOCKERHUB_USERNAME }}/admin_panel
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/edubot
sudo docker-compose up -d --build
sudo docker-compose exec django python manage.py collectstatic --no-input
sudo docker system prune -af