name: Docker Compose CI/CD on: workflow_dispatch: push: branches: [ "main" ] pull_request: branches: [ "main" ] env: DOCKER_IMAGE: ghcr.io/jtsb2b/homeshopping DOCKER_TAG: latest CONTAINER_NAME: "homeshopping" jobs: build-push: runs-on: ubuntu-22.04 permissions: actions: write packages: write repository-projects: read contents: read steps: - name: Checkout Repository uses: actions/checkout@v4 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and Push Docker Image uses: docker/build-push-action@v6 with: context: . file: Dockerfile push: true tags: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_TAG }} cache-from: type=gha cache-to: type=gha,mode=max deploy: needs: build-push runs-on: ubuntu-22.04 timeout-minutes: 60 steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin docker pull ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_TAG }} docker stop ${{ env.CONTAINER_NAME }} || true docker rm -f ${{ env.CONTAINER_NAME }} 2> /dev/null || true docker run -d --name ${{ env.CONTAINER_NAME }} -p 8016:7860 \ -e CALL_ADMIN_URL="${{ secrets.CALL_ADMIN_URL }}" \ -e GCP_SERVICE_ACCOUNT_JSON='${{ secrets.GCP_SERVICE_ACCOUNT_JSON }}' \ -e GEMINI_API_KEY="${{ secrets.GEMINI_API_KEY }}" \ -e GEMMA_API_KEY="${{ secrets.GEMMA_API_KEY }}" \ -e GEMMA_BASE_URL="${{ secrets.GEMMA_BASE_URL }}" \ -e CHAT_BASE_URL="${{ secrets.CHAT_BASE_URL }}" \ -e HF_TOKEN="${{ secrets.HF_TOKEN }}" \ -e JAI_API_KEY="${{ secrets.JAI_API_KEY }}" \ -e JAI_BASE_URL="${{ secrets.JAI_BASE_URL }}" \ -e JTS_API_KEY="${{ secrets.JTS_API_KEY }}" \ -e JTS_BASE_URL="${{ secrets.JTS_BASE_URL }}" \ -e LANGFUSE_HOST="${{ secrets.LANGFUSE_HOST }}" \ -e LANGFUSE_PUBLIC_KEY="${{ secrets.LANGFUSE_PUBLIC_KEY }}" \ -e LANGFUSE_SECRET_KEY="${{ secrets.LANGFUSE_SECRET_KEY }}" \ -e MONGO_ROOT_PASSWORD="${{ secrets.MONGO_ROOT_PASSWORD }}" \ -e MONGO_ROOT_USERNAME="${{ secrets.MONGO_ROOT_USERNAME }}" \ -e MONGO_URL="${{ secrets.MONGO_URL }}" \ -e OPENAI_API_KEY="${{ secrets.OPENAI_API_KEY }}" \ -e PURCHASE_URL="${{ secrets.PURCHASE_URL }}" \ -e TYPHOON_API_KEY="${{ secrets.TYPHOON_API_KEY }}" \ -e TYPHOON_BASE_URL="${{ secrets.TYPHOON_BASE_URL }}" \ ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_TAG }} docker image prune -af docker ps -a docker logs ${{ env.CONTAINER_NAME }}