From 7081a8e900c7ae7b09c54e83183c0937c01ad1a2 Mon Sep 17 00:00:00 2001 From: core-fe Date: Thu, 21 May 2026 12:30:36 -0700 Subject: [PATCH] chore(ci): mirror tenant image to staging ecr --- .../publish-workspace-server-image.yml | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/publish-workspace-server-image.yml b/.gitea/workflows/publish-workspace-server-image.yml index cd365f2b7..f68c26a26 100644 --- a/.gitea/workflows/publish-workspace-server-image.yml +++ b/.gitea/workflows/publish-workspace-server-image.yml @@ -25,8 +25,11 @@ name: publish-workspace-server-image # staging-. Set repo variable or secret PROD_AUTO_DEPLOY_DISABLED=true # to stop production rollout while keeping image publishing enabled. # -# ECR target: 153263036946.dkr.ecr.us-east-2.amazonaws.com/molecule-ai/* +# Primary ECR target: 153263036946.dkr.ecr.us-east-2.amazonaws.com/molecule-ai/* +# Optional staging tenant mirror target: +# 004947743811.dkr.ecr.us-east-2.amazonaws.com/molecule-ai/platform-tenant # Required secrets: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AUTO_SYNC_TOKEN +# Optional secrets: AWS_STAGING_ECR_ACCESS_KEY_ID, AWS_STAGING_ECR_SECRET_ACCESS_KEY # # mc#711: Docker daemon not accessible on ubuntu-latest runner (molecule-canonical-1 # shows client-only in `docker info` — daemon not running). DinD mount is present but @@ -65,6 +68,7 @@ env: # use below in this repo's staging-verify.yml. IMAGE_NAME: ${{ vars.ECR_REGISTRY || '153263036946.dkr.ecr.us-east-2.amazonaws.com' }}/molecule-ai/platform TENANT_IMAGE_NAME: ${{ vars.ECR_REGISTRY || '153263036946.dkr.ecr.us-east-2.amazonaws.com' }}/molecule-ai/platform-tenant + STAGING_TENANT_IMAGE_NAME: ${{ vars.STAGING_ECR_REGISTRY || '004947743811.dkr.ecr.us-east-2.amazonaws.com' }}/molecule-ai/platform-tenant jobs: build-and-push: @@ -182,21 +186,46 @@ jobs: --push . # Build + push tenant image (Go platform + Next.js canvas in one image). + # When staging ECR publisher credentials are configured, push the same + # build to the staging account too so fresh staging/E2E tenants can pull + # without cross-account ECR permissions. - name: Build & push tenant image to ECR (staging- + staging-latest) env: TENANT_IMAGE_NAME: ${{ env.TENANT_IMAGE_NAME }} + STAGING_TENANT_IMAGE_NAME: ${{ env.STAGING_TENANT_IMAGE_NAME }} TAG_SHA: staging-${{ steps.tags.outputs.sha }} TAG_LATEST: staging-latest GIT_SHA: ${{ github.sha }} REPO: ${{ github.repository }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_STAGING_ECR_ACCESS_KEY_ID: ${{ secrets.AWS_STAGING_ECR_ACCESS_KEY_ID }} + AWS_STAGING_ECR_SECRET_ACCESS_KEY: ${{ secrets.AWS_STAGING_ECR_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: us-east-2 run: | set -euo pipefail ECR_REGISTRY="${TENANT_IMAGE_NAME%%/*}" aws ecr get-login-password --region us-east-2 | \ docker login --username AWS --password-stdin "${ECR_REGISTRY}" + + build_tags=( + --tag "${TENANT_IMAGE_NAME}:${TAG_SHA}" + --tag "${TENANT_IMAGE_NAME}:${TAG_LATEST}" + ) + if [ -n "${AWS_STAGING_ECR_ACCESS_KEY_ID:-}" ] && [ -n "${AWS_STAGING_ECR_SECRET_ACCESS_KEY:-}" ]; then + STAGING_ECR_REGISTRY="${STAGING_TENANT_IMAGE_NAME%%/*}" + AWS_ACCESS_KEY_ID="${AWS_STAGING_ECR_ACCESS_KEY_ID}" \ + AWS_SECRET_ACCESS_KEY="${AWS_STAGING_ECR_SECRET_ACCESS_KEY}" \ + aws ecr get-login-password --region us-east-2 | \ + docker login --username AWS --password-stdin "${STAGING_ECR_REGISTRY}" + build_tags+=( + --tag "${STAGING_TENANT_IMAGE_NAME}:${TAG_SHA}" + --tag "${STAGING_TENANT_IMAGE_NAME}:${TAG_LATEST}" + ) + else + echo "::notice::Skipping staging ECR tenant push; AWS_STAGING_ECR_ACCESS_KEY_ID/AWS_STAGING_ECR_SECRET_ACCESS_KEY are not configured." + fi + docker buildx build \ --file ./workspace-server/Dockerfile.tenant \ --build-arg NEXT_PUBLIC_PLATFORM_URL= \ @@ -205,8 +234,7 @@ jobs: --label "org.opencontainers.image.revision=${GIT_SHA}" \ --label "org.opencontainers.image.created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --label "molecule.workflow.run_id=${GITHUB_RUN_ID}" \ - --tag "${TENANT_IMAGE_NAME}:${TAG_SHA}" \ - --tag "${TENANT_IMAGE_NAME}:${TAG_LATEST}" \ + "${build_tags[@]}" \ --push . # bp-exempt: production deploy side-effect; merge is gated by CI / all-required and this job waits for push CI before acting. -- 2.52.0