feat/add ABEvalFlow as a reusable Konflux IntegrationTestScenario - #58
Draft
ikrispin wants to merge 6 commits into
Draft
feat/add ABEvalFlow as a reusable Konflux IntegrationTestScenario#58ikrispin wants to merge 6 commits into
ikrispin wants to merge 6 commits into
Conversation
Add 4 new tasks that bridge Konflux's Snapshot model with the ABEvalFlow evaluation pipeline: - parse-snapshot: extracts container image, git URL, and revision from the Konflux SNAPSHOT JSON parameter - deploy-agent: deploys the A2A agent as a Deployment+Service on a remote workload cluster via oc login, waits for readiness - emit-result: maps ABEvalFlow scorecard (pass/warn/fail + certification level) to Konflux's standardized TEST_OUTPUT format - cleanup-agent: tears down agent Deployment, Service, and eval Pods in the pipeline's finally block
Create Konflux-adapted versions of the 5 core pipeline tasks under pipeline/tasks/konflux/. Key changes from the originals: - Remove hardcoded namespace: ab-eval-flow - Default pipeline-repo-url to the fork - Make all external dependencies optional (MinIO, PostgreSQL, Compass, GitHub) with graceful no-op when secrets are missing - evaluate: submits eval as a remote Pod on the workload cluster where LiteLLM and the agent are co-located, runs both Harbor and analyze.py inside the Pod, extracts report.json via logs - analyze-scorecard: detects pre-computed report.json from the eval Pod and skips redundant analysis - Replace private image refs (internal registry, mcpchecker-runner) with public or configurable alternatives
Add the PipelineRun that Konflux resolves via git when the IntegrationTestScenario triggers. Chains 9 tasks: parse-snapshot → deploy-agent → prepare → test → evaluate → analyze-scorecard → store → emit-result (finally: cleanup-agent) Tasks are referenced via Tekton Bundle resolver from Quay.io. The PipelineRun accepts SNAPSHOT (injected by Konflux) and an optional AGENT_IMAGE_OVERRIDE param for when the snapshot image is in a private registry. Also includes the IntegrationTestScenario CR manifest for reference (applied via kubectl, not committed to the target repo).
Add build tooling for publishing tasks as Tekton Bundles to Quay.io: - Makefile: make bundles / make bundle-<name> / make digests Pushes all 9 tasks to quay.io/rh-ee-ikrispin/abevalflow-task-* - GitHub Actions workflow: auto-pushes bundles on merge to main when task files change (requires QUAY_USERNAME + QUAY_TOKEN secrets)
Add evaluation submission for the google-lightspeed-agent A2A agent: - metadata.yaml: A2A engine, 3 trials, gate policy with Compass facts push, evaluation/security/quality gates - task.toml + instruction.md: 4-step conversation eval (advisor capabilities, domain query, graceful degradation, protocol compliance) - llm_judge.py: weighted multi-criteria LLM judge with rubrics - test.sh + Dockerfile: Harbor execution environment
Add secret templates for ai5-marketplace-tenant namespace: - workload-cluster-credentials: SA token for the abevalflow-deployer service account on the workload cluster (with setup instructions) - llm-credentials: API key for LiteLLM proxy - compass-facts-api: bearer token for Compass Soundcheck API (optional)
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds ABEvalFlow as a reusable Konflux IntegrationTestScenario. Any Konflux application can reference this to run the full ABEvalFlow evaluation (A2A agent testing, security scanning, quality review, scorecard with certification levels) against its built images as part of the CI/CD pipeline.
Tested end-to-end with the
google-lightspeed-agentA2A agent on thestone-prod-p02Konflux cluster. The pipeline parses the Konflux Snapshot, deploys the agent on a workload cluster, runs 3 Harbor A2A trials with LLM-as-judge scoring, computes the unified scorecard with certification, and returns structuredTEST_OUTPUTback to Konflux for release gating.Architecture
Uses a two-cluster model following the standard Konflux pattern for integration tests that need live workloads:
stone-prod-p02) — orchestrates the pipeline, parses Snapshots, computes scorecards, reports TEST_OUTPUTcn-ai-lab/ab-eval-flow) — runs the agent deployment and Harbor evaluation where LiteLLM and eval infrastructure are co-locatedThe evaluation (Harbor trials +
analyze.py) runs as a remote Pod on the workload cluster to avoid cross-cluster networking/SSL issues. Results are extracted back via pod log markers and written to the shared workspace for the scorecard task.What's included
New Tekton tasks (4 files)
parse-snapshot— extracts container image, git URL, revision from Konflux SNAPSHOT JSONdeploy-agent— deploys A2A agent on the workload cluster via remoteoc loginemit-result— maps scorecard pass/warn/fail + certification to Konflux TEST_OUTPUTcleanup-agent— tears down agent and eval Pods in thefinallyblockAdapted Tekton tasks (5 files)
Konflux-specific versions of existing phase tasks under
pipeline/tasks/konflux/:prepare— removed hardcoded namespace, configurable pipeline repo URLtest— MinIO/DB persistence optional (graceful no-op when secrets missing)evaluate— submits eval as remote Pod, runs Harbor + analyze.py on workload cluster, extracts report.json from logsanalyze-scorecard— detects pre-computed report.json from eval Pod, skips redundant analysisstore— all external dependencies (MinIO, PostgreSQL, GitHub, Quay) optionalPipeline + CI
konflux-eval-pipelinerun.yaml— PipelineRun with 9 tasks chained via bundle resolver, PVC workspace, 4h timeout,finallycleanupMakefile—make bundlesto push all tasks as Tekton Bundles to Quaypush-bundles.yaml— GitHub Actions workflow for automated bundle publishingSubmission + Config
submissions/google-lightspeed-agent/— POC submission with A2A eval tasks, LLM judge, and Harbor environmentconfig/konflux/secrets-template.yaml— templates for workload-cluster-credentials, llm-credentials, compass-facts-apiconfig/konflux/integration-test-scenario.yaml— IntegrationTestScenario CR referenceOCI artifacts in Quay
Container image
quay.io/rh-ee-ikrispin/abevalflow-eval-base:latestab-eval-flow/eval-base:local-env.Tekton Bundles
All 9 tasks are published as OCI bundles under
quay.io/rh-ee-ikrispin/:abevalflow-task-parse-snapshot:0.1abevalflow-task-deploy-agent:0.1abevalflow-task-emit-result:0.1abevalflow-task-cleanup-agent:0.1abevalflow-task-prepare:0.1abevalflow-task-test:0.1abevalflow-task-evaluate:0.1abevalflow-task-analyze-scorecard:0.1abevalflow-task-store:0.1The
pipeline/integration/Makefileprovidesmake bundlesto push all andmake digeststo print SHA digests. When moving to production, these should be relocated to a team Quay org (e.g.,quay.io/rhecosystemappeng/).Key design decisions
IntegrationTestScenario, not pipeline migration — ABEvalFlow is integrated as a reusable eval service that Konflux applications reference, not a full migration to OCI Trusted Artifacts. Any project onboards by applying a single CR.
Tekton Bundles — All 9 tasks are published as versioned OCI bundles to Quay and referenced via the
bundlesresolver. This follows the same pattern as Konflux's own task catalog and allows independent versioning.Cross-cluster execution — The managed Konflux cluster doesn't allow creating Deployments/Services. The agent and eval workloads are deployed on the workload cluster via
oc loginwith a stored SA token. This matches how other Konflux integration tests handle live workloads.Remote eval Pod — Harbor and analyze.py run inside a Pod on the workload cluster where LiteLLM and the agent are co-located (cluster-internal svc URLs, no SSL issues). Results are extracted back to Konflux via delimited log markers.
Dual-publish model — The PipelineRun is resolved from git (via the ITS), but the tasks inside it are resolved from Tekton Bundles. Updating task logic requires both a bundle push and a git push. This is documented in the PipelineRun header.
How another project onboards
They also need: a submission directory in this repo,
workload-cluster-credentialssecret in their tenant, and the agent image accessible from the workload cluster.Testing
Test environment
stone-prod-p02(api.stone-prod-p02.hjvn.p1.openshiftapps.com)ai5-marketplace-tenantcn-ai-lab(api.cn-ai-lab.2vn8.p1.openshiftapps.com)ab-eval-flowgoogle-lightspeed-agent(A2A agent)Test execution
Testing was done by creating override Snapshots on the Konflux cluster to trigger the IntegrationTestScenario without modifying the upstream agent repo. The Snapshot referenced an existing built image from
quay.io/redhat-user-workloads/ai5-marketplace-tenant/google-lightspeed-agent.Test results
{ "result": "SUCCESS", "note": "ABEvalFlow: recommendation=pass, certification=foundational, gates_passed=5, gates_failed=0", "successes": 1, "failures": 0, "warnings": 0 }What was validated
oc loginfinallyblock (even on failure)What was NOT validated
:0.1tags)Known limitations and TODOs
--insecure-skip-tls-verifyoccalls skip TLS verification. Should inject workload cluster CA cert as a Secret.AGENT_IMAGE_OVERRIDEbecause the Konflux-built image (redhat-user-workloads) is private and the workload cluster can't pull it. Defaults to the snapshot image; set override when needed.:0.1tags (mutable). Should pin by@sha256:digest for production. The Makefile'smake digeststarget provides the SHAs.compass.stage.redhat.comdue to SSL cert verification. Non-blocking — scorecard is computed locally.SKIP_JWT_VALIDATION=true). Real SSO credentials needed for meaningful eval scores.quay.io/rh-ee-ikrispin/. Should be relocated to a team org for production.Related
https://redhat.atlassian.net/browse/APPENG-5740?atlOrigin=eyJpIjoiZDE0MDU0ZTE3YWNmNGI2ZDkwMTkxMDFkZDg2MDM5ZDIiLCJwIjoiaiJ9