OCPKUEUE-714: add TAS demo for quick examples - #2282
Conversation
WalkthroughAdds a documented Kueue Topology Aware Scheduling demo with shared cluster setup, hostname and datacenter scenarios, node-label scripts, queues, workloads, and cleanup commands. ChangesTopology Aware Scheduling demo
Estimated code review effort: 3 (Moderate) | ~20 minutes Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error)
✅ Passed checks (14 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: kannon92 The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
@kannon92: This pull request references OCPKUEUE-714 which is a valid jira issue. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/tas/01-namespace.yaml`:
- Around line 1-6: Add a Kubernetes NetworkPolicy resource to the demo setup
alongside the kueue-tas-demo Namespace, using a default-deny or minimal
allow-list policy appropriate for the namespace. Ensure the policy targets
kueue-tas-demo and satisfies the repository requirement that every
Kubernetes/OpenShift namespace has a defined NetworkPolicy.
In `@docs/tas/datacenter/00-label-nodes.sh`:
- Around line 25-29: The demo must not overwrite or remove pre-existing node
labels. In docs/tas/datacenter/00-label-nodes.sh lines 25-29, remove
unconditional overwrite behavior and either fail when target labels exist or
snapshot their prior values while tracking only nodes changed by this run; in
docs/tas/datacenter/99-unlabel-nodes.sh lines 5-11, restore tracked prior values
and clean only nodes and labels owned by the demo run.
In `@docs/tas/datacenter/05-job-block-required.yaml`:
- Around line 18-35: Apply the workload baseline to both pod templates:
docs/tas/datacenter/05-job-block-required.yaml lines 18-35 and
docs/tas/datacenter/06-job-rack-preferred.yaml lines 17-34. Update each Job’s
pod spec to disable service-account token automounting, add resource limits
alongside requests, enable a read-only root filesystem in the container
securityContext, and define liveness and readiness probes for test-container.
In `@docs/tas/hostname/00-label-nodes.sh`:
- Around line 2-3: Update the comment in the node-labeling script to reference
the actual ResourceFlavor manifest filename, changing 03-resourceflavor.yaml to
02-resourceflavor.yaml without altering the labeling instructions.
- Around line 7-10: Update the worker-node discovery loop in 00-label-nodes.sh
to detect when oc get nodes returns no matching worker nodes and exit
immediately with a clear prerequisite error; retain the existing labeling
behavior when at least one worker is found.
In `@docs/tas/hostname/05-job.yaml`:
- Around line 25-28: Add CPU and memory limits to every demo container’s
resources block: docs/tas/hostname/05-job.yaml lines 25-28,
docs/tas/hostname/06-pod.yaml lines 20-23, both container blocks for rj1 and rj2
in docs/tas/hostname/07-jobset.yaml lines 26-29 and 46-49, and
docs/tas/hostname/08-deployment.yaml lines 24-27. Preserve the existing requests
and ensure each container defines both required limit fields.
- Around line 17-32: Apply the hardened security baseline across all listed
workloads: in docs/tas/hostname/05-job.yaml lines 17-32 and
docs/tas/hostname/06-pod.yaml lines 12-27, add read-only root filesystems and
disable service-account token automounting; in docs/tas/hostname/07-jobset.yaml
lines 20-29 and 40-49, add the complete pod and container security context to
rj1 and rj2; in docs/tas/hostname/08-deployment.yaml lines 19-31, add non-root
execution, RuntimeDefault seccomp, a read-only root filesystem, and disabled
token automounting.
In `@docs/tas/hostname/08-deployment.yaml`:
- Around line 4-18: Replace the Deployment’s generateName with a fixed
metadata.name in the manifest, while keeping the existing app selector and pod
labels consistent. Ensure repeated oc create runs target the same Deployment
instead of creating multiple controllers.
In `@docs/tas/README.md`:
- Around line 70-75: The cleanup instructions for generated workload resources
must delete the hostname demo’s Job, Pod, JobSet, and Deployment by their shared
queue label instead of relying on `oc delete -f`. Update the “Clean up” commands
to select that label while preserving cleanup of the queue, resource flavor,
topology, and node labels.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 18308eb4-6ad9-4413-9c52-e371308a530b
📒 Files selected for processing (21)
docs/tas/00-kueue-cr.yamldocs/tas/01-namespace.yamldocs/tas/README.mddocs/tas/datacenter/00-label-nodes.shdocs/tas/datacenter/01-topology.yamldocs/tas/datacenter/02-resourceflavor.yamldocs/tas/datacenter/03-clusterqueue.yamldocs/tas/datacenter/04-localqueue.yamldocs/tas/datacenter/05-job-block-required.yamldocs/tas/datacenter/06-job-rack-preferred.yamldocs/tas/datacenter/99-unlabel-nodes.shdocs/tas/hostname/00-label-nodes.shdocs/tas/hostname/01-topology.yamldocs/tas/hostname/02-resourceflavor.yamldocs/tas/hostname/03-clusterqueue.yamldocs/tas/hostname/04-localqueue.yamldocs/tas/hostname/05-job.yamldocs/tas/hostname/06-pod.yamldocs/tas/hostname/07-jobset.yamldocs/tas/hostname/08-deployment.yamldocs/tas/hostname/99-unlabel-nodes.sh
| apiVersion: v1 | ||
| kind: Namespace | ||
| metadata: | ||
| name: kueue-tas-demo | ||
| labels: | ||
| kueue.openshift.io/managed: "true" |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Add a NetworkPolicy for kueue-tas-demo.
This setup creates a workload namespace but does not provide a default-deny or minimal allow-list policy. Add the policy as part of the demo setup.
As per path instructions, Kubernetes/OpenShift namespaces must have a NetworkPolicy defined.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/01-namespace.yaml` around lines 1 - 6, Add a Kubernetes
NetworkPolicy resource to the demo setup alongside the kueue-tas-demo Namespace,
using a default-deny or minimal allow-list policy appropriate for the namespace.
Ensure the policy targets kueue-tas-demo and satisfies the repository
requirement that every Kubernetes/OpenShift namespace has a defined
NetworkPolicy.
Source: Path instructions
| oc label "${node}" \ | ||
| cloud.provider.com/topology-block="${blocks[$i]}" \ | ||
| cloud.provider.com/topology-rack="${racks[$i]}" \ | ||
| cloud.provider.com/node-group=tas-group \ | ||
| --overwrite |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Prevent the demo from corrupting existing node-label state.
The label script overwrites cluster-wide labels, and cleanup deletes them from every matching node. Preserve and restore prior values, or fail when any target label is already present and track only nodes modified by this demo.
docs/tas/datacenter/00-label-nodes.sh#L25-L29: avoid unconditional--overwrite, or snapshot existing label values before mutation.docs/tas/datacenter/99-unlabel-nodes.sh#L5-L11: clean only nodes and labels owned by this run.
📍 Affects 2 files
docs/tas/datacenter/00-label-nodes.sh#L25-L29(this comment)docs/tas/datacenter/99-unlabel-nodes.sh#L5-L11
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/datacenter/00-label-nodes.sh` around lines 25 - 29, The demo must
not overwrite or remove pre-existing node labels. In
docs/tas/datacenter/00-label-nodes.sh lines 25-29, remove unconditional
overwrite behavior and either fail when target labels exist or snapshot their
prior values while tracking only nodes changed by this run; in
docs/tas/datacenter/99-unlabel-nodes.sh lines 5-11, restore tracked prior values
and clean only nodes and labels owned by the demo run.
| spec: | ||
| restartPolicy: Never | ||
| securityContext: | ||
| runAsNonRoot: true | ||
| seccompProfile: | ||
| type: RuntimeDefault | ||
| containers: | ||
| - name: test-container | ||
| image: registry.access.redhat.com/ubi9/ubi-minimal:latest | ||
| command: ["sh", "-c", "echo Hello Kueue; sleep 3600"] | ||
| resources: | ||
| requests: | ||
| cpu: 100m | ||
| memory: 64Mi | ||
| securityContext: | ||
| allowPrivilegeEscalation: false | ||
| capabilities: | ||
| drop: ["ALL"] |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Apply the required workload baseline to both Jobs.
Both pod templates omit token disabling, resource limits, a read-only root filesystem, and liveness/readiness probes.
docs/tas/datacenter/05-job-block-required.yaml#L18-L35: add the missing controls.docs/tas/datacenter/06-job-rack-preferred.yaml#L17-L34: add the same controls.
As per path instructions, workload manifests must disable unnecessary tokens, define limits, use a read-only root filesystem, and define probes.
📍 Affects 2 files
docs/tas/datacenter/05-job-block-required.yaml#L18-L35(this comment)docs/tas/datacenter/06-job-rack-preferred.yaml#L17-L34
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/datacenter/05-job-block-required.yaml` around lines 18 - 35, Apply
the workload baseline to both pod templates:
docs/tas/datacenter/05-job-block-required.yaml lines 18-35 and
docs/tas/datacenter/06-job-rack-preferred.yaml lines 17-34. Update each Job’s
pod spec to disable service-account token automounting, add resource limits
alongside requests, enable a read-only root filesystem in the container
securityContext, and define liveness and readiness probes for test-container.
Source: Path instructions
| # Labels every worker node with instance-type=on-demand so the hostname | ||
| # ResourceFlavor (03-resourceflavor.yaml) can match them and TAS can discover |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Correct the ResourceFlavor filename in the comment.
The comment points to 03-resourceflavor.yaml, but the actual manifest is 02-resourceflavor.yaml; following the comment sends users to the ClusterQueue file.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/hostname/00-label-nodes.sh` around lines 2 - 3, Update the comment
in the node-labeling script to reference the actual ResourceFlavor manifest
filename, changing 03-resourceflavor.yaml to 02-resourceflavor.yaml without
altering the labeling instructions.
| for node in $(oc get nodes -l node-role.kubernetes.io/worker -o name); do | ||
| echo "Labeling ${node}" | ||
| oc label "${node}" instance-type=on-demand --overwrite | ||
| done |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Fail fast when no worker nodes are found.
An empty oc get nodes result makes this loop succeed without labeling anything, so the subsequent TAS resources can remain unschedulable while the demo appears to have completed. Exit with a clear error when no worker matches the documented prerequisite.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/hostname/00-label-nodes.sh` around lines 7 - 10, Update the
worker-node discovery loop in 00-label-nodes.sh to detect when oc get nodes
returns no matching worker nodes and exit immediately with a clear prerequisite
error; retain the existing labeling behavior when at least one worker is found.
| securityContext: | ||
| runAsNonRoot: true | ||
| seccompProfile: | ||
| type: RuntimeDefault | ||
| containers: | ||
| - name: test-container | ||
| image: registry.access.redhat.com/ubi9/ubi-minimal:latest | ||
| command: ["sh", "-c", "echo Hello Kueue; sleep 3600"] | ||
| resources: | ||
| requests: | ||
| cpu: 100m | ||
| memory: 64Mi | ||
| securityContext: | ||
| allowPrivilegeEscalation: false | ||
| capabilities: | ||
| drop: ["ALL"] |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Apply one hardened security baseline to every workload.
The Job and Pod lack read-only root filesystems and token disabling; both JobSet templates lack the full security context; and the Deployment lacks pod-level non-root/seccomp controls plus read-only storage and token disabling.
docs/tas/hostname/05-job.yaml#L17-L32: addreadOnlyRootFilesystem: trueandautomountServiceAccountToken: false.docs/tas/hostname/06-pod.yaml#L12-L27: addreadOnlyRootFilesystem: trueandautomountServiceAccountToken: false.docs/tas/hostname/07-jobset.yaml#L20-L29: add the full pod/container security context torj1.docs/tas/hostname/07-jobset.yaml#L40-L49: add the full pod/container security context torj2.docs/tas/hostname/08-deployment.yaml#L19-L31: add non-root, seccomp, read-only filesystem, and token-disable settings.
As per path instructions, workload security contexts must enforce these controls unless they are required by the workload.
📍 Affects 4 files
docs/tas/hostname/05-job.yaml#L17-L32(this comment)docs/tas/hostname/06-pod.yaml#L12-L27docs/tas/hostname/07-jobset.yaml#L20-L29docs/tas/hostname/07-jobset.yaml#L40-L49docs/tas/hostname/08-deployment.yaml#L19-L31
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/hostname/05-job.yaml` around lines 17 - 32, Apply the hardened
security baseline across all listed workloads: in docs/tas/hostname/05-job.yaml
lines 17-32 and docs/tas/hostname/06-pod.yaml lines 12-27, add read-only root
filesystems and disable service-account token automounting; in
docs/tas/hostname/07-jobset.yaml lines 20-29 and 40-49, add the complete pod and
container security context to rj1 and rj2; in
docs/tas/hostname/08-deployment.yaml lines 19-31, add non-root execution,
RuntimeDefault seccomp, a read-only root filesystem, and disabled token
automounting.
Source: Path instructions
| resources: | ||
| requests: | ||
| cpu: 100m | ||
| memory: 64Mi |
There was a problem hiding this comment.
🚀 Performance & Scalability | 🟠 Major | ⚡ Quick win
Add limits to every demo container.
All supplied workload manifests define requests but no limits, leaving resource usage unbounded if the demo command or image changes.
docs/tas/hostname/05-job.yaml#L25-L28: add CPU and memory limits.docs/tas/hostname/06-pod.yaml#L20-L23: add CPU and memory limits.docs/tas/hostname/07-jobset.yaml#L26-L29: add limits torj1.docs/tas/hostname/07-jobset.yaml#L46-L49: add limits torj2.docs/tas/hostname/08-deployment.yaml#L24-L27: add CPU and memory limits.
As per path instructions, resource limits (cpu, memory) are required on every container.
📍 Affects 4 files
docs/tas/hostname/05-job.yaml#L25-L28(this comment)docs/tas/hostname/06-pod.yaml#L20-L23docs/tas/hostname/07-jobset.yaml#L26-L29docs/tas/hostname/07-jobset.yaml#L46-L49docs/tas/hostname/08-deployment.yaml#L24-L27
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/hostname/05-job.yaml` around lines 25 - 28, Add CPU and memory
limits to every demo container’s resources block: docs/tas/hostname/05-job.yaml
lines 25-28, docs/tas/hostname/06-pod.yaml lines 20-23, both container blocks
for rj1 and rj2 in docs/tas/hostname/07-jobset.yaml lines 26-29 and 46-49, and
docs/tas/hostname/08-deployment.yaml lines 24-27. Preserve the existing requests
and ensure each container defines both required limit fields.
Source: Path instructions
| generateName: tas-deploy- | ||
| namespace: kueue-tas-demo | ||
| labels: | ||
| kueue.x-k8s.io/queue-name: tas-hostname-lq | ||
| spec: | ||
| replicas: 2 | ||
| selector: | ||
| matchLabels: | ||
| app: test-deployment | ||
| template: | ||
| metadata: | ||
| labels: | ||
| app: test-deployment | ||
| annotations: | ||
| kueue.x-k8s.io/podset-required-topology: kubernetes.io/hostname |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
git ls-files 'docs/tas/hostname/08-deployment.yaml' 'docs/tas/hostname/*' | sed 's#^`#FILE` #'
echo '---'
wc -l docs/tas/hostname/08-deployment.yaml
echo '---'
cat -n docs/tas/hostname/08-deployment.yaml
echo '---'
rg -n "generateName|kind: Deployment|selector:|matchLabels:|app: test-deployment|metadata:" docs/tas/hostname -nRepository: openshift/kueue-operator
Length of output: 2797
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- 05-job.yaml ---'
cat -n docs/tas/hostname/05-job.yaml
echo '--- 06-pod.yaml ---'
cat -n docs/tas/hostname/06-pod.yaml
echo '--- 07-jobset.yaml ---'
cat -n docs/tas/hostname/07-jobset.yaml
echo '--- 01-topology.yaml ---'
cat -n docs/tas/hostname/01-topology.yaml
echo '--- README/docs mentions ---'
rg -n "tas-hostname|08-deployment|oc create|kubectl apply|generateName|test-deployment" docs -g '!**/*.png'Repository: openshift/kueue-operator
Length of output: 5863
Avoid generateName on this Deployment oc create -f 08-deployment.yaml will create a new Deployment each time, and every instance reuses app: test-deployment as its selector. Re-creating the demo can leave multiple controllers managing the same Pods. Use a fixed metadata.name here or make the selector unique per instance.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/hostname/08-deployment.yaml` around lines 4 - 18, Replace the
Deployment’s generateName with a fixed metadata.name in the manifest, while
keeping the existing app selector and pod labels consistent. Ensure repeated oc
create runs target the same Deployment instead of creating multiple controllers.
| Clean up: | ||
|
|
||
| ```bash | ||
| oc delete -f 08-deployment.yaml -f 07-jobset.yaml -f 06-pod.yaml -f 05-job.yaml --ignore-not-found | ||
| oc delete -f 04-localqueue.yaml -f 03-clusterqueue.yaml -f 02-resourceflavor.yaml -f 01-topology.yaml | ||
| ./99-unlabel-nodes.sh |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
set -euo pipefail
printf '\n== docs/tas/README.md (around lines 1-140) ==\n'
nl -ba docs/tas/README.md | sed -n '1,140p'
printf '\n== Files under docs/tas ==\n'
find docs/tas -maxdepth 2 -type f | sort
printf '\n== Search for generateName, oc create, oc delete, labels in docs/tas ==\n'
rg -n "generateName|oc create|oc delete|label|queue" docs/tas -SRepository: openshift/kueue-operator
Length of output: 249
🏁 Script executed:
set -euo pipefail
printf '\n== docs/tas/README.md (excerpt) ==\n'
sed -n '1,140p' docs/tas/README.md
printf '\n== docs/tas files ==\n'
find docs/tas -maxdepth 2 -type f | sort
printf '\n== Search for cleanup-related references ==\n'
grep -RInE 'generateName|oc create|oc delete|label|queue' docs/tas || trueRepository: openshift/kueue-operator
Length of output: 8425
🏁 Script executed:
set -euo pipefail
printf '\n== docs/tas/README.md (lines 1-160) ==\n'
sed -n '1,160p' docs/tas/README.md
printf '\n== docs/tas tree ==\n'
find docs/tas -maxdepth 2 -type f | sort
printf '\n== cleanup references in docs/tas ==\n'
grep -RInE 'generateName|oc create|oc delete|label|queue' docs/tas || trueRepository: openshift/kueue-operator
Length of output: 8421
🏁 Script executed:
set -euo pipefail
printf '\n== docs/tas/README.md (lines 1-160) ==\n'
sed -n '1,160p' docs/tas/README.md
printf '\n== docs/tas files ==\n'
find docs/tas -maxdepth 2 -type f | sort
printf '\n== cleanup references in docs/tas ==\n'
grep -RInE 'generateName|oc create|oc delete|label|queue' docs/tas || trueRepository: openshift/kueue-operator
Length of output: 8422
🌐 Web query:
kubectl delete -f generateName manifest delete generated resource name behavior
💡 Result:
In Kubernetes, the generateName field is used only during the creation of a resource to instruct the API server to append a unique, random suffix to a specified name prefix [1][2]. Once a resource is created, its name is fixed and becomes the unique identifier for that instance within its namespace [1][2]. When using kubectl delete, you do not—and cannot—reference the generateName field to perform a deletion [3]. Because kubectl delete operates on the final, server-assigned name of the resource, you must provide that specific name [3]. Key points regarding this behavior: 1. Identification: After creation, the generateName field has no functional role in identifying or selecting the resource [1]. You must use the actual name (e.g., my-app-abcde) [3]. 2. Deletion Methods: To delete a resource whose name was originally generated, you can use: - The exact name: kubectl delete pod my-app-abcde [3]. - Label selectors: If you assigned a consistent label to your generated resources, you can delete them in bulk (e.g., kubectl delete pods -l app=my-app) [3]. - Namespace/All: You can target all resources of a specific type (e.g., kubectl delete pods --all) [3]. 3. No Special "GenerateName" Delete: There is no command or flag in kubectl that accepts a generateName prefix to delete all resources that share that prefix [3]. If you need to manage a group of resources created with the same prefix, using common labels is the recommended Kubernetes practice for identification and bulk deletion [3].
Citations:
- 1: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
- 2: https://kubernetes.io/docs/reference/kubernetes-api/definitions/object-meta-v1-meta/
- 3: https://kubernetes.io/docs/reference/kubectl/generated/kubectl_delete/
Fix cleanup for generated workload names. oc delete -f won’t target resources created from generateName, so this cleanup can leave the hostname demo’s Job, Pod, JobSet, and Deployment behind. Delete them by the shared queue label or record the returned names and delete those explicitly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/tas/README.md` around lines 70 - 75, The cleanup instructions for
generated workload resources must delete the hostname demo’s Job, Pod, JobSet,
and Deployment by their shared queue label instead of relying on `oc delete -f`.
Update the “Clean up” commands to select that label while preserving cleanup of
the queue, resource flavor, topology, and node labels.
|
@kannon92: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
Walk through for TAS.
Summary by CodeRabbit