name: Integration test on: push: branches: [main] pull_request: branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true env: RUN_IN_CONTAINER: 1 FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 1 GHA_CLUSTER_SERVER_ADDR: "https://kubernetes.default:443" CARGO_TERM_COLOR: always RUSTFLAGS: "-Dwarnings" BASE_IMAGE: docker.io/paritytech/ci-unified:bullseye-1.88.0-2025-06-27-v202506301118 RUN_IN_CI: "1" RUST_LOG: "zombienet_orchestrator=debug,zombienet_provider=debug" CARGO_TARGET_DIR: /tmp/target jobs: build-tests: runs-on: ubuntu-latest timeout-minutes: 60 container: image: docker.io/paritytech/ci-unified:bullseye-1.88.0-2025-06-27-v202506301118 steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 with: cache-on-failure: true - name: Build tests run: | cargo build --tests --keep-going --locked mkdir -p artifacts cd artifacts find /tmp/target/debug/deps/ -maxdepth 1 -name "smoke-*" ! -name "*.d" -exec mv {} $(pwd)/smoke \; find /tmp/target/debug/deps/ -maxdepth 1 -name "smoke_native-*" ! -name "*.d" -exec mv {} $(pwd)/smoke_native \; cd .. tar cvfz artifacts.tar.gz artifacts - name: Upload artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: zombienet-tests-${{ github.sha }} path: artifacts.tar.gz k8s-integration-test-smoke: runs-on: ubuntu-latest needs: build-tests timeout-minutes: 60 container: image: docker.io/paritytech/ci-unified:bullseye-1.88.0-2025-06-27-v202506301118 steps: - name: Download artifacts uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: zombienet-tests-${{ github.sha }} path: /tmp - name: script timeout-minutes: 45 run: | export ZOMBIE_K8S_CI_NAMESPACE=$(cat /data/namespace) export ZOMBIE_PROVIDER="k8s" cd /tmp ls -la tar xvfz artifacts.tar.gz ./artifacts/smoke --nocapture - name: dump logs if: always() run: | export ZOMBIE_K8S_CI_NAMESPACE=$(cat /data/namespace) mkdir -p /tmp/zombie-1/logs # Install kubectl if not available if ! command -v kubectl &> /dev/null; then echo "Installing kubectl..." curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl mv kubectl /usr/local/bin/ fi echo "Listing pods in namespace $ZOMBIE_K8S_CI_NAMESPACE..." kubectl get pods -n "$ZOMBIE_K8S_CI_NAMESPACE" -o wide || true for pod in $(kubectl get pods -n "$ZOMBIE_K8S_CI_NAMESPACE" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null || true); do echo "Dumping logs for pod: $pod" kubectl logs -n "$ZOMBIE_K8S_CI_NAMESPACE" "$pod" --all-containers=true > "/tmp/zombie-1/logs/${pod}.log" 2>&1 || true done find /tmp/zombie* -name "*.log" -type f ! -regex '.*/[0-9]+\.log' -exec cp {} /tmp/zombie-1/logs/ \; 2>/dev/null || true echo "Collected logs:" ls -la /tmp/zombie-1/logs/ || true - name: upload logs if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: zombienet-logs-${{ github.job }}-${{ github.sha }} path: | /tmp/zombie-1/logs/* docker-integration-test-smoke: runs-on: ubuntu-latest needs: build-tests timeout-minutes: 60 steps: - name: Download artifacts uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: zombienet-tests-${{ github.sha }} path: /tmp - name: Install dependencies run: | sudo apt-get -y update sudo apt-get -y install wget # Manually download and install the OpenSSL 1.1 library wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb - name: script timeout-minutes: 45 run: | export ZOMBIE_PROVIDER="docker" cd /tmp ls -la tar xvfz artifacts.tar.gz ./artifacts/smoke --nocapture - name: dump logs if: always() run: | mkdir -p /tmp/zombie-1/logs for container in $(docker ps -a --filter "name=zombie" --format "{{.Names}}" 2>/dev/null || true); do echo "Dumping logs for container: $container" docker logs "$container" > "/tmp/zombie-1/logs/${container}.log" 2>&1 || true done find /tmp/zombie* -name "*.log" -type f ! -regex '.*/[0-9]+\.log' -exec cp {} /tmp/zombie-1/logs/ \; 2>/dev/null || true ls -la /tmp/zombie-1/logs/ || true - name: upload logs if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: zombienet-logs-${{ github.job }}-${{ github.sha }} path: | /tmp/zombie-1/logs/* native-integration-test-smoke: runs-on: ubuntu-latest needs: build-tests timeout-minutes: 60 container: image: docker.io/paritytech/ci-unified:bullseye-1.88.0-2025-06-27-v202506301118 steps: - name: Download artifacts uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: zombienet-tests-${{ github.sha }} path: /tmp - name: Download bins shell: bash run: | for bin in polkadot polkadot-execute-worker polkadot-prepare-worker polkadot-omni-node polkadot-parachain; do echo "downloading $bin"; curl -L -o /tmp/$bin https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-stable2503-1/$bin; chmod 755 /tmp/$bin; done ls -ltr /tmp export PATH=/tmp:$PATH echo $PATH - name: script run: | export PATH=/tmp:$PATH echo $PATH # mv artifacts.tar.gz /tmp cd /tmp ls -la tar xvfz artifacts.tar.gz export ZOMBIE_PROVIDER="native" ./artifacts/smoke_native --nocapture # cargo test --test smoke-native -- --nocapture - name: collect logs if: always() run: | mkdir -p /tmp/zombie-1/logs find /tmp/zombie* -name "*.log" -type f ! -regex '.*/[0-9]+\.log' -exec cp {} /tmp/zombie-1/logs/ \; 2>/dev/null || true ls -la /tmp/zombie-1/logs/ || true - name: upload logs if: always() uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: zombienet-logs-${{ github.job }}-${{ github.sha }} path: | /tmp/zombie-1/logs/*