refactor(provider): unify HTTP calls behind doJSON helper (97 files), add table-driven CRUD test harness, add schema/docs drift-check linter, and parallelize e2e CI via composite setup action + fixed work with stack (#134) #1
Workflow file for this run
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: PR E2E Tests (parallel - preview) | |
| on: | |
| pull_request: | |
| workflow_dispatch: | |
| jobs: | |
| docker-k8s: | |
| name: Docker + Kubernetes + Swarm | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: ⬇️ Checkout code | |
| uses: actions/checkout@v5 | |
| - name: 🧰 E2E setup (with Kubernetes) | |
| uses: ./.github/actions/e2e-setup | |
| with: | |
| kubernetes: "true" | |
| - name: 🔍 Validate formatting (terraform fmt) | |
| run: terraform fmt -check -recursive | |
| - name: 🧪 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: 🧪 Create Kubernetes Environment | |
| run: | | |
| cd e2e-tests/environment | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform apply -auto-approve | |
| - name: 🧽 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" "environment_tags") | |
| 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: 🧽 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 | |
| edge: | |
| name: Edge Agent | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: ⬇️ Checkout code | |
| uses: actions/checkout@v5 | |
| - name: 🧰 E2E setup (Docker only) | |
| uses: ./.github/actions/e2e-setup | |
| - name: 🧪 Create Edge Agent Environment | |
| run: | | |
| cd e2e-tests/edge_agent_environment | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform validate | |
| terraform apply -auto-approve | |
| - name: 🐳 Start Edge Agent | |
| run: | | |
| docker swarm leave --force 2>/dev/null || true | |
| cd e2e-tests/edge_agent_environment | |
| export EDGE_ID=$(terraform output -raw edge_id) | |
| export EDGE_KEY=$(terraform output -raw edge_key) | |
| cd $GITHUB_WORKSPACE | |
| make up-edge-agent | |
| - name: ✅ Verify Edge Agent connection | |
| run: | | |
| sleep 15 | |
| docker logs portainer_edge_agent 2>&1 | tail -20 | |
| docker logs portainer_edge_agent 2>&1 | grep -i "poll" && echo "Edge Agent is polling" || echo "Warning: Edge Agent may not be connected yet" | |
| - name: 🧹 Cleanup Edge Agent | |
| run: | | |
| make down-edge-agent | |
| cd e2e-tests/edge_agent_environment | |
| terraform destroy -auto-approve | |
| ssl: | |
| name: SSL | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: ⬇️ Checkout code | |
| uses: actions/checkout@v5 | |
| - name: 🧰 E2E setup (Docker only) | |
| uses: ./.github/actions/e2e-setup | |
| - name: 🧪 Added SSL for Portainer | |
| run: | | |
| cd e2e-tests/ssl | |
| terraform init -input=false | |
| terraform fmt -check | |
| terraform apply -auto-approve |