From f506ed4f9560403e768cb77af7ca12d3e6e71150 Mon Sep 17 00:00:00 2001 From: Aleksey Sabilin Date: Thu, 9 Jul 2026 23:04:53 +0300 Subject: [PATCH] CI: unified admin build (same-origin), sha-* tags and stage promote. --- .env.production | 6 ++--- .gitea/workflows/deploy-ift.yml | 13 +++++++++-- .gitea/workflows/deploy-stage.yml | 38 +++++++++++++++++++------------ package.json | 1 + 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/.env.production b/.env.production index 7f2ccfe..5fa35af 100644 --- a/.env.production +++ b/.env.production @@ -1,3 +1,3 @@ -VITE_API_BASE_URL=https://admin-api.stage.eventhub.local -VITE_WS_URL=wss://admin-ws.stage.eventhub.local -VITE_APP_TITLE=EventHub Admin \ No newline at end of file +# Production: API/WS через nginx в контейнере (same-origin, как на IFT). +VITE_API_BASE_URL= +VITE_APP_TITLE=EventHub Admin diff --git a/.gitea/workflows/deploy-ift.yml b/.gitea/workflows/deploy-ift.yml index d35cccd..1adb902 100644 --- a/.gitea/workflows/deploy-ift.yml +++ b/.gitea/workflows/deploy-ift.yml @@ -5,12 +5,19 @@ on: branches: [master, main] workflow_dispatch: +env: + REGISTRY: git.sabilin.com/eventhub + jobs: deploy-ift-admin: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Compute image tag + id: meta + run: echo "tag=sha-${GITHUB_SHA::12}" >> "$GITHUB_OUTPUT" + - uses: actions/setup-node@v4 with: node-version: '20' @@ -34,7 +41,9 @@ jobs: with: context: . push: true - tags: git.sabilin.com/eventhub/eventhub-admin-ui:ift + tags: | + ${{ env.REGISTRY }}/eventhub-admin-ui:${{ steps.meta.outputs.tag }} + ${{ env.REGISTRY }}/eventhub-admin-ui:ift - name: Deploy admin on IFT via SSH uses: appleboy/ssh-action@v0.1.5 @@ -45,4 +54,4 @@ jobs: script: | export REGISTRY_USER='${{ secrets.REGISTRY_USER }}' export REGISTRY_PASSWORD='${{ secrets.REGISTRY_PASSWORD }}' - /opt/eventhub-ift/devops/scripts/deploy-service.sh ift admin + /opt/eventhub-ift/devops/scripts/deploy-service.sh ift admin ${{ steps.meta.outputs.tag }} diff --git a/.gitea/workflows/deploy-stage.yml b/.gitea/workflows/deploy-stage.yml index 16de4ef..54da188 100644 --- a/.gitea/workflows/deploy-stage.yml +++ b/.gitea/workflows/deploy-stage.yml @@ -6,19 +6,20 @@ on: - 'v*' workflow_dispatch: +env: + REGISTRY: git.sabilin.com/eventhub + jobs: deploy-stage-admin: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-node@v4 - with: - node-version: '20' - cache: 'npm' - - - run: npm ci - - run: npm run build + - name: Compute image tags + id: meta + run: | + echo "sha_tag=sha-${GITHUB_SHA::12}" >> "$GITHUB_OUTPUT" + echo "release_tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 @@ -30,13 +31,20 @@ jobs: username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - - name: Build and push admin-ui - uses: docker/build-push-action@v4 - with: - context: . - push: true - tags: git.sabilin.com/eventhub/eventhub-admin-ui:stage + - name: Promote admin-ui image (no rebuild) + run: | + set -euo pipefail + SHA="${{ steps.meta.outputs.sha_tag }}" + REL="${{ steps.meta.outputs.release_tag }}" + if ! docker buildx imagetools inspect "${REGISTRY}/eventhub-admin-ui:${SHA}" >/dev/null 2>&1; then + echo "Образ eventhub-admin-ui:${SHA} не найден." + echo "Сначала прогоните IFT deploy для этого коммита (push в master)." + exit 1 + fi + docker buildx imagetools create \ + -t "${REGISTRY}/eventhub-admin-ui:${REL}" \ + -t "${REGISTRY}/eventhub-admin-ui:stage" \ + "${REGISTRY}/eventhub-admin-ui:${SHA}" - # Stage admin stack — когда появится stage/docker-compose.admin.yml - name: Note - run: echo "Образ :stage опубликован. Admin stack на stage — отдельный шаг." + run: echo "Образ :${{ steps.meta.outputs.release_tag }} опубликован. Admin stack на stage — когда появится stage/docker-compose.admin.yml." diff --git a/package.json b/package.json index e059ac1..53e418e 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "vite", "build": "tsc -b && vite build", + "build:ift": "npm run build", "lint": "eslint .", "preview": "vite preview" },