Files
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

119 lines
5.3 KiB
YAML
Raw Permalink 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.
# Stale Base Guard
#
# Blocks the PR #11271 failure mode: a PR whose tree carries stale file
# contents (an old checkout committed onto a fresh-looking base), so that
# squash-merging it silently reverts work already merged on the target branch.
# #11271 landed 304 files (+6,532/21,579) titled as a small cloud-refund
# refactor; its merge-base was 8 minutes old, so no base-age check could have
# caught it — the reverts were inside the PR's own diff. Restoration epic:
# #11419; this guard is the final acceptance criterion of #11376.
#
# What runs (packages/scripts/stale-base-guard.mjs, plumbing-only, seconds):
# 1. Silent-revert detection — fail when the PR sets a file byte-identically
# back to an older blob from the target branch's history, discarding
# newer merged work. Re-land/heal PRs (restoring work a clobber reverted)
# pass; deletion-only findings are non-blocking notices unless a
# modification-revert corroborates the stale-tree signature.
# 2. Staleness backstop — fail when the merge-base is > 200 first-parent
# commits or > 72h behind the target tip.
#
# Override: apply the `stale-base-ack` label for a deliberate revert — the
# guard then passes with loud warnings instead of failing.
#
# The guard script + self-test are taken from the BASE branch, so a PR cannot
# neuter the logic that gates it (bootstrap exception: while the base branch
# predates the guard, the PR's own copy is used, with a notice). History is
# fetched blobless (--filter=blob:none): the detector compares object ids only
# and never reads file contents (~15 MB, a few seconds for the 1500-commit
# window on this repo; the whole job runs well under a minute).
name: Stale Base Guard
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled]
concurrency:
group: stale-base-guard-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
guard:
name: stale-base guard
runs-on: ${{ fromJSON(vars.HETZNER_FLEET_ONLINE == 'false' && '["ubuntu-24.04"]' || '["self-hosted","hetzner-robot"]') }}
timeout-minutes: 10
env:
BASE_REF: ${{ github.event.pull_request.base.ref }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
ACK: ${{ contains(github.event.pull_request.labels.*.name, 'stale-base-ack') && '1' || '' }}
steps:
- name: Checkout target branch (guard logic comes from the base, not the PR)
# actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
ref: ${{ github.event.pull_request.base.ref }}
# The guard disables lazy promisor fetches while it runs. Fetch the
# same bounded history window up front so merge commits can resolve
# their parents without network fallback.
fetch-depth: 1500
filter: blob:none
submodules: false
# The guard steps below invoke `node` directly, but self-hosted
# (hetzner-robot) runners are not guaranteed to have Node on PATH, so
# the self-test step fails with "node: command not found". Set up Node
# explicitly; this workflow does not use setup-bun-workspace.
- name: Setup Node.js
# actions/setup-node@v4 (48b55a0)
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: "24"
- name: Fetch PR head + bounded history (blobless)
run: |
set -euo pipefail
git fetch --quiet --no-tags --filter=blob:none --depth=1500 origin \
"$HEAD_SHA" \
"+refs/heads/${BASE_REF}:refs/remotes/origin/${BASE_REF}"
- name: Snapshot the guard from the base branch
run: |
set -euo pipefail
if [ -f packages/scripts/stale-base-guard.mjs ]; then
cp packages/scripts/stale-base-guard.mjs \
packages/scripts/stale-base-guard.self-test.mjs \
"$RUNNER_TEMP/"
else
# Bootstrap: the base branch predates the guard — only possible on
# the PR that first lands it (and forks of that moment). Uses the
# PR's own copy; lazy blob fetch is allowed for just these two reads.
echo "::notice::stale-base guard is not on the base branch yet — bootstrapping the script from the PR head."
git show "${HEAD_SHA}:packages/scripts/stale-base-guard.mjs" \
> "$RUNNER_TEMP/stale-base-guard.mjs"
git show "${HEAD_SHA}:packages/scripts/stale-base-guard.self-test.mjs" \
> "$RUNNER_TEMP/stale-base-guard.self-test.mjs"
fi
- name: Self-test the guard on fixture repos
run: node "$RUNNER_TEMP/stale-base-guard.self-test.mjs"
- name: Detect silent reverts + stale base
env:
# The detector is plumbing-only; hard-disable promisor blob fetches
# so an accidental content read fails loudly instead of hitting the
# network.
GIT_NO_LAZY_FETCH: "1"
run: |
set -euo pipefail
node "$RUNNER_TEMP/stale-base-guard.mjs" \
--base "refs/remotes/origin/${BASE_REF}" \
--head "$HEAD_SHA" \
--window 1200 \
--max-behind-commits 200 \
--max-behind-hours 72 \
${ACK:+--ack} \
--github \
--summary "$GITHUB_STEP_SUMMARY"