Skip to content

Commit 75555d5

Browse files
authored
Merge pull request #631 from PROCOLLAB-github/dev
Dev
2 parents 3d599e7 + d3aa132 commit 75555d5

38 files changed

Lines changed: 845 additions & 983 deletions

.github/pull_request_template.md

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1-
# Краткое название
1+
# Что изменено
22

3-
## Описание изменений
3+
Кратко опишите изменения и при необходимости приложите ссылку на задачу.
44

5-
_Опишите изменения, которые вы внесли в код. Не забывайте указывать номер задачи или ссылку на тикет._
5+
## Проверка
66

7+
Укажите, как проверялись изменения.
78

8-
## Тестирование
9+
- автоматические проверки
10+
- ручная проверка
11+
- шаги для воспроизведения
12+
- ожидаемый результат
913

10-
_Опишите, как тестировали свои изменения. Например, какие тесты проходят, а какие нет._
14+
## Риски и ограничения
1115

12-
## Проверка кода
16+
Укажите важные ограничения и возможные побочные эффекты.
1317

14-
_Опишите, как проверить ваш код._
15-
16-
## Дополнительная информация
17-
18-
_Здесь вы можете добавить какую-либо дополнительную информацию о своих изменениях._
18+
- миграции, изменения переменных окружения, feature flags
19+
- замечания по деплою
20+
- места, которые требуют повышенного внимания
Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
1-
name: Django CI
1+
name: CI
22

33
on:
44
push:
55
branches:
6-
- '**'
6+
- "**"
77

88
jobs:
9-
django-test:
9+
lint:
10+
name: Lint
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
15+
- name: Set up Python 3.11
16+
uses: actions/setup-python@v4
17+
with:
18+
python-version: 3.11
19+
20+
- name: Install lint dependencies
21+
run: |
22+
python -m pip install --upgrade pip
23+
pip install flake8
24+
25+
- name: Run flake8
26+
run: flake8 $(git ls-files '*.py')
27+
28+
test:
29+
name: Tests
1030
runs-on: ubuntu-latest
1131
steps:
1232
- uses: actions/checkout@v3
@@ -45,4 +65,4 @@ jobs:
4565
env:
4666
DEBUG: True
4767
DJANGO_SETTINGS_MODULE: procollab.settings
48-
PYTHONUNBUFFERED: 1
68+
PYTHONUNBUFFERED: 1

.github/workflows/dev-ci.yml

Lines changed: 93 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: 'Deploy dev server'
1+
name: Deploy Dev
22

33
on:
44
push:
@@ -8,44 +8,103 @@ on:
88

99
jobs:
1010
deploy:
11+
name: Deploy
1112
runs-on: ubuntu-latest
1213
steps:
13-
- name: run on server
14+
- name: Deploy to server
1415
uses: garygrossgarten/github-action-ssh@release
1516
with:
1617
host: ${{ secrets.DEV_SERVER_HOST }}
1718
username: ${{ secrets.DEV_SERVER_USER }}
1819
password: ${{ secrets.DEV_SERVER_PASSWORD }}
1920
command: |
20-
cd /root/api &&
21-
git checkout dev &&
22-
git pull &&
23-
24-
rm -f .env &&
25-
touch .env &&
26-
27-
echo "DJANGO_SECRET_KEY=${{ secrets.DEV_DJANGO_SECRET_KEY }}" >> .env &&
28-
29-
echo "DATABASE_NAME=${{ secrets.DEV_DATABASE_NAME }}" >> .env &&
30-
echo "DATABASE_PASSWORD=${{ secrets.DEV_DATABASE_PASSWORD }}" >> .env &&
31-
echo "DATABASE_USER=${{ secrets.DEV_DATABASE_USER }}" >> .env &&
32-
echo "DATABASE_HOST=${{ secrets.DEV_DATABASE_HOST }}" >> .env &&
33-
echo "DATABASE_PORT=${{ secrets.DEV_DATABASE_PORT }}" >> .env &&
34-
35-
echo "EMAIL_USER=${{ secrets.EMAIL_USER }}" >> .env &&
36-
echo "EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}" >> .env &&
37-
echo "EMAIL_HOST=${{ secrets.EMAIL_HOST }}" >> .env &&
38-
echo "EMAIL_PORT=${{ secrets.EMAIL_PORT }}" >> .env &&
39-
echo "SELECTEL_ACCOUNT_ID=${{ secrets.SELECTEL_ACCOUNT_ID }}" >> .env &&
40-
echo "SELECTEL_CONTAINER_NAME=${{ secrets.SELECTEL_CONTAINER_NAME }}" >> .env &&
41-
echo "SELECTEL_CONTAINER_PASSWORD=${{ secrets.SELECTEL_CONTAINER_PASSWORD }}" >> .env &&
42-
echo "SELECTEL_CONTAINER_USERNAME=${{ secrets.SELECTEL_CONTAINER_USERNAME }}" >> .env &&
43-
44-
echo "CLICKUP_API_TOKEN=${{ secrets.CLICKUP_API_TOKEN }}" >> .env &&
45-
echo "CLICKUP_SPACE_ID=${{ secrets.CLICKUP_SPACE_ID }}" >> .env &&
46-
47-
echo "SENTRY_DSN=${{ secrets.SENTRY_DSN }}" >> .env &&
48-
49-
echo "UNISENDER_GO_API_KEY=${{ secrets.UNISENDER_GO_API_KEY }}" >> .env &&
50-
51-
docker compose -f docker-compose.dev-ci.yml up -d --build --force-recreate
21+
set -eu
22+
23+
cd /root/api
24+
git fetch --all --tags --prune
25+
git branch -r --contains "${{ github.sha }}" | grep -q 'origin/dev'
26+
git checkout --detach "${{ github.sha }}"
27+
git rev-parse HEAD
28+
29+
export IMAGE_TAG="${{ github.sha }}"
30+
31+
rm -f .env
32+
touch .env
33+
34+
echo "DJANGO_SECRET_KEY=${{ secrets.DEV_DJANGO_SECRET_KEY }}" >> .env
35+
36+
echo "DATABASE_NAME=${{ secrets.DEV_DATABASE_NAME }}" >> .env
37+
echo "DATABASE_PASSWORD=${{ secrets.DEV_DATABASE_PASSWORD }}" >> .env
38+
echo "DATABASE_USER=${{ secrets.DEV_DATABASE_USER }}" >> .env
39+
echo "DATABASE_HOST=${{ secrets.DEV_DATABASE_HOST }}" >> .env
40+
echo "DATABASE_PORT=${{ secrets.DEV_DATABASE_PORT }}" >> .env
41+
42+
echo "SELECTEL_ACCOUNT_ID=${{ secrets.SELECTEL_ACCOUNT_ID }}" >> .env
43+
echo "SELECTEL_CONTAINER_NAME=${{ secrets.SELECTEL_CONTAINER_NAME }}" >> .env
44+
echo "SELECTEL_CONTAINER_PASSWORD=${{ secrets.SELECTEL_CONTAINER_PASSWORD }}" >> .env
45+
echo "SELECTEL_CONTAINER_USERNAME=${{ secrets.SELECTEL_CONTAINER_USERNAME }}" >> .env
46+
47+
echo "EMAIL_USER=${{ secrets.EMAIL_USER }}" >> .env
48+
echo "UNISENDER_GO_API_KEY=${{ secrets.UNISENDER_GO_API_KEY }}" >> .env
49+
50+
chmod 600 .env
51+
52+
docker compose -f docker-compose.dev-ci.yml config >/dev/null
53+
docker compose -f docker-compose.dev-ci.yml build web &&
54+
docker compose -f docker-compose.dev-ci.yml run --rm web python manage.py migrate &&
55+
docker compose -f docker-compose.dev-ci.yml up -d --force-recreate --remove-orphans &&
56+
57+
install -d /etc/nginx/procollab/includes &&
58+
install -m 644 deploy/nginx/host/includes/proxy_app.inc /etc/nginx/procollab/includes/proxy_app.inc &&
59+
install -m 644 deploy/nginx/host/dev/dev.procollab.ru /etc/nginx/sites-available/dev.procollab.ru &&
60+
ln -sfn /etc/nginx/sites-available/dev.procollab.ru /etc/nginx/sites-enabled/dev.procollab.ru &&
61+
if [ "$(id -u)" -eq 0 ]; then
62+
nginx -t &&
63+
systemctl reload nginx
64+
else
65+
sudo nginx -t &&
66+
sudo systemctl reload nginx
67+
fi &&
68+
69+
for attempt in $(seq 1 24); do
70+
root_status="$(curl -s -o /dev/null -w '%{http_code}' https://dev.procollab.ru/ || true)" &&
71+
admin_status="$(curl -s -o /dev/null -w '%{http_code}' https://dev.procollab.ru/admin/login/ || true)" &&
72+
73+
if [ "$root_status" = "401" ] && [ "$admin_status" = "200" ]; then
74+
echo "Smoke check passed on attempt ${attempt}" &&
75+
break
76+
fi
77+
78+
sleep 5
79+
done &&
80+
81+
if [ "$root_status" != "401" ] || [ "$admin_status" != "200" ]; then
82+
echo "Smoke check failed: /=${root_status} /admin/login/=${admin_status}" >&2 &&
83+
exit 1
84+
fi &&
85+
86+
celery_status="" &&
87+
celery_ping="" &&
88+
for attempt in $(seq 1 24); do
89+
celery_status="$(docker inspect -f '{{.State.Status}}' api_celery 2>/dev/null || true)" &&
90+
if [ "$celery_status" = "running" ]; then
91+
celery_ping="$(docker compose -f docker-compose.dev-ci.yml exec -T celerys sh -lc 'celery -A procollab inspect ping --timeout=10' 2>&1 || true)" &&
92+
printf '%s\n' "$celery_ping" &&
93+
if printf '%s\n' "$celery_ping" | grep -q 'pong'; then
94+
echo "Celery check passed on attempt ${attempt}" &&
95+
break
96+
fi
97+
fi &&
98+
99+
sleep 5
100+
done &&
101+
102+
if [ "$celery_status" != "running" ]; then
103+
echo "Celery container is not running: ${celery_status}" >&2 &&
104+
exit 1
105+
fi &&
106+
107+
printf '%s\n' "$celery_ping" | grep -q 'pong' || {
108+
echo "Celery ping failed" >&2
109+
exit 1
110+
}

.github/workflows/lints.yml

Lines changed: 0 additions & 29 deletions
This file was deleted.

.github/workflows/new_deploy.yml

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)