一键导入
test-e2e-podman
Run end-to-end tests for the podman backend using real container and API calls
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Run end-to-end tests for the podman backend using real container and API calls
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Run end-to-end tests for the openshell backend using real container and API calls
Investigate infrastructure-level failures in the agentic-ci framework. Covers container backend issues, skill engine errors, forge MR/PR failures, and gate problems. Use when the container failed, MR operations broke, or the skill engine returned errors.
Cut a new agentic-ci release: bump version, open PR, wait for approval and checks, merge, tag, and push.
| name | test-e2e-podman |
| description | Run end-to-end tests for the podman backend using real container and API calls |
Run full lifecycle tests of the podman backend across harnesses and auth modes. All tests run inside a CI container with nested podman.
Each section below is independent. Run whichever sections match your environment and skip the rest.
Present the following default container images to the user and ask them to confirm or override each one before proceeding:
| Role | Default image | Variable |
|---|---|---|
| CI image | quay.io/aipcc/agentic-ci/podman | $CI_IMAGE |
| Claude runner | quay.io/aipcc/agentic-ci/claude-runner:latest | $CLAUDE_IMAGE |
| OpenCode runner | quay.io/aipcc/agentic-ci/opencode-runner:latest | $OPENCODE_IMAGE |
Also ask for:
$API_KEY_FILE.Per-section requirements:
~/.config/gcloud/application_default_credentials.json and
ANTHROPIC_VERTEX_PROJECT_ID + CLOUD_ML_REGION set in the environment.All agentic-ci commands run inside the CI container. The container needs
--privileged for nested podman (the podman backend starts a second
container inside the CI container).
podman rm -f podman-e2e 2>/dev/null || true
podman run -d --name podman-e2e \
--privileged \
-v "$(pwd):/workspace:ro,z" \
-v ~/.config/gcloud:/host-gcloud:ro,z \
-v "$API_KEY_FILE:/host-api-key:ro,z" \
$CI_IMAGE \
sleep infinity
podman exec podman-e2e bash -c '
mkdir -p ~/.config/gcloud
cp /host-gcloud/application_default_credentials.json ~/.config/gcloud/
cd /workspace && uv pip install --system --no-cache .
'
Verify:
podman exec podman-e2e agentic-ci --help prints usagepodman exec podman-e2e podman --version shows podman is availableReset the inner agentic-ci container between sections:
podman exec podman-e2e bash -c 'podman rm -f agentic-ci 2>/dev/null || true'
Use haiku to keep cost down. The model name format varies by harness:
| Harness | Vertex AI model | API key model |
|---|---|---|
| Claude Code | claude-haiku-4-5 | claude-haiku-4-5 |
| OpenCode | (not supported via Vertex) | anthropic/claude-haiku-4-5-20251001 |
Requires GCP ADC credentials and ANTHROPIC_VERTEX_PROJECT_ID.
podman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci setup --image "$CLAUDE_IMAGE"
'
Verify:
Auth: Vertex AI--- Podman container started ---podman exec podman-e2e podman ps --filter name=agentic-ci shows the
inner container runningpodman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: A2_OK" \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5 --no-otel
'
Verify:
--- Podman container already running --- (reuses container
from setup)A2_OKpodman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: A3_OK" \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5
'
Verify:
already running)A3_OKCheck that the OTEL JSONL log contains /v1/traces records — these are
what agentic-ci mlflow-push needs:
podman exec podman-e2e bash -c '
JSONL=$(ls -t /tmp/agentic-ci-run.*/claude-otel.jsonl 2>/dev/null | head -1)
echo "JSONL file: $JSONL"
grep -c "/v1/traces" "$JSONL"
'
Verify:
podman exec podman-e2e bash -c '
JSONL=$(ls -t /tmp/agentic-ci-run.*/claude-otel.jsonl 2>/dev/null | head -1)
grep "/v1/traces" "$JSONL" | head -1 | python3 -m json.tool
'
"path" containing /v1/traces"payload" with "resourceSpans" arraypodman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: A4_OK" \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5 --no-streaming --no-otel
'
Verify:
podman exec \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --image "$CLAUDE_IMAGE"
'
Verify:
--- Podman container stopped ---podman exec podman-e2e podman ps -a --filter name=agentic-ci shows no
containerRun cleanup first.
podman exec \
-e "ANTHROPIC_API_KEY=$(cat "$API_KEY_FILE")" \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: B1_OK" \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5 --no-otel
'
Verify:
Auth: API key (not Vertex AI)B1_OKpodman exec \
-e "ANTHROPIC_API_KEY=$(cat "$API_KEY_FILE")" \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: B2_OK" \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5
'
Verify:
B2_OKSame check as A3a — verify the JSONL log has /v1/traces records:
podman exec podman-e2e bash -c '
JSONL=$(ls -t /tmp/agentic-ci-run.*/claude-otel.jsonl 2>/dev/null | head -1)
echo "JSONL file: $JSONL"
grep -c "/v1/traces" "$JSONL"
'
Verify:
podman exec \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --image "$CLAUDE_IMAGE"
'
Verify:
--- Podman container stopped ---Requires GCP ADC credentials.
Run cleanup first.
podman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e OPENCODE_IMAGE="$OPENCODE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: C1_OK" \
--harness opencode \
--image "$OPENCODE_IMAGE" \
--model google-vertex/claude-haiku-4-5@20251001 \
--no-otel
'
Verify:
Harness: OpenCode and Auth: Vertex AIpodman exec \
-e OPENCODE_IMAGE="$OPENCODE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --harness opencode --image "$OPENCODE_IMAGE"
'
Verify:
--- Podman container stopped ---Requires ANTHROPIC_API_KEY (via API key file).
Run cleanup first.
podman exec \
-e "ANTHROPIC_API_KEY=$(cat "$API_KEY_FILE")" \
-e OPENCODE_IMAGE="$OPENCODE_IMAGE" \
podman-e2e bash -c '
agentic-ci run "Respond with exactly: D1_OK" \
--harness opencode \
--image "$OPENCODE_IMAGE" \
--model anthropic/claude-haiku-4-5-20251001 \
--no-otel
'
Verify:
Harness: OpenCode and Auth: API keypodman exec \
-e OPENCODE_IMAGE="$OPENCODE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --harness opencode --image "$OPENCODE_IMAGE"
'
Verify:
--- Podman container stopped ---Verifies that a plugin skill loads and executes correctly inside the
runner container. Uses the git-shallow-clone skill from the
odh-ai-helpers plugin to clone a repo into /tmp and confirm the
result.
Requires GCP ADC credentials and ANTHROPIC_VERTEX_PROJECT_ID.
Run cleanup first.
podman exec \
-e ANTHROPIC_VERTEX_PROJECT_ID=<your-project-id> \
-e CLOUD_ML_REGION=global \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5 --no-otel \
"Use the /odh-ai-helpers:git-shallow-clone skill to shallow-clone https://github.com/opendatahub-io/agentic-ci.git into /tmp/agentic-ci. After the clone completes, run: ls /tmp/agentic-ci and print the output, then respond with exactly: SKILL_OK"
'
Verify:
Plugins: line includes odh-ai-helpersSkill tool invocation for odh-ai-helpers:git-shallow-cloneBash tool call running git clonels /tmp/agentic-ci with repo contents (e.g. src, pyproject.toml, Makefile)SKILL_OKAgent exit code: 0podman exec \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --image "$CLAUDE_IMAGE"
'
Same test as Section E but with API key auth.
Run cleanup first.
podman exec \
-e "ANTHROPIC_API_KEY=$(cat "$API_KEY_FILE")" \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci run \
--image "$CLAUDE_IMAGE" \
--model claude-haiku-4-5 --no-otel \
"Use the /odh-ai-helpers:git-shallow-clone skill to shallow-clone https://github.com/opendatahub-io/agentic-ci.git into /tmp/agentic-ci. After the clone completes, run: ls /tmp/agentic-ci and print the output, then respond with exactly: SKILL_OK"
'
Verify:
Auth: API keyPlugins: line includes odh-ai-helpersSkill tool invocation for odh-ai-helpers:git-shallow-clonels /tmp/agentic-ci with repo contents (e.g. src, pyproject.toml, Makefile)SKILL_OKAgent exit code: 0podman exec \
-e CLAUDE_IMAGE="$CLAUDE_IMAGE" \
podman-e2e bash -c '
agentic-ci stop --image "$CLAUDE_IMAGE"
'
podman rm -f podman-e2e
Execute sections in order (A through F), running the cleanup step before each section. Skip sections whose prerequisites are not met. If any step fails, stop and investigate. Check inner container logs with:
podman exec podman-e2e podman logs agentic-ci