Skip to content

.github/workflows/upload-sourcemaps.yml #395

.github/workflows/upload-sourcemaps.yml

.github/workflows/upload-sourcemaps.yml #395

name: Upload Source Maps

Check failure on line 1 in .github/workflows/upload-sourcemaps.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/upload-sourcemaps.yml

Invalid workflow file

(Line: 53, Col: 9): Unrecognized named-value: 'matrix'. Located at position 109 within expression: github.event_name != 'workflow_dispatch' || github.event.inputs.app == 'both' || github.event.inputs.app == matrix.app
on:
push:
branches: [main, 'release/*']
paths:
- 'packages/client/**'
- 'packages/admin/**'
- 'packages/shared/**'
release:
types: [published]
workflow_dispatch:
inputs:
app:
description: 'App to upload source maps for'
required: true
type: choice
options:
- both
- client
- admin
permissions:
contents: read
concurrency:
group: sourcemaps-${{ github.ref }}
cancel-in-progress: true
jobs:
upload-sourcemaps:
name: Upload ${{ matrix.title }} Source Maps
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- app: client
title: Client
build: build:client
dist: packages/client/dist
project: green-goods-client
env_id_secret: POSTHOG_CLIENT_ENV_ID
- app: admin
title: Admin
build: build:admin
dist: packages/admin/dist
project: green-goods-admin
env_id_secret: POSTHOG_ADMIN_ENV_ID
# Skip if workflow_dispatch selected a different app
if: |
github.event_name != 'workflow_dispatch' ||
github.event.inputs.app == 'both' ||
github.event.inputs.app == matrix.app
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Restore Bun cache
uses: actions/cache@v4
with:
path: ~/.bun/install/cache
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}
restore-keys: ${{ runner.os }}-bun-
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Determine environment
id: env
env:
GIT_REF: ${{ github.ref }}
APP_NAME: ${{ matrix.app }}
run: |
if [[ "$GIT_REF" == "refs/heads/main" ]]; then
echo "env=production" >> $GITHUB_OUTPUT
echo "chain_id=42161" >> $GITHUB_OUTPUT
else
echo "env=staging" >> $GITHUB_OUTPUT
echo "chain_id=11155111" >> $GITHUB_OUTPUT
fi
# Get version from package.json
VERSION=$(jq -r '.version' "packages/$APP_NAME/package.json")
echo "app_version=$VERSION" >> $GITHUB_OUTPUT
- name: Load env vars from Varlock + 1Password environment
env:
APP_ENV: ${{ steps.env.outputs.env }}
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
OP_ENVIRONMENT: ${{ vars.OP_ENVIRONMENT }}
run: |
if [[ -z "$OP_ENVIRONMENT" ]]; then
echo "::error::Missing repository variable OP_ENVIRONMENT"
echo "Set OP_ENVIRONMENT to your 1Password environment ID/name."
exit 1
fi
if [[ -z "$OP_SERVICE_ACCOUNT_TOKEN" ]]; then
echo "::error::Missing GitHub secret OP_SERVICE_ACCOUNT_TOKEN"
exit 1
fi
bunx varlock run -- bash -lc '
for key in \
VITE_WALLETCONNECT_PROJECT_ID \
VITE_PIMLICO_API_KEY \
VITE_ENVIO_INDEXER_URL \
VITE_POSTHOG_KEY \
VITE_POSTHOG_ADMIN_KEY \
POSTHOG_ENV_ID \
POSTHOG_CLI_TOKEN
do
val="${!key:-}"
if [[ -n "$val" ]]; then
printf "%s=%s\n" "$key" "$val" >> "$GITHUB_ENV"
fi
done
'
- name: Build ${{ matrix.title }} with source maps
run: bun run ${{ matrix.build }}
env:
APP_ENV: ${{ steps.env.outputs.env }}
# Ensure source maps are generated
NODE_ENV: production
VITE_USE_HASH_ROUTER: 'false'
VITE_CHAIN_ID: ${{ steps.env.outputs.chain_id }}
VITE_APP_VERSION: ${{ steps.env.outputs.app_version }}
VITE_POSTHOG_HOST: "https://app.posthog.com"
- name: Verify source maps exist
env:
DIST_DIR: ${{ matrix.dist }}
run: |
SOURCEMAPS=$(find "$DIST_DIR" -name "*.map" | wc -l)
if [[ "$SOURCEMAPS" -eq 0 ]]; then
echo "::error::No source maps found in $DIST_DIR"
exit 1
fi
echo "Found $SOURCEMAPS source map files"
- name: Upload source maps to PostHog
# Pin PostHog/upload-source-maps for reproducible uploads; update version after verifying new releases.
uses: PostHog/upload-source-maps@v0.5.7.0
with:
directory: ${{ matrix.dist }}
env-id: ${{ env.POSTHOG_ENV_ID }}
cli-token: ${{ env.POSTHOG_CLI_TOKEN }}
project: ${{ matrix.project }}
version: ${{ github.sha }}
delete-after-upload: 'true'
batch-size: '50'
ignore: '*.css.map'
- name: Verify source maps removed from dist
env:
DIST_DIR: ${{ matrix.dist }}
run: |
REMAINING=$(find "$DIST_DIR" -name "*.js.map" | wc -l)
if [[ "$REMAINING" -gt 0 ]]; then
echo "::warning::$REMAINING .js.map files still present after upload"
# Remove any remaining source maps
find "$DIST_DIR" -name "*.js.map" -delete
fi
echo "Source maps cleaned up successfully"
- name: Upload Summary
env:
PROJECT_NAME: ${{ matrix.project }}
COMMIT_SHA: ${{ github.sha }}
ENVIRONMENT: ${{ steps.env.outputs.env }}
APP_VERSION: ${{ steps.env.outputs.app_version }}
APP_TITLE: ${{ matrix.title }}
run: |
echo "## $APP_TITLE Source Maps Uploaded" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| **Project** | $PROJECT_NAME |" >> $GITHUB_STEP_SUMMARY
echo "| **Version** | \`$COMMIT_SHA\` |" >> $GITHUB_STEP_SUMMARY
echo "| **Environment** | $ENVIRONMENT |" >> $GITHUB_STEP_SUMMARY
echo "| **App Version** | $APP_VERSION |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Source maps have been uploaded to PostHog and removed from the build artifacts." >> $GITHUB_STEP_SUMMARY
notify-failure:
name: Notify on Failure
runs-on: ubuntu-latest
needs: upload-sourcemaps
if: failure()
steps:
- name: Create failure summary
run: |
echo "## Source Map Upload Failed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "The source map upload workflow failed. Possible causes:" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "1. **Missing secrets**: Ensure \`OP_SERVICE_ACCOUNT_TOKEN\` exists and 1Password fields are configured" >> $GITHUB_STEP_SUMMARY
echo "2. **Build failure**: Check the build step for TypeScript or dependency errors" >> $GITHUB_STEP_SUMMARY
echo "3. **PostHog API error**: Check PostHog status and API token permissions" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Required Secrets" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Secret | Description |" >> $GITHUB_STEP_SUMMARY
echo "|--------|-------------|" >> $GITHUB_STEP_SUMMARY
echo "| \`OP_SERVICE_ACCOUNT_TOKEN\` | 1Password service account token in GitHub secrets |" >> $GITHUB_STEP_SUMMARY
echo "| \`OP_ENVIRONMENT\` | GitHub repository variable pointing to 1Password environment |" >> $GITHUB_STEP_SUMMARY
echo "| \`POSTHOG_CLI_TOKEN\` | Value present in that 1Password environment |" >> $GITHUB_STEP_SUMMARY
echo "| \`POSTHOG_ENV_ID\` | Value present in that 1Password environment |" >> $GITHUB_STEP_SUMMARY