Conversation
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR appears to transition the repo toward “Telescope V2” by introducing KCL-based Azure DevOps pipeline generation and removing a large amount of legacy Python tooling, docs, and CI configuration.
Changes:
- Add KCL module + reusable KCL step libraries for Azure, Kubernetes, and result formatting.
- Introduce an example KCL-driven pipeline and manifests (KWOK node + CL2 job).
- Remove many legacy Python modules/configs/docs and GitHub Actions validation workflows; simplify Python packaging config.
Reviewed changes
Copilot reviewed 1 out of 1 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| modules/python/pyproject.toml | Narrows packaged Python modules and removes console scripts, aligning with reduced Python surface area. |
| modules/python/kwok/config/kwok-node.yaml | Adds controller-group labeling to support multi-controller KWOK setups. |
| modules/python/kwok/config/kwok-config.yaml | Replaces hard-coded KWOK tuning values with templated parameters. |
| kcl/lib/util/string.k | Adds string escaping helper for safely embedding JSON/shell strings. |
| kcl/lib/util/result.k | Adds helper to wrap results into the Telescope ADX ingestion schema. |
| kcl/lib/steps/k8s/run_cluster_loader_2.k | Adds a reusable step to run CL2 in-cluster and wait for completion. |
| kcl/lib/steps/k8s/print_cl2_pod_logs.k | Adds a reusable step to print CL2 pod logs for debugging. |
| kcl/lib/steps/k8s/kwok.k | Adds a reusable step to create/validate KWOK nodes via the Python module. |
| kcl/lib/steps/common/upload_result.k | Adds a reusable step to upload results to Azure Blob Storage. |
| kcl/lib/steps/common/set_run_id.k | Adds a reusable step to generate/set a deterministic RUN_ID. |
| kcl/lib/steps/common/install_python.k | Adds a reusable step to install Python deps for pipeline execution. |
| kcl/lib/steps/common/install_kcl.k | Adds a reusable step to install KCL in the pipeline agent. |
| kcl/lib/steps/azure/wait_for_node_pool_succeeded.k | Adds polling step for AKS nodepool readiness. |
| kcl/lib/steps/azure/wait_for_cluster_succeeded.k | Adds polling step for AKS cluster readiness. |
| kcl/lib/steps/azure/resource_group.k | Adds create/delete resource group helpers. |
| kcl/lib/steps/azure/login.k | Adds Azure subscription/region initialization step. |
| kcl/lib/steps/azure/get_credentials.k | Adds kubeconfig retrieval step for AKS clusters. |
| kcl/lib/steps/azure/create_node_pool.k | Adds helper for creating user-mode node pools (with optional taints/labels). |
| kcl/lib/steps/azure/az_cli.k | Adds a wrapper for AzureCLI@2 tasks used by other steps. |
| kcl/lib/const.k | Adds shared defaults for agent pool and service connection. |
| kcl/kcl.mod | Introduces the KCL module definition and declares KCL dependencies. |
| kcl/example_pipeline/pipeline.k | Adds an end-to-end example pipeline demonstrating the new KCL approach. |
| kcl/example_pipeline/kwok-node.yaml | Adds an example KWOK node manifest template used by the pipeline. |
| kcl/example_pipeline/cl2.yaml | Adds an example CL2 Job + RBAC manifest to run benchmarks in-cluster. |
| README.md | Updates repository docs to “Telescope V2” and describes KCL-based workflow. |
| CODEOWNERS | Simplifies CODEOWNERS ownership list. |
| .yamllint | Updates yamllint configuration (removes previous ignore rules). |
| .opencode/skills | Adds indirection to reuse .claude/skills via .opencode. |
| .githooks/pre-commit | Adds a pre-commit hook to auto-generate the example pipeline YAML when KCL changes are staged. |
There was a problem hiding this comment.
escapeStr’s lambda/type syntax doesn’t match how other lambdas in this PR are declared (e.g., lambda ... -> steps.Step, lambda ... -> str), and returning str { ... } is likely not valid for producing a string value. Suggest using a consistent lambda signature that returns a string and returns the escaped expression directly (or via the lambda body’s return value) so util.escapeStr(...) works reliably in pipeline.k.
| escapeStr = lambda s -> str { | |
| s.replace("\\", "\\\\").replace('"', '\\"') |
There was a problem hiding this comment.
The backslash before ${TIMESTAMP} will be preserved into the emitted YAML/script and can prevent the shell from expanding the timestamp at runtime (you’ll likely end up with a literal ${TIMESTAMP} in the JSON). Prefer using $TIMESTAMP (no braces) or ${TIMESTAMP} without escaping so bash expansion works, while still avoiding KCL interpolation (KCL interpolates ${...} only when it’s a KCL expression).
There was a problem hiding this comment.
AzCli is referenced but not imported or namespaced in this module. Unless KCL implicitly injects sibling symbols (uncommon), this will fail at compile time. Suggest importing the module that defines AzCli (e.g., the local az_cli.k) and calling it via a qualified name (or re-export AzCli from a package-level module and import that consistently). The same issue appears in other kcl/lib/steps/azure/*.k files calling AzCli(...).
There was a problem hiding this comment.
az storage blob upload --auth-mode key requires an account key (via --account-key or AZURE_STORAGE_KEY), but none is provided here, so this step will fail in typical AzureCLI@2 service-connection runs. If the intent is to use the service connection’s identity, use --auth-mode login (and ensure the identity has RBAC on the storage account/container), or explicitly pass the key via a secure variable and wire it into the task env/args.
| --auth-mode login |
There was a problem hiding this comment.
\${STATUS} will likely prevent bash expansion when this JSON is written inside the heredoc later, resulting in a literal ${STATUS} in output. Since KCL only interpolates ${...} when it’s a KCL expression, prefer using $STATUS here (no braces) so the shell expands it at runtime without needing escaping.
| "cl2_status": "$STATUS", |
There was a problem hiding this comment.
This ClusterRole grants full cluster-admin-like privileges to the cl2 ServiceAccount, which is overly permissive for running CL2 and increases blast radius if the job/pod is compromised. Suggest scoping RBAC down to the minimal resources/verbs required by CL2, or referencing a known-good RBAC manifest from the upstream perf-tests/clusterloader2 guidance and tailoring it to your test config.
| - apiGroups: [""] | |
| resources: | |
| - namespaces | |
| - pods | |
| - pods/log | |
| - pods/eviction | |
| - services | |
| - endpoints | |
| - replicationcontrollers | |
| - resourcequotas | |
| - limitranges | |
| - configmaps | |
| - serviceaccounts | |
| - secrets | |
| - events | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: [""] | |
| resources: | |
| - nodes | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - apiGroups: ["apps"] | |
| resources: | |
| - deployments | |
| - replicasets | |
| - statefulsets | |
| - daemonsets | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: ["batch"] | |
| resources: | |
| - jobs | |
| - cronjobs | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: ["autoscaling"] | |
| resources: | |
| - horizontalpodautoscalers | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: ["networking.k8s.io"] | |
| resources: | |
| - networkpolicies | |
| - ingresses | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: ["policy"] | |
| resources: | |
| - poddisruptionbudgets | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection | |
| - apiGroups: ["rbac.authorization.k8s.io"] | |
| resources: | |
| - roles | |
| - rolebindings | |
| verbs: | |
| - get | |
| - list | |
| - watch | |
| - create | |
| - update | |
| - patch | |
| - delete | |
| - deletecollection |
There was a problem hiding this comment.
Corrected spelling of 'pushlish' to 'publish'.
| Use this approach when you want to publish your benchmarks to the public. |
There was a problem hiding this comment.
The PR title ("fix") doesn’t match the scope of changes (major repo direction shift toward KCL pipelines, removal of many legacy modules/docs/CI). Please update the PR title and/or description to reflect the migration and deletions so reviewers understand intent and expected impact.
as title