name: Build and Run VSTU Schedule Parser 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_schedule_parser_v2:latest . # Шаг 3: Перезапуск контейнера на хост-машине # Это сердце упрощенного workflow - name: Restart the container run: | # 1. Останавливаем и удаляем старый контейнер, если он существует. # `docker ps -q -f name=...` вернет ID контейнера, если он запущен. # Конструкция `[ $(...) ] && ...` проверит, не пустой ли вывод. if [ "$(docker ps -q -f name=vstu_schedule_parser_v2)" ]; then echo "Stopping and removing existing container..." docker stop vstu_schedule_parser_v2 docker rm vstu_schedule_parser_v2 else echo "No running container found. Skipping stop/remove." fi # 2. Запускаем новый контейнер из только что собранного локального образа. # Команда точно такая же, как твоя. echo "Starting new container..." docker run -d \ --network cl2so4 \ --ip 172.20.0.59 \ -v /home/holder/fclay/secrets/vstu_schedule_parser_v2.env:/app/.env \ -v /home/holder/fclay/fclaydata/vstu_schedule_parser_v2/parsed:/app/parsed \ -v /home/holder/fclay/fclaydata/vstu_schedule_parser_v2/parser.json:/app/parser.json \ -v /home/holder/fclay/fclaydata/vstu_schedule_parser_v2/result_v2.json:/app/result_v2.json \ -v /home/holder/fclay/fclaydata/vstu_schedule_parser_v2/facultets.json:/app/facultets.json \ --restart=always \ --name=vstu_schedule_parser_v2 \ vstu_schedule_parser_v2:latest # (Опционально) Шаг 4: Очистка старых, "висячих" образов # Это хорошая практика, чтобы не засорять диск. - name: Clean up old images if: always() # Выполнять этот шаг всегда, даже если предыдущие провалились run: docker image prune -f