# ============================================================================= # Build and Push Docker Images to Forgejo Registry # ============================================================================= # Triggers on push to main branch and pull requests # Builds: backend, frontend, chat-service, openresty # ============================================================================= name: Build and Push on: push: branches: [main, master] pull_request: branches: [main, master] env: REGISTRY: qbit.realms.pub IMAGE_PREFIX: realms jobs: # =========================================================================== # Build Backend (C++/Drogon) # =========================================================================== build-backend: runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Forgejo Registry if: github.event_name == 'push' run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin - name: Build Backend Image run: | docker build \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/backend:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/backend:latest \ ./backend - name: Push Backend Image if: github.event_name == 'push' run: | docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/backend:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/backend:latest # =========================================================================== # Build Frontend (SvelteKit) # =========================================================================== build-frontend: runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Forgejo Registry if: github.event_name == 'push' run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin - name: Build Frontend Image run: | docker build \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/frontend:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/frontend:latest \ ./frontend - name: Push Frontend Image if: github.event_name == 'push' run: | docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/frontend:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/frontend:latest # =========================================================================== # Build Chat Service # =========================================================================== build-chat: runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Forgejo Registry if: github.event_name == 'push' run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin - name: Build Chat Service Image run: | docker build \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/chat-service:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/chat-service:latest \ ./chat-service - name: Push Chat Service Image if: github.event_name == 'push' run: | docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/chat-service:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/chat-service:latest # =========================================================================== # Build OpenResty (Nginx + Lua) # =========================================================================== build-openresty: runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 - name: Login to Forgejo Registry if: github.event_name == 'push' run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin - name: Build OpenResty Image run: | docker build \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/openresty:${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/openresty:latest \ ./openresty - name: Push OpenResty Image if: github.event_name == 'push' run: | docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/openresty:${{ github.sha }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/openresty:latest