Deploy Admin Portal #52
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: Deploy Admin Portal | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| environment: | |
| description: 'Target environment' | |
| required: true | |
| type: choice | |
| options: | |
| - test | |
| - production | |
| default: test | |
| preview_channel: | |
| description: 'Preview channel name (leave empty for live deploy)' | |
| required: false | |
| type: string | |
| jobs: | |
| deploy: | |
| name: "Build & Deploy Admin Portal to ${{ inputs.environment }}${{ inputs.preview_channel && format(' (preview: {0})', inputs.preview_channel) || '' }}" | |
| runs-on: ubuntu-latest | |
| environment: ${{ inputs.environment }} | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6.3.0 | |
| with: | |
| node-version: 24 | |
| - name: Cache node modules | |
| uses: actions/cache@v5 | |
| id: node-cache | |
| with: | |
| path: '**/node_modules' | |
| key: ubuntu-latest-node-modules-24-${{ hashFiles('**/package-lock.json') }} | |
| - name: Install dependencies | |
| if: steps.node-cache.outputs.cache-hit != 'true' | |
| run: npm ci | |
| env: | |
| CI: true | |
| NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} | |
| - name: Create env file | |
| run: | | |
| echo "FIREBASE_API_KEY=${{ secrets.FIREBASE_API_KEY }}" >> .env | |
| echo "FIREBASE_AUTH_DOMAIN=${{ secrets.FIREBASE_AUTH_DOMAIN }}" >> .env | |
| echo "FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}" >> .env | |
| echo "FIREBASE_STORAGE_BUCKET=${{ secrets.FIREBASE_STORAGE_BUCKET }}" >> .env | |
| echo "FIREBASE_MESSAGING_SENDER_ID=${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}" >> .env | |
| echo "FIREBASE_APP_ID=${{ secrets.FIREBASE_APP_ID }}" >> .env | |
| echo "FIREBASE_TEST_PROJECT_ID=${{ secrets.FIREBASE_TEST_PROJECT_ID }}" >> .env | |
| echo "FIREBASE_TEST_API_KEY=${{ secrets.FIREBASE_TEST_API_KEY }}" >> .env | |
| echo "FIREBASE_TEST_AUTH_DOMAIN=${{ secrets.FIREBASE_TEST_AUTH_DOMAIN }}" >> .env | |
| echo "FIREBASE_TEST_STORAGE_BUCKET=${{ secrets.FIREBASE_TEST_STORAGE_BUCKET }}" >> .env | |
| echo "FIREBASE_TEST_MESSAGING_SENDER_ID=${{ secrets.FIREBASE_TEST_MESSAGING_SENDER_ID }}" >> .env | |
| echo "FIREBASE_TEST_APP_ID=${{ secrets.FIREBASE_TEST_APP_ID }}" >> .env | |
| echo "FIREBASE_TEST_APP_SITE=${{ secrets.FIREBASE_TEST_APP_SITE }}" >> .env | |
| echo "FIREBASE_TEST_ADMIN_PORTAL_SITE=${{ secrets.FIREBASE_TEST_ADMIN_PORTAL_SITE }}" >> .env | |
| echo "FIREBASE_PROD_PROJECT_ID=${{ secrets.FIREBASE_PROD_PROJECT_ID }}" >> .env | |
| echo "FIREBASE_PROD_API_KEY=${{ secrets.FIREBASE_PROD_API_KEY }}" >> .env | |
| echo "FIREBASE_PROD_AUTH_DOMAIN=${{ secrets.FIREBASE_PROD_AUTH_DOMAIN }}" >> .env | |
| echo "FIREBASE_PROD_STORAGE_BUCKET=${{ secrets.FIREBASE_PROD_STORAGE_BUCKET }}" >> .env | |
| echo "FIREBASE_PROD_MESSAGING_SENDER_ID=${{ secrets.FIREBASE_PROD_MESSAGING_SENDER_ID }}" >> .env | |
| echo "FIREBASE_PROD_APP_ID=${{ secrets.FIREBASE_PROD_APP_ID }}" >> .env | |
| echo "FIREBASE_PROD_APP_SITE=${{ secrets.FIREBASE_PROD_APP_SITE }}" >> .env | |
| echo "FIREBASE_PROD_ADMIN_PORTAL_SITE=${{ secrets.FIREBASE_PROD_ADMIN_PORTAL_SITE }}" >> .env | |
| echo "FIREBASE_TEST_MEASUREMENT_ID=${{ secrets.FIREBASE_TEST_MEASUREMENT_ID }}" >> .env | |
| echo "FIREBASE_PROD_MEASUREMENT_ID=${{ secrets.FIREBASE_PROD_MEASUREMENT_ID }}" >> .env | |
| - name: Generate config files | |
| run: npm run setup | |
| - name: Build admin portal | |
| run: npx nx build admin-portal --configuration=${{ inputs.environment }} | |
| - name: Authenticate to Google Cloud | |
| uses: google-github-actions/auth@v3 | |
| with: | |
| credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }} | |
| - name: Deploy to live | |
| if: inputs.preview_channel == '' | |
| run: npx nx run firebase-app:firebase --configuration=${{ inputs.environment }} deploy --only hosting:admin-portal | |
| - name: Deploy to preview channel | |
| if: inputs.preview_channel != '' | |
| run: npx nx run firebase-app:firebase --configuration=${{ inputs.environment }} hosting:channel:deploy ${{ inputs.preview_channel }} --only admin-portal --expires 7d |