This commit is contained in:
Noa Limoy 2025-09-18 12:23:33 +00:00 committed by GitHub
commit f4945d9a42
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 220 additions and 1 deletions

View File

@ -0,0 +1,69 @@
name: PVCViewer Controller Integration Test
on:
pull_request:
paths:
- components/pvcviewer-controller/**
- releasing/version/VERSION
branches:
- master
- notebooks-v1
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.number }}
cancel-in-progress: true
env:
IMG: ghcr.io/kubeflow/notebooks/pvcviewer-controller
TAG: integration-test
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build PVCViewer Controller Image
run: |
cd components/pvcviewer-controller
make docker-build-multi-arch
- name: Install KinD
run: ./components/testing/gh-actions/install_kind.sh
- name: Create KinD Cluster
run: kind create cluster --config components/testing/gh-actions/kind-1-25.yaml
- name: Load Images into KinD Cluster
run: |
kind load docker-image "${IMG}:${TAG}"
- name: Install kustomize
run: ./components/testing/gh-actions/install_kustomize.sh
- name: Install Istio
run: ./components/testing/gh-actions/install_istio.sh
- name: Install cert-manager
run: ./components/testing/gh-actions/install_cert_manager.sh
- name: Build & Apply manifests
run: |
cd components/pvcviewer-controller/config
kubectl create ns kubeflow
export CURRENT_IMAGE="${IMG}"
export PR_IMAGE="${IMG}:${TAG}"
# escape "." in the image names, as it is a special characters in sed
export CURRENT_IMAGE=$(echo "$CURRENT_IMAGE" | sed 's|\.|\\.|g')
export PR_IMAGE=$(echo "$PR_IMAGE" | sed 's|\.|\\.|g')
kustomize build base \
| sed "s|${CURRENT_IMAGE}:[a-zA-Z0-9_.-]*|${PR_IMAGE}|g" \
| kubectl apply -f -
kubectl wait pods -n kubeflow -l app=pvcviewer --for=condition=Ready --timeout=300s

View File

@ -0,0 +1,36 @@
name: PVCViewer Controller Multi-Arch Build Test
on:
pull_request:
paths:
- components/pvcviewer-controller/**
- releasing/version/VERSION
branches:
- master
- notebooks-v1
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.number }}
cancel-in-progress: true
env:
IMG: ghcr.io/kubeflow/notebooks/pvcviewer-controller
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build multi-arch Image
run: |
cd components/pvcviewer-controller
ARCH=linux/amd64 make docker-build-multi-arch
ARCH=linux/ppc64le make docker-build-multi-arch
ARCH=linux/arm64/v8 make docker-build-multi-arch

View File

@ -0,0 +1,27 @@
name: Run PVCViewer Controller unit tests
on:
pull_request:
paths:
- components/pvcviewer-controller/**
- releasing/version/VERSION
branches:
- master
- notebooks-v1
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.22.2"
check-latest: true
- name: Run unit tests
run: |
cd components/pvcviewer-controller
make test

View File

@ -1,6 +1,8 @@
# PVCViewer
Using this component, PVCViewers can easily be created. PVCViewers enable users to open a filebrowser on arbitrary persistent volume claims, letting them inspect, download, upload and manipulate data.
Using this component, PVCViewers can easily be created. PVCViewers enable users to open a filebrowser on arbitrary persistent volume claims, letting them inspect, download, upload and manipulate data.
This component now includes comprehensive CI/CD workflows for automated testing and multi-architecture builds.
The PVCViewer API is meant to be extensible and can easily be user for other use-cases, such as launching user-tailored apps (e.g. tensorboards or notebooks).

View File

@ -35,6 +35,8 @@ var _ = Describe("PVCViewer controller", func() {
// However, while EnvTest supports creating namespaces, it can't tear them down.
// It is recommended to simply use a different namespace for each test.
// See: https://book.kubebuilder.io/reference/envtest.html#namespace-usage-limitation
testCount++
testHelper = &TestHelper{
namespace: "test-" + fmt.Sprint(testCount),

View File

@ -0,0 +1,15 @@
#!/bin/bash
set -euo pipefail
CERT_MANAGER_VERSION="1.12.10"
CERT_MANAGER_URL="https://github.com/cert-manager/cert-manager/releases/download/v${CERT_MANAGER_VERSION}/cert-manager.yaml"
echo "Fetching cert-manager ${CERT_MANAGER_VERSION} manifests..."
curl -sL -o cert-manager.yaml "$CERT_MANAGER_URL"
echo "Applying cert-manager manifests..."
kubectl apply -f cert-manager.yaml
echo "Waiting for cert-manager to be ready..."
kubectl wait --for=condition=ready pod -l 'app in (cert-manager,webhook)' --timeout=180s -n cert-manager

View File

@ -0,0 +1,15 @@
#!/bin/bash
set -euo pipefail
ISTIO_VERSION="1.17.8"
ISTIO_URL="https://istio.io/downloadIstio"
echo "Installing Istio ${ISTIO_VERSION} ..."
mkdir istio_tmp
pushd istio_tmp >/dev/null
curl -sL "$ISTIO_URL" | ISTIO_VERSION=${ISTIO_VERSION} sh -
cd istio-${ISTIO_VERSION}
export PATH=$PWD/bin:$PATH
istioctl install -y
popd

View File

@ -0,0 +1,17 @@
#!/bin/bash
set -euo pipefail
KIND_VERSION="0.22.0"
KIND_URL="https://kind.sigs.k8s.io/dl/v${KIND_VERSION}/kind-linux-amd64"
echo "Setting up kind environment..."
sudo swapoff -a
sudo rm -f /swapfile
sudo mkdir -p /tmp/etcd
sudo mount -t tmpfs tmpfs /tmp/etcd
echo "Installing kind ${KIND_VERSION} ..."
curl -sL -o kind "$KIND_URL"
chmod +x ./kind
sudo mv kind /usr/local/bin

View File

@ -0,0 +1,12 @@
#!/bin/bash
set -euo pipefail
KUSTOMIZE_VERSION="5.4.1"
KUSTOMIZE_URL="https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v${KUSTOMIZE_VERSION}/kustomize_v${KUSTOMIZE_VERSION}_linux_amd64.tar.gz"
echo "Installing kustomize ${KUSTOMIZE_VERSION} ..."
curl -sL -o kustomize.tar.gz "$KUSTOMIZE_URL"
tar -xzf kustomize.tar.gz
chmod +x kustomize
sudo mv kustomize /usr/local/bin

View File

@ -0,0 +1,24 @@
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
# Configure registry for KinD.
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."$REGISTRY_NAME:$REGISTRY_PORT"]
endpoint = ["http://$REGISTRY_NAME:$REGISTRY_PORT"]
# This is needed in order to support projected volumes with service account tokens.
# See: https://kubernetes.slack.com/archives/CEKK1KTN2/p1600268272383600
kubeadmConfigPatches:
- |
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
metadata:
name: config
apiServer:
extraArgs:
"service-account-issuer": "kubernetes.default.svc"
"service-account-signing-key-file": "/etc/kubernetes/pki/sa.key"
nodes:
- role: control-plane
image: kindest/node:v1.25.3@sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1
- role: worker
image: kindest/node:v1.25.3@sha256:f52781bc0d7a19fb6c405c2af83abfeb311f130707a0e219175677e366cc45d1