From 12819ab579b6e238acfac44405a3a3b29db54d01 Mon Sep 17 00:00:00 2001 From: DatTT127 Date: Sat, 18 Jul 2026 21:09:33 +0700 Subject: [PATCH] update the backend_build_script --- ...kend-modal.yaml => backend-ecr-modal.yaml} | 88 ++++++------ .gitea/workflows/backend-ecr.yaml | 133 ------------------ 2 files changed, 41 insertions(+), 180 deletions(-) rename .gitea/workflows/{backend-modal.yaml => backend-ecr-modal.yaml} (61%) delete mode 100644 .gitea/workflows/backend-ecr.yaml diff --git a/.gitea/workflows/backend-modal.yaml b/.gitea/workflows/backend-ecr-modal.yaml similarity index 61% rename from .gitea/workflows/backend-modal.yaml rename to .gitea/workflows/backend-ecr-modal.yaml index a1d413c..8aaf7a4 100644 --- a/.gitea/workflows/backend-modal.yaml +++ b/.gitea/workflows/backend-ecr-modal.yaml @@ -1,52 +1,29 @@ -# Gitea Actions Workflow: Backend Build via Modal (Serverless) -# Place at: .gitea/workflows/backend-modal.yaml -# -# This workflow offloads the heavy Docker build to Modal's serverless infrastructure, -# avoiding resource constraints on the 2GB RAM Lightsail VM runner. -# -# Required Gitea Repository Secrets: -# MODAL_TOKEN - Modal API token (from modal.com/settings) -# -# Required Modal Secrets (configured in Modal dashboard, NOT Gitea): -# aws-secrets - AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION -# -# Required Gitea Repository Variables: -# ECR_PUBLIC_REGISTRY_ALIAS - Your public.ecr.aws alias (e.g., vkist-project) -# TRITON_ENDPOINT - Modal Triton endpoint for CV inference -# CV_INFERENCE_HOST - Bind host (default: 0.0.0.0) -# CV_INFERENCE_PORT - Bind port (default: 8001) -# BASE_URL - External base URL for routing +# Gitea Actions Workflow: Backend ECR Deployment +# Place at: .gitea/workflows/backend-ecr.yaml (in repository root) -name: Backend Modal Build +name: Backend EC - Modal Deployment on: + push: + branches: ['**'] workflow_dispatch: {} - # push: - # branches: ['**'] - # workflow_dispatch: - # inputs: - # tag: - # description: 'Image tag (default: git SHA)' - # required: false - # type: string - # platform: - # description: 'Target platform' - # required: false - # type: string - # default: 'linux/amd64' permissions: contents: read packages: write env: + # Build-time / workflow context BACKEND_DIR: workspace/sprint_1_2/CODEBASE/backend ECR_REGISTRY: public.ecr.aws ECR_REPOSITORY: ${{ vars.ECR_PUBLIC_REGISTRY_ALIAS }}/msk-cv-inference-server DOCKERFILE_PATH: deps/implementation/backend_deploy/Dockerfile MODAL_SCRIPT: workspace/sprint_1_2/CODEBASE/deps/implementation/backend_deploy/gitea_modal_build.py - # Runtime config (forwarded to container via deployment) + # CV inference server runtime configuration + # These are Gitea repository variables (or secrets) that are forwarded + # to the container at deploy time. The Docker image itself does NOT bake + # them in — the FastAPI app reads them from the environment via pydantic-settings. TRITON_ENDPOINT: ${{ vars.TRITON_ENDPOINT }} CV_INFERENCE_HOST: ${{ vars.CV_INFERENCE_HOST }} CV_INFERENCE_PORT: ${{ vars.CV_INFERENCE_PORT }} @@ -54,18 +31,42 @@ env: CORS_ORIGINS: ${{ vars.CORS_ORIGINS }} ECR_PUBLIC_REGISTRY_ALIAS: ${{ vars.ECR_PUBLIC_REGISTRY_ALIAS }} + jobs: - build-via-modal: - name: Build & Push via Modal - runs-on: [self-hosted, linux, amd64] + build-and-push: + runs-on: ubuntu-latest container: - image: gitea-modal-runner:latest - timeout-minutes: 20 - + image: gitea-modal-runner:latest + timeout-minutes: 30 steps: - name: Checkout repository uses: actions/checkout@v4 + - name: Lint backend code + run: | + python -m py_compile workspace/sprint_1_2/CODEBASE/backend/cv_inference_server.py + find workspace/sprint_1_2/CODEBASE/backend -name '*.py' -exec python -m py_compile {} + + + - name: Extract metadata for Docker + id: meta + uses: docker/metadata-action@v5 + with: + # Full ECR Public image reference: public.ecr.aws/{alias}/{repo} + images: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }} + tags: | + type=ref,event=branch + type=sha,prefix= + type=raw,value=latest,enable={{is_default_branch}} + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.title=VKIST CV Inference Server + + - name: Print image URI and digest + run: | + echo "Pushed ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ steps.meta.outputs.version }}" + echo "Digest: ${{ steps.meta.outputs.tags }}" + - name: Determine image tag id: tag run: | @@ -90,15 +91,8 @@ jobs: --platform linux/amd64 \ --push - # Optional: Trigger dependent deployments - # trigger-triton: - # needs: build-via-modal - # if: success() && github.event_name == 'push' - # uses: ./.gitea/workflows/trigger_modal_triton.yaml - # secrets: inherit - notify-deploy: - needs: build-via-modal + needs: modal-build if: success() && github.event_name == 'push' runs-on: ubuntu-latest steps: diff --git a/.gitea/workflows/backend-ecr.yaml b/.gitea/workflows/backend-ecr.yaml deleted file mode 100644 index 628b4fe..0000000 --- a/.gitea/workflows/backend-ecr.yaml +++ /dev/null @@ -1,133 +0,0 @@ -# Gitea Actions Workflow: Backend ECR Deployment -# Place at: .gitea/workflows/backend-ecr.yaml (in repository root) - -name: Backend ECR Deployment - -on: - push: - branches: ['**'] - workflow_dispatch: {} - -permissions: - contents: read - packages: write - -env: - # Build-time / workflow context - BACKEND_DIR: workspace/sprint_1_2/CODEBASE/backend - ECR_REGISTRY: public.ecr.aws - ECR_REPOSITORY: ${{ vars.ECR_PUBLIC_REGISTRY_ALIAS }}/msk-cv-inference-server - DOCKERFILE_PATH: deps/implementation/backend_deploy/Dockerfile - - # CV inference server runtime configuration - # These are Gitea repository variables (or secrets) that are forwarded - # to the container at deploy time. The Docker image itself does NOT bake - # them in — the FastAPI app reads them from the environment via pydantic-settings. - TRITON_ENDPOINT: ${{ vars.TRITON_ENDPOINT }} - CV_INFERENCE_HOST: ${{ vars.CV_INFERENCE_HOST }} - CV_INFERENCE_PORT: ${{ vars.CV_INFERENCE_PORT }} - BASE_URL: ${{ vars.BASE_URL }} - CORS_ORIGINS: ${{ vars.CORS_ORIGINS }} - -jobs: - build-and-push: - runs-on: ubuntu-latest - container: - image: gitea-modal-runner:latest - timeout-minutes: 30 - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Lint backend code - run: | - python -m py_compile workspace/sprint_1_2/CODEBASE/backend/cv_inference_server.py - find workspace/sprint_1_2/CODEBASE/backend -name '*.py' -exec python -m py_compile {} + - - # - name: Configure AWS credentials - # uses: aws-actions/configure-aws-credentials@v4 - # with: - # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - # aws-region: us-east-1 - - # - name: Login to Amazon ECR Public - # id: login-ecr - # uses: aws-actions/amazon-ecr-login@v2 - # with: - # registry-type: public - # mask-password: 'true' - - - name: Extract metadata for Docker - id: meta - uses: docker/metadata-action@v5 - with: - # Full ECR Public image reference: public.ecr.aws/{alias}/{repo} - images: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }} - tags: | - type=ref,event=branch - type=sha,prefix= - type=raw,value=latest,enable={{is_default_branch}} - labels: | - org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} - org.opencontainers.image.revision=${{ github.sha }} - org.opencontainers.image.title=VKIST CV Inference Server - - - name: Build and push Docker image - uses: docker/build-push-action@v5 - with: - context: ./${{ env.BACKEND_DIR }} - file: ./${{ env.DOCKERFILE_PATH }} - push: true - platforms: linux/amd64,linux/arm64 - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Print image URI and digest - run: | - echo "Pushed ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ steps.meta.outputs.version }}" - echo "Digest: ${{ steps.meta.outputs.tags }}" - - # trigger-triton: - # needs: build-and-push - # if: success() && github.event_name == 'push' - # runs-on: ubuntu-latest - # steps: - # - name: Trigger Modal Triton deployment - # uses: gitea/gitea-actions-workflow-trigger@v1 - # with: - # repository: ${{ github.repository }} - # workflow: trigger_modal_triton.yaml - # ref: ${{ github.ref }} - # inputs: '{}' - - notify-deploy: - needs: build-and-push - if: success() && github.event_name == 'push' - runs-on: ubuntu-latest - steps: - - name: Trigger deployment webhook - if: env.DEPLOY_WEBHOOK_URL != '' - env: - DEPLOY_WEBHOOK_URL: ${{ secrets.DEPLOY_WEBHOOK_URL }} - WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }} - run: | - cat <