name: Deploy Production on: push: branches: - main - master workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code run: | git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo || true cd /workspace/repo git fetch origin $GITHUB_REF_NAME git checkout $GITHUB_REF_NAME git pull origin $GITHUB_REF_NAME - name: Build Docker Image run: | cd /workspace/repo docker build -t merchbay_admin:latest . docker save merchbay_admin:latest | gzip > merchbay_admin.tar.gz - name: Setup SSH and Deploy run: | mkdir -p ~/.ssh printf '%s' "$PROD_DEPLOY_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key cd /workspace/repo scp -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key merchbay_admin.tar.gz docker-compose.yml "$PROD_DEPLOY_USER@$PROD_DEPLOY_HOST:/tmp/" ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$PROD_DEPLOY_USER@$PROD_DEPLOY_HOST" " DEPLOY_DIR='/var/www/merchbay_admin' mkdir -p \$DEPLOY_DIR cd /tmp docker load < merchbay_admin.tar.gz cp docker-compose.yml \$DEPLOY_DIR/ cd \$DEPLOY_DIR cat > .env <<'ENVEOF' APP_ENV=production APP_DEBUG=false APP_URL=https://merchbay.com DB_HOST=$PROD_DB_HOST DB_PORT=${PROD_DB_PORT:-3306} DB_DATABASE=$PROD_DB_DATABASE DB_USERNAME=$PROD_DB_USERNAME DB_PASSWORD=$PROD_DB_PASSWORD DOMAIN=merchbay.com ENVEOF docker compose down || true docker image prune -f docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public export DOMAIN=merchbay.com export APP_URL=https://merchbay.com docker compose up -d sleep 10 docker compose exec -T app php artisan migrate --force docker compose exec -T app php artisan config:cache docker compose exec -T app php artisan route:cache docker compose exec -T app php artisan view:cache rm -f /tmp/merchbay_admin.tar.gz /tmp/docker-compose.yml echo 'Production deployment completed successfully!' echo 'Application available at: https://merchbay.com' " env: PROD_DEPLOY_SSH_KEY: ${{ secrets.PROD_DEPLOY_SSH_KEY }} PROD_DEPLOY_USER: ${{ secrets.PROD_DEPLOY_USER }} PROD_DEPLOY_HOST: ${{ secrets.PROD_DEPLOY_HOST }} PROD_DB_HOST: ${{ secrets.PROD_DB_HOST }} PROD_DB_PORT: ${{ secrets.PROD_DB_PORT }} PROD_DB_DATABASE: ${{ secrets.PROD_DB_DATABASE }} PROD_DB_USERNAME: ${{ secrets.PROD_DB_USERNAME }} PROD_DB_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }} - name: Health Check run: | sleep 10 curl -f https://merchbay.com || exit 1