name: Integration Tests

on:
  pull_request:
    branches-ignore:
      - 'ubuntu/**'
  push:
    branches:
      - main

concurrency:
  group: 'ci-${{ github.workflow }}-${{ github.ref }}'
  cancel-in-progress: true

defaults:
  run:
    shell: sh -ex {0}

env:
  RELEASE: plucky

jobs:
  build-package-and-run-tests:
    runs-on: ubuntu-24.04
    steps:
      - name: "Checkout"
        uses: actions/checkout@v4
        with:
          # Fetch all tags for tools/read-version
          fetch-depth: 0
      - name: Prepare dependencies
        run: |
          sudo DEBIAN_FRONTEND=noninteractive apt-get update
          sudo DEBIAN_FRONTEND=noninteractive apt-get -y install \
            ubuntu-dev-tools \
            tox \
            wireguard \
            $(\
              ./tools/read-dependencies                   \
                --requirements-file requirements.txt      \
                --requirements-file test-requirements.txt \
                --distro ubuntu                           \
                --system-pkg-names 2> /dev/null           \
                | tr '\n' ' '                             \
            )
      - name: Build package
        run: |
          DEB_BUILD_OPTIONS=nocheck ./packages/bddeb -d --release ${{ env.RELEASE }}
          cp cloud-init_all.deb ${{ runner.temp }}
      - name: Archive debs as artifacts
        uses: actions/upload-artifact@v4
        with:
          name: 'cloud-init-${{ env.RELEASE }}-deb'
          path: '${{ runner.temp }}/cloud-init*.deb'
          retention-days: 3
      - name: Setup LXD
        uses: canonical/setup-lxd@v0.1.2
      - name: Verify deb package
        run: |
          ls -hal '${{ runner.temp }}'
          echo ${{ runner.temp }}/cloud-init*.deb || true
          ls -hal ${{ runner.temp }}/cloud-init*.deb || true
      - name: Set up Pycloudlib
        run: |
          ssh-keygen -P "" -q -f ~/.ssh/id_rsa
          echo "[lxd]" > /home/$USER/.config/pycloudlib.toml
      - name: Run integration Tests
        run: |
          CLOUD_INIT_CLOUD_INIT_SOURCE="$(ls ${{ runner.temp }}/cloud-init*.deb)" CLOUD_INIT_OS_IMAGE=${{ env.RELEASE }} tox -e integration-tests-ci -- --color=yes tests/integration_tests/
