Test modifications by Itay #6
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# workflows/test-helm-chart.yml | |
# | |
# Test Helm Chart | |
# Test the ParadeDB Helm chart against a local Minikube cluster and a local AWS EKS cluster. | |
name: Test Helm Chart | |
on: | |
pull_request: | |
types: [opened, synchronize, reopened, ready_for_review] | |
paths: | |
- "charts/paradedb/*" | |
- ".github/workflows/test-helm-chart.yml" | |
workflow_dispatch: | |
concurrency: | |
group: test-helm-chart-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test-helm-eks: | |
name: Test Helm Chart on AWS EKS via LocalStack | |
runs-on: ubuntu-latest | |
if: github.event.pull_request.draft == false | |
steps: | |
- name: Checkout Git Repository | |
uses: actions/checkout@v4 | |
- name: Set up Kubectl | |
uses: azure/setup-kubectl@v4 | |
- name: Set up Helm | |
uses: azure/setup-helm@v4 | |
- name: Start LocalStack | |
uses: LocalStack/[email protected] | |
with: | |
image-tag: "latest" | |
install-awslocal: "true" | |
configuration: DEBUG=1 | |
use-pro: "true" | |
env: | |
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} | |
- name: Configure AWS CLI for LocalStack | |
run: | | |
awslocal configure set aws_secret_access_key test | |
awslocal configure set aws_access_key_id test | |
awslocal configure set region us-east-1 | |
# As of writing, the latest Kubernetes version available on LocalStack EKS | |
# is 1.29. CloudNativePG requires version 1.25+ | |
- name: Create the LocalStack AWS EKS Cluster | |
run: | | |
awslocal --endpoint-url=http://localhost:4566 eks create-cluster \ | |
--name paradedb-eks \ | |
--role-arn arn:aws:iam::000000000000:role/eks-service-role \ | |
--resources-vpc-config subnetIds=subnet-12345 \ | |
--kubernetes-version 1.29 | |
- name: Wait for LocalStack AWS EKS Cluster to be Active | |
run: | | |
for i in {1..10}; do | |
STATUS=$(awslocal --endpoint-url=http://localhost:4566 --region us-east-1 eks describe-cluster --name paradedb-eks --query 'cluster.status' --output text) | |
if [ "$STATUS" == "ACTIVE" ]; then | |
echo "Cluster is ACTIVE" | |
break | |
else | |
echo "Cluster status is $STATUS. Waiting..." | |
sleep 10 | |
fi | |
done | |
- name: Update Kubeconfig to Use the LocalStack AWS EKS Cluster | |
run: awslocal --endpoint-url=http://localhost:4566 eks update-kubeconfig --name paradedb-eks | |
- name: Wait for the LocalStack AWS EKS Cluster to be Ready | |
run: | | |
nodes=$(kubectl get nodes --no-headers -o custom-columns=NAME:.metadata.name) | |
for node in $nodes; do | |
kubectl wait --for=condition=ready node/$node --timeout=120s | |
done | |
# This is required to mock the AWS EKS storage class | |
- name: Create StorageClass | |
run: | | |
cat <<EOF | kubectl apply -f - | |
apiVersion: storage.k8s.io/v1 | |
kind: StorageClass | |
metadata: | |
name: manual | |
provisioner: kubernetes.io/no-provisioner | |
volumeBindingMode: Immediate | |
EOF | |
kubectl get storageclass | |
# This is required to mock the AWS EKS storage class | |
- name: Create PersistentVolume | |
run: | | |
cat <<EOF | kubectl apply -f - | |
apiVersion: v1 | |
kind: PersistentVolume | |
metadata: | |
name: local-pv | |
spec: | |
capacity: | |
storage: 3Gi | |
accessModes: | |
- ReadWriteOnce | |
hostPath: | |
path: /tmp/data | |
storageClassName: manual | |
EOF | |
kubectl get pv | |
# This is required to mock the AWS EKS storage class | |
- name: Create PersistentVolumeClaim | |
run: | | |
cat <<EOF | kubectl apply -f - | |
apiVersion: v1 | |
kind: PersistentVolumeClaim | |
metadata: | |
name: my-pvc | |
spec: | |
accessModes: | |
- ReadWriteOnce | |
resources: | |
requests: | |
storage: 3Gi | |
storageClassName: manual | |
EOF | |
kubectl get pvc | |
- name: Install the CloudNativePG Operator | |
run: | | |
helm repo add cnpg https://cloudnative-pg.github.io/charts | |
helm upgrade --install cnpg --namespace cnpg-system --create-namespace cnpg/cloudnative-pg | |
- name: Wait for CNPG Webhook Service to be Ready | |
run: | | |
kubectl wait --namespace cnpg-system --for=condition=available --timeout=120s deployment/cnpg-cloudnative-pg | |
kubectl get svc -n cnpg-system cnpg-webhook-service | |
- name: Test Helm Dependency Update | |
working-directory: charts/cluster/ | |
run: helm dependency update . --debug | |
- name: Update appVersion to Latest paradedb/paradedb Tag | |
id: paradedb-version | |
working-directory: charts/paradedb/ | |
run: | | |
# Fetch the latest release tag and strip the 'v' prefix | |
LATEST_TAG=$(curl -s https://api.github.com/repos/paradedb/paradedb/releases/latest | jq -r '.tag_name') | |
CLEANED_TAG=${LATEST_TAG#v} | |
echo $CLEANED_TAG | |
echo "version=$($CLEANED_TAG)" >> $GITHUB_OUTPUT | |
- name: Test Helm Install | |
working-directory: charts/cluster/ | |
run: helm install paradedb . --namespace paradedb --create-namespace --set version.paradedb=${{ steps.paradedb-version.outputs.version }} --debug | |
- name: Test Helm Upgrade | |
working-directory: charts/cluster/ | |
run: helm upgrade paradedb . --namespace paradedb --reuse-values --wait --debug | |
# TODO: This fails | |
- name: Test PostgreSQL Connection | |
run: | | |
helm test paradedb --namespace paradedb |