From b023edc063bab9a01c4e3c4570b6f134c15e2008 Mon Sep 17 00:00:00 2001 From: omar Date: Tue, 2 Jun 2026 21:38:12 +0300 Subject: [PATCH] ci: add Gitea Actions workflow to build and publish multi-arch image Builds linux/amd64+arm64 from source and pushes to the built-in Gitea container registry (git.qomar.pw/omar/ds2api) on push to main and tags. Adds --platform=$BUILDPLATFORM to the node/go builder stages so arm64 cross-compiles on the amd64 runner instead of slow QEMU emulation. --- .gitea/workflows/build-image.yml | 67 ++++++++++++++++++++++++++++++++ Dockerfile | 4 +- 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflows/build-image.yml diff --git a/.gitea/workflows/build-image.yml b/.gitea/workflows/build-image.yml new file mode 100644 index 0000000..9fb89b4 --- /dev/null +++ b/.gitea/workflows/build-image.yml @@ -0,0 +1,67 @@ +name: Build and Publish Image + +# Собирает Docker-образ из исходника и пушит в встроенный registry Gitea (Packages). +# Образ: git.qomar.pw/omar/ds2api +# Триггеры: push в main, любой тег vX.Y.Z, и ручной запуск. + +on: + push: + branches: + - main + tags: + - 'v*' + workflow_dispatch: + +env: + REGISTRY: git.qomar.pw + # github.repository в Gitea = "omar/ds2api" (уже в нижнем регистре) + IMAGE: git.qomar.pw/${{ github.repository }} + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - 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 Gitea registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + # actor — пользователь, запустивший workflow (omar); GITEA_TOKEN выдаётся автоматически + username: ${{ github.actor }} + password: ${{ secrets.GITEA_TOKEN }} + + - name: Extract metadata (tags, labels) + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.IMAGE }} + tags: | + type=ref,event=branch + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,prefix=sha- + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push + uses: docker/build-push-action@v6 + env: + DOCKER_BUILD_RECORD_UPLOAD: "false" + DOCKER_BUILD_SUMMARY: "false" + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + BUILD_VERSION=${{ github.ref_name }} diff --git a/Dockerfile b/Dockerfile index be25b95..0f6ebe8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24 AS webui-builder +FROM --platform=$BUILDPLATFORM node:24 AS webui-builder WORKDIR /app/webui COPY webui/package.json webui/package-lock.json ./ @@ -7,7 +7,7 @@ COPY config.example.json /app/config.example.json COPY webui ./ RUN npm run build -FROM golang:1.26 AS go-builder +FROM --platform=$BUILDPLATFORM golang:1.26 AS go-builder WORKDIR /app ARG TARGETOS ARG TARGETARCH