Skip to content

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

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)

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

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