name: Deploy on: push: branches: - dev - develop workflow_dispatch: jobs: deploy-dev: if: ${{ github.event_name == 'push' }} runs-on: ubuntu-latest container: volumes: - /docker/FlockPal-dev:/docker/FlockPal-dev steps: - name: Update dev checkout run: | set -e cd /docker/FlockPal-dev git fetch --all --prune git reset --hard "origin/${{ github.ref_name }}" git clean -fd - name: Validate backend run: | set -e cd /docker/FlockPal-dev docker run --rm -v "$PWD/backend:/src:ro" -w /tmp/app node:22-alpine sh -lc "cp -a /src/. /tmp/app && npm ci && npm run build && npm test" - name: Validate frontend run: | set -e cd /docker/FlockPal-dev docker run --rm -v "$PWD/frontend:/src:ro" -w /tmp/app node:22-alpine sh -lc "cp -a /src/. /tmp/app && npm ci && npm run build" - name: Validate dev compose config run: | set -e cd /docker/FlockPal-dev docker compose -f docker-compose.dev.yaml config --quiet - name: Deploy dev run: | set -e cd /docker/FlockPal-dev docker compose -f docker-compose.dev.yaml up -d --build - name: Notify Discord if: always() env: DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} JOB_STATUS: ${{ job.status }} run: | if [ -z "$DISCORD_WEBHOOK_URL" ]; then echo "DISCORD_WEBHOOK_URL is not configured; skipping Discord notification." exit 0 fi if [ "$JOB_STATUS" = "success" ]; then STATUS_TITLE="Deploy succeeded" COLOR=65280 else STATUS_TITLE="Deploy failed" COLOR=16711680 fi RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" AVATAR_URL="${{ vars.DISCORD_AVATAR_URL }}" AVATAR_URL="${AVATAR_URL:-https://www.flockpal.app/FlockPal-Paint.png}" COMMIT_MESSAGE="$(git -C /docker/FlockPal-dev log -1 --pretty=%s 2>/dev/null || printf '%s' '${{ github.sha }}')" json_escape() { printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g' } BRANCH="$(json_escape '${{ github.ref_name }}')" MESSAGE="$(json_escape "$COMMIT_MESSAGE")" AVATAR_URL="$(json_escape "$AVATAR_URL")" cat > /tmp/discord-payload.json < /tmp/discord-payload.json <