diff --git a/.github/workflows/check-pipecat-sync.yml b/.github/workflows/check-pipecat-sync.yml deleted file mode 100644 index 5828c8b..0000000 --- a/.github/workflows/check-pipecat-sync.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Check Pipecat Version Sync - -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - check-sync: - name: Verify Pipecat Versions Match - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - submodules: true - fetch-depth: 0 - - - name: Make scripts executable - run: chmod +x scripts/*.sh - - - name: Check pipecat version synchronization - run: ./scripts/check_pipecat_sync.sh \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index d2b9962..20d0de3 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -19,7 +19,7 @@ jobs: matrix: service: - "dograh-api|api/Dockerfile|." - - "dograh-ui|ui/Dockerfile|./ui" + - "dograh-ui|ui/Dockerfile|." steps: - name: Checkout repository @@ -27,23 +27,7 @@ jobs: with: submodules: true # Only for version check, not used in build - - name: Check pipecat version sync - id: version-check - run: | - chmod +x scripts/check_pipecat_sync.sh - - # Capture the output for version details - if OUTPUT=$(./scripts/check_pipecat_sync.sh 2>&1); then - echo "version_mismatch=false" >> $GITHUB_OUTPUT - else - echo "version_mismatch=true" >> $GITHUB_OUTPUT - # Extract version info from the output - SUBMODULE_VERSION=$(echo "$OUTPUT" | grep "Submodule commit:" | awk '{print $3}') - DOCKERFILE_VERSION=$(echo "$OUTPUT" | grep "Dockerfile commit:" | awk '{print $3}') - echo "submodule_version=${SUBMODULE_VERSION}" >> $GITHUB_OUTPUT - echo "dockerfile_version=${DOCKERFILE_VERSION}" >> $GITHUB_OUTPUT - # Don't fail the build, just note the mismatch - fi + # Pipecat version check removed - now using local submodule - name: Set up QEMU # Enables cross-platform builds (e.g., arm64) uses: docker/setup-qemu-action@v3 @@ -64,6 +48,19 @@ jobs: username: ${{ secrets.GHCR_USERNAME }} password: ${{ secrets.GHCR_TOKEN }} + - name: Set build variables + id: build-vars + run: | + # Parse matrix entry and set variables early (before build) + SERVICE="${{ matrix.service }}" + IMAGE_NAME=$(echo "$SERVICE" | cut -d '|' -f1) + SHORT_SHA=${COMMIT_SHA::8} + + # Export for use in subsequent steps + echo "image_name=${IMAGE_NAME}" >> $GITHUB_OUTPUT + echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT + echo "service=${SERVICE}" >> $GITHUB_OUTPUT + - name: Build and Push ${{ matrix.service }} id: docker-build run: | @@ -104,39 +101,7 @@ jobs: with: payload: | { - "text": "āœ… Docker Build Successful", - "blocks": [ - { - "type": "header", - "text": { - "type": "plain_text", - "text": "āœ… Docker Build & Push Successful" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*Service:* `${{ steps.docker-build.outputs.image_name }}`\n*Commit:* `${{ steps.docker-build.outputs.short_sha }}`\n*Branch:* `${{ github.ref_name }}`\n*Author:* ${{ github.actor }}" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*šŸ“¦ Published Tags:*\n• DockerHub: `${{ steps.docker-build.outputs.dockerhub_tag }}`\n• DockerHub: `${{ secrets.DOCKERHUB_USERNAME }}/${{ steps.docker-build.outputs.image_name }}:latest`\n• GHCR: `${{ steps.docker-build.outputs.ghcr_tag }}`\n• GHCR: `ghcr.io/${{ secrets.GHCR_USERNAME }}/${{ steps.docker-build.outputs.image_name }}:latest`" - } - }, - { - "type": "context", - "elements": [ - { - "type": "mrkdwn", - "text": "${{ steps.version-check.outputs.version_mismatch == 'true' && format('āš ļø Warning: Pipecat version mismatch detected - <@{0}> <@{1}> please sync versions', secrets.SLACK_DEV1_ID, secrets.SLACK_DEV2_ID) || 'āœ… Pipecat versions in sync' }}" - } - ] - } - ] + "text": "āœ… Docker Build Successful - ${{ steps.build-vars.outputs.image_name }} (${{ steps.build-vars.outputs.short_sha }}) on ${{ github.ref_name }} by ${{ github.actor }}" } # Failure notification @@ -148,28 +113,5 @@ jobs: with: payload: | { - "text": "āŒ Docker Build Failed", - "blocks": [ - { - "type": "header", - "text": { - "type": "plain_text", - "text": "āŒ Docker Build Failed" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "*Service:* `${{ steps.docker-build.outputs.image_name || matrix.service }}`\n*Branch:* `${{ github.ref_name }}`\n*Author:* ${{ github.actor }}\n*Workflow:* <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Details>" - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "${{ steps.version-check.outputs.version_mismatch == 'true' && format('*šŸ”“ Pipecat Version Mismatch:*\n• Submodule: `{0}`\n• Dockerfile: `{1}`\n\n_This may have caused the build failure._\n\n<@{2}> <@{3}> Please update api/Dockerfile to use commit {0}', steps.version-check.outputs.submodule_version, steps.version-check.outputs.dockerfile_version, secrets.SLACK_DEV1_ID, secrets.SLACK_DEV2_ID) || '*Failure Reason:* Check workflow logs for details' }}" - } - } - ] + "text": "āŒ Docker Build Failed - ${{ steps.build-vars.outputs.image_name }} (${{ steps.build-vars.outputs.short_sha }}) on ${{ github.ref_name }} by ${{ github.actor }} - <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Logs>" } diff --git a/api/Dockerfile b/api/Dockerfile index 301bd89..1674a56 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -18,12 +18,11 @@ RUN pip install --user --no-cache-dir -r requirements.txt && \ # Clean up pip cache after installation rm -rf /root/.cache/pip -# Force reinstall of pipecat on every build (cache bust) - -ARG CACHEBUST=1 -RUN pip install --user 'git+https://github.com/dograh-hq/pipecat.git@278248a#egg=pipecat-ai[cartesia,deepgram,openai,elevenlabs,groq,google,azure,soundfile,silero,webrtc]' && \ - # Clean up pip cache after pipecat installation - rm -rf /root/.cache/pip +# Copy and install pipecat from local submodule +COPY pipecat /tmp/pipecat +RUN pip install --user --no-cache-dir '/tmp/pipecat[cartesia,deepgram,openai,elevenlabs,groq,google,azure,soundfile,silero,webrtc]' && \ + # Clean up pip cache and temporary pipecat directory + rm -rf /root/.cache/pip /tmp/pipecat # Remove unnecessary Python cache files from installed packages diff --git a/scripts/check_pipecat_sync.sh b/scripts/check_pipecat_sync.sh deleted file mode 100755 index 0a558cd..0000000 --- a/scripts/check_pipecat_sync.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash -# -# check_pipecat_sync.sh -# -# Verifies that the pipecat submodule commit SHA matches the one in Dockerfile. -# Used by CI/CD to ensure versions are synchronized before merging. -# Exit code 0 = versions match, 1 = mismatch or error -# - -set -euo pipefail - -# Colors for output (work in both terminal and CI) -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Get the directory where this script is located -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -echo "šŸ” Checking pipecat version synchronization..." - -# Check if pipecat submodule exists -if [ ! -d "$PROJECT_ROOT/pipecat" ]; then - echo -e "${RED}āŒ ERROR: pipecat submodule not found at $PROJECT_ROOT/pipecat${NC}" - echo "Please run: git submodule update --init --recursive" - exit 1 -fi - -# Get the commit from the submodule (use short form - 7 chars) -cd "$PROJECT_ROOT/pipecat" -SUBMODULE_COMMIT=$(git rev-parse HEAD) -SUBMODULE_SHORT=$(git rev-parse --short=7 HEAD) - -echo "šŸ“¦ Submodule commit: $SUBMODULE_SHORT" - -# Check if Dockerfile exists -DOCKERFILE="$PROJECT_ROOT/api/Dockerfile" -if [ ! -f "$DOCKERFILE" ]; then - echo -e "${RED}āŒ ERROR: Dockerfile not found at $DOCKERFILE${NC}" - exit 1 -fi - -# Check if pipecat is installed in Dockerfile -if ! grep -q 'pipecat\.git@' "$DOCKERFILE"; then - echo -e "${RED}āŒ ERROR: No pipecat installation found in api/Dockerfile${NC}" - echo "Expected to find a line like: RUN pip install 'git+https://github.com/dograh-hq/pipecat.git@'" - exit 1 -fi - -# Get the commit from the Dockerfile (extract whatever length is there) -DOCKERFILE_COMMIT=$(grep -oE 'pipecat\.git@[a-f0-9]+' "$DOCKERFILE" | cut -d'@' -f2) -# Normalize to 7 chars for comparison -DOCKERFILE_SHORT=$(echo "$DOCKERFILE_COMMIT" | cut -c1-7) - -echo "🐳 Dockerfile commit: $DOCKERFILE_SHORT" - -# Compare the short commits (7 chars) -if [ "$SUBMODULE_SHORT" != "$DOCKERFILE_SHORT" ]; then - echo "" - echo -e "${RED}āŒ ERROR: Version mismatch detected!${NC}" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo -e "${YELLOW}Submodule:${NC} $SUBMODULE_SHORT" - echo -e "${YELLOW}Dockerfile:${NC} $DOCKERFILE_SHORT" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "" - echo -e "${BLUE}šŸ‘‰ TO FIX: Update the pipecat commit in api/Dockerfile to match the submodule${NC}" - echo "" - echo "Update api/Dockerfile line with pipecat installation to use commit: $SUBMODULE_SHORT" - echo "Then commit and push the updated api/Dockerfile" - echo "" - - # For GitHub Actions, output in annotation format for PR checks - if [ "${GITHUB_ACTIONS:-false}" == "true" ]; then - echo "::error file=api/Dockerfile,title=Pipecat Version Mismatch::Dockerfile has pipecat@$DOCKERFILE_SHORT but submodule is at $SUBMODULE_SHORT. Please update api/Dockerfile to use commit $SUBMODULE_SHORT" - fi - - exit 1 -fi - -# Success! -echo "" -echo -e "${GREEN}āœ… SUCCESS: Pipecat versions are synchronized!${NC}" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e "${GREEN}Both using commit: $SUBMODULE_SHORT${NC}" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - -exit 0 \ No newline at end of file diff --git a/ui/Dockerfile b/ui/Dockerfile index efa3c3c..6964512 100644 --- a/ui/Dockerfile +++ b/ui/Dockerfile @@ -4,7 +4,7 @@ FROM node:20-alpine AS deps WORKDIR /app # Copy package files -COPY package*.json ./ +COPY ui/package*.json ./ # Install all dependencies (including dev dependencies for building) RUN npm ci --cache /tmp/empty-cache && \ npm cache clean --force @@ -17,15 +17,15 @@ WORKDIR /app COPY --from=deps /app/node_modules ./node_modules # Copy all files needed for build -COPY package*.json ./ -COPY tsconfig.json ./ -COPY next.config.ts ./ -COPY components.json ./ -COPY sentry.edge.config.ts ./ -COPY sentry.server.config.ts ./ -COPY postcss.config.mjs ./ -COPY public ./public -COPY src ./src +COPY ui/package*.json ./ +COPY ui/tsconfig.json ./ +COPY ui/next.config.ts ./ +COPY ui/components.json ./ +COPY ui/sentry.edge.config.ts ./ +COPY ui/sentry.server.config.ts ./ +COPY ui/postcss.config.mjs ./ +COPY ui/public ./public +COPY ui/src ./src # Set build-time environment variables (needed for Next.js build) ENV NEXT_PUBLIC_NODE_ENV="oss"