mirror of
https://github.com/rancher/k3k.git
synced 2026-05-06 01:16:52 +00:00
303 lines
8.3 KiB
YAML
303 lines
8.3 KiB
YAML
name: Conformance Tests
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 1 * * *"
|
|
workflow_dispatch:
|
|
inputs:
|
|
test:
|
|
description: "Run specific test"
|
|
type: choice
|
|
options:
|
|
- conformance
|
|
- sig-api-machinery
|
|
- sig-apps
|
|
- sig-architecture
|
|
- sig-auth
|
|
- sig-cli
|
|
- sig-instrumentation
|
|
- sig-network
|
|
- sig-node
|
|
- sig-scheduling
|
|
- sig-storage
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
conformance:
|
|
runs-on: ubuntu-latest
|
|
if: inputs.test == '' || inputs.test == 'conformance'
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
type:
|
|
- parallel
|
|
- serial
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
|
|
- uses: actions/setup-go@v5
|
|
with:
|
|
go-version-file: go.mod
|
|
|
|
- name: Install helm
|
|
uses: azure/setup-helm@v4.3.0
|
|
|
|
- name: Install hydrophone
|
|
run: go install sigs.k8s.io/hydrophone@latest
|
|
|
|
- name: Install k3d and kubectl
|
|
run: |
|
|
wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
|
|
k3d version
|
|
|
|
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
|
|
|
- name: Setup Kubernetes (k3d)
|
|
env:
|
|
REPO_NAME: k3k-registry
|
|
REPO_PORT: 12345
|
|
run: |
|
|
echo "127.0.0.1 ${REPO_NAME}" | sudo tee -a /etc/hosts
|
|
|
|
k3d registry create ${REPO_NAME} --port ${REPO_PORT}
|
|
|
|
k3d cluster create k3k --servers 3 \
|
|
-p "30000-30010:30000-30010@server:0" \
|
|
--registry-use k3d-${REPO_NAME}:${REPO_PORT}
|
|
|
|
kubectl cluster-info
|
|
kubectl get nodes
|
|
|
|
- name: Setup K3k
|
|
env:
|
|
REPO: k3k-registry:12345
|
|
run: |
|
|
echo "127.0.0.1 k3k-registry" | sudo tee -a /etc/hosts
|
|
|
|
make build
|
|
make package
|
|
make push
|
|
|
|
# add k3kcli to $PATH
|
|
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
|
|
VERSION=$(make version)
|
|
k3d image import ${REPO}/k3k:${VERSION} -c k3k --verbose
|
|
k3d image import ${REPO}/k3k-kubelet:${VERSION} -c k3k --verbose
|
|
|
|
make install
|
|
|
|
echo "Wait for K3k controller to be available"
|
|
kubectl wait -n k3k-system pod --for condition=Ready -l "app.kubernetes.io/name=k3k" --timeout=5m
|
|
|
|
- name: Check k3kcli
|
|
run: k3kcli -v
|
|
|
|
- name: Create virtual cluster
|
|
run: |
|
|
kubectl create namespace k3k-mycluster
|
|
|
|
cat <<EOF | kubectl apply -f -
|
|
apiVersion: k3k.io/v1beta1
|
|
kind: Cluster
|
|
metadata:
|
|
name: mycluster
|
|
namespace: k3k-mycluster
|
|
spec:
|
|
servers: 2
|
|
mirrorHostNodes: true
|
|
tlsSANs:
|
|
- "127.0.0.1"
|
|
expose:
|
|
nodePort:
|
|
serverPort: 30001
|
|
EOF
|
|
|
|
echo "Wait for bootstrap secret to be available"
|
|
kubectl wait -n k3k-mycluster --for=create secret k3k-mycluster-bootstrap --timeout=5m
|
|
|
|
k3kcli kubeconfig generate --name mycluster
|
|
|
|
export KUBECONFIG=${{ github.workspace }}/k3k-mycluster-mycluster-kubeconfig.yaml
|
|
|
|
kubectl cluster-info
|
|
kubectl get nodes
|
|
kubectl get pods -A
|
|
|
|
- name: Run conformance tests (parallel)
|
|
if: matrix.type == 'parallel'
|
|
run: |
|
|
# Run conformance tests in parallel mode (skipping serial)
|
|
hydrophone --conformance --parallel 4 --skip='\[Serial\]' \
|
|
--kubeconfig ${{ github.workspace }}/k3k-mycluster-mycluster-kubeconfig.yaml \
|
|
--output-dir /tmp
|
|
|
|
- name: Run conformance tests (serial)
|
|
if: matrix.type == 'serial'
|
|
run: |
|
|
# Run serial conformance tests
|
|
hydrophone --focus='\[Serial\].*\[Conformance\]' \
|
|
--kubeconfig ${{ github.workspace }}/k3k-mycluster-mycluster-kubeconfig.yaml \
|
|
--output-dir /tmp
|
|
|
|
- name: Archive conformance logs
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: conformance-${{ matrix.type }}-logs
|
|
path: /tmp/e2e.log
|
|
|
|
sigs:
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
tests:
|
|
- name: sig-api-machinery
|
|
focus: '\[sig-api-machinery\].*\[Conformance\]'
|
|
- name: sig-apps
|
|
focus: '\[sig-apps\].*\[Conformance\]'
|
|
- name: sig-architecture
|
|
focus: '\[sig-architecture\].*\[Conformance\]'
|
|
- name: sig-auth
|
|
focus: '\[sig-auth\].*\[Conformance\]'
|
|
- name: sig-cli
|
|
focus: '\[sig-cli\].*\[Conformance\]'
|
|
- name: sig-instrumentation
|
|
focus: '\[sig-instrumentation\].*\[Conformance\]'
|
|
- name: sig-network
|
|
focus: '\[sig-network\].*\[Conformance\]'
|
|
- name: sig-node
|
|
focus: '\[sig-node\].*\[Conformance\]'
|
|
- name: sig-scheduling
|
|
focus: '\[sig-scheduling\].*\[Conformance\]'
|
|
- name: sig-storage
|
|
focus: '\[sig-storage\].*\[Conformance\]'
|
|
|
|
steps:
|
|
- name: Validate input and fail fast
|
|
if: inputs.test != '' && inputs.test != matrix.tests.name
|
|
run: |
|
|
echo "Failing this job as it's not the intended target."
|
|
exit 1
|
|
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
|
|
- uses: actions/setup-go@v5
|
|
with:
|
|
go-version-file: go.mod
|
|
|
|
- name: Install helm
|
|
uses: azure/setup-helm@v4.3.0
|
|
|
|
- name: Install hydrophone
|
|
run: go install sigs.k8s.io/hydrophone@latest
|
|
|
|
- name: Install k3d and kubectl
|
|
run: |
|
|
wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
|
|
k3d version
|
|
|
|
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
|
|
|
- name: Setup Kubernetes (k3d)
|
|
env:
|
|
REPO_NAME: k3k-registry
|
|
REPO_PORT: 12345
|
|
run: |
|
|
echo "127.0.0.1 ${REPO_NAME}" | sudo tee -a /etc/hosts
|
|
|
|
k3d registry create ${REPO_NAME} --port ${REPO_PORT}
|
|
|
|
k3d cluster create k3k --servers 3 \
|
|
-p "30000-30010:30000-30010@server:0" \
|
|
--registry-use k3d-${REPO_NAME}:${REPO_PORT}
|
|
|
|
kubectl cluster-info
|
|
kubectl get nodes
|
|
|
|
- name: Setup K3k
|
|
env:
|
|
REPO: k3k-registry:12345
|
|
run: |
|
|
echo "127.0.0.1 k3k-registry" | sudo tee -a /etc/hosts
|
|
|
|
make build
|
|
make package
|
|
make push
|
|
|
|
# add k3kcli to $PATH
|
|
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
|
|
VERSION=$(make version)
|
|
k3d image import ${REPO}/k3k:${VERSION} -c k3k --verbose
|
|
k3d image import ${REPO}/k3k-kubelet:${VERSION} -c k3k --verbose
|
|
|
|
make install
|
|
|
|
echo "Wait for K3k controller to be available"
|
|
kubectl wait -n k3k-system pod --for condition=Ready -l "app.kubernetes.io/name=k3k" --timeout=5m
|
|
|
|
- name: Check k3kcli
|
|
run: k3kcli -v
|
|
|
|
- name: Create virtual cluster
|
|
run: |
|
|
kubectl create namespace k3k-mycluster
|
|
|
|
cat <<EOF | kubectl apply -f -
|
|
apiVersion: k3k.io/v1beta1
|
|
kind: Cluster
|
|
metadata:
|
|
name: mycluster
|
|
namespace: k3k-mycluster
|
|
spec:
|
|
servers: 2
|
|
mirrorHostNodes: true
|
|
tlsSANs:
|
|
- "127.0.0.1"
|
|
expose:
|
|
nodePort:
|
|
serverPort: 30001
|
|
EOF
|
|
|
|
echo "Wait for bootstrap secret to be available"
|
|
kubectl wait -n k3k-mycluster --for=create secret k3k-mycluster-bootstrap --timeout=5m
|
|
|
|
k3kcli kubeconfig generate --name mycluster
|
|
|
|
export KUBECONFIG=${{ github.workspace }}/k3k-mycluster-mycluster-kubeconfig.yaml
|
|
|
|
kubectl cluster-info
|
|
kubectl get nodes
|
|
kubectl get pods -A
|
|
|
|
- name: Run sigs tests
|
|
run: |
|
|
FOCUS="${{ matrix.tests.focus }}"
|
|
echo "Running with --focus=${FOCUS}"
|
|
|
|
hydrophone --focus "${FOCUS}" \
|
|
--kubeconfig ${{ github.workspace }}/k3k-mycluster-mycluster-kubeconfig.yaml \
|
|
--output-dir /tmp
|
|
|
|
- name: Archive conformance logs
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: ${{ matrix.tests.name }}-logs
|
|
path: /tmp/e2e.log
|