Repository navigation
E2E Orphan Sweeper #167
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: E2E Orphan Sweeper | |
| # Nightly cleanup of scenario-matrix artifacts left behind by crashed or | |
| # force-terminated scenario runs. Each integration gets its own sweeper | |
| # script under `eliza/scripts/sweeper/<service>.mjs`; this workflow runs | |
| # them all sequentially and reports counts to the GitHub Step Summary. | |
| # | |
| # Fails (exits non-zero) if ANY individual sweeper fails — this produces a | |
| # real alert via the standard GitHub notification chain so operators know | |
| # a provider is in a bad state. | |
| on: | |
| schedule: | |
| - cron: "0 4 * * *" # daily at 04:00 UTC | |
| workflow_dispatch: | |
| inputs: | |
| services: | |
| description: "Comma-separated services to sweep (empty = all)" | |
| required: false | |
| default: "" | |
| concurrency: | |
| group: e2e-orphan-sweeper | |
| cancel-in-progress: false | |
| permissions: | |
| contents: read | |
| env: | |
| BUN_VERSION: "1.3.14" | |
| jobs: | |
| sweep: | |
| # The sweeper needs MILADY_E2E_* secrets scoped to the canonical org. | |
| # On forks the secrets are absent and every matrix entry fails on every | |
| # cron tick, generating daily noise. Manual workflow_dispatch from a | |
| # fork still works for the operator who triggered it (they can supply | |
| # the secrets via their own org/repo settings). | |
| if: github.repository_owner == 'milady-ai' || github.event_name == 'workflow_dispatch' | |
| name: Sweep ${{ matrix.service }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| service: | |
| - gmail | |
| - calendar | |
| - discord | |
| - telegram | |
| - signal | |
| - imessage | |
| - github | |
| - twilio | |
| - selfcontrol | |
| runs-on: ${{ matrix.service == 'imessage' && fromJson('["self-hosted","milady-e2e-macos"]') || 'ubuntu-24.04' }} | |
| timeout-minutes: 15 | |
| env: | |
| # Shared LLM creds (judge may need them for dry-run verification). | |
| # Exposed under the upstream `ELIZA_E2E_*` alias name that the | |
| # scenario-runner's live-provider helper checks. | |
| ELIZA_E2E_GROQ_API_KEY: ${{ secrets.MILADY_E2E_GROQ_API_KEY }} | |
| # Gmail | |
| MILADY_E2E_GMAIL_TESTOWNER_CLIENT_ID: ${{ secrets.MILADY_E2E_GMAIL_TESTOWNER_CLIENT_ID }} | |
| MILADY_E2E_GMAIL_TESTOWNER_CLIENT_SECRET: ${{ secrets.MILADY_E2E_GMAIL_TESTOWNER_CLIENT_SECRET }} | |
| MILADY_E2E_GMAIL_TESTOWNER_REFRESH_TOKEN: ${{ secrets.MILADY_E2E_GMAIL_TESTOWNER_REFRESH_TOKEN }} | |
| MILADY_E2E_GMAIL_TESTAGENT_CLIENT_ID: ${{ secrets.MILADY_E2E_GMAIL_TESTAGENT_CLIENT_ID }} | |
| MILADY_E2E_GMAIL_TESTAGENT_CLIENT_SECRET: ${{ secrets.MILADY_E2E_GMAIL_TESTAGENT_CLIENT_SECRET }} | |
| MILADY_E2E_GMAIL_TESTAGENT_REFRESH_TOKEN: ${{ secrets.MILADY_E2E_GMAIL_TESTAGENT_REFRESH_TOKEN }} | |
| # Discord | |
| MILADY_E2E_DISCORD_BOT_TOKEN: ${{ secrets.MILADY_E2E_DISCORD_BOT_TOKEN }} | |
| MILADY_E2E_DISCORD_QA_GUILD_ID: ${{ secrets.MILADY_E2E_DISCORD_QA_GUILD_ID }} | |
| # Telegram | |
| MILADY_E2E_TELEGRAM_BOT_TOKEN: ${{ secrets.MILADY_E2E_TELEGRAM_BOT_TOKEN }} | |
| MILADY_E2E_TELEGRAM_CHAT_ID: ${{ secrets.MILADY_E2E_TELEGRAM_CHAT_ID }} | |
| MILADY_E2E_TWITTER_CLIENT_ID: ${{ secrets.MILADY_E2E_TWITTER_CLIENT_ID }} | |
| MILADY_E2E_TWITTER_CLIENT_SECRET: ${{ secrets.MILADY_E2E_TWITTER_CLIENT_SECRET }} | |
| MILADY_E2E_TWITTER_USER_REFRESH_TOKEN: ${{ secrets.MILADY_E2E_TWITTER_USER_REFRESH_TOKEN }} | |
| # Signal | |
| MILADY_E2E_SIGNAL_DATA_DIR: ${{ secrets.MILADY_E2E_SIGNAL_DATA_DIR }} | |
| # iMessage | |
| MILADY_E2E_BLUEBUBBLES_SERVER_URL: ${{ secrets.MILADY_E2E_BLUEBUBBLES_SERVER_URL }} | |
| MILADY_E2E_BLUEBUBBLES_PASSWORD: ${{ secrets.MILADY_E2E_BLUEBUBBLES_PASSWORD }} | |
| # GitHub | |
| MILADY_E2E_GITHUB_USER_PAT: ${{ secrets.MILADY_E2E_GITHUB_USER_PAT }} | |
| MILADY_E2E_GITHUB_ORG: ${{ secrets.MILADY_E2E_GITHUB_ORG }} | |
| # Twilio | |
| MILADY_E2E_TWILIO_ACCOUNT_SID: ${{ secrets.MILADY_E2E_TWILIO_ACCOUNT_SID }} | |
| MILADY_E2E_TWILIO_API_KEY_SID: ${{ secrets.MILADY_E2E_TWILIO_API_KEY_SID }} | |
| MILADY_E2E_TWILIO_API_KEY_SECRET: ${{ secrets.MILADY_E2E_TWILIO_API_KEY_SECRET }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 | |
| with: | |
| submodules: false | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| - name: Setup workspace dependencies | |
| uses: ./.github/actions/setup-bun-workspace | |
| with: | |
| bun-version: ${{ env.BUN_VERSION }} | |
| install-command: bun install --ignore-scripts --no-frozen-lockfile | |
| - name: Run sweeper | |
| run: bun run eliza/scripts/sweeper/run.mjs --service ${{ matrix.service }} --max-age-hours 24 >> "$GITHUB_STEP_SUMMARY" |