# This is a GitHub workflow defining a set of jobs with a set of steps. # ref: https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions # name: Integration tests on: pull_request: paths-ignore: - "docs/**" - "**.md" - ".github/workflows/*" - "!.github/workflows/integration-test.yaml" push: paths-ignore: - "docs/**" - "**.md" - ".github/workflows/*" - "!.github/workflows/integration-test.yaml" branches-ignore: - "dependabot/**" - "pre-commit-ci-update-config" workflow_dispatch: jobs: integration-tests: # integration tests run in a container, # not in the worker, so this version is not relevant to the tests # and can be the same for all tested versions runs-on: ubuntu-22.04 name: ${{ matrix.name }} strategy: fail-fast: false matrix: include: - name: "Debian 11, Py 3.9" distro_image: "debian:11" extra_flags: "" - name: "Debian 12, Py 3.11" distro_image: "debian:12" extra_flags: "" - name: "Ubuntu 22.04 Py 3.10" distro_image: "ubuntu:22.04" extra_flags: "" - name: "Ubuntu 24.04 Py 3.12" distro_image: "ubuntu:24.04" extra_flags: "" - name: "Ubuntu 22.04, Py 3.10, from main" distro_image: "ubuntu:22.04" extra_flags: --upgrade-from=main - name: "Ubuntu 22.04, Py 3.10, from latest" distro_image: "ubuntu:22.04" extra_flags: --upgrade-from=latest - name: "Ubuntu 22.04, Py 3.10, from 0.2.0" distro_image: "ubuntu:22.04" extra_flags: --upgrade-from=0.2.0 - name: "Ubuntu 22.04, Py 3.10, from 1.*" distro_image: "ubuntu:22.04" extra_flags: --upgrade-from=1 steps: - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: "3.10" - name: Build systemd image, derived from ${{ matrix.distro_image }} run: | .github/integration-test.py build-image \ --build-arg "BASE_IMAGE=${{ matrix.distro_image }}" # Overview of how this logic influences the end result. # - integration-test.yaml: # # - Runs integration-test.py build-image, to build a systemd based image # to use later. # # - Runs integration-test.py run-tests, to start a systemd based # container, run the bootstrap.py script inside it, and then run # pytest from the hub python environment setup by the bootstrap # script. # # About passed --installer-args: # # - --admin admin:admin # Required for test_admin_installer.py # # - --plugin /srv/src/integration-tests/plugins/simplest # Required for test_simplest_plugin.py # - name: pytest integration-tests/ id: integration-tests run: | .github/integration-test.py run-test integration-tests \ --installer-args "--admin test-admin-username:test-admin-password" \ --installer-args "--plugin /srv/src/integration-tests/plugins/simplest" \ ${{ matrix.extra_flags }} \ test_hub.py \ test_proxy.py \ test_install.py \ test_extensions.py \ test_admin_installer.py \ test_simplest_plugin.py timeout-minutes: 15 - name: show logs if: always() && steps.integration-tests.outcome != 'skipped' run: | .github/integration-test.py show-logs integration-tests integration-tests-bootstrap: # integration tests run in a container, # not in the worker, so this version is not relevant to the tests # and can be the same for all tested versions runs-on: ubuntu-22.04 name: ${{ matrix.name }} strategy: fail-fast: false matrix: include: - name: "Ubuntu 22.04 Py 3.10 (test_bootstrap.py)" distro_image: "ubuntu:22.04" steps: - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: "3.10" cache: pip cache-dependency-path: | integration-tests/requirements.txt # FIXME: The test_bootstrap.py script has duplicated logic to run build # and start images and run things in them. This makes tests slower, # and adds code to maintain. Let's try to remove it. # # - bootstrap.py's failure detections, put in unit tests? # - bootstrap.py's --show-progress-page test, include as a normal # integration test? # - name: Install integration-tests/requirements.txt for test_bootstrap.py run: pip install -r integration-tests/requirements.txt - name: Run bootstrap tests (Runs in/Builds ${{ matrix.distro_image }} derived image) run: | pytest integration-tests/test_bootstrap.py timeout-minutes: 10 env: # integration-tests/test_bootstrap.py will build and start containers # based on this environment variable. This is similar to how # .github/integration-test.py build-image can take a --build-arg # setting the base image via a Dockerfile ARG. BASE_IMAGE: ${{ matrix.distro_image }}