Skip to content

site: Projects parity + mobile overflow fix #69

site: Projects parity + mobile overflow fix

site: Projects parity + mobile overflow fix #69

Workflow file for this run

name: Deploy Firebase Hosting + Cloud Run
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
id-token: write
pull-requests: write
env:
NODE_VERSION: "20"
jobs:
verify:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test
- name: Typecheck
run: npm run typecheck
- name: Build web + server
run: npm run build:all
preview:
if: github.event_name == 'pull_request'
needs: verify
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v2
- name: Deploy preview Cloud Run service
uses: google-github-actions/deploy-cloudrun@v2
with:
service: jonathanlynshue-site-pr-${{ github.event.pull_request.number }}
region: ${{ secrets.GCP_REGION }}
source: .
flags: --allow-unauthenticated
env_vars: |
NODE_ENV=preview
BASE_URL=${{ secrets.PREVIEW_BASE_URL }}
DISCOVERY_CALL_URL=${{ secrets.DISCOVERY_CALL_URL }}
LEAD_MAGNET_URL=${{ secrets.LEAD_MAGNET_URL }}
TRACKING_SECRET=${{ secrets.TRACKING_SECRET }}
INTERNAL_API_TOKEN=${{ secrets.INTERNAL_API_TOKEN }}
CALCOM_WEBHOOK_SECRET=${{ secrets.CALCOM_WEBHOOK_SECRET }}
TALLY_WEBHOOK_SECRET=${{ secrets.TALLY_WEBHOOK_SECRET }}
POSTHOG_HOST=${{ secrets.POSTHOG_HOST }}
POSTHOG_API_KEY=${{ secrets.POSTHOG_API_KEY }}
HUBSPOT_TOKEN=${{ secrets.HUBSPOT_TOKEN }}
LINKEDIN_ACCESS_TOKEN=${{ secrets.LINKEDIN_ACCESS_TOKEN }}
LINKEDIN_PERSON_URN=${{ secrets.LINKEDIN_PERSON_URN }}
FIRESTORE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}
CLOUD_TASKS_PROJECT=${{ secrets.GCP_PROJECT_ID }}
CLOUD_TASKS_LOCATION=${{ secrets.GCP_REGION }}
CLOUD_TASKS_QUEUE=${{ secrets.CLOUD_TASKS_QUEUE }}
secrets: |
HUBSPOT_STAGE_EVENT_MAP_JSON=HUBSPOT_STAGE_EVENT_MAP_JSON:latest
- name: Build web assets
run: npm run build
- name: Install Firebase CLI
run: npm install --global firebase-tools
- name: Render Firebase config
run: node scripts/render-firebase-config.mjs
env:
FIREBASE_CLOUD_RUN_SERVICE_ID: jonathanlynshue-site-pr-${{ github.event.pull_request.number }}
FIREBASE_CLOUD_RUN_REGION: ${{ secrets.GCP_REGION }}
- name: Deploy Firebase preview channel
run: firebase hosting:channel:deploy pr-${{ github.event.pull_request.number }} --project ${{ secrets.FIREBASE_PROJECT_ID }} --config firebase.generated.json --expires 7d
production:
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main'
needs: verify
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
- name: Setup gcloud
uses: google-github-actions/setup-gcloud@v2
- name: Deploy production Cloud Run service
uses: google-github-actions/deploy-cloudrun@v2
with:
service: jonathanlynshue-site-backend
region: ${{ secrets.GCP_REGION }}
source: .
flags: --allow-unauthenticated
env_vars: |
NODE_ENV=production
BASE_URL=https://jonathanlynshue.com
COOKIE_DOMAIN=jonathanlynshue.com
DISCOVERY_CALL_URL=${{ secrets.DISCOVERY_CALL_URL }}
LEAD_MAGNET_URL=${{ secrets.LEAD_MAGNET_URL }}
TRACKING_SECRET=${{ secrets.TRACKING_SECRET }}
INTERNAL_API_TOKEN=${{ secrets.INTERNAL_API_TOKEN }}
CALCOM_WEBHOOK_SECRET=${{ secrets.CALCOM_WEBHOOK_SECRET }}
TALLY_WEBHOOK_SECRET=${{ secrets.TALLY_WEBHOOK_SECRET }}
POSTHOG_HOST=${{ secrets.POSTHOG_HOST }}
POSTHOG_API_KEY=${{ secrets.POSTHOG_API_KEY }}
HUBSPOT_TOKEN=${{ secrets.HUBSPOT_TOKEN }}
LINKEDIN_ACCESS_TOKEN=${{ secrets.LINKEDIN_ACCESS_TOKEN }}
LINKEDIN_PERSON_URN=${{ secrets.LINKEDIN_PERSON_URN }}
FIRESTORE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}
CLOUD_TASKS_PROJECT=${{ secrets.GCP_PROJECT_ID }}
CLOUD_TASKS_LOCATION=${{ secrets.GCP_REGION }}
CLOUD_TASKS_QUEUE=${{ secrets.CLOUD_TASKS_QUEUE }}
SERVICE_URL=https://jonathanlynshue-site-backend-584948595436.us-central1.run.app
USE_MEMORY_STORE=false
secrets: |
HUBSPOT_STAGE_EVENT_MAP_JSON=HUBSPOT_STAGE_EVENT_MAP_JSON:latest
- name: Build web assets
run: npm run build
- name: Install Firebase CLI
run: npm install --global firebase-tools
- name: Render Firebase config
run: node scripts/render-firebase-config.mjs
env:
FIREBASE_CLOUD_RUN_SERVICE_ID: jonathanlynshue-site-backend
FIREBASE_CLOUD_RUN_REGION: ${{ secrets.GCP_REGION }}
- name: Deploy Firebase Hosting
run: firebase deploy --only hosting --project ${{ secrets.FIREBASE_PROJECT_ID }} --config firebase.generated.json