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

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

41fdb08·

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

[?
Build Checkpoints Store Based on DesignClaude Code·1 step](/content/gh/entireio/cli/session/6852b33a-0d22-4364-aa6c-8de706ecc215#timeline-cd1d43111232/index.html)

Changes

1

3 unmodified lines

4
5
6
7
8
9
7
8
9
10
11
12
13
14
13 unmodified lines

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
32
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
14 unmodified lines

77
78
79
58
80
81
82
83
62
84
85
64
86
87
88
89
6 unmodified lines

96
97
98
77
99
100
101
102
1 unmodified line

104
105
106
85
107
108
109
110
111
112
113
92
114
115
116
117
118
119
120
121
99
122
123
124
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
125
126
127
128
129
130
162
131
132
133
134
135
136
168
137
138
139

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
          - git-refs

jobs:
  # Build the agent matrix dynamically: a single selected agent, or all of them
  # when the input is left empty.
  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
      # Granted for every leg so copilot-cli works in the matrix; harmless for others.
      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 ;;
6 unmodified lines

echo "$HOME/.local/bin" >> $GITHUB_PATH

- 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..."
1 unmodified line

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' || '' }}
          E2E_CODEX_MODEL: ${{ matrix.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 }}

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