Skip to content
This repository has been archived by the owner on Oct 21, 2024. It is now read-only.

feat!: multiple services depending on same plugin implementation #217

feat!: multiple services depending on same plugin implementation

feat!: multiple services depending on same plugin implementation #217

Workflow file for this run

# Our desired pipeline using only a Nix shell environment
name: E2E tests
permissions:
id-token: write
contents: read
on:
push:
branches:
- main
tags:
- "v*.*.*"
pull_request:
branches:
- main
jobs:
e2e_tests:
name: E2E tests
runs-on: ubuntu-22.04
steps:
- name: Git checkout
uses: actions/checkout@v3
- name: Install Nix
uses: cachix/install-nix-action@v27
# relax sandbox due impure kontrol-service tests during build
with:
extra_nix_config: |
sandbox = relaxed
- name: Magic cache
uses: DeterminateSystems/magic-nix-cache-action@v7
- name: Build and load kontrol service image
run: |
docker load < $(nix build ./#kontrol-service-container --no-link --print-out-paths)
- name: Start kontrol service and Postgres
run: |
docker version
docker compose -f ci/docker-compose.yml up -d
docker ps
- name: Wait for docker network to be ready
run: sleep 10s
shell: bash
- name: Install CLI
run: |
echo "KARDINAL_CLI=$(nix build .#public-kardinal-cli --no-link --print-out-paths)/bin/kardinal.cli" >> $GITHUB_ENV
- name: Retrieve the tenant UUID
id: tenant
run: |
tenant_id=$($KARDINAL_CLI tenant show)
echo "id=${tenant_id}" >> "$GITHUB_OUTPUT"
- name: Deploy boutique demo manifest
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI deploy -k ci/obd-demo.yaml
- name: Validate cluster resources endpoint
run: |
tenant_id=${{ steps.tenant.outputs.id }}
services=$(curl http://localhost:8080/tenant/${tenant_id}/cluster-resources | jq -r '.services[].metadata.name' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo "Services: $services"
if [ "${services}" != "cartservice frontend frontend-baseline postgres productcatalogservice" ]; then exit 1; fi
deployments=$(curl http://localhost:8080/tenant/${tenant_id}/cluster-resources | jq -r '.deployments[].metadata.name' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo "Deployments: $deployments"
if [ "${deployments}" != "cartservice-baseline frontend-baseline postgres-baseline productcatalogservice-baseline" ]; then exit 1; fi
- name: Validate topology endpoint
run: |
tenant_id=${{ steps.tenant.outputs.id }}
nodes=$(curl http://localhost:8080/tenant/${tenant_id}/topology | jq -r '.nodes[].id' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
if [ "${nodes}" != "cartservice frontend ingress jsdelivr-api postgres productcatalogservice" ]; then exit 1; fi
- name: Create, validate and delete flow
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow create frontend kurtosistech/frontend:demo-frontend > kardinal.out
flow_id=$(grep "Flow.*created" kardinal.out | cut -d ' ' -f2 | tr -d "\"")
echo "FlowID: $flow_id"
tenant_id=${{ steps.tenant.outputs.id }}
deployments=$(curl http://localhost:8080/tenant/${tenant_id}/cluster-resources | jq -r '.deployments[].metadata.name' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo "Deployments: $deployments"
if [ "${deployments}" != "cartservice-baseline cartservice-${flow_id} frontend-baseline frontend-${flow_id} postgres-baseline postgres-${flow_id} productcatalogservice-baseline" ]; then exit 1; fi
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow ls | grep ${flow_id}
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow delete ${flow_id}
- name: Create, validate and delete a more complex flow
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow create frontend kurtosistech/frontend:demo-on-sale -s productcatalogservice=kurtosistech/productcatalogservice:demo-on-sale > kardinal.out
flow_id=$(grep "Flow.*created" kardinal.out | cut -d ' ' -f2 | tr -d "\"")
echo "FlowID: $flow_id"
tenant_id=${{ steps.tenant.outputs.id }}
deployments=$(curl http://localhost:8080/tenant/${tenant_id}/cluster-resources | jq -r '.deployments[].metadata.name' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
echo "Deployments: $deployments"
if [ "${deployments}" != "cartservice-baseline cartservice-${flow_id} frontend-baseline frontend-${flow_id} postgres-baseline postgres-${flow_id} productcatalogservice-baseline productcatalogservice-${flow_id}" ]; then exit 1; fi
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow ls | grep ${flow_id}
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow delete ${flow_id}
- name: Create template
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI template create extra-item-shared --template-yaml ci/template.yaml --description "Extra item and postgres is shared"
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI template ls | grep "extra-item-shared"
- name: Create flow with template and delete flow
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow create frontend kurtosistech/frontend:demo-frontend --template-args ci/template_args.yaml --template extra-item-shared > kardinal.out
flow_id=$(grep "Flow.*created" kardinal.out | cut -d ' ' -f2 | tr -d "\"")
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow ls | grep ${flow_id}
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow delete ${flow_id}
- name: Delete template
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI template delete extra-item-shared
- name: Delete base topology and dev flows
run: |
KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow delete baseline
if KARDINAL_CLI_DEV_MODE=TRUE $KARDINAL_CLI flow ls | grep baseline; then echo "Topologies not deleted"; exit 1; fi
tenant_id=${{ steps.tenant.outputs.id }}
deployments=$(curl http://localhost:8080/tenant/${tenant_id}/cluster-resources | jq -r '.deployments[].metadata.name' | tr " " "\n" | sort -g | tr "\n" " " | xargs)
if [ "${deployments}" != "" ]; then echo "Deployments list not empty"; exit 1; fi