name: Build & Push Docker Images on: push: branches: ["main", "master"] tags: ["v*.*.*"] pull_request: branches: ["main", "master"] env: BACKEND_IMAGE: imap-client-backend FRONTEND_IMAGE: imap-client-frontend # Uses local Gitea registry: //:tag jobs: build: runs-on: docker steps: - name: Checkout uses: actions/checkout@v4 - name: Prepare tags id: meta run: | SHA_TAG=sha-${GITHUB_SHA::7} echo "sha_tag=$SHA_TAG" >> $GITHUB_OUTPUT if [[ "$GITHUB_REF" == refs/heads/main || "$GITHUB_REF" == refs/heads/master ]]; then echo "latest_tag=latest" >> $GITHUB_OUTPUT fi if [[ "$GITHUB_REF" == refs/tags/v* ]]; then VERSION_TAG=${GITHUB_REF#refs/tags/} echo "version_tag=$VERSION_TAG" >> $GITHUB_OUTPUT fi - name: Derive registry host / namespace id: reg run: | REGISTRY_HOST="${GITEA_SERVER_URL}" REGISTRY_HOST="${REGISTRY_HOST#https://}" REGISTRY_HOST="${REGISTRY_HOST#http://}" REGISTRY_HOST="${REGISTRY_HOST%%/*}" NAMESPACE="${GITHUB_REPOSITORY%/*}" echo "host=$REGISTRY_HOST" >> $GITHUB_OUTPUT echo "ns=$NAMESPACE" >> $GITHUB_OUTPUT echo "Using registry: $REGISTRY_HOST namespace: $NAMESPACE" - name: Login to local Gitea registry run: | echo "${{ secrets.CR_PASSWORD }}" | docker login "${{ steps.reg.outputs.host }}" -u "${{ secrets.CR_USERNAME }}" --password-stdin - name: Build backend run: | docker build -t ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${BACKEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ./backend if [ -n "${{ steps.meta.outputs.latest_tag }}" ]; then docker tag ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${BACKEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${BACKEND_IMAGE}:latest; fi if [ -n "${{ steps.meta.outputs.version_tag }}" ]; then docker tag ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${BACKEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${BACKEND_IMAGE}:${{ steps.meta.outputs.version_tag }}; fi - name: Build frontend run: | docker build -t ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${FRONTEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ./frontend if [ -n "${{ steps.meta.outputs.latest_tag }}" ]; then docker tag ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${FRONTEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${FRONTEND_IMAGE}:latest; fi if [ -n "${{ steps.meta.outputs.version_tag }}" ]; then docker tag ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${FRONTEND_IMAGE}:${{ steps.meta.outputs.sha_tag }} ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${FRONTEND_IMAGE}:${{ steps.meta.outputs.version_tag }}; fi - name: Push images if: github.event_name != 'pull_request' run: | for IMG in ${BACKEND_IMAGE} ${FRONTEND_IMAGE}; do docker push ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${IMG}:${{ steps.meta.outputs.sha_tag }} if [ -n "${{ steps.meta.outputs.latest_tag }}" ]; then docker push ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${IMG}:latest; fi if [ -n "${{ steps.meta.outputs.version_tag }}" ]; then docker push ${{ steps.reg.outputs.host }}/${{ steps.reg.outputs.ns }}/${IMG}:${{ steps.meta.outputs.version_tag }}; fi done