diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a89fd30..8072b8b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,6 +3,7 @@ name: CI
on:
push:
branches: [main, master]
+ tags: ['v*']
pull_request:
jobs:
@@ -31,3 +32,53 @@ jobs:
- name: Audit production dependencies
run: npm audit --omit=dev --audit-level=high
+
+ publish-docker:
+ runs-on: ubuntu-latest
+ needs: test-and-build
+ if: github.event_name == 'push'
+ timeout-minutes: 30
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Ensure Docker Hub secrets are configured
+ run: |
+ if [ -z "${{ secrets.DOCKERHUB_USERNAME }}" ] || [ -z "${{ secrets.DOCKERHUB_TOKEN }}" ]; then
+ echo "Missing Docker Hub secrets: DOCKERHUB_USERNAME / DOCKERHUB_TOKEN"
+ exit 1
+ fi
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Extract Docker metadata
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: 1467078763/metapi
+ tags: |
+ type=raw,value=latest,enable={{is_default_branch}}
+ type=ref,event=branch
+ type=ref,event=tag
+ type=sha,format=short
+
+ - name: Build and push multi-arch image
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ file: docker/Dockerfile
+ platforms: linux/amd64,linux/arm64
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
diff --git a/README.md b/README.md
index 7dfce09..ceab61e 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,9 @@
+
+