Skip to content

Release 11 juni: API-key 401 fix, taaklog-fixes, orphan/backup-sweeps, SOPS skip, domeinvalidatie #330

Release 11 juni: API-key 401 fix, taaklog-fixes, orphan/backup-sweeps, SOPS skip, domeinvalidatie

Release 11 juni: API-key 401 fix, taaklog-fixes, orphan/backup-sweeps, SOPS skip, domeinvalidatie #330

---
# Integration Tests CI Workflow
#
# This workflow runs on every push and pull request to main branch.
# It includes:
# - Unit tests (fast, every PR)
# - Integration tests with mocks (fast, every PR)
# - Integration tests with Kind cluster (thorough, every PR)
#
# Test hierarchy:
# 1. Unit tests - fastest, no infrastructure
# 2. Mock integration tests - fast, mocked external services
# 3. Kind cluster tests - slower, real kubectl operations
name: Integration Tests
on:
push:
branches: [main]
paths:
- 'operations-manager/**'
- '.github/workflows/integration-tests.yaml'
- 'docker-compose.dev.yaml'
pull_request:
branches: [main]
paths:
- 'operations-manager/**'
- '.github/workflows/integration-tests.yaml'
- 'docker-compose.dev.yaml'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
name: Lint & Type Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- uses: astral-sh/setup-uv@v7
with:
version: "latest"
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.14'
- name: Install dependencies
working-directory: operations-manager/python
run: uv sync --all-groups
- name: Run ruff linter
working-directory: operations-manager/python
run: uv run ruff check opi/ tests/
# NOTE: Only check formatting on new integration test files.
# Pre-existing code has formatting issues that will be fixed in a separate PR.
- name: Run ruff formatter check (integration tests only)
working-directory: operations-manager/python
run: uv run ruff format --check tests/integration/
- name: Run pyright type checker
working-directory: operations-manager/python
run: uv run pyright
# NOTE: Pre-existing unit tests in tests/*.py have broken dependencies on
# jinja-roos-components templates. These need to be fixed in a separate PR.
# For now, we skip unit tests and only run integration tests.
integration-tests-mock:
name: Integration Tests (Mock)
runs-on: ubuntu-latest
needs: lint
steps:
- name: Checkout code
uses: actions/checkout@v6
- uses: astral-sh/setup-uv@v7
with:
version: "latest"
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.14'
- name: Install dependencies
working-directory: operations-manager/python
run: uv sync --all-groups
- name: Start PostgreSQL
run: |
docker compose -f docker-compose.dev.yaml up -d postgres
# Wait for postgres to be ready
for i in {1..30}; do
if docker compose -f docker-compose.dev.yaml exec -T postgres pg_isready -U opi -d opi; then
echo "PostgreSQL is ready"
break
fi
echo "Waiting for PostgreSQL..."
sleep 1
done
- name: Run mock-based integration tests
working-directory: operations-manager/python
env:
DATABASE_URL: postgresql://opi:devpassword@localhost:5432/opi
run: uv run pytest tests/integration/ -v -m "not slow" --tb=short
- name: Stop PostgreSQL
if: always()
run: docker compose -f docker-compose.dev.yaml down
integration-tests-kind:
name: Integration Tests (Kind)
runs-on: ubuntu-latest
needs: integration-tests-mock
steps:
- name: Checkout code
uses: actions/checkout@v6
- uses: astral-sh/setup-uv@v7
with:
version: "latest"
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.14'
- name: Install dependencies
working-directory: operations-manager/python
run: uv sync --all-groups
- name: Install Kind
run: |
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
kind version
- name: Install kubectl
run: |
curl -LO "https://dl.k8s.io/release/v1.31.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
kubectl version --client
- name: Create Kind cluster
run: |
kind create cluster \
--name rig-integration-test \
--config operations-manager/python/tests/fixtures/kind-config.yaml \
--wait 120s
- name: Deploy test workloads
run: |
kubectl apply -f operations-manager/python/tests/fixtures/test-workloads.yaml
# Wait for deployment
kubectl wait --for=condition=available \
deployment/log-generator \
-n test-project \
--timeout=120s
- name: Run Kind cluster integration tests
working-directory: operations-manager/python
run: uv run pytest tests/integration/ -v -m "slow" --tb=short
- name: Collect cluster logs on failure
if: failure()
run: |
echo "=== Cluster Info ==="
kubectl cluster-info
echo ""
echo "=== Nodes ==="
kubectl get nodes -o wide
echo ""
echo "=== Pods in test-project ==="
kubectl get pods -n test-project -o wide
echo ""
echo "=== Events in test-project ==="
kubectl get events -n test-project --sort-by='.lastTimestamp'
echo ""
echo "=== Log generator logs ==="
kubectl logs -n test-project deployment/log-generator --tail=50 || true
- name: Delete Kind cluster
if: always()
run: kind delete cluster --name rig-integration-test
# Summary job that depends on all tests
tests-passed:
name: All Tests Passed
runs-on: ubuntu-latest
needs:
- lint
- integration-tests-mock
- integration-tests-kind
if: always()
steps:
- name: Check all jobs passed
run: |
if [[ "${{ needs.lint.result }}" != "success" ]] || \
[[ "${{ needs.integration-tests-mock.result }}" != "success" ]] || \
[[ "${{ needs.integration-tests-kind.result }}" != "success" ]]; then
echo "One or more jobs failed"
exit 1
fi
echo "All tests passed!"