Files
elizaos--eliza/.github/workflows/deploy-homepage.yml
T
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

201 lines
8.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Deploy packages/homepage to elizaOS/elizaos.github.io (org GitHub Pages site).
#
# What this does:
# 1. Builds packages/homepage (Vite static site) — the `prebuild` script in
# packages/homepage/package.json regenerates
# src/generated/release-data.ts from the GitHub Releases API before vite
# runs, so download buttons always reflect the latest published assets.
# 2. Writes a CNAME file (`eliza.app`) into dist/ so GitHub Pages serves the
# static output at https://eliza.app/. The org-pages URL
# https://elizaos.github.io/ also serves the same content (it redirects to
# eliza.app once the CNAME is in place).
# 3. Adds `.nojekyll` so GitHub Pages serves files/dirs that begin with `_`.
# 4. Pushes the built site to the `gh-pages` branch of
# elizaOS/elizaos.github.io using a deploy key. We deliberately push to
# `gh-pages` (not `main`) so the leaderboard source code on `main` stays
# untouched in git history.
#
# Required secret on this repo (elizaOS/eliza):
# HOMEPAGE_DEPLOY_KEY
# - SSH private key (PEM, e.g. `ssh-keygen -t ed25519 -C "homepage-deploy" -f homepage-deploy -N ""`).
# - The corresponding PUBLIC key must be registered as a Deploy Key with
# write access on the target repo elizaOS/elizaos.github.io.
#
# One-time setup on elizaOS/elizaos.github.io (the leaderboard repo):
# - In Settings → Pages, set source to:
# "Deploy from a branch" → Branch: `gh-pages` / `(root)`.
# This switches Pages off the leaderboard's old "GitHub Actions" source.
# - Disable or delete the leaderboard's existing `.github/workflows/deploy.yml`
# so it does not race with this workflow (its `actions/deploy-pages` calls
# become no-ops once Pages source is changed, but disabling it removes the
# spurious failed-run noise).
#
# DNS for eliza.app:
# - Add A records for the apex (eliza.app) pointing at GitHub Pages IPs:
# 185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153
# - Or a CNAME record for www.eliza.app → elizaos.github.io.
# - In elizaos.github.io repo Settings → Pages, set Custom domain = eliza.app
# and enable "Enforce HTTPS" once the cert is provisioned.
name: Deploy Homepage
concurrency:
group: deploy-homepage
cancel-in-progress: true
on:
push:
branches: [develop]
paths:
- "packages/homepage/**"
- "packages/app-core/scripts/write-homepage-release-data.mjs"
- "packages/app-core/scripts/lib/asset-cdn.mjs"
- ".github/workflows/deploy-homepage.yml"
workflow_call:
inputs:
ref:
description: "Git ref to build the homepage from (defaults to the calling workflow ref)"
required: false
type: string
workflow_dispatch:
inputs:
ref:
description: "Git ref to build the homepage from"
required: false
type: string
permissions:
contents: write
jobs:
build-and-deploy:
runs-on: ${{ fromJSON(vars.HETZNER_FLEET_ONLINE == 'false' && '["ubuntu-24.04"]' || '["self-hosted","hetzner-robot"]') }}
timeout-minutes: 20
steps:
- name: Checkout source repo
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
ref: ${{ inputs.ref || github.ref }}
submodules: false
- name: Setup Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6
with:
bun-version: "canary"
- name: Install homepage dependencies
working-directory: packages/homepage
run: bun install --no-save --ignore-scripts
- name: Refresh homepage release data
working-directory: packages/homepage
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: node ../app-core/scripts/write-homepage-release-data.mjs
- name: Check homepage release data
id: release_data_check
working-directory: packages/homepage
shell: bash
run: |
if bun run check:release-data; then
echo "available=true" >> "$GITHUB_OUTPUT"
exit 0
fi
if [ "${{ github.event_name }}" = "workflow_call" ]; then
echo "::error::Release-triggered homepage deploys require published release data."
exit 1
fi
echo "::warning::No complete published release data is available; skipping homepage deploy for this develop push."
echo "available=false" >> "$GITHUB_OUTPUT"
- name: Build homepage
if: steps.release_data_check.outputs.available == 'true'
working-directory: packages/homepage
run: bun run build
- name: Install homepage browser
if: steps.release_data_check.outputs.available == 'true'
working-directory: packages/homepage
run: ./node_modules/.bin/playwright install --with-deps chromium
- name: Generate missing snapshot baselines
if: steps.release_data_check.outputs.available == 'true'
id: gen-baselines
working-directory: packages/homepage
run: |
SNAP_DIR="tests/e2e/visual.spec.ts-snapshots"
# 5 routes × 2 viewports × 1 browser project = 10 expected snapshots
EXPECTED=10
ACTUAL=$(ls "$SNAP_DIR"/*.png 2>/dev/null | wc -l || echo 0)
if [ "$ACTUAL" -lt "$EXPECTED" ]; then
echo "Found $ACTUAL of $EXPECTED snapshot baselines — regenerating all."
rm -f "$SNAP_DIR"/*.png 2>/dev/null || true
bun run test:e2e -- --update-snapshots || true
echo "generated=true" >> "$GITHUB_OUTPUT"
else
echo "generated=false" >> "$GITHUB_OUTPUT"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Commit new snapshot baselines
if: steps.release_data_check.outputs.available == 'true' && steps.gen-baselines.outputs.generated == 'true'
continue-on-error: true
run: |
SNAP_DIR="packages/homepage/tests/e2e/visual.spec.ts-snapshots"
if [ -n "$(git status --porcelain $SNAP_DIR)" ]; then
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add $SNAP_DIR
git commit -m "chore: generate visual regression snapshot baselines [skip ci]"
git push origin HEAD:${{ github.ref_name }} || (git pull --rebase origin ${{ github.ref_name }} && git push origin HEAD:${{ github.ref_name }})
echo "Pushed new snapshot baselines."
fi
- name: Test homepage downloads
if: steps.release_data_check.outputs.available == 'true' && steps.gen-baselines.outputs.generated == 'false'
working-directory: packages/homepage
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bun run test:e2e
- name: Write CNAME and .nojekyll
if: steps.release_data_check.outputs.available == 'true'
run: |
echo "eliza.app" > packages/homepage/dist/CNAME
touch packages/homepage/dist/.nojekyll
- name: Check deploy key availability
if: steps.release_data_check.outputs.available == 'true'
id: deploy_key_check
shell: bash
env:
DEPLOY_KEY: ${{ secrets.HOMEPAGE_DEPLOY_KEY }}
run: |
if [ -n "$DEPLOY_KEY" ]; then
echo "available=true" >> "$GITHUB_OUTPUT"
else
echo "available=false" >> "$GITHUB_OUTPUT"
if [ "${{ github.event_name }}" = "workflow_call" ]; then
echo "::error::HOMEPAGE_DEPLOY_KEY secret not configured. Release-triggered homepage deploys must fail closed instead of silently skipping publication."
exit 1
fi
echo "::warning::HOMEPAGE_DEPLOY_KEY secret not configured. Skipping deploy step. The site was built successfully but will not be published. To enable publishing, register an SSH deploy key on elizaOS/elizaos.github.io and add the private key as HOMEPAGE_DEPLOY_KEY on this repo (see workflow header for details)."
fi
- name: Deploy to elizaOS/elizaos.github.io (gh-pages branch)
if: steps.release_data_check.outputs.available == 'true' && steps.deploy_key_check.outputs.available == 'true'
uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453
with:
deploy_key: ${{ secrets.HOMEPAGE_DEPLOY_KEY }}
external_repository: elizaOS/elizaos.github.io
publish_branch: gh-pages
publish_dir: ./packages/homepage/dist
force_orphan: true
user_name: "github-actions[bot]"
user_email: "github-actions[bot]@users.noreply.github.com"
commit_message: "deploy: homepage from elizaOS/eliza@${{ github.sha }}"