# Gitea Actions: ARM64 native Docker build name: Docker Build (ARM64) on: push: branches: [main] paths: - 'Dockerfile' - 'Dockerfile.canvas' - 'src/**' - 'frontend/**' - 'package*.json' - '.dockerignore' - '.gitea/**' pull_request: branches: [main] paths: - 'Dockerfile' - 'Dockerfile.canvas' - 'src/**' - 'frontend/**' - 'package*.json' - '.dockerignore' - '.gitea/**' workflow_dispatch: concurrency: group: docker-arm64-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: REGISTRY: gitea.forkless.com IMAGE_MCP: gitea.forkless.com/forkless/excalidraw-mcp-sentinel IMAGE_CANVAS: gitea.forkless.com/forkless/excalidraw-mcp-sentinel-canvas jobs: docker: name: Build & Push runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build MCP Server run: | docker build \ --tag ${{ env.IMAGE_MCP }}:latest \ --tag ${{ env.IMAGE_MCP }}:${{ github.sha }} \ --file Dockerfile . - name: Build Canvas Server run: | docker build \ --tag ${{ env.IMAGE_CANVAS }}:latest \ --tag ${{ env.IMAGE_CANVAS }}:${{ github.sha }} \ --file Dockerfile.canvas . - name: Login to Gitea Container Registry if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') run: | echo "${{ secrets.GITEATOKEN }}" | \ docker login ${{ env.REGISTRY }} \ --username "${{ secrets.GITEAUSER }}" \ --password-stdin - name: Push latest if: github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') run: | docker push ${{ env.IMAGE_MCP }}:latest docker push ${{ env.IMAGE_MCP }}:${{ github.sha }} docker push ${{ env.IMAGE_CANVAS }}:latest docker push ${{ env.IMAGE_CANVAS }}:${{ github.sha }} - name: Tag version if: startsWith(github.ref, 'refs/tags/v') run: | VERSION=${GITHUB_REF#refs/tags/v} docker tag ${{ env.IMAGE_MCP }}:latest ${{ env.IMAGE_MCP }}:$VERSION docker tag ${{ env.IMAGE_CANVAS }}:latest ${{ env.IMAGE_CANVAS }}:$VERSION docker push ${{ env.IMAGE_MCP }}:$VERSION docker push ${{ env.IMAGE_CANVAS }}:$VERSION - name: Smoke test (PR only) if: github.event_name == 'pull_request' run: | docker run -d --network host \ --name test-canvas \ ${{ env.IMAGE_CANVAS }}:${{ github.sha }} trap "docker rm -f test-canvas" EXIT for i in $(seq 1 15); do if curl -sf http://localhost:3000/health > /dev/null 2>&1; then echo "Canvas healthy" exit 0 fi sleep 1 done echo "Health check timeout" exit 1