e2e: add acceptance minikube quick e2e smoke gate - #6437
Conversation
c95b027 to
916dba7
Compare
0168d44 to
db186af
Compare
|
/test ci/centos/mini-e2e/k8s-1.36 |
1 similar comment
|
/test ci/centos/mini-e2e/k8s-1.36 |
|
/test ci/centos/mini-e2e-helm/k8s-1.36 |
|
/test ci/centos/mini-e2e-operator/k8s-1.36 |
|
@Mergifyio rebase |
🛑 The pull request rule doesn't match anymoreDetailsThis action has been cancelled. |
db186af to
c3dee6a
Compare
There was a problem hiding this comment.
Pull request overview
This PR adds a lightweight “acceptance” E2E smoke gate that runs on every PR using GitHub Actions with minikube + Rook Ceph, to catch basic provisioning/snapshot/clone regressions across RBD, CephFS, and NFS before the heavier CentOS mini-e2e jobs.
Changes:
- Add a new
e2e-minikube-acceptanceGitHub Actions workflow that boots minikube, deploys Rook + the ceph-csi operator, and runs onlyLabel("acceptance")specs. - Tag 12 core E2E specs with
Label("acceptance"), add a--skip-vaultflag, and create an empty KMS ConfigMap when Vault is skipped. - Add a GitHub Actions helper script, update minikube/kubectl install logic, and document the acceptance suite (plus centralize
KUBE_VERSIONinbuild.env).
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
scripts/rook.sh |
Adjusts Rook pool readiness checks used during minikube-based CI deployments. |
scripts/minikube.sh |
Updates kubectl download URL and handles kubelet verbosity tweaks differently for VM_DRIVER=none. |
scripts/github-action-helper.sh |
New helper functions for installing prerequisites, preparing an OSD disk, and collecting logs in Actions. |
e2e/utils.go |
Adds helper to create an empty KMS ConfigMap to support --skip-vault. |
e2e/e2e_test.go |
Introduces --skip-vault flag wiring for the E2E test binary. |
e2e/rbd.go |
Skips Vault deployment when requested and labels selected RBD specs as acceptance. |
e2e/cephfs.go |
Skips Vault deployment when requested and labels selected CephFS specs as acceptance. |
e2e/nfs.go |
Labels selected NFS specs as acceptance. |
e2e/README.md |
Documents how to run/extend the acceptance E2E suite locally and in forks. |
build.env |
Adds KUBE_VERSION as the centralized Kubernetes version for minikube workflows/scripts. |
AGENTS.md |
Documents the new acceptance smoke gate for contributors/agents. |
.github/workflows/e2e-minikube-acceptance.yaml |
New workflow to run the acceptance suite on every PR. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
c3dee6a to
66033d3
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated 1 comment.
Suppressed comments (2)
scripts/github-action-helper.sh:39
- After creating/logging into the iSCSI device, the extra-disk re-detection repeats the same
(loop|${boot_dev})pattern. Ifboot_devis empty this again becomes(loop|)and filters out everything, leavingextra_devempty even though the iSCSI disk exists.
extra_dev="$(sudo lsblk --noheading --list \
--nodeps --output KNAME \
| grep -Ev "(loop|${boot_dev})" | head -1)"
scripts/github-action-helper.sh:113
collect_logsruns underset -e, but thekubectl ... -o jsonpath=...inside the$(...)can return non-zero (e.g., namespace missing), which will abort log collection early. Make the pod-listing tolerant to failures (similar to the other kubectl calls) before iterating.
kubectl -n "${ns}" get pods -o wide > "${LOG_DIR}/${ns}-pods.txt" 2>&1 || true
kubectl -n "${ns}" get events --sort-by='.lastTimestamp' > "${LOG_DIR}/${ns}-events.txt" 2>&1 || true
for pod in $(kubectl -n "${ns}" get pods -o jsonpath='{.items[*].metadata.name}' 2>/dev/null); do
kubectl -n "${ns}" logs "${pod}" --all-containers --tail=200 > "${LOG_DIR}/${ns}-${pod}.log" 2>&1 || true
done
66033d3 to
55b35a4
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.
Suppressed comments (5)
scripts/github-action-helper.sh:111
- This
curldownload can succeed with an HTTP error page (e.g. 404) and only fail later duringtar, which makes diagnosing transient or versioning issues harder. Using-fmakescurlfail fast on HTTP errors.
# CNI plugins
local cniv="v1.6.2"
local cni_base="https://github.com"
cni_base+="/containernetworking/plugins"
local cni_tar="cni-plugins-linux-amd64-${cniv}.tgz"
sudo mkdir -p /opt/cni/bin
curl -sLO \
"${cni_base}/releases/download/${cniv}/${cni_tar}"
sudo tar -xzf "${cni_tar}" -C /opt/cni/bin
rm -f "${cni_tar}"
scripts/rook.sh:229
- Timeout message is grammatically unclear and does not include the pool name, which makes failures harder to diagnose in CI logs.
if [ "$retry" -gt "$ROOK_DEPLOY_TIMEOUT" ]; then
echo "[Timeout] Failed to get RBD pool Ready"
return 1
scripts/github-action-helper.sh:25
find_extra_block_devassigns toextra_devwithout declaring it local, which leaks a global variable and can cause hard-to-debug interactions if the caller (or environment) uses the same name.
exclude+="|${root_dev}"
fi
extra_dev="$(sudo lsblk --noheading --list --nodeps --output KNAME | grep -Ev "(${exclude})" | head -1)"
if [ -z "${extra_dev}" ]; then
scripts/github-action-helper.sh:57
prepare_diskproceeds even iffind_extra_block_devreturns an empty string, which makes the subsequent/dev/${BLOCK}operations no-ops (because of|| true) and can hide a real setup failure. Fail fast when no block device is available.
prepare_disk() {
: "${BLOCK:=$(find_extra_block_dev)}"
sudo swapoff --all --verbose || true
scripts/github-action-helper.sh:98
- This
curldownload can succeed with an HTTP error page (e.g. 404) and only fail later duringtar, which makes diagnosing transient or versioning issues harder. Using-fmakescurlfail fast on HTTP errors.
This issue also appears on line 102 of the same file.
local crictlv="v1.35.0"
local crictl_base="https://github.com"
crictl_base+="/kubernetes-sigs/cri-tools"
local crictl_tar="crictl-${crictlv}-linux-amd64.tar.gz"
curl -sLO \
"${crictl_base}/releases/download/${crictlv}/${crictl_tar}"
sudo tar -xzf "${crictl_tar}" -C /usr/local/bin
rm -f "${crictl_tar}"
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Suppressed comments (3)
scripts/github-action-helper.sh:49
- After creating the iSCSI backing device, the second probe for
extra_devhas the same issue as the first: it does not filter to TYPE=="disk" and may return an unexpected device name. Keep the disk-type filter here too soprepare_diskis deterministic and safe.
extra_dev="$(sudo lsblk --noheading --list \
--nodeps --output KNAME \
| grep -Ev "(${exclude})" | head -1)"
scripts/minikube.sh:275
- In the VM_DRIVER="none" path this script runs with
#!/bin/bash -e, sosystemctl daemon-reload/systemctl restart kubeletwill hard-fail the workflow if kubelet is not managed by systemd or if/etc/systemd/system/kubelet.service.d/10-kubeadm.confdoes not exist on the runner. Guard these commands so the minikube bring-up remains robust across runner images.
if [[ "${VM_DRIVER}" == "none" ]]; then
sudo sed -i 's/\(ExecStart=\/var.*\)/\1 --v=4/' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf || true
sudo systemctl daemon-reload
sudo systemctl restart kubelet
else
e2e/utils.go:2156
createEmptyKMSConfigMapcaches success in a package-globalkmsConfigMapCreatedboolean even though the function takesnsas an argument. If this helper is ever called for a different namespace (or if the suite is executed with parallel ginkgo processes), this cache can incorrectly skip creation and also introduces a potential data race. Consider removing the global cache (the Create call is already idempotent via IsAlreadyExists) or keying it by namespace using sync.Once/atomic primitives.
func createEmptyKMSConfigMap(c kubernetes.Interface, ns string) error {
if kmsConfigMapCreated {
return nil
}
55b35a4 to
41f623f
Compare
Merge Queue Status
This pull request spent 31 minutes 55 seconds in the queue, with no time running CI. Required conditions to merge
ReasonThe merge conditions cannot be satisfied due to failing checks Failing checks:
HintYou may have to fix your CI before adding the pull request to the queue again. Requeued — the merge queue status continues in this comment ↓. |
Add a lightweight acceptance e2e workflow that runs on every PR via
GitHub Actions using minikube + Rook Ceph. This gates basic
provisioning, snapshot, and clone operations across RBD, CephFS, and
NFS drivers (12 specs total) before the heavier CentOS mini-e2e suite.
The acceptance suite uses ceph-csi-operator deployment mode, where
the operator deploys ceph-csi drivers via CRDs (Driver, OperatorConfig)
instead of manual manifests.
Key changes:
- Add e2e-minikube-acceptance.yaml workflow with operator deployment
- Tag 12 core specs with Label("acceptance") across drivers
- Add skip-vault flag to skip Vault KMS in smoke runs
- Add KUBE_VERSION to build.env as single source of truth
- Add github-action-helper.sh with install_minikube_prereqs,
prepare_disk, and collect_logs functions
- Tolerate pre-existing KMS configmap in operator mode
- Document acceptance suite in e2e/README.md and AGENTS.md
- Contributors can label new feature specs with acceptance and run
the gate in their own fork for quick e2e verification loops
Assisted-by: Claude <noreply@anthropic.com>
Signed-off-by: Rakshith R <rar@redhat.com>
12999a0 to
258cea1
Compare
|
/test ci/centos/k8s-e2e-external-storage/1.34 |
|
/test ci/centos/k8s-e2e-external-storage/1.35 |
|
/test ci/centos/mini-e2e-helm/k8s-1.34 |
|
/test ci/centos/upgrade-tests-cephfs |
|
/test ci/centos/k8s-e2e-external-storage/1.36 |
|
/test ci/centos/mini-e2e-helm/k8s-1.35 |
|
/test ci/centos/mini-e2e/k8s-1.34 |
|
/test ci/centos/upgrade-tests-rbd |
|
/test ci/centos/mini-e2e-helm/k8s-1.36 |
|
/test ci/centos/mini-e2e/k8s-1.35 |
|
/test ci/centos/mini-e2e/k8s-1.36 |
|
/test ci/centos/k8s-e2e-external-storage/1.36 |
Failed during deploying minikube/rook (logs) |
|
/test ci/centos/mini-e2e/k8s-1.34 |
|
Merge Queue Status
This pull request spent 39 seconds in the queue, including 7 seconds running CI. Required conditions to merge
|
Summary
Add a lightweight acceptance e2e workflow that runs on every PR via
GitHub Actions using minikube + Rook Ceph. This gates basic
provisioning, snapshot, and clone operations across RBD, CephFS, and
NFS drivers (12 specs total) before the heavier CentOS mini-e2e suite.
instead of manual manifests
Label("acceptance")— contributors can addthe label to new feature specs for quick e2e verification loops in
their fork
KUBE_VERSIONtobuild.envas single source of truthscripts/github-action-helper.shwithinstall_minikube_prereqs,prepare_disk, andcollect_logsfunctionsskip-vaultflag to skip Vault KMS deployment for faster runse2e/README.mdandAGENTS.mdAcceptance specs (12 total)
Test plan
green runs verified on upstream PR)
🤖 Generated with Claude Code