104 lines
4.0 KiB
YAML
104 lines
4.0 KiB
YAML
name: Deploy XFlow (AVTEX/Projects)
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: node:22-alpine
|
|
defaults:
|
|
run:
|
|
shell: sh
|
|
|
|
steps:
|
|
- name: Checkout
|
|
env:
|
|
GIT_TOKEN: ${{ secrets.GIT_TOKEN }}
|
|
run: |
|
|
apk add --no-cache git
|
|
if [ ! -d ".git" ]; then
|
|
git init
|
|
git remote add origin "http://oauth2:${GIT_TOKEN}@git.a-crm.controlsystem.kz/AVTEX/XFlow.git"
|
|
fi
|
|
git fetch origin master
|
|
git reset --hard origin/master
|
|
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
npm install --include=dev
|
|
ls -la node_modules/prisma || echo "Prisma not found in node_modules"
|
|
|
|
- name: Build Nuxt
|
|
run: |
|
|
npx prisma generate
|
|
npm run build
|
|
mkdir -p .output/server/node_modules/@prisma
|
|
cp -r node_modules/.prisma .output/server/node_modules/
|
|
cp -r node_modules/@prisma/* .output/server/node_modules/@prisma/
|
|
cp -r node_modules/pg .output/server/node_modules/
|
|
env:
|
|
DATABASE_URL: "postgresql://admin:dummy@dummy:5432/dummy" # Нужна заглушка для билда призмы
|
|
NUXT_PUBLIC_FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }}
|
|
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN: ${{ secrets.FIREBASE_AUTH_DOMAIN }}
|
|
NUXT_PUBLIC_FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
|
|
NUXT_PUBLIC_FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
|
|
NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}
|
|
|
|
- name: Deploy to server
|
|
run: |
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
if command -v apk >/dev/null 2>&1; then
|
|
apk add --no-cache docker-cli
|
|
elif command -v apt-get >/dev/null 2>&1; then
|
|
apt-get update && apt-get install -y docker.io
|
|
else
|
|
echo "Docker not found and no package manager detected"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "🌉 Создаем мост к серверу через временный контейнер..."
|
|
docker stop bridge 2>/dev/null || true
|
|
docker rm bridge 2>/dev/null || true
|
|
docker run -d --name bridge -v /root/projects:/server alpine sleep 300
|
|
|
|
echo "🧹 Очистка старых файлов на сервере..."
|
|
docker exec bridge sh -c "rm -rf /server/xflow/.output/*"
|
|
docker exec bridge sh -c "rm -rf /server/xflow/prisma/*"
|
|
|
|
echo "🚀 Копирование билда и файлов на сервер..."
|
|
docker exec bridge mkdir -p /server/xflow/.output
|
|
docker exec bridge mkdir -p /server/xflow/prisma
|
|
docker exec bridge mkdir -p /server/xflow/node_modules
|
|
|
|
docker cp .output/. bridge:/server/xflow/.output/
|
|
docker cp prisma/. bridge:/server/xflow/prisma/
|
|
docker cp node_modules/. bridge:/server/xflow/node_modules/
|
|
docker cp package.json bridge:/server/xflow/package.json
|
|
docker cp prisma.config.ts bridge:/server/xflow/prisma.config.ts
|
|
|
|
docker rm -f bridge
|
|
|
|
echo "🔄 Перезапуск приложения через единый docker-compose.yml на хосте..."
|
|
docker run --rm \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v /root/projects:/root/projects \
|
|
-w /root/projects \
|
|
docker:cli \
|
|
sh -c "docker compose stop xflow_crm 2>/dev/null || true; docker compose rm -f xflow_crm 2>/dev/null || true; docker compose up -d --force-recreate --no-deps xflow_crm"
|
|
|
|
echo "⏳ Waiting for container to start..."
|
|
sleep 5
|
|
|
|
# Миграции с использованием новой БД xflow_crm_db
|
|
docker exec xflow_crm npx prisma migrate deploy
|
|
docker exec xflow_crm npx prisma db seed
|
|
echo "✅ XFlow CRM deployed at $(date)"
|
|
|