# e2e-checkpoint-store: run all agents when the agent input is blank

`6550fda`→[main](/content/gh/entireio/cli/commits/main/index.html)·

Soph·2w ago·1 file·+36 added/-67 removed

Mirror e2e.yml: the agent input is now optional with a blank first option, and a
matrix-setup job fans out to all agents when it's left empty (single agent when
selected). The two jobs collapse into one matrix job — copilot-cli runs in the
matrix with copilot-requests: write granted to every leg (harmless for the
others) and COPILOT_GITHUB_TOKEN passed through, so the separate copilot job is
no longer needed. fail-fast: false so one agent's failure doesn't cancel the
rest. The checkpoint_store input (git-branch / git-refs) is unchanged and applies
to every agent in the run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

## Sessions

cd1d43111232View transcript

## Changes

1

- .github/workflows

- Me2e-checkpoint-store.yml+36/-67

```
3 unmodified lines
```

workflow_dispatch:
    inputs:
      agent:
        description: "Agent to run"
        required: true
        default: "vogon"
        description: "Agent to run (leave empty to run all agents)"
        required: false
        type: choice
        options:
          - ""
          - vogon
          - claude-code
          - opencode

jobs:
  matrix-setup:
    runs-on: ubuntu-latest
    outputs:
      agents: ${{ steps.set.outputs.agents }}
    steps:
      - id: set
        run: |
          input="${{ github.event.inputs.agent }}"
          if [ -n "$input" ]; then
            echo "agents=[\"$input\"]" >> "$GITHUB_OUTPUT"
          else
            echo 'agents=["claude-code","opencode","gemini-cli","factoryai-droid","cursor-cli","copilot-cli","roger-roger","codex"]' >> "$GITHUB_OUTPUT"
          fi

e2e-checkpoint-store:
    if: inputs.agent != 'copilot-cli'
    needs: matrix-setup
    runs-on: ubuntu-latest
    timeout-minutes: 40
    permissions:
      actions: read
      contents: read
      copilot-requests: write
    strategy:
      fail-fast: false
      matrix:
        agent: ${{ fromJson(needs.matrix-setup.outputs.agents) }}

steps:
      - name: Checkout repository
        run: go build -o /usr/local/bin/entire ./cmd/entire

- name: Build vogon binary
        if: inputs.agent == 'vogon'
        if: matrix.agent == 'vogon'
        run: go build -o /usr/local/bin/vogon ./e2e/vogon

- name: Install agent CLI
        if: inputs.agent != 'vogon'
        if: matrix.agent != 'vogon'
        run: |
          case "${{ inputs.agent }}" in
          case "${{ matrix.agent }}" in
            claude-code) curl -fsSL https://claude.ai/install.sh | bash ;;
            opencode)    curl -fsSL https://opencode.ai/install | bash ;;
            gemini-cli)  npm install -g @google/gemini-cli ;;

- name: Verify roger-roger agent
        if: inputs.agent == 'roger-roger'
        if: matrix.agent == 'roger-roger'
        run: |
          set -euo pipefail
          echo "Verifying roger-roger binaries on PATH..."
          command -v entire-agent-roger-roger

- name: Bootstrap agent
        if: inputs.agent != 'roger-roger' && inputs.agent != 'vogon'
        if: matrix.agent != 'roger-roger' && matrix.agent != 'vogon'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
        run: go run ./e2e/bootstrap ${{ inputs.agent }}
        COPILOT_GITHUB_TOKEN: ${{ github.token }}
        run: go run ./e2e/bootstrap ${{ matrix.agent }}

- name: E2E Checkpoint Store
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          E2E_CODEX_MODEL: ${{ inputs.agent == 'codex' && 'gpt-5.1-codex-mini' || '' }}
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
          E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts
          E2E_ENTIRE_BIN: /usr/local/bin/entire
          E2E_CHECKPOINT_STORE: ${{ inputs.checkpoint_store }}
        run: |
          mkdir -p "$E2E_ARTIFACT_DIR"
          mise run test:e2e --agent ${{ inputs.agent }}

- name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
        with:
          name: e2e-checkpoint-store-${{ inputs.agent }}-${{ inputs.checkpoint_store }}
          path: e2e-artifacts/
          retention-days: 7

e2e-checkpoint-store-copilot:
    if: inputs.agent == 'copilot-cli'
    runs-on: ubuntu-latest
    timeout-minutes: 40
    permissions:
      actions: read
      contents: read
      copilot-requests: write

steps:
      - name: Checkout repository
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
        with:
          ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y gnome-keyring tmux
          echo 'somecredstorepass' | gnome-keyring-daemon --unlock

- name: Setup mise
        uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4

- name: Build entire CLI
        run: go build -o /usr/local/bin/entire ./cmd/entire

- name: Install agent CLI
        run: |
          npm install -g @github/copilot
          echo "$HOME/.local/bin" >> $GITHUB_PATH

- name: Bootstrap agent
        env:
          COPILOT_GITHUB_TOKEN: ${{ github.token }}
        run: go run ./e2e/bootstrap ${{ inputs.agent }}

- name: E2E Checkpoint Store
        env:
          COPILOT_GITHUB_TOKEN: ${{ github.token }}
          E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts
          E2E_ENTIRE_BIN: /usr/local/bin/entire
          E2E_CHECKPOINT_STORE: ${{ inputs.checkpoint_store }}
        run: |
          mkdir -p "$E2E_ARTIFACT_DIR"
          mise run test:e2e --agent ${{ inputs.agent }}
          mise run test:e2e --agent ${{ matrix.agent }}
