102 lines
3.1 KiB
YAML
102 lines
3.1 KiB
YAML
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: Docker info
|
|
run: |
|
|
docker info --format 'Arch: {{ .Architecture }}, OS: {{ .OSType }}'
|
|
echo "Building ARM64 natively — no buildx needed"
|
|
|
|
- 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
|