Compare commits

..

1 Commits

Author SHA1 Message Date
forust fcc7b0d611 ci(deploy): gate redeploy behind manual workflow_dispatch
ci / lint-prettier (push) Successful in 8s
ci / lint-ruff (push) Successful in 4s
ci / lint-yaml (push) Successful in 7s
ci / lint-dockerfiles (push) Successful in 4s
ci / validate (push) Successful in 5s
ci / build (push) Successful in 2s
ci / deploy-userbot-panel (push) Has been skipped
removes automatic redeploy on push to main; deploy now runs only on
explicit manual trigger
2026-09-06 20:55:40 +02:00
8 changed files with 150 additions and 498 deletions
-3
View File
@@ -1,9 +1,6 @@
name: deploy
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
-3
View File
@@ -1,9 +1,6 @@
name: deploy
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
-1
View File
@@ -9,6 +9,5 @@ WEBINAR_CHECK_INTERVAL=60
REDIS_HOST=redis
REDIS_PORT=6379
PLAYWRIGHT_WS=ws://playwright-service:3000/ws
TZ=Europe/Kyiv
WEBINAR_TELEGRAM_TOKEN=your_telegram_bot_token_here
WEBINAR_ADMIN_ID=123456789
View File
+6 -6
View File
@@ -1,17 +1,17 @@
# One-time Job to migrate redis state from docker compose to k8s (maintenance window).
# The .example file is not applied by the deploy pipeline (mask *.example.yaml).
# Разовый Job для переноса состояния redis из docker compose в k8s (maintenance window).
# Файл .example -> deploy-пайплайн его не применяет (маска *.example.yaml).
#
# Runbook:
# 1. docker compose -f <repo>/edu_master/compose.yaml stop # SIGTERM -> redis will flush dump.rdb
# 1. docker compose -f <repo>/edu_master/compose.yaml stop # SIGTERM -> redis сбросит dump.rdb
# 2. docker run --rm -v edu_master_redis-data:/data \
# -v /tmp/edu-master-backup:/backup \
# redis:alpine sh -c "cp /data/dump.rdb /backup/ && ls -la /backup"
# 3. kubectl apply -f edu_master/k8s/namespace.yaml
# 4. kubectl apply -f <only the PVC from redis.yaml> # seed must come BEFORE redis pod starts
# 4. kubectl apply -f <только PVC из redis.yaml> # seed строго ДО старта redis-пода
# 5. kubectl apply -f edu_master/k8s/restore-seed-job.yaml.example
# kubectl wait --for=condition=complete job/redis-restore-seed -n edu-master --timeout=120s
# 6. kubectl delete job redis-restore-seed -n edu-master
# 7. kubectl apply -f edu_master/k8s/ -R # apply remaining manifests
# 7. kubectl apply -f edu_master/k8s/ -R # остальные манифесты
apiVersion: batch/v1
kind: Job
metadata:
@@ -47,4 +47,4 @@ spec:
- name: backup
hostPath:
path: /tmp/edu-master-backup
type: DirectoryOrCreate
type: DirectoryOrCreate
+2 -3
View File
@@ -5,7 +5,7 @@ metadata:
namespace: edu-master
type: Opaque
stringData:
# Session keeper credentials
# PHPSESSID keeper
KEEPER_LOGIN: ""
KEEPER_PASSWORD: ""
KEEPER_INTERVAL: "10"
@@ -23,5 +23,4 @@ stringData:
WEBINAR_CHECK_INTERVAL: "60"
# Database
REDIS_HOST: "redis"
REDIS_PORT: "6379"
TZ: "Europe/Kyiv"
REDIS_PORT: "6379"
+2 -5
View File
@@ -15,9 +15,9 @@ spec:
labels:
app: edu-master-webinar-checker
spec:
# Enforces dependency order like compose depends_on:
# redis healthy -> session-keeper healthy (EXISTS EDU_PHPSESSID) -> playwright started
initContainers:
# Держит порядок зависимостей как в compose depends_on:
# redis healthy -> session-keeper healthy (EXISTS EDU_PHPSESSID) -> playwright started
- name: wait-deps
image: redis:alpine
command:
@@ -50,9 +50,6 @@ spec:
envFrom:
- secretRef:
name: edu-master-secrets
env:
- name: TZ
value: "Europe/Kyiv"
resources:
requests:
cpu: 25m
File diff suppressed because it is too large Load Diff