chore(deps): bump mongoose from 9.7.0 to 9.7.1 (#316) #65
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Infrastructure & Code Deployment | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'tofu/**' | |
| - 'api/**' | |
| - 'shared/**' | |
| - 'frontend/**' | |
| - 'package.json' | |
| - 'package-lock.json' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| id-token: write | |
| env: | |
| NODE_VERSION: '24' | |
| FRONTEND_APP_NAME: 'cover-craft-ui' | |
| API_APP_NAME: 'cover-craft' | |
| RESOURCE_GROUP: 'projects-rg' | |
| API_RESOURCE_GROUP: 'projects-rg-api' | |
| jobs: | |
| infra-apply: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Azure Login | |
| uses: azure/login@v3 | |
| with: | |
| creds: ${{ secrets.AZURE_CREDENTIALS }} | |
| - name: Setup OpenTofu | |
| uses: opentofu/setup-opentofu@v2 | |
| with: | |
| tofu_version: 1.6.0 | |
| - name: Tofu Init | |
| working-directory: tofu | |
| run: tofu init | |
| env: | |
| ARM_CLIENT_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).clientId }} | |
| ARM_CLIENT_SECRET: ${{ fromJson(secrets.AZURE_CREDENTIALS).clientSecret }} | |
| ARM_TENANT_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).tenantId }} | |
| ARM_SUBSCRIPTION_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).subscriptionId }} | |
| - name: Tofu Apply | |
| working-directory: tofu | |
| run: tofu apply -auto-approve -var="mongodb_uri=${{ secrets.MONGODB_URI }}" | |
| env: | |
| ARM_CLIENT_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).clientId }} | |
| ARM_CLIENT_SECRET: ${{ fromJson(secrets.AZURE_CREDENTIALS).clientSecret }} | |
| ARM_TENANT_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).tenantId }} | |
| ARM_SUBSCRIPTION_ID: ${{ fromJson(secrets.AZURE_CREDENTIALS).subscriptionId }} | |
| deploy-api: | |
| needs: infra-apply | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Setup Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: Install all dependencies | |
| run: npm ci | |
| - name: Build shared package | |
| run: npm run build:shared | |
| - name: Build API | |
| run: npm run build --workspace=api | |
| - name: Package API for deployment | |
| working-directory: api | |
| run: | | |
| # 1. Clear existing modules | |
| rm -rf node_modules | |
| # 2. Force isolation by temporarily hiding root workspace files. | |
| # This prevents npm from detecting the monorepo and hoisting dependencies. | |
| if [ -f ../package.json ]; then mv ../package.json ../package.json.bak; fi | |
| if [ -f ../package-lock.json ]; then mv ../package-lock.json ../package-lock.json.bak; fi | |
| # 3. Install production dependencies (local to api folder) | |
| npm install --omit=dev --no-audit --no-fund --install-links | |
| # 4. Restore root workspace files | |
| if [ -f ../package.json.bak ]; then mv ../package.json.bak ../package.json; fi | |
| if [ -f ../package-lock.json.bak ]; then mv ../package-lock.json.bak ../package-lock.json; fi | |
| # 5. Fail-safe: ensure shared/dist is physically present | |
| mkdir -p node_modules/@cover-craft/shared/dist | |
| cp -r ../shared/dist/* node_modules/@cover-craft/shared/dist/ | |
| # 6. Create zip | |
| zip -r ../api-deploy.zip dist node_modules host.json package.json | |
| - name: Azure Login | |
| uses: azure/login@v3 | |
| with: | |
| creds: ${{ secrets.AZURE_CREDENTIALS }} | |
| - name: Deploy API to Azure Functions | |
| run: | | |
| az functionapp deployment source config-zip \ | |
| --name ${{ env.API_APP_NAME }} \ | |
| --resource-group ${{ env.API_RESOURCE_GROUP }} \ | |
| --src api-deploy.zip | |
| deploy-frontend: | |
| needs: infra-apply | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Setup Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: 'npm' | |
| - name: Install all dependencies | |
| run: npm ci | |
| - name: Build Shared | |
| run: npm run build:shared | |
| - name: Build Frontend (Standalone) | |
| run: npm run build --workspace=frontend | |
| - name: Package Frontend | |
| run: | | |
| # The standalone output includes everything needed to run | |
| # We also need to include 'public' and 'static' for Next.js to serve them | |
| cp -r frontend/public frontend/.next/standalone/frontend/ | |
| cp -r frontend/.next/static frontend/.next/standalone/frontend/.next/ | |
| # Zip the standalone folder | |
| cd frontend/.next/standalone | |
| zip -r ../../../frontend-deploy.zip . | |
| - name: Azure Login | |
| uses: azure/login@v3 | |
| with: | |
| creds: ${{ secrets.AZURE_CREDENTIALS }} | |
| - name: Deploy Frontend to Azure Web App | |
| run: | | |
| az webapp deployment source config-zip \ | |
| --name ${{ env.FRONTEND_APP_NAME }} \ | |
| --resource-group ${{ env.RESOURCE_GROUP }} \ | |
| --src frontend-deploy.zip | |
| # Set the startup command for Next.js standalone | |
| az webapp config set \ | |
| --name ${{ env.FRONTEND_APP_NAME }} \ | |
| --resource-group ${{ env.RESOURCE_GROUP }} \ | |
| --startup-file "node frontend/server.js" |