diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..37118f5 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,78 @@ +name: Tests +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + end-to-end: + name: End to end testing + strategy: + fail-fast: false + timeout-minutes: 45 + runs-on: + - self-hosted + - cpu-16 + - mem-32G + - disk-100G + - arch-amd64 + - image-debian-12 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get install --no-install-recommends --yes \ + ansible \ + ceph-base \ + ceph-common \ + python3-jmespath + + - name: Setup Incus + run: | + curl https://pkgs.zabbly.com/get/incus-daily | sudo sh + sudo chmod 666 /var/lib/incus/unix.socket + incus admin init --auto + + - name: Setup OpenTofu + run: | + curl -sL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh + chmod +x install-opentofu.sh + ./install-opentofu.sh --install-method deb + rm -f install-opentofu.sh + + - name: Create the test VMs + run: | + cd terraform + tofu init + tofu apply -auto-approve -target=module.baremetal + + - name: Waiting for VMs to boot up + run: | + sleep 1m + + - name: Deploy the test VMs + run: | + cd ansible + cp hosts.yaml.example hosts.yaml + ansible-playbook deploy.yaml + + - name: Post deployment validation + run: | + export INCUS_PROJECT=dev-incus-deploy + incus exec server01 -- incus launch images:debian/12 c1 + incus exec server01 -- incus launch images:debian/12 v1 --vm + + sleep 1m + + incus list + + incus exec server01 -- incus exec c1 -- ping -4 -W1 -c4 linuxcontainers.org + incus exec server01 -- incus exec c1 -- ping -6 -W1 -c4 linuxcontainers.org + incus exec server01 -- incus exec v1 -- ping -4 -W1 -c4 linuxcontainers.org + incus exec server01 -- incus exec v1 -- ping -6 -W1 -c4 linuxcontainers.org