Daily E2E Tests #259
This file contains hidden or 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: Daily E2E Tests | |
| on: | |
| schedule: | |
| - cron: "0 7 * * *" # Every day at 07:00 UTC | |
| workflow_dispatch: # Allow manual trigger | |
| jobs: | |
| e2e: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: ⬇️ Checkout code | |
| uses: actions/checkout@v4 | |
| - name: 🐳 Start Portainer via Docker Compose | |
| run: make up | |
| - name: 🛠️ Install kubectl | |
| run: make install-kubectl | |
| - name: 🔧 Install k3d | |
| run: make install-k3d | |
| - name: ☸️ Create K3d cluster | |
| run: make k3d-up | |
| - name: ☸️ Verify K3d cluster | |
| run: make k3d-status | |
| - name: 🧠 Deploy Portainer Agent into Kubernetes | |
| run: make k8s-deploy-agent | |
| - name: 🧬 Connect Portainer to k3d network | |
| run: make k3d-connect-portainer | |
| - name: 🌐 Get Kubernetes server IP and export for Terraform | |
| run: make k3d-export-ip | |
| - name: Install Kompose | |
| run: | | |
| curl -L https://github.com/kubernetes/kompose/releases/download/v1.35.0/kompose-linux-amd64 -o kompose | |
| chmod +x kompose | |
| sudo mv ./kompose /usr/local/bin/kompose | |
| - name: ⬇️ Install Terraform | |
| uses: hashicorp/setup-terraform@v3 | |
| with: | |
| terraform_version: 1.6.6 | |
| - name: 🔍 Validate formatting (terraform fmt) | |
| run: terraform fmt -check -recursive | |
| - name: 🧪 Run Terraform E2E tests - Convert docker-compose.yml to K8S yaml | |
| run: | | |
| cd e2e-tests/compose_convert | |
| terraform init -input=false | |
| terraform fmt -check | |
| bash run.sh | |
| ls -alh output/ | |
| - name: 🧪 Run Terraform E2E tests - Create Kubernetes Environment | |
| run: | | |
| cd e2e-tests/environment | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform apply -auto-approve | |
| - name: 🧽 Run Terraform E2E tests - Apply Portainer settings | |
| run: | | |
| cd e2e-tests/settings | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform apply -auto-approve | |
| - name: 🧪 Run Terraform E2E tests | |
| run: | | |
| APPLY_ONLY_DIRS=("deployment" "stack_standalone_string" "webhook" "container_exec" "backup" "auth" "open_amt" "kubernetes_role" "kubernetes_delete_object" "endpoint_snapshot" "endpoint_settings" "kubernetes_namespace" "user_admin") | |
| FULL_CYCLE_DIRS=("edge_string" "edge_file" "edge_repository" "kubernetes_application" "kubernetes_clusterrole" "kubernetes_clusterrolebinding" "kubernetes_configmaps" "kubernetes_cronjob" "kubernetes_helm" "kubernetes_ingress" "kubernetes_ingresscontrollers" "kubernetes_job" "kubernetes_namespace_ingresscontrollers" "kubernetes_namespace_system" "kubernetes_role" "kubernetes_rolebinding" "kubernetes_secret" "kubernetes_service" "kubernetes_serviceaccounts" "kubernetes_storage" "kubernetes_volume" | |
| "custom_template_string" "custom_template_file" "custom_template_repository" "docker_image" "docker_network" "docker_plugin" "docker_volume" "stack_standalone_string" "stack_standalone_file" "stack_standalone_repository" "endpoint_group" "tag" "user-team-teammembership" "registry") | |
| for dir in "${FULL_CYCLE_DIRS[@]}"; do | |
| if [ -d "e2e-tests/$dir" ]; then | |
| echo "▶️ Running full Terraform cycle in e2e-tests/$dir" | |
| cd "e2e-tests/$dir" | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform validate | |
| terraform apply -auto-approve | |
| terraform destroy -auto-approve | |
| cd - | |
| fi | |
| done | |
| for dir in "${APPLY_ONLY_DIRS[@]}"; do | |
| if [ -d "e2e-tests/$dir" ]; then | |
| echo "▶️ Running apply-only Terraform in e2e-tests/$dir" | |
| cd "e2e-tests/$dir" | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform validate | |
| terraform apply -auto-approve | |
| cd - | |
| fi | |
| done | |
| - name: 🧽 Run Terraform E2E tests - Destroy Kubernetes Environment | |
| run: | | |
| cd e2e-tests/environment | |
| terraform destroy -auto-approve | |
| - name: 🐳 Init Docker Swarm | |
| run: make swarm-init | |
| - name: 🧪 Run Terraform E2E tests specific for swarm | |
| run: | | |
| SWARM_RESOURCES_FULL_CYCLE=("docker_config" "docker_secret") | |
| SWARM_RESOURCES_BASIC_CYCLE=("endpoint_swarm_stack" "stack_swarm_string" "endpoint_service_update") | |
| for dir in "${SWARM_RESOURCES_FULL_CYCLE[@]}"; do | |
| if [ -d "e2e-tests/$dir" ]; then | |
| echo "▶️ Running full Terraform cycle in e2e-tests/$dir (Swarm)" | |
| cd "e2e-tests/$dir" | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform validate | |
| terraform apply -auto-approve | |
| terraform destroy -auto-approve | |
| cd - | |
| fi | |
| done | |
| for dir in "${SWARM_RESOURCES_BASIC_CYCLE[@]}"; do | |
| if [ -d "e2e-tests/$dir" ]; then | |
| echo "▶️ Running full Terraform cycle in e2e-tests/$dir (Swarm)" | |
| cd "e2e-tests/$dir" | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform validate | |
| terraform apply -auto-approve | |
| cd - | |
| sleep 20 | |
| fi | |
| done | |
| - name: 🧪 Run Terraform E2E tests - Added SSL for Portainer | |
| run: | | |
| cd e2e-tests/ssl | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform apply -auto-approve |