Skip to content

feat: re-organization of repo structure #38

feat: re-organization of repo structure

feat: re-organization of repo structure #38

name: Build, Deploy, and Test All Examples
on:
workflow_dispatch:
inputs:
environment:
description: "Deployment environment (dev, staging, prod)"
required: true
default: "prod"
type: choice
options:
- dev
- staging
- prod
skip_cache:
description: "Skip build cache and force rebuild all packages"
required: false
default: true
type: boolean
plugin_version:
description: "Zephyr plugin version to upgrade to (default: next)"
required: false
default: "next"
type: string
repository_dispatch:
types: [build-deploy-test]
pull_request:
branches:
- main
paths:
- "nx/**"
- "vanilla/**"
- "turborepo/**"
- "scripts/**"
- ".github/workflows/**"
- ".github/actions/**"
push:
branches:
- main
paths:
- "nx/**"
- "vanilla/**"
- "turborepo/**"
- "scripts/**"
- ".github/workflows/**"
- ".github/actions/**"
env:
NODE_VERSION: "24"
ZE_SECRET_TOKEN: |
${{
github.event.inputs.environment == 'dev' && secrets.ZE_SECRET_TOKEN_DEV ||
github.event.inputs.environment == 'staging' && secrets.ZE_SECRET_TOKEN_STAGING ||
secrets.ZE_SECRET_TOKEN_PROD
}}
ZE_API_GATE: |
${{
github.event.inputs.environment == 'dev' && 'https://zeapi.zephyrcloudapp.dev' ||
github.event.inputs.environment == 'staging' && 'https://zeapi.zephyrcloudapp.xyz' ||
'https://zeapi.zephyrcloud.app'
}}
ZE_API: |
${{
github.event.inputs.environment == 'dev' && 'https://api-dev.zephyr-cloud.io' ||
github.event.inputs.environment == 'staging' && 'https://zephyr-api-prerelease-1a6b535d0499.herokuapp.com' ||
'https://api.zephyr-cloud.io'
}}
jobs:
build-deploy-test:
name: Build, Deploy, and Test All Examples
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10.6.3
run_install: false
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: "https://registry.npmjs.org"
- name: Install Just
uses: extractions/setup-just@v3
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: pnpm-store-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-store-${{ runner.os }}-
- name: Install scripts dependencies
run: |
cd scripts
pnpm install --prefer-offline
- name: Upgrade Zephyr plugins
if: github.event_name != 'pull_request' && github.event_name != 'push'
run: |
cd scripts
if [ -n "${{ github.event.inputs.plugin_version }}" ]; then
echo "Upgrading plugins to version: ${{ github.event.inputs.plugin_version }}"
pnpm upgrade-plugins --version=${{ github.event.inputs.plugin_version }}
elif [ -n "${{ github.event.client_payload.plugin_version }}" ]; then
echo "Upgrading plugins to version: ${{ github.event.client_payload.plugin_version }}"
pnpm upgrade-plugins --version=${{ github.event.client_payload.plugin_version }}
else
echo "Upgrading plugins to latest (next)"
pnpm upgrade-plugins
fi
- name: Install all example dependencies
run: just install-all
- name: Clean zephyr cache before build
run: |
echo "Cleaning $HOME/.zephyr directory..."
if [ -d "$HOME/.zephyr" ]; then
echo "Found existing .zephyr directory, checking contents:"
ls -lah "$HOME/.zephyr/" || true
echo "Removing .zephyr directory..."
rm -rf "$HOME/.zephyr"
fi
echo "Creating fresh .zephyr directory..."
mkdir -p "$HOME/.zephyr"
- name: Build all examples
run: |
if [ "${{ github.event.inputs.skip_cache }}" == "true" ] || [ "${{ github.event.client_payload.skip_cache }}" == "true" ]; then
echo "Building all examples with --skip-cache flag"
just build-all-no-cache
else
echo "Building all examples with cache enabled"
just build-all
fi
env:
NODE_ENV: production
ZE_SECRET_TOKEN: ${{ env.ZE_SECRET_TOKEN }}
ZE_API_GATE: ${{ env.ZE_API_GATE }}
ZE_API: ${{ env.ZE_API }}
- name: Check zephyr cache after build
if: always()
run: |
echo "Checking $HOME/.zephyr after build..."
if [ -d "$HOME/.zephyr" ]; then
echo "Total files: $(ls -1 "$HOME/.zephyr" 2>/dev/null | wc -l)"
echo "Checking for subdirectories that might cause EISDIR error:"
find "$HOME/.zephyr" -type d 2>/dev/null || echo "No subdirectories found"
echo ""
echo "Files and directories in .zephyr:"
ls -lah "$HOME/.zephyr/" 2>/dev/null | head -30 || echo "Cannot list directory"
else
echo "$HOME/.zephyr does not exist"
fi
- name: Upload build logs
uses: actions/upload-artifact@v4
if: always()
with:
name: build-logs
path: scripts/tmp/build/
retention-days: 3
- name: Check zephyr cache contents
run: |
echo "Checking $HOME/.zephyr directory..."
if [ -d "$HOME/.zephyr" ]; then
echo "Files and directories in .zephyr:"
ls -lah "$HOME/.zephyr/" | head -30
echo ""
echo "Checking for subdirectories:"
find "$HOME/.zephyr" -type d | head -10
else
echo "$HOME/.zephyr does not exist"
fi
- name: Wait for deployments to be ready
run: |
echo "Waiting 60 seconds for all deployments to propagate..."
sleep 60
- name: Install Playwright browsers
run: |
cd scripts
npx playwright install chromium
- name: Run deployment validation tests
run: |
cd scripts
pnpm test
env:
CI: true
ZE_SECRET_TOKEN: ${{ env.ZE_SECRET_TOKEN }}
ZE_API_GATE: ${{ env.ZE_API_GATE }}
ZE_API: ${{ env.ZE_API }}
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: |
scripts/test-results/
scripts/playwright-report/
retention-days: 7