name: Deploy Development on: push: branches: - dev workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code run: | #!/bin/sh 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: Setup SSH Key run: | #!/bin/sh mkdir -p ~/.ssh printf '%s' "$DEPLOY_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key env: DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - name: Transfer Files to Development Server run: | #!/bin/sh cd /workspace/repo scp -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key merchbay_admin_dev.tar.gz docker-compose.yml "$DEPLOY_USER@$DEPLOY_HOST:/tmp/" env: DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - name: Deploy to Development Server run: | #!/bin/sh ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" << 'ENDSSH' #!/bin/sh env: DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEV_DB_HOST: ${{ secrets.DEV_DB_HOST }} DEV_DB_PORT: ${{ secrets.DEV_DB_PORT }} DEV_DB_DATABASE: ${{ secrets.DEV_DB_DATABASE }} DEV_DB_USERNAME: ${{ secrets.DEV_DB_USERNAME }} DEV_DB_PASSWORD: ${{ secrets.DEV_DB_PASSWORD }} # Set deployment directory for dev DEPLOY_DIR="/var/www/merchbay_admin_dev" # Create deployment directory if it doesn't exist mkdir -p $DEPLOY_DIR # Load the Docker image cd /tmp docker load < merchbay_admin_dev.tar.gz # Copy docker-compose.yml to deployment directory cp docker-compose.yml $DEPLOY_DIR/ # Navigate to deployment directory cd $DEPLOY_DIR # Update environment file for dev cat > .env << EOF APP_ENV=staging APP_DEBUG=false APP_URL=https://dev.merchbay.app DB_HOST=${{ secrets.DEV_DB_HOST }} DB_PORT=${{ secrets.DEV_DB_PORT || 3306 }} DB_DATABASE=${{ secrets.DEV_DB_DATABASE }} DB_USERNAME=${{ secrets.DEV_DB_USERNAME }} DB_PASSWORD=${{ secrets.DEV_DB_PASSWORD }} DOMAIN=dev.merchbay.app EOF # Stop existing container docker compose down || true # Remove old image docker image prune -f # Ensure Traefik network exists docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public # Update docker-compose for dev export DOMAIN=dev.merchbay.app export APP_URL=https://dev.merchbay.app # Start the application docker compose up -d # Wait for container to be ready sleep 10 # Run migrations docker compose exec -T app php artisan migrate --force # Clear and cache configuration 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 # Cleanup rm -f /tmp/merchbay_admin_dev.tar.gz /tmp/docker-compose.yml echo "Development deployment completed successfully!" echo "Application available at: https://dev.merchbay.app" ENDSSH - name: Health Check run: | #!/bin/sh sleep 10 curl -f https://dev.merchbay.app || exit 1