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
.github/workflows
Me2e-checkpoint-store.yml+36/-67
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
``