Skip to content

GH Actions

GH Actions #231

Workflow file for this run

name: GH Actions
on:
pull_request:
workflow_dispatch:
jobs:
static-checks:
name: Static checks
runs-on: ubuntu-20.04
container:
image: quay.io/avocado-framework/avocado-ci-fedora-38
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- name: Allow git to operate on directory checked out by GH Actions
run: git config --global --add safe.directory `pwd`
- name: Installing Avocado development dependencies
run: make requirements-dev
- name: Installing Avocado in develop mode
run: python3 setup.py develop --user
- name: Run static checks
env:
COMMIT_COUNT: ${{ github.event.pull_request.commits }}
run: python3 setup.py test --select=static-checks
- name: Archive failed tests logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: static-checks-logs
path: /home/runner/avocado/job-results/
retention-days: 1
- run: echo "🥑 This job's status is ${{ job.status }}."
smokecheck-linux:
name: Smokecheck on Linux with Python ${{ matrix.python-version }}
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9, 3.10.0, 3.11, 3.12.0]
fail-fast: false
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install setuptools on Python 3.12
run: python3 -c 'import setuptools' || python3 -m pip install setuptools
- name: Avocado smokecheck
run: make smokecheck
check-linux:
name: Linux with Python ${{ matrix.python-version }}
runs-on: ubuntu-20.04
needs: smokecheck-linux
strategy:
matrix:
python-version: [3.8, 3.9, 3.10.0, 3.11, 3.12.0]
fail-fast: false
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -V --version
- name: Install dependencies
run: pip install -r requirements-dev.txt
- name: Install setuptools on Python 3.12
run: python3 -c 'import setuptools' || python3 -m pip install setuptools
- name: Installing Avocado in develop mode
run: python3 setup.py develop --user
- name: Avocado version
run: avocado --version
- name: Unittests and fast functional tests
run: python3 setup.py test --skip=static-checks
- name: Archive failed tests logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: linux-logs-${{ matrix.python-version }}
path: /home/runner/avocado/job-results/
retention-days: 1
- run: echo "🥑 This job's status is ${{ job.status }}."
# macOS check on latest Python
check-macos:
name: macOS with Python ${{ matrix.python-version }}
runs-on: macos-12
strategy:
matrix:
python-version: [3.11.1]
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -V --version
- name: Install avocado
run: |
python3 -m pip install -r requirements-dev.txt
python setup.py develop --user
- name: Show avocado help
run: python -m avocado --help
- name: Example test
run: python -m avocado run examples/tests/passtest.py
- name: List test
run: python -m avocado --verbose list selftests/unit/* selftests/functional/* selftests/*sh
- name: Run a subset of avocado's selftests
run: PATH=~/Library/Python/3.11/bin:$PATH ./selftests/check.py --skip=static-checks
- run: echo "🥑 This job's status is ${{ job.status }}."
# Windows checks on latest Python
smokecheck-windows:
name: Windows with Python ${{ matrix.python-version }}
runs-on: windows-2019
strategy:
matrix:
python-version: [3.9, 3.10.0, 3.11, 3.12.0]
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Display Python version
run: python -V --version
- name: Install setuptools on Python 3.12
run: python -c 'import setuptools' || python -m pip install setuptools
- name: Install avocado
run: python setup.py develop --user
- name: Show avocado help
run: python -m avocado --help
- name: Example test
run: python -m avocado run examples\tests\passtest.py
- run: echo "🥑 This job's status is ${{ job.status }}."
# Checks that Python packages builds succeeds
package-build:
name: Build Package (wheel/tarball) for Python ${{ matrix.python-version }}
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9, 3.10.0, 3.11, 3.12.0]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install setuptools on Python 3.12
run: python3 -c 'import setuptools' || python3 -m pip install setuptools
- name: Build tarballs and wheels
run: make -f Makefile.gh build-wheel check-wheel
- name: Save tarballs and wheels as artifacts
uses: actions/upload-artifact@v4
with:
name: tarballs_and_wheels-${{ matrix.python-version }}
path: ${{github.workspace}}/PYPI_UPLOAD/
retention-days: 1
- run: echo "🥑 This job's status is ${{ job.status }}."
egg-build:
name: Build Egg for Python ${{ matrix.python-version }}
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.8, 3.9, 3.10.0, 3.11, 3.12.0]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install setuptools on Python 3.12
run: python3 -c 'import setuptools' || python3 -m pip install setuptools
- name: Build eggs
run: make -f Makefile.gh build-egg
- name: Save eggs as artifacts
uses: actions/upload-artifact@v4
with:
name: eggs-${{ matrix.python-version }}
path: ${{github.workspace}}/EGG_UPLOAD/
retention-days: 1
- run: echo "🥑 This job's status is ${{ job.status }}."
experimental-checks:
name: Experimental checks
runs-on: ubuntu-20.04
steps:
- run: echo "Job triggered by a ${{ github.event_name }} event on branch is ${{ github.ref }} in repository is ${{ github.repository }}, runner on ${{ runner.os }}"
- name: Check out repository code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run Codespell Check
run: make -f Makefile.gh codespell
- name: Run bandit check
run: make -f Makefile.gh bandit
continue-on-error: True
- name: Save bandit output as artifacts
uses: actions/upload-artifact@v4
with:
name: bandit-results
path: /home/runner/work/avocado/avocado/bandit-output.txt
retention-days: 1
- run: echo "🥑 This job's status is ${{ job.status }}."
version_task_fedora_37:
name: Version task fedora:37
runs-on: ubuntu-20.04
container:
image: fedora:37
steps:
- name: Install Python dependencies
run: dnf -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_fedora_38:
name: Version task fedora:38
runs-on: ubuntu-20.04
container:
image: fedora:38
steps:
- name: Install Python dependencies
run: dnf -y install python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_ubi_8:
name: Version task ubi:8.8
runs-on: ubuntu-20.04
container:
image: registry.access.redhat.com/ubi8/ubi:8.8
steps:
- name: Install Python dependencies
run: dnf -y install python3.11 python3.11-setuptools python3.11-setuptools-rust
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_ubi_9:
name: Version task ubi:9.2
runs-on: ubuntu-20.04
container:
image: registry.access.redhat.com/ubi9/ubi:9.2
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_debian_12:
name: Version task debian:12.4
runs-on: ubuntu-20.04
container:
image: debian:12.4
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_debian_11:
name: Version task debian:11.0
runs-on: ubuntu-20.04
container:
image: debian:11.0
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_ubuntu_22:
name: Version task ubuntu:22.04
runs-on: ubuntu-20.04
container:
image: ubuntu:22.04
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools ca-certificates
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
version_task_ubuntu_20:
name: Version task ubuntu:20.04
runs-on: ubuntu-20.04
container:
image: ubuntu:20.04
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools ca-certificates
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/version
egg_task_fedora_37:
name: Egg task fedora:37
runs-on: ubuntu-20.04
container:
image: fedora:37
steps:
- name: Install Python dependencies
run: dnf -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_fedora_38:
name: Egg task fedora:38
runs-on: ubuntu-20.04
container:
image: fedora:38
steps:
- name: Install Python dependencies
run: dnf -y install python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_ubi_8:
name: Egg task ubi:8.8
runs-on: ubuntu-20.04
container:
image: registry.access.redhat.com/ubi8/ubi:8.8
steps:
- name: Install Python dependencies
run: dnf -y install python38 python38-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_ubi_9:
name: Egg task ubi:9.2
runs-on: ubuntu-20.04
container:
image: registry.access.redhat.com/ubi9/ubi:9.2
steps:
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_debian_12:
name: Egg task debian:12.4
runs-on: ubuntu-20.04
container:
image: debian:12.4
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_debian_11:
name: Egg task debian:11.0
runs-on: ubuntu-20.04
container:
image: debian:11.0
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_ubuntu_22:
name: Egg task ubuntu:22.04
runs-on: ubuntu-20.04
container:
image: ubuntu:22.04
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
egg_task_ubuntu_20:
name: Egg task ubuntu:20.04
runs-on: ubuntu-20.04
container:
image: ubuntu:20.04
steps:
- name: Install Python dependencies
run: apt update && apt -y install python3 python3-setuptools
- name: Check out repository code
uses: actions/checkout@v4
- uses: ./.github/actions/egg
podman_egg_task:
name: Podman Egg task
runs-on: ubuntu-22.04
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Test running avocado from eggs under Podman spawner
run: |
apt update && apt -y install python3 python3-setuptools
python3 setup.py bdist_egg
mv dist/avocado_framework-*egg /tmp/avocado_framework.egg
python3 setup.py clean --all
python3 -c 'import sys; sys.path.insert(0, "/tmp/avocado_framework.egg"); from avocado.core.main import main; sys.exit(main())' run --spawner=podman --spawner-podman-image=fedora:38 --spawner-podman-avocado-egg=file:///tmp/avocado_framework.egg -- /bin/true
podman_external_runner_task:
name: Podman spawner with 3rd party runner plugin
runs-on: ubuntu-22.04
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Test running avocado from released eggs under Podman spawner with 3rd party plugins
run: |
apt update && apt -y install python3 python3-setuptools
python3 setup.py develop --user
cd examples/plugins/tests/magic
python3 setup.py develop --user
cd ../../../../
python3 -m avocado -V list -- magic:pass magic:fail | grep "magic: 2"
podman pull quay.io/avocado-framework/avocado-ci-magic
python3 -m avocado run --spawner=podman --spawner-podman-image=quay.io/avocado-framework/avocado-ci-magic -- magic:pass
tail -n1 ~/avocado/job-results/latest/results.tap | grep "ok 1 magic:pass"
python3 -m avocado run --spawner=podman --spawner-podman-image=quay.io/avocado-framework/avocado-ci-magic -- magic:fail || true
tail -n1 ~/avocado/job-results/latest/results.tap | grep "not ok 1 magic:fail"
fedora_develop_install_uninstall_task:
name: Fedora develop install/uninstall task
runs-on: ubuntu-latest
container:
image: fedora:38
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Test avocado install/uninstall
run: |
python3 -c 'import setuptools' || dnf -y install python3 python3-setuptools
python3 setup.py develop --user
test `python3 -m avocado plugins | grep ^html | wc -l` -eq "3"
test `python3 -m avocado plugins | grep ^robot | wc -l` -eq "2"
python3 setup.py develop --user --uninstall
python3 setup.py clean --all
python3 setup.py develop --user --skip-optional-plugins
python3 -m avocado --version
test `python3 -m avocado plugins | grep ^html | wc -l` -eq "0"
test `python3 -m avocado plugins | grep ^robot | wc -l` -eq "0"
fedora_selftests_task:
name: Fedora selftests
runs-on: ubuntu-latest
container:
image: quay.io/avocado-framework/avocado-ci-fedora-36
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Run unittests and functional tests
run: |
make develop
PATH=$HOME/.local/bin:$PATH LANG=en_US.UTF-8 AVOCADO_CHECK_LEVEL=0 python3 selftests/check.py --skip static-checks