name: Build and Run VSTU Compat Layer v1 on: push: branches: - main jobs: build_and_run: runs-on: ubuntu-latest steps: # Шаг 1: Получаем исходный код проекта - name: Checkout code uses: actions/checkout@v3 # Шаг 2: Сборка Docker-образа локально на хост-машине # Мы не пушим его в registry, а просто создаем с нужным тегом. - name: Build Docker image run: docker build -t vstu_compat_v1:latest . # Шаг 3: Перезапуск контейнера на хост-машине # Это сердце упрощенного workflow - name: Restart the container run: | # 1. Останавливаем и удаляем старый контейнер, если он существует. # `docker ps -q -f name=...` вернет ID контейнера, если он запущен. # Конструкция `[ $(...) ] && ...` проверит, не пустой ли вывод. if [ "$(docker ps -q -f name=vstu_compat_v1)" ]; then echo "Stopping and removing existing container..." docker stop vstu_compat_v1 docker rm vstu_compat_v1 else echo "No running container found. Skipping stop/remove." fi # 2. Запускаем новый контейнер из только что собранного локального образа. # Команда точно такая же, как твоя. echo "Starting new container..." docker run -d \ --network cl2so4 \ --ip 172.20.1.1 \ --restart=always \ -v /home/holder/data_vstu_compat_v1:/app/data \ -v /home/holder/fclay/secrets/vstu_compat_v1.env:/app/.env \ --name vstu_compat_v1 \ vstu_compat_v1:latest # (Опционально) Шаг 4: Очистка старых, "висячих" образов # Это хорошая практика, чтобы не засорять диск. - name: Clean up old images if: always() # Выполнять этот шаг всегда, даже если предыдущие провалились run: docker image prune -f