HWORKS-1476: Global replication #49
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
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 |