--- name: Test on: workflow_call: jobs: molecule: name: Molecule runs-on: [self-hosted, linux, x64, k3s-ci, virtualbox, nested-virt] strategy: matrix: scenario: - default - single_node - calico - cilium - kube-vip # - ipv6 fail-fast: true max-parallel: 1 env: PYTHON_VERSION: "3.11" VAGRANT_DEFAULT_PROVIDER: virtualbox VAGRANT_HOME: ${{ github.workspace }}/.vagrant-home steps: - name: Check out the codebase uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 7.0.1 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Clean repository-owned resources before testing run: ./.github/scripts/cleanup-runner-resources.sh --apply - name: Record host-only network baseline run: ./.github/scripts/cleanup-runner-resources.sh --snapshot - name: Check nested VirtualBox platform run: | set -Eeuo pipefail grep -Eq 'vmx|svm' /proc/cpuinfo test -c /dev/kvm test -c /dev/vboxdrv VBoxManage --version vagrant --version test -r /etc/vbox/networks.conf test "$(stat -c '%u' /etc/vbox/networks.conf)" -eq 0 free -h df -Pk "${RUNNER_TEMP}" - name: Set up Python ${{ env.PYTHON_VERSION }} uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 7.0.0 with: python-version: ${{ env.PYTHON_VERSION }} cache: 'pip' # caching pip dependencies - name: Restore vagrant Boxes cache uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # 6.1.0 with: path: .vagrant-home/boxes key: vagrant-boxes-${{ runner.os }}-${{ runner.arch }}-virtualbox-7.2-vagrant-2.4-${{ hashFiles('.github/vagrant-boxes.lock') }} # yamllint disable-line rule:line-length fail-on-cache-miss: true - name: Install dependencies run: | echo "::group::Upgrade pip" python3 -m pip install --upgrade pip echo "::endgroup::" echo "::group::Install Python requirements from requirements.txt" python3 -m pip install -r requirements.txt echo "::endgroup::" - name: Test with molecule run: molecule test --scenario-name ${{ matrix.scenario }} timeout-minutes: 90 env: ANSIBLE_K3S_LOG_DIR: ${{ runner.temp }}/logs/k3s-ansible/${{ matrix.scenario }} ANSIBLE_SSH_RETRIES: 4 ANSIBLE_TIMEOUT: 120 PY_COLORS: 1 ANSIBLE_FORCE_COLOR: 1 - name: Collect runner diagnostics if: always() run: ./.github/scripts/collect-runner-diagnostics.sh "${RUNNER_TEMP}/logs/runner" - name: Clean repository-owned resources after testing if: always() run: ./.github/scripts/cleanup-runner-resources.sh --apply - name: Upload log files if: always() # do this even if a step before has failed uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # 7.0.1 with: name: logs-${{ matrix.scenario }}-${{ github.run_id }}-${{ github.run_attempt }} path: | ${{ runner.temp }}/logs if-no-files-found: warn retention-days: 14