name: Build and Push Docker Images on: push: branches: - main pull_request: branches: - main env: REGISTRY: privaterepo.sitaru.org BACKEND_IMAGE_NAME: ${{ gitea.repository }}-backend FRONTEND_IMAGE_NAME: ${{ gitea.repository }}-frontend INTEGRATOR_IMAGE_NAME: ${{ gitea.repository }}-integrator KESTRA_INIT_IMAGE_NAME: ${{ gitea.repository }}-kestra-init jobs: build-backend: name: Build Backend (FastAPI) runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata for Backend Docker image id: meta-backend uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=sha,prefix=backend- type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' }} - name: Build and push Backend Docker image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: ${{ gitea.event_name != 'pull_request' }} tags: ${{ steps.meta-backend.outputs.tags }} labels: ${{ steps.meta-backend.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }}:buildcache,mode=max build-frontend: name: Build Frontend (Next.js) runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata for Frontend Docker image id: meta-frontend uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=sha,prefix=frontend- type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' }} - name: Build and push Frontend Docker image uses: docker/build-push-action@v5 with: context: ./nextjs-app file: ./nextjs-app/Dockerfile push: ${{ gitea.event_name != 'pull_request' }} tags: ${{ steps.meta-frontend.outputs.tags }} labels: ${{ steps.meta-frontend.outputs.labels }} build-args: | FASTAPI_URL=http://backend:80/api # Cache disabled due to registry size limits # cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache # cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache,mode=max build-integrator: name: Build Integrator runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata for Integrator Docker image id: meta-integrator uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.INTEGRATOR_IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=sha,prefix=integrator- type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' }} - name: Build and push Integrator Docker image uses: docker/build-push-action@v5 with: context: ./integrator file: ./integrator/Dockerfile push: ${{ gitea.event_name != 'pull_request' }} tags: ${{ steps.meta-integrator.outputs.tags }} labels: ${{ steps.meta-integrator.outputs.labels }} cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.INTEGRATOR_IMAGE_NAME }}:buildcache cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.INTEGRATOR_IMAGE_NAME }}:buildcache,mode=max build-kestra-init: name: Build Kestra Init runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ gitea.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata for Kestra Init Docker image id: meta-kestra-init uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.KESTRA_INIT_IMAGE_NAME }} tags: | type=ref,event=branch type=ref,event=pr type=sha,prefix=kestra-init- type=raw,value=latest,enable=${{ gitea.ref == 'refs/heads/main' }} - name: Build and push Kestra Init Docker image uses: docker/build-push-action@v5 with: context: ./integrator file: ./integrator/Dockerfile.init push: ${{ gitea.event_name != 'pull_request' }} tags: ${{ steps.meta-kestra-init.outputs.tags }} labels: ${{ steps.meta-kestra-init.outputs.labels }} trigger-deployment: name: Trigger Portainer Update runs-on: ubuntu-latest needs: [build-backend, build-frontend, build-integrator, build-kestra-init] if: gitea.event_name != 'pull_request' steps: - name: Trigger Portainer stack update run: | curl -X POST -k "https://10.0.1.224:9443/api/stacks/webhooks/863fc57c-bf24-4c63-9001-bdf9912fba73"