name: deploy on: push: branches: - main jobs: qa: name: QA gates runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Create .env for CI run: cp .env.example .env - name: Install Composer dependencies run: | curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader - name: Start project services run: | docker compose down --remove-orphans 2>/dev/null || true docker compose up -d --force-recreate php db memcached sleep 10 - name: Run required QA gates run: bin/qa-required.sh build-and-deploy: name: Build & deploy runs-on: ubuntu-latest needs: qa steps: - name: Checkout uses: actions/checkout@v4 - name: Build production image run: | docker build \ --target prod \ -f docker/php/Dockerfile \ -t breadcrumb-the-shire:latest \ . - name: Export image to tar.gz run: docker save breadcrumb-the-shire:latest | gzip > breadcrumb-the-shire.tar.gz - name: Copy image to server uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} source: breadcrumb-the-shire.tar.gz target: /root/dockerfiles-breadcrumb-infra/projects/ - name: Copy updated deploy files to server uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} source: "deploy/docker-compose.yml,deploy/nginx/" target: /root/dockerfiles-breadcrumb-infra/projects/ strip_components: 1 - name: Deploy on server uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.DEPLOY_HOST }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} script: | set -e cd /root/dockerfiles-breadcrumb-infra/projects echo "=== Load image ===" docker load < breadcrumb-the-shire.tar.gz rm breadcrumb-the-shire.tar.gz echo "=== Restart containers ===" docker compose up -d --remove-orphans echo "=== Wait for PHP container ===" sleep 5 echo "=== Run module sync ===" docker compose exec -T php php bin/console module:sync echo "=== Done ==="