ci: ARM64 Docker build via Gitea Actions
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
name: Docker Build (ARM64)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'Dockerfile'
|
||||
- 'Dockerfile.canvas'
|
||||
- 'src/**'
|
||||
- 'frontend/**'
|
||||
- 'package*.json'
|
||||
- '.dockerignore'
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'Dockerfile'
|
||||
- 'Dockerfile.canvas'
|
||||
- 'src/**'
|
||||
- 'frontend/**'
|
||||
- 'package*.json'
|
||||
- '.dockerignore'
|
||||
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
|
||||
Reference in New Issue
Block a user