--- name: Test on: workflow_call: jobs: molecule: name: Molecule runs-on: [self-hosted, linux, x64, k3s-ci, virtualbox, nested-virt] strategy: matrix: scenario: - default # - ipv6 - single_node - calico - cilium - kube-vip fail-fast: false 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@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 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@0b93645e9fea7318ecaed2b359559ac225c90a2b # 5.3.0 with: python-version: ${{ env.PYTHON_VERSION }} cache: 'pip' # caching pip dependencies - name: Restore vagrant Boxes cache uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # 4.1.2 with: path: .vagrant-home/boxes key: vagrant-boxes-${{ runner.os }}-${{ runner.arch }}-virtualbox-7.2-vagrant-2.4-${{ hashFiles('**/molecule.yml') }} # 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@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # 4.4.3 with: name: logs-${{ matrix.scenario }}-${{ github.run_id }}-${{ github.run_attempt }} path: | ${{ runner.temp }}/logs if-no-files-found: warn retention-days: 14