Skip to content

GH Actions

GH Actions #190

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@v3
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@v3
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@v3
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
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@v3
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
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@v3
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 }}."
code-coverage:
name: Code Coverage
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.11]
env:
CC_TEST_REPORTER_ID: "387887b88a76f31c2c376219fc749689ea5975c8fe7fcd9609f1dcc139e053a6"
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@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install
run: |
pip install -r requirements-dev.txt
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
- name: Run pre script
run: ./cc-test-reporter before-build
- name: Run script
run: make develop && ./selftests/run_coverage
- name: Run post script
run: ./cc-test-reporter after-build
- 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@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
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@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
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@v3
- name: Set up Python
uses: actions/setup-python@v4
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@v3
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@v3
- name: Set up Python
uses: actions/setup-python@v4
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@v3
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@v3
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@v3
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:
name: Version task (${{ matrix.container }})
runs-on: ubuntu-20.04
strategy:
matrix:
container: ["fedora:37",
"fedora:38",
"registry.access.redhat.com/ubi8/ubi:8.8",
"registry.access.redhat.com/ubi9/ubi:9.2",
"debian:10.10",
"debian:11.0",
"ubuntu:21.10",
"ubuntu:20.04"]
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install and run avocado --version
run: |
if ! command -v dnf &> /dev/null
then
python3 -c 'import setuptools' || dnf -y install python3 python3-setuptools
else
python3 --version || (apt update && apt -y install python3 python3-setuptools ca-certificates)
fi
python3 setup.py develop --user
python3 -m avocado --version
egg_task:
name: Egg task (${{ matrix.container }})
runs-on: ubuntu-20.04
strategy:
matrix:
container: ["fedora:37",
"fedora:38",
"registry.access.redhat.com/ubi8/ubi:8.8",
"registry.access.redhat.com/ubi9/ubi:9.2",
"debian:10.10",
"debian:11.0",
"ubuntu:21.10",
"ubuntu:20.04"]
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Test running avocado from eggs
run: |
if ! command -v dnf &> /dev/null
then
python3 -c 'import setuptools' || dnf -y install python3 python3-setuptools
else
python3 --version || (apt update && apt -y install python3 python3-setuptools)
fi
python3 setup.py bdist_egg
mv dist/avocado_framework-*egg /tmp
python3 setup.py clean --all
python3 -c 'import sys; import glob; sys.path.insert(0, glob.glob("/tmp/avocado_framework-*.egg")[0]); from avocado.core.main import main; sys.exit(main())' run /bin/true
cd /tmp
python3 -c 'import sys; from pkg_resources import require; require("avocado-framework"); from avocado.core.main import main; sys.exit(main())' run /bin/true
podman_egg_task:
name: Podman Egg task
runs-on: ubuntu-22.04
steps:
- name: Check out repository code
uses: actions/checkout@v3
- 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@v3
- 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@v3
- 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@v3
- 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