Skip to content

Deploy Admin Portal #52

Deploy Admin Portal

Deploy Admin Portal #52

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