name: Deploy Development on: push: branches: - dev workflow_dispatch: inputs: skip_health_check: description: 'Skip health check?' required: false default: 'false' run_migrations: description: 'Run database migrations?' required: false default: 'true' jobs: deploy: runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest steps: - name: Checkout code shell: sh 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 shell: sh run: | cd /workspace/repo docker build -t merchbay_admin:dev . docker save merchbay_admin:dev | gzip > merchbay_admin_dev.tar.gz - name: Setup SSH and Deploy shell: sh run: | mkdir -p ~/.ssh printf '%s' "$DEPLOY_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key cd /workspace/repo scp -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key merchbay_admin_dev.tar.gz docker-compose.yml "$DEPLOY_USER@$DEPLOY_HOST:/tmp/" ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" " DEPLOY_DIR='/var/www/merchbay_admin_dev' mkdir -p \$DEPLOY_DIR cd /tmp docker load < merchbay_admin_dev.tar.gz cp docker-compose.yml \$DEPLOY_DIR/ cd \$DEPLOY_DIR # .env file should already exist on server with all secrets # If it doesn't exist, deployment will fail (this is intentional for security) docker compose down || true docker image prune -f docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public export DOMAIN=dev.merchbay.app export APP_URL=https://dev.merchbay.app 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_dev.tar.gz /tmp/docker-compose.yml echo 'Development deployment completed successfully!' echo 'Application available at: https://dev.merchbay.app' " env: DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - name: Health Check shell: sh run: | sleep 10 curl -f https://dev.merchbay.app || exit 1