Skip to content

HWORKS-1476: Global replication #49

HWORKS-1476: Global replication

HWORKS-1476: Global replication #49

Workflow file for this run

name: run-tests
on:
pull_request:
# Not running on "closed" - that is taken care of by "push" (if merged)
types: [opened, synchronize, reopened]
# This cancels any previous job from the same PR if the PR has been updated.
# This cancel-in-progress only works per PR (thus, two different PRs wont be cancelled).
# Concurrency is not an issue because the self-hosted worker will anyways only run one
# job at a time from one repo.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint-test:
name: Lint helm charts
runs-on: ubuntu-latest
env:
TEMPLATE_OUT_DIR: template_out
steps:
- name: Checkout main repo
uses: actions/checkout@v4
- name: Set up Helm
uses: azure/setup-helm@v4
with:
version: '3.13.3'
- run: helm lint --strict .
- run: helm lint --strict --values values/dummy_lint.yaml .
- name: Helm template
if: always()
run: |
helm template . \
--include-crds \
--debug \
--dry-run \
--values values/dummy_lint.yaml \
--output-dir $TEMPLATE_OUT_DIR
- run: ls -l $TEMPLATE_OUT_DIR/**
- uses: docker://ghcr.io/yannh/kubeconform:latest
with:
entrypoint: '/kubeconform'
args: "-summary -strict -ignore-missing-schemas ${{ env.TEMPLATE_OUT_DIR }}"
- name: Upload templates
if: always()
uses: actions/upload-artifact@v4
with:
name: templates
path: ${{ env.TEMPLATE_OUT_DIR }}
retention-days: 5
benchmark-and-stability:
needs: [lint-test]
if: github.repository == 'logicalclocks/rondb-helm'
runs-on: [self-hosted, ARM64]
env:
K8S_NAMESPACE: rondb-helm-${{ github.run_id }}-${{ github.run_attempt }}
RONDB_CLUSTER_NAME: my-rondb
steps:
- name: Checkout main repo
uses: actions/checkout@v4
- name: Check kubectl (should be Minikube)
run: |
kubectl version --client
kubectl get nodes
- name: Create original RonDB cluster
run: |
helm install $RONDB_CLUSTER_NAME \
--namespace=$K8S_NAMESPACE \
--create-namespace \
--values ./values/minikube/mini.yaml \
--set benchmarking.enabled=true \
--set globalReplication.primary.enabled=true \
--set globalReplication.primary.numBinlogServers=1 \
--set clusterSize.minNumMySQLServers=1 \
--set clusterSize.maxNumMySQLServers=2 \
.
sleep 10
- run: helm test -n $K8S_NAMESPACE $RONDB_CLUSTER_NAME --logs --filter name=generate-data
- name: Waiting for benchmark job to complete
run: bash .github/wait_job.sh $K8S_NAMESPACE benchs 240
- name: Collect bench logs
if: always()
uses: ./.github/actions/collect_bench_logs
with:
namespace: ${{ env.K8S_NAMESPACE }}
- name: Terminate RonDB data node
run: kubectl -n $K8S_NAMESPACE delete pod node-group-0-0 --force
- name: Test deploy stability
shell: bash
timeout-minutes: 6
env:
SLEEP_SECONDS: 10
MIN_STABLE_MINUTES: 1
run: bash .github/test_deploy_stability.sh
# Check that data has been created correctly
- run: helm test -n $K8S_NAMESPACE $RONDB_CLUSTER_NAME --logs --filter name=verify-data
- name: Collect logs
if: always()
uses: ./.github/actions/collect_logs
with:
namespace: ${{ env.K8S_NAMESPACE }}
i: 1
- name: Remove cluster
if: always()
uses: ./.github/actions/remove_cluster
timeout-minutes: 4
with:
namespace: ${{ env.K8S_NAMESPACE }}
helm_chart: ${{ env.RONDB_CLUSTER_NAME }}
test-lifecycle:
needs: [benchmark-and-stability]
if: github.repository == 'logicalclocks/rondb-helm'
runs-on: [self-hosted, ARM64]
env:
K8S_NAMESPACE: rondb-helm-${{ github.run_id }}-${{ github.run_attempt }}
RONDB_CLUSTER_NAME: my-rondb
BUCKET_SECRET_NAME: bucket-credentials
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
MINIO_TENANT_NAMESPACE: minio-tenant-${{ github.run_id }}-${{ github.run_attempt }}
backups_values_file: values.backup.yaml
restore_values_file: values.restore.yaml
steps:
- name: Checkout main repo
uses: actions/checkout@v4
- name: Check kubectl (should be Minikube)
run: |
kubectl version --client
kubectl get nodes
- name: Setup MinIO
run: |
./test_scripts/setup_minio.sh \
$backups_values_file \
$restore_values_file \
$BUCKET_SECRET_NAME \
$MINIO_ACCESS_KEY \
$MINIO_SECRET_KEY \
$MINIO_TENANT_NAMESPACE
- name: Run lifecycle test
run: |
./test_scripts/lifecycle-test.sh \
$backups_values_file \
$restore_values_file \
$BUCKET_SECRET_NAME \
$MINIO_ACCESS_KEY \
$MINIO_SECRET_KEY
# TODO: Collect all logs as well
- name: Remove cluster
if: failure()
uses: ./.github/actions/remove_cluster
timeout-minutes: 4
with:
namespace: cluster-a
helm_chart: cluster-a
- name: Remove cluster
if: failure()
uses: ./.github/actions/remove_cluster
timeout-minutes: 4
with:
namespace: cluster-b
helm_chart: cluster-b
- name: Remove cluster
if: failure()
uses: ./.github/actions/remove_cluster
timeout-minutes: 4
with:
namespace: cluster-c
helm_chart: cluster-c
- name: Remove cluster
if: failure()
uses: ./.github/actions/remove_cluster
timeout-minutes: 4
with:
namespace: cluster-d
helm_chart: cluster-d
- name: Delete MinIO tenant
if: always()
run: helm delete --namespace $MINIO_TENANT_NAMESPACE tenant
- name: Delete MinIO namespace
if: always()
run: kubectl delete namespace $MINIO_TENANT_NAMESPACE --timeout=50s || true