Skip to content

feat: re-organization of repo structure #19

feat: re-organization of repo structure

feat: re-organization of repo structure #19

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: 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 vanilla dependencies
run: |
cd vanilla
pnpm install --prefer-offline
- name: Install nx example dependencies
run: |
cd nx/examples
for example in */; do
if [ -f "${example}package.json" ]; then
echo "Installing dependencies for nx/${example}"
cd "$example"
pnpm install --prefer-offline
cd ..
fi
done
- name: Install turborepo example dependencies
run: |
cd turborepo/examples
for example in */; do
if [ -f "${example}package.json" ]; then
echo "Installing dependencies for turborepo/${example}"
cd "$example"
pnpm install --prefer-offline
cd ..
fi
done
- name: Build all examples
run: |
cd scripts
if [ "${{ github.event.inputs.skip_cache }}" == "true" ] || [ "${{ github.event.client_payload.skip_cache }}" == "true" ]; then
echo "Building all examples with --skip-cache flag"
pnpm build-packages --skip-cache
else
echo "Building all examples with cache enabled"
pnpm build-packages
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: Upload build logs
uses: actions/upload-artifact@v4
if: always()
with:
name: build-logs
path: scripts/tmp/build/
retention-days: 3
- 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